Changeset 1260 for proto


Ignore:
Timestamp:
Aug 3, 2011, 1:21:16 AM (8 years ago)
Author:
shermer
Message:

Added Instantiate instruction for creating new instances of structs, and changed ASTtoIncode to use this instruction for struct declarations.

partial commit.

Location:
proto/pebble/trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • proto/pebble/trunk/src/ast/transforms/ASTtoIncode.java

    r1258 r1260  
    1313import java.util.Map;
    1414
     15import symbolTable.StructInstanceType;
     16import symbolTable.Type;
    1517import util.VariableNamer;
    1618
     
    345347                }
    346348                public void visitLeave(DeclarationASTN node) {
     349                        Type type = node.getType();
     350                        if(type instanceof StructInstanceType) {
     351                                StructInstanceType siType = (StructInstanceType) type;
     352                                AST child = node.getChild(0);
     353                                assert child instanceof VariableASTB;
     354                                VariableASTB vChild = (VariableASTB) child;
     355                                Instruction instr = makeInstantiate(vChild.getName(), siType.getStructTypeName());
     356                                addToBlock(instr);
     357                        }
    347358                }
    348359                public void visitEnter(ExecutionBlockASTN node) {
  • proto/pebble/trunk/src/incode/Instruction.java

    r1256 r1260  
    259259                return new NullInstruction();
    260260        }
     261        public static Instruction makeInstantiate(String var, String typeName) {
     262                return new Instruction(Op.INSTANTIATE, var, typeName);
     263        }
    261264       
    262265        public static Instruction makeTest(String var, String trueName, String falseName, String joinName, boolean notEqualsComparison) {
  • proto/pebble/trunk/src/incode/Op.java

    r1256 r1260  
    2121        COMMENT("#", 1),
    2222        INVALID("null", 0),     // used by NullInstruction
     23       
     24        // make a struct:       "variable" is new struct name, arg[0] is structure type name.
     25        // use on main-line code only, not in branches or loops.  Otherwise it will confuse
     26        // optimizers.
     27        INSTANTIATE("new", 1),
    2328
    2429        // several flavors of test & branch are distinguished for pythonating purposes.
     
    6469                return this==AND || this==OR || this==XOR || this==NOT ||
    6570                           this==COPY || this==SEL || this==ANDNOT || this==SHIFT ||
    66                            this==SCAN || this==SPAN;
     71                           this==SCAN || this==SPAN;    // leave INSTANTIATE out for now.
    6772        }
    6873        // for Jump types, the name in operand0 is the block to jump to.
     
    95100        public final int[] possibleUseEIndices() {
    96101                if(this==COMMENT)                       return empty;
     102                if(this==INSTANTIATE)           return empty;
    97103                if(this==ERROR)                         return variable;
    98104                if(isTestType())                        return variable;
     
    137143                case COMMENT:  return "# %2$s";
    138144                case INVALID:  return "null instruction";
     145                case INSTANTIATE:
     146                                           return "%1$s = new %2$s";
    139147               
    140148                case TEST:     return "if %1$s %5$s 0: \t\t\t# goto %2$s; else: goto %3$s; join: goto %4$s";
     
    162170                case COMMENT:  return "# %2$s";
    163171                case INVALID:  return "null instruction";
     172                case INSTANTIATE:
     173                                           return "%1$s = %2$s()";
    164174               
    165175                case TEST:     return "if %1$s %5$s 0: \t\t\t# goto %2$s; else: goto %3$s; join: goto %4$s";
  • proto/pebble/trunk/src/incode/global/LivenessProperty.java

    r1256 r1260  
    175175                addAllBlocksToWorkQueue(fragment);
    176176                processWorkQueueUntilEmpty();
    177                 printAllBlocks(fragment);
    178         }
    179        
     177//              printAllBlocks(fragment);
     178        }
     179       
     180        @SuppressWarnings("unused")
    180181        private static void printAllBlocks(Fragment fragment) {
    181182                for(BasicBlock block: fragment) {
Note: See TracChangeset for help on using the changeset viewer.