public dynamic Visit(CallCustomExpr expr) { if (expr.Arguments != null) { var args = expr.Arguments?.Values.Select(x => Visit((dynamic)x)).Cast <Operand>().ToArray() ?? new Operand[0]; var typeName = (expr.Arguments.Values[0] as LiteralExpr).StrValue; var type = Type.GetType(typeName); var methodName = (expr.Arguments.Values[1] as LiteralExpr).StrValue; var op = _assemblyGen.StaticFactory.Invoke(type, methodName, args.Skip(2).ToArray()); return(_assemblyGen.StaticFactory.Invoke(typeof(Convert), "ChangeType", op, expr.Type.CodeGenType()).Cast(expr.Type.CodeGenType())); } if (expr.Type == SymbolType.String) { return(_assemblyGen.StaticFactory.Invoke(typeof(Console), "ReadLine")); } var str = _assemblyGen.StaticFactory.Invoke(typeof(Console), "ReadLine"); return(_assemblyGen.StaticFactory.Invoke(typeof(Convert), "ToInt32", str)); }
public dynamic Visit(CallCustomExpr expr) { Visit((ExpressionBase)expr); return(null); }
public dynamic Visit(CallCustomExpr expr) { return(expr.Type); }
public dynamic Visit(CallCustomExpr expr) { return(new TreeNode($"Call func expr : {expr.Type}")); }