/// <summary> /// Parse the expression. /// </summary> /// <returns></returns> public override Expr Parse() { var printToken = _tokenIt.NextToken; var lineToken = _tokenIt.AdvanceAndGet<Token>(); Expr lineExp = null; if (lineToken.Kind == TokenKind.Multi) lineExp = _parser.ParseInterpolatedExpression(lineToken); else lineExp = new ConstantExpr(new LString((string)lineToken.Value)); var nameExp = _parser.ToIdentExpr(printToken.Token.Text, printToken); var exp = (FunctionCallExpr)_parser.ToFunctionCallExpr(nameExp, null, printToken); exp.ParamListExpressions.Add(lineExp); // Move past this plugin. _tokenIt.Advance(); return exp; }
/// <summary> /// Visits the condition expression tree /// </summary> /// <param name="exp"></param> public object VisitConstant(ConstantExpr exp) { return null; }
/// <summary> /// Evaluate a constant. /// </summary> /// <param name="val"></param> /// <returns></returns> public object VisitConstant(ConstantExpr expr) { var val = expr.Value; // 1. Null if (val == LObjects.Null) return val; if (val is LObject) return val; // 2. Actual value. var ltype = LangTypeHelper.ConvertToLangValue(val); return ltype; }
/// <summary> /// Creates a variable expression with symbol scope, context, script refernce set. /// </summary> /// <param name="name"></param> /// <returns></returns> public static Expr Const(LObject obj, TokenData token) { var exp = new ConstantExpr(); exp.Value = obj; SetupContext(exp, token); return exp; }
/// <summary> /// Creates a variable expression with symbol scope, context, script refernce set. /// </summary> /// <param name="name"></param> /// <returns></returns> public Expr ToConstExpr(LObject obj, TokenData token) { var exp = new ConstantExpr(obj); this.SetupContext(exp, token); return exp; }