public override GamaValueRef VisitExprOpComp([NotNull] GamaParser.ExprOpCompContext context) { var lhs = Visit(context.expr(0)); var rhs = Visit(context.expr(1)); var op = context.opComp().GetText(); GamaFunctionList oplist; if (op == ">") { oplist = lhs.Type.Meta.Operators.Gt; } else if (op == "<") { oplist = lhs.Type.Meta.Operators.Lt; } else if (op == ">=") { oplist = lhs.Type.Meta.Operators.Ge; } else if (op == "<=") { oplist = lhs.Type.Meta.Operators.Le; } else if (op == "==") { oplist = lhs.Type.Meta.Operators.Eq; } else { oplist = lhs.Type.Meta.Operators.Neq; } GamaFunctionRef fnref = oplist.FindFunction(InstanceTypes.Bool, new[] { lhs.Type, rhs.Type }); if (fnref == null) { GamaCompiledFunctionList coplist; if (op == ">") { coplist = lhs.Type.Meta.CompiledOperators.Gt; } else if (op == "<") { coplist = lhs.Type.Meta.CompiledOperators.Lt; } else if (op == ">=") { coplist = lhs.Type.Meta.CompiledOperators.Ge; } else if (op == "<=") { coplist = lhs.Type.Meta.CompiledOperators.Le; } else if (op == "==") { coplist = lhs.Type.Meta.CompiledOperators.Eq; } else { coplist = lhs.Type.Meta.CompiledOperators.Neq; } GamaCompiledFunctionRef cfnref = coplist.FindFunction(InstanceTypes.Bool, new[] { lhs.Type, rhs.Type }); if (cfnref == null) { Parent.NamespaceContext.Context.AddError(new ErrorNoViableOperator(context)); return(null); } var cbuilder = Parent.Builder; Parent.CurrentBlock.PositionBuilderAtEnd(cbuilder); return(cfnref.Call(cbuilder, lhs, rhs)); } /* LLVM */ var block = Parent.CurrentBlock; var builder = Parent.Builder; block.PositionBuilderAtEnd(builder); var result = builder.BuildCall(fnref.Value, new LLVMValueRef[] { lhs.Value, rhs.Value }); return(new GamaValueRef(fnref.ReturnType, result, false)); }
/// <summary> /// Visit a parse tree produced by the <c>ExprOpComp</c> /// labeled alternative in <see cref="GamaParser.expr"/>. /// <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 VisitExprOpComp([NotNull] GamaParser.ExprOpCompContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by the <c>ExprOpComp</c> /// labeled alternative in <see cref="GamaParser.expr"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitExprOpComp([NotNull] GamaParser.ExprOpCompContext context) { }