package edu.ucsd.arcum.interpreter.ast; import java.util.List; import edu.ucsd.arcum.exceptions.SourceLocation; import edu.ucsd.arcum.interpreter.ast.expressions.ConstraintExpression; // define properAccess(Expr use, Expr reference) with // use == ([`reference.put(`_, `_)] || [`reference.get(`_)]) && // reference == [`targetType.`mapField]; public class StaticRealizationStatement extends RealizationStatement { private boolean isNested = false; private boolean isLocal = false; public static StaticRealizationStatement makeLocal(RealizationStatement stmt, TraitSignature signature) { StaticRealizationStatement result = new StaticRealizationStatement( stmt.declaration, signature.getName(), stmt.getExpression(), null, stmt .getPosition()); result.isLocal = true; result.addTraitSignature(signature); return result; } public static StaticRealizationStatement makeStatic(TopLevelConstruct declaration, String name, ConstraintExpression patternExpr, List<FormalParameter> params, SourceLocation location) { StaticRealizationStatement result = new StaticRealizationStatement(declaration, name, patternExpr, null, location); TraitSignature signature = TraitSignature.makeStaticDefinition(name, params); result.addTraitSignature(signature); return result; } public static StaticRealizationStatement makeNested(TopLevelConstruct declaration, String name, ConstraintExpression patternExpr, List<FormalParameter> params, SourceLocation location) { StaticRealizationStatement result; result = makeStatic(declaration, name, patternExpr, params, location); result.isNested = true; return result; } private StaticRealizationStatement(TopLevelConstruct declaration, String name, ConstraintExpression bodyExpr, List<FormalParameter> formals, SourceLocation location) { super(declaration, location); setBodyExpression(bodyExpr); } @Override public void typeCheckAndValidate(OptionInterface optionInterface) {} @Override public String toString() { return super.toString().replaceFirst("realize", "define"); } @Override public void verifyValidVariables() { // MACNEIL: probably need to do something now, and this comment might or // might not be correct // We don't need to do anything if we aren't local, because then we don't // need to generate code and thus the "any" variable is acceptable } @Override public boolean isLocal() { return isLocal; } @Override protected boolean isNested() { return isNested; } @Override public boolean isStatic() { return true; } @Override protected boolean excludesUseOfAnyVariable() { return isLocal(); } }