Exemplo n.º 1
0
    // For all CodeGen variations on a CompoundStatement, we want to 
    // first generate the StmtExp list to get the sideffects, and
    // then fall through to the last expression and use that
    // as the real CodeGen target.

    // Code generation as an expression
    public override void GenerateAsRight(CodeGen.EmitCodeGen gen)
    {
        // Generate the StmtExp to get their sideffects
        foreach(StatementExp e in m_eList)
            e.GenerateAsStatement(gen);
                    
        m_eLast.GenerateAsRight(gen);
    }
Exemplo n.º 2
0
 // We can only generate as a Statement if the last thing is also
 // a StatementeExp
 public override void GenerateAsStatement(CodeGen.EmitCodeGen gen)
 {
     // Generate the StmtExp to get their sideffects
     foreach(StatementExp e in m_eList)
         e.GenerateAsStatement(gen);
         
     Debug.Assert(m_eLast is StatementExp);
     StatementExp se = (StatementExp) m_eLast;
                         
     se.GenerateAsStatement(gen);
 }
Exemplo n.º 3
0
 // Code generation
 public override void GenerateAsRight(CodeGen.EmitCodeGen gen)
 {
     Debug.Assert(false);
 }
Exemplo n.º 4
0
 // Statement expressions can be generated as a statement or expression.
 // As an expression, they must leave a value on the top of the stack
 // As a statement, they don't leave a value on top (and hence may
 // be able to have a more efficient impl). 
 // Normal Generate() will generate as a RHS expression.    
 
 public virtual void GenerateAsStatement(CodeGen.EmitCodeGen gen)
 {        
 // Default impl generates as a RHS exp and just pops the value off    
     gen.GenerateAsStatement(this);
 }
Exemplo n.º 5
0
 public override void GenerateAsLeftPost(CodeGen.EmitCodeGen gen)
 {
     gen.GenerateAsLeftPost(this);
 }
Exemplo n.º 6
0
 public override void GenerateAsRight(CodeGen.EmitCodeGen gen)
 {
 /*
     if (Flow == EArgFlow.cIn)
         m_exp.GenerateAsRight(gen);
     else
         m_exp.GenerateAddrOf(gen);            
 */
     gen.GenerateArg(this);            
 }
Exemplo n.º 7
0
 public override void Generate(CodeGen.EmitCodeGen gen)
 {
     // @todo - should we emit a nop?
 }    
Exemplo n.º 8
0
 public override void GenerateAsStatement(CodeGen.EmitCodeGen gen)
 {
     gen.GenerateAsStatement(this);
 }
Exemplo n.º 9
0
 // Code generation
 public override void Generate(CodeGen.EmitCodeGen gen)
 {
     foreach(Statement stmt in Statements)
     {
         stmt.Generate(gen);
     }
 }
Exemplo n.º 10
0
 // Code generation
 public abstract void Generate(CodeGen.EmitCodeGen gen);
Exemplo n.º 11
0
 // Code generation
 public override void Generate(CodeGen.EmitCodeGen gen)
 {
     Debug.Assert(m_nodeCtor != null);
     gen.Generate(this);            
 }
Exemplo n.º 12
0
 // Code generation
 public override void Generate(CodeGen.EmitCodeGen gen)
 {        
     m_sexp.GenerateAsStatement(gen);
 }
Exemplo n.º 13
0
 // Code generation, just pass on to our resolved statement
 public override void Generate(CodeGen.EmitCodeGen gen)
 {           
     m_stmtResolved.Generate(gen);
 }
Exemplo n.º 14
0
 // Generate the address
 public override void GenerateAddrOf(CodeGen.EmitCodeGen gen)
 {        
     // Still generate all the StmtExp normally because we 
     // need their side-effects
     foreach(StatementExp e in m_eList)
         e.GenerateAsStatement(gen);
         
     // Use the address of the last expression.            
     m_eLast.GenerateAddrOf(gen);
 }
Exemplo n.º 15
0
 //.........................................................................
 // Code Generation - Generate the address of this expression    
 //.........................................................................
 public virtual void GenerateAddrOf(CodeGen.EmitCodeGen gen)
 {
     // Can't get the addr of most expressions
     //Debug.Assert(false, "Didn't implemented GenerateAddrOf");
     // Default impl, evaluate as RHS, store in temp, gen addr of that.
     gen.GenerateAddrOf(this);
 }
Exemplo n.º 16
0
 // Code generation as an expression
 public override void GenerateAsRight(CodeGen.EmitCodeGen gen)
 {
     gen.Generate(this);
 }
Exemplo n.º 17
0
 // Generating the address of a literal is ok. We just have to
 // create a temporary local to provide backing storage
 public override void GenerateAddrOf(CodeGen.EmitCodeGen gen)
 {
     gen.GenerateAddrOf(this);
 }        
Exemplo n.º 18
0
 public virtual void GenerateAsRight(CodeGen.EmitCodeGen gen)
 {
     Debug.Assert(false, "Didn't implement GenerateAsRight");
 }
Exemplo n.º 19
0
 public override void GenerateAddrOf(CodeGen.EmitCodeGen gen)
 {
     Debug.Assert(!IsIndexer, "Don't codegen Indexers as Array Access");
     gen.GenerateAddrOf(this);
 }