コード例 #1
0
        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));
        }
コード例 #2
0
 public dynamic Visit(CallCustomExpr expr)
 {
     Visit((ExpressionBase)expr);
     return(null);
 }
コード例 #3
0
 public dynamic Visit(CallCustomExpr expr)
 {
     return(expr.Type);
 }
コード例 #4
0
 public dynamic Visit(CallCustomExpr expr)
 {
     return(new TreeNode($"Call func expr : {expr.Type}"));
 }