public override GamaValueRef VisitExprLiteralString([NotNull] GamaParser.ExprLiteralStringContext context) { var str = context.StringLiteral().GetText().Trim('"'); // super ineffective string escape creator str = str.Replace("\\n", "\n").Replace("\\t", "\t").Replace("\\r", "\r").Replace("\\a", "\a"); int len = str.Length; var elems = new LLVMValueRef[len + 1]; for (int i = 0; i < len; i++) { elems[i] = LLVMValueRef.CreateConstInt(LLVMTypeRef.Int8, str[i]); } elems[len] = LLVMValueRef.CreateConstInt(LLVMTypeRef.Int8, 0); /* LLVM */ var block = Parent.CurrentBlock; var builder = Parent.Builder; block.PositionBuilderAtEnd(builder); var vals = LLVMValueRef.CreateConstArray(LLVMTypeRef.Int8, elems); LLVMValueRef glbl; unsafe { glbl = LLVM.BuildGlobalStringPtr(builder, str.GetSbytePtr(), "gep".GetSbytePtr()); } return(new GamaValueRef(new GamaPointer(InstanceTypes.Char), glbl, false)); }
/// <summary> /// Visit a parse tree produced by the <c>ExprLiteralString</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 VisitExprLiteralString([NotNull] GamaParser.ExprLiteralStringContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by the <c>ExprLiteralString</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 ExitExprLiteralString([NotNull] GamaParser.ExprLiteralStringContext context) { }