public override bool VisitStmtAssign([NotNull] GamaParser.StmtAssignContext context) { ExpressionCompiler.PushLoad(false); var lhs = VisitExpression(context.expr(0)); ExpressionCompiler.PopLoad(); if (lhs == null) { return(false); } if (!lhs.IsModifiableLValue) { NamespaceContext.Context.AddError(new ErrorAssignToNonModLValue(context.expr(0))); return(false); } var value = VisitExpression(lhs.Type, context.expr(1)); if (value == null) { NamespaceContext.Context.AddError(new ErrorTypeMismatch(context.expr(1))); return(false); } /* LLVM */ CurrentBlock.PositionBuilderAtEnd(Builder); Builder.BuildStore(value.Value, lhs.Value); return(true); }
/// <summary> /// Visit a parse tree produced by <see cref="GamaParser.stmtAssign"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitStmtAssign([NotNull] GamaParser.StmtAssignContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="GamaParser.stmtAssign"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitStmtAssign([NotNull] GamaParser.StmtAssignContext context) { }