Ejemplo n.º 1
0
        private static Ast.Macro ForStepMacro()
        {
            var def  = Macro.GetMacroDefinition(typeof(Macro <int, int, int, T, Macro <int, T, T>, T>));
            var ind  = Macro.GenUniqueVar(typeof(int), "ind");
            var init = Ast.MPRef(def.Parameters[0]);
            var cond = Ast.Op("{0} != {1}", Ast.VRef(ind), Ast.MPRef(def.Parameters[1]));
            var incr = Ast.Op("{0} += {1}", Ast.VRef(ind), Ast.MPRef(def.Parameters[2]));
            var body = (def.Parameters[4] as Ast.MacroDefParam).Definition;

            return(Ast.Mac(def.Parameters, def.Result, Ast.Blk(
                               Ast.Ass(Ast.VRef(def.Result), Ast.MPRef(def.Parameters[3])),
                               Ast.For(ind, init, cond, incr,
                                       Ast.MCall(body, def.Result, Ast.VRef(ind), Ast.VRef(def.Result))))));
        }
Ejemplo n.º 2
0
        private void ReturnArrayOfVertices(Expression expr)
        {
            var nai = expr.Expect <NewArrayExpression> (ExpressionType.NewArrayInit);

            foreach (var subExpr in nai.Expressions)
            {
                var mie = subExpr.Expect <MemberInitExpression> (ExpressionType.MemberInit);
                foreach (MemberAssignment assign in mie.Bindings)
                {
                    _currentScope.CodeOut(Ast.Ass(
                                              Ast.VRef(_globalVars [assign.Member.Name]), Expr(assign.Expression)));
                }
                _currentScope.CodeOut(Ast.CallS(Ast.Call("EmitVertex ()")));
            }
            _currentScope.CodeOut(Ast.CallS(Ast.Call("EndPrimitive ()")));
        }
Ejemplo n.º 3
0
        protected override void OutputReturn(Expression expr)
        {
            var lie = expr.Expect <ListInitExpression> (ExpressionType.ListInit);
            var res = _function.Arguments.Last();

            foreach (var init in lie.Initializers)
            {
                var assign = init.Arguments[0].Expect <MethodCallExpression> (ExpressionType.Call);
                var args   = assign.Arguments;
                if (assign.Method.Name == "Buffer")
                {
                    var buf    = args[0].Expect <ParameterExpression> (ExpressionType.Parameter);
                    var bufVar = _currentScope.FindLocalVar(buf.Name);
                    _currentScope.CodeOut(Ast.Ass(Ast.ARef(bufVar, Expr(args[1])), Expr(args[2])));
                }
                else
                {
                    throw new ParseException("Invalid assign method.");
                }
            }
        }