Changeset 3335


Ignore:
Timestamp:
Jun 19, 2013, 10:22:01 PM (6 years ago)
Author:
ksherdy
Message:

Added a transformer to break apart variables declarations with initialization as separate statements.

Location:
proto/pabloj/trunk/src/toolchain
Files:
2 added
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • proto/pabloj/trunk/src/toolchain/pabloS/ast/Accessors.java

    r3330 r3335  
    115115                return (IdentifierNode)node.child(1);
    116116        }       
    117 
    118         public static ASTNode lhs(VarDeclNode node) {
    119             return node.child(1);
    120         }       
    121117       
    122118    public static boolean hasInitializationExpr(VarDeclNode node) {
     
    145141        }       
    146142
     143        public static String varDeclName(VarDeclNode node) {
     144        return identifier(node).getToken().getLexeme();
     145    }
     146       
    147147        ////////////////////////////////////////////////////////////////////////////
    148148        // UnaryOperatorNode
     
    455455                return node.getToken().getLexeme();
    456456        }
    457 
     457       
    458458        ////////////////////////////////////////////////////////////////////////////
    459459        // any node
  • proto/pabloj/trunk/src/toolchain/pabloS/semanticAnalyzer/Binding.java

    r3259 r3335  
    1515       
    1616        private String name;
     17        // KH:
     18        private String mangledName;
    1719        private Type type;
    1820        private boolean isTypeDefinition;
     
    2931        }
    3032
     33        public final String getMangledName() {
     34            return mangledName;
     35        }
     36       
     37        public void setMangledName(String mangledName) {
     38            this.mangledName = mangledName;
     39        }
     40       
    3141        public final Type getType() {
    3242                return type;
  • proto/pabloj/trunk/src/toolchain/pabloS/transformer/Transformer.java

    r3330 r3335  
    3737                this.ASTTree = ASTTree;         
    3838                initDefaults();
    39                 // this.symbolTable = symbolTable;
    4039        }       
    4140       
     
    5049        public pabloS.ast.ASTNode xForm() {
    5150               
    52                 pabloS.ast.ASTNode decoratedTree = ASTTree.deepCopy();
    53                
    54 
    55                
    56                
     51            pabloS.ast.ASTNode decoratedTree = ASTTree.deepCopy();
    5752               
    5853                decoratedTree = ExpandAugmentedAssignments.apply(decoratedTree);
     
    6762                //decoratedTree = InitializeStreamDefaults.apply(decoratedTree);
    6863               
    69                 decoratedTree = SplitVarDeclsInitializations.apply(decoratedTree);
     64                decoratedTree = SplitVarDeclsInits.apply(decoratedTree);
     65                //decoratedTree = FlattenBlockScopes.apply(decoratedTree);
    7066                               
    7167                return decoratedTree;
  • proto/pabloj/trunk/src/toolchain/pabloS/transformer/visitors/SplitVarDeclsInits.java

    r3330 r3335  
    11/*
    2  * Split compound local variable declaration and initialization statements.
     2 * Splits local variable declaration with initialization statements into
     3 * local variable declaration statements and assignment statements.
    34 *     
    45 * stream s = expr;   =>  stream s; s = expr;
     
    1516import toolchain.pabloS.ast.Mutators;
    1617
    17 public class SplitVarDeclsInitializations {
     18public class SplitVarDeclsInits {
    1819       
    1920        static public ASTNode apply(ASTNode ASTree) {
    20             SplitterVisitor splitter = new SplitterVisitor();
     21           
     22            SplitVarDeclsInitsVisitor splitter = new SplitVarDeclsInitsVisitor();
    2123                ASTree.accept(splitter);
     24               
    2225                return ASTree;                         
    2326        }   
    24    
    25     static private class SplitterVisitor extends VoidVisitor.Default {
     27
     28    static private class SplitVarDeclsInitsVisitor extends VoidVisitor.Default {
    2629
    2730        public void visitLeave(VarDeclNode node) {
    28                        
     31           
    2932            if(Accessors.hasInitializationExpr(node)) {
    3033           
    31                 ASTNode lhs = Accessors.lhs(node);
     34                ASTNode lhs = Accessors.identifier(node);
    3235                ASTNode assignLhs = lhs.deepCopy();
    3336               
     
    4144                Mutators.insertAfter(node, assignStmt);
    4245            }
    43                 }       
     46        }   
    4447    }
    4548}
  • proto/pabloj/trunk/src/toolchain/util/Labeller.java

    r3300 r3335  
    1111        private int nextValue = 0;
    1212        private String labelBase = "temp_";
    13        
    14         public String newLabel() {
    15                 return labelBase + nextValue++;
     13        public Labeller(String baseString) {
     14            setBase(baseString);
    1615        }
    1716        public void setBase(String baseString) {
    1817                labelBase = baseString;
    1918        }
     19        public String newLabel() {
     20        return labelBase + nextValue++;
     21    }
    2022        public void reset() {
    2123                nextValue = 0;
Note: See TracChangeset for help on using the changeset viewer.