Пример #1
0
        public void SetCodeTree(CodeTreeNode codeTree)
        {
            if (this.codeTree != null)
            {
                throw new Exception();
            }

            this.codeTree = codeTree;
        }
Пример #2
0
        public override CodeTreeNode BuildCodeTree(RuntimeState state)
        {
            CodeTreeNode node = obj.BuildCodeTree(state);

            string name = member.name;

            node = new MemberNode(Source, node, name);

            return(node);
        }
Пример #3
0
        public override CodeTreeNode BuildCodeTree(RuntimeState state)
        {
            List <CodeTreeNode> children = new List <CodeTreeNode>();

            foreach (Statement statement in body)
            {
                CodeTreeNode tree = statement.BuildCodeTree(state);
                children.Add(tree);
            }

            return(new CodeTree.SeqNode(
                       Source,
                       children));
        }
Пример #4
0
        public override CodeTreeNode BuildCodeTree(RuntimeState state)
        {
            CodeTreeNode[] parameterNodes = new CodeTreeNode[parameters.Count];

            for (int n = 0; n < parameters.Count; n++)
            {
                parameterNodes[n] =
                    ((Expression)parameters[n]).BuildCodeTree(state);
            }

            return(new NewNode(
                       Source,
                       type.BuildCodeTree(state),
                       parameterNodes));
        }
Пример #5
0
        public MethodInfo CompileDynamicMethod(string name, CodeTreeNode codeTreeNode)
        {
            Block generator = new Block();

            codeTreeNode.EmitRun(generator);

            DynamicMethod method = new DynamicMethod(
                name,
                typeof(object),
                new Type[] { typeof(Runtime), typeof(IScope) },
                moduleBuilder);

            generator.Build(new DynamicMethodProxy(method));

            return(method);
        }
Пример #6
0
        public override CodeTreeNode BuildCodeTree(RuntimeState state)
        {
            Expression firstExpression = (Expression)expressions[0];

            CodeTreeNode printed = firstExpression.BuildCodeTree(state);

            printed = new ConvertNode(
                Source,
                printed,
                new ValueNode(
                    Source,
                    typeof(string)));

            for (int n = 1; n < expressions.Count; n++)
            {
                Expression   expression = (Expression)expressions[n];
                CodeTreeNode append     = expression.BuildCodeTree(state);

                CodeTreeNode sep = new ValueNode(
                    Source,
                    " ");

                append = new OperationNode(
                    Source,
                    Operation.Add,
                    sep,
                    append);

                printed = new OperationNode(
                    Source,
                    Operation.Add,
                    printed,
                    append);
            }

            return(new PrintNode(
                       Source,
                       printed));
        }
Пример #7
0
        public void Set(RuntimeState state, object v)
        {
            CodeTreeNode tree = BuildCodeTree(state);

            tree.Set(state, v);
        }
Пример #8
0
        public object Get(RuntimeState state)
        {
            CodeTreeNode tree = BuildCodeTree(state);

            return(tree.Get(state, null));
        }
Пример #9
0
        public object Run(RuntimeState state)
        {
            CodeTreeNode tree = BuildCodeTree(state);

            return(tree.Run(state));
        }