protected override object MatchAssignExpr(AssignmentExpr expr) { Resolve(expr.Value); ResolveLocal(expr, expr.Name); return(null); }
public ValueType Visit(AssignmentExpr expr, Scope scope) { if (!(expr.Left is IdentifierExpr)) { throw new TypeCheckException("Assignement target must be an identifier"); } return(expr.Right.Accept(this, scope)); }
public void AssignmentTest() { var target = new TypeCheckingVisitor(); var expr = new AssignmentExpr(new IdentifierExpr("a"), new ConstantExpr(1)); var actual = target.Visit(expr, scope); Assert.AreEqual(ValueType.Int, actual); }
public override void Visit(AssignmentExpr expr) { // If the expression does not reference itself, then we're cool. var refs = VariableReferenceFinder.GetReferencedVariables(expr.Value); if (refs.All(r => r != expr.Name)) { _definedVariables.Add(expr.Name); } }
public void VisitMassEnergyEquavalenceExpressionTree() { var target = new PrintVisitor(); var e = new IdentifierExpr("e"); var m = new IdentifierExpr("m"); var c = new IdentifierExpr("C"); var two = new ConstantExpr(2); var expression = new AssignmentExpr(e, new MultExpr(m, new PowExpr(c, two))); var actual = target.Visit(expression, scope); Assert.AreEqual("e=m*C^2", actual); }
public Value Visit(AssignmentExpr expr, Scope scope) { var name = expr.LValueExpression.Name; var variable = scope.FindIdentifier(name); if (!variable.IsDefined) { throw new UndefinedIdentifierException("Identifier is not defined" + expr.LValueExpression.Name); } var rvalue = expr.Right.Accept(this, scope); // HACK : Need to rationalise the type checking. // It's either in here or it's not! //if(variable.Value.Type != rvalue.Type) // throw new InvalidCastException(); scope.AssignIdentifierValue(name, rvalue); return(rvalue); }
public void InvalidLValueAssignmentTest() { var target = new TypeCheckingVisitor(); var expr = new AssignmentExpr(new ConstantExpr("a"), new ConstantExpr(1)); target.Visit(expr, scope); }
public string Visit(AssignmentExpr expr, Scope scope) { return(expr.Left.Accept(this, scope) + "=" + expr.Right.Accept(this, scope)); }
protected abstract object MatchAssignExpr(AssignmentExpr assignmentExpr);
public virtual void Visit(AssignmentExpr expr) { }
public override void Visit(AssignmentExpr expr) => _needsAsync = true;