public ExecutableMachine Compile(CodeObject code, ExecutableMachine machine)
    {
      var codeSwitch = (CodeSwitchStatement)code;

      //switch(a) { case c1 : s1; case c2 : s2; default : s3 }
      //~
      //switch_expr = a;
      //if (a == c1) s1
      //else if (a == c2) s2
      //else s3

      _sid++;

      var block = new CodeBlockStatement { SourceSpan = codeSwitch.SourceSpan };

      var switchExpr = new CodeAssignExpression(
        "#switch_"+_sid, codeSwitch.Expression);
         
      var ifStatement = BuildNextIf(codeSwitch.Cases, 0);

      block.Statements.Add(new CodeExpressionStatement(switchExpr));
      block.Statements.Add(ifStatement);

      CodeDomCompiler.Compile(block, machine);

      return machine;
    }
Beispiel #2
0
        public ExecutableMachine Compile(CodeObject code, ExecutableMachine machine)
        {
            var codeSwitch = (CodeSwitchStatement)code;

            //switch(a) { case c1 : s1; case c2 : s2; default : s3 }
            //~
            //switch_expr = a;
            //if (a == c1) s1
            //else if (a == c2) s2
            //else s3

            _sid++;

            var block = new CodeBlockStatement {
                SourceSpan = codeSwitch.SourceSpan
            };

            var switchExpr = new CodeAssignExpression(
                "#switch_" + _sid, codeSwitch.Expression);

            var ifStatement = BuildNextIf(codeSwitch.Cases, 0);

            block.Statements.Add(new CodeExpressionStatement(switchExpr));
            block.Statements.Add(ifStatement);

            CodeDomCompiler.Compile(block, machine);

            return(machine);
        }
Beispiel #3
0
        protected virtual SqlStatement VisitCodeBlock(CodeBlockStatement statement)
        {
            if (statement is LoopStatement)
                return VisitLoop((LoopStatement) statement);
            if (statement is PlSqlBlockStatement)
                return VisitPlSqlBlock((PlSqlBlockStatement) statement);

            return statement;
        }
    public CodeObject Compile(AstNode syntaxNode, CodeProgram prog)
    {
      var syntax = (ScriptCompoundStatement)syntaxNode;

      var block = new CodeBlockStatement();

      foreach (var syntaxStatement in syntax.Statements)
        block.Statements.Add(
          (CodeStatement)AstDomCompiler.Compile(syntaxStatement, prog));

      return block;
    }
        public CodeObject Compile(AstNode syntaxNode, CodeProgram prog)
        {
            var syntax = (ScriptCompoundStatement)syntaxNode;

            var block = new CodeBlockStatement();

            foreach (var syntaxStatement in syntax.Statements)
            {
                block.Statements.Add(
                    (CodeStatement)AstDomCompiler.Compile(syntaxStatement, prog));
            }

            return(block);
        }
Beispiel #6
0
        public ExecutableMachine Compile(CodeObject code, ExecutableMachine machine)
        {
            var forStatement = (CodeForEachStatement)code;

            //foreach (i in c) statement ~
            //
            //f_ = c.GetEnumerator();
            //while(f_.Next()) {i = f_.Current; statement; }

            _sid++;
            string fName = "#ForEach_" + _sid;

            var fblock = new CodeBlockStatement();

            var f  = new CodeAssignExpression(fName, forStatement.Container);
            var f1 = new CodeAssignExpression(fName,
                                              new CodeObjectReference(fName,
                                                                      new CodeObjectReference("GetEnumerator", null,
                                                                                              new CodeObject[] { new CodeObjectFunctionCall(new CodeExpression[0]) }), new CodeObject[0]));

            var fwhileBlock = new CodeBlockStatement();

            var i = new CodeAssignExpression(forStatement.Id.Id,
                                             new CodeObjectReference(fName,
                                                                     new CodeObjectReference("get_Current", null,
                                                                                             new CodeObject[] { new CodeObjectFunctionCall(new CodeExpression[0]) }), new CodeObject[0]));

            fwhileBlock.Statements.Add(new CodeExpressionStatement(i));
            fwhileBlock.Statements.Add(forStatement.Statement);

            var fwhile = new CodeWhileStatement(
                new CodeObjectReference(fName,
                                        new CodeObjectReference("MoveNext", null,
                                                                new CodeObject[] { new CodeObjectFunctionCall(new CodeExpression[0]) }), new CodeObject[0]),
                fwhileBlock);

            fblock.Statements.Add(new CodeExpressionStatement(f));
            fblock.Statements.Add(new CodeExpressionStatement(f1));
            fblock.Statements.Add(fwhile);

            CodeDomCompiler.Compile(fblock, machine);

            return(machine);
        }
    public ExecutableMachine Compile(CodeObject code, ExecutableMachine machine)
    {
      var forStatement = (CodeForEachStatement)code;

      //foreach (i in c) statement ~
      //
      //f_ = c.GetEnumerator();
      //while(f_.Next()) {i = f_.Current; statement; }

      _sid++;
      string fName = "#ForEach_" + _sid;

      var fblock = new CodeBlockStatement();

      var f = new CodeAssignExpression(fName, forStatement.Container);
      var f1 = new CodeAssignExpression(fName, 
        new CodeObjectReference(fName, 
           new CodeObjectReference("GetEnumerator", null,
            new CodeObject[] { new CodeObjectFunctionCall(new CodeExpression[0]) }), new CodeObject[0]));

      var fwhileBlock = new CodeBlockStatement();

      var i = new CodeAssignExpression(forStatement.Id.Id,
        new CodeObjectReference(fName,
           new CodeObjectReference("get_Current", null,
            new CodeObject[] { new CodeObjectFunctionCall(new CodeExpression[0]) }), new CodeObject[0]));

      fwhileBlock.Statements.Add(new CodeExpressionStatement(i));
      fwhileBlock.Statements.Add(forStatement.Statement);

      var fwhile = new CodeWhileStatement(
        new CodeObjectReference(fName,
           new CodeObjectReference("MoveNext", null,
            new CodeObject[] { new CodeObjectFunctionCall(new CodeExpression[0]) }), new CodeObject[0]),
        fwhileBlock);

      fblock.Statements.Add(new CodeExpressionStatement(f));
      fblock.Statements.Add(new CodeExpressionStatement(f1));
      fblock.Statements.Add(fwhile);

      CodeDomCompiler.Compile(fblock, machine);

      return machine;
    }
    public ExecutableMachine Compile(CodeObject code, ExecutableMachine machine)
    {
      var forStatement = (CodeForStatement)code;

      //for (init; cond; next) statement ~
      //
      //init;
      //while(cond) { statement; next;}

      CodeDomCompiler.Compile(forStatement.Init, machine);

      var body = new CodeBlockStatement();
      body.Statements.Add(forStatement.Statement);
      body.Statements.Add(new CodeExpressionStatement(forStatement.Next));
      var newWhile = new CodeWhileStatement(forStatement.Condition, body);

      CodeDomCompiler.Compile(newWhile, machine);
      return machine;
    }
        public ExecutableMachine Compile(CodeObject code, ExecutableMachine machine)
        {
            var forStatement = (CodeForStatement)code;

            //for (init; cond; next) statement ~
            //
            //init;
            //while(cond) { statement; next;}

            CodeDomCompiler.Compile(forStatement.Init, machine);

            var body = new CodeBlockStatement();

            body.Statements.Add(forStatement.Statement);
            body.Statements.Add(new CodeExpressionStatement(forStatement.Next));
            var newWhile = new CodeWhileStatement(forStatement.Condition, body);

            CodeDomCompiler.Compile(newWhile, machine);
            return(machine);
        }