Changeset 3276


Ignore:
Timestamp:
Jun 6, 2013, 5:22:39 PM (5 years ago)
Author:
ksherdy
Message:

Fix for Builtin translation within while conditionals.

Location:
proto/pabloj/trunk/src/toolchain/pabloS/transformer/visitors/carry
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • proto/pabloj/trunk/src/toolchain/pabloS/transformer/visitors/carry/CarryIntroXFormer.java

    r3271 r3276  
    6969        return root;
    7070    }
     71    public static ASTNode apply(ASTNode root, Context context, int carry1Base, int carryNBase) {
     72        Transformer transformer = new Transformer(context, carry1Base, carryNBase);
     73        root.accept(transformer);
     74        return root;
     75    }   
    7176    public static ASTNode apply(ASTNode root, BuiltinEncoder builtinEncoder, CarrySetEncoder carrySetEncoder,
    7277                                boolean finalBlockMode, boolean ciMode, int carrySetDepth) {
     
    8489        private Counter advanceNCounter = new Counter(CarrySetBuiltins.PENDING64);
    8590       
    86                 Transformer(Context context) {
     91        Transformer(Context context) {
     92                this(context,0,0);
     93        }
     94       
     95                Transformer(Context context, int count1Base, int countNBase) {
    8796                        this.context = context;
    88                        
     97                        this.carryCounter.setValue(count1Base);
     98                        this.advanceNCounter.setValue(countNBase);
     99                }
     100               
     101                public void resetCounters() {
    89102                        carryCounter.reset();
    90103                        advanceNCounter.reset();                               
    91104                }
    92                
    93105               
    94106                ///////////////////////////////////////////////////////////////////
     
    214226               
    215227                public void visitEnter(WhileStmtNode node) {
     228                       
    216229                        if(context.isFinalBlockMode()) {
    217230                                andConditionWithEOFMask(node);                                 
     
    231244                        node.updateSelf(replacement);   
    232245                }
     246               
    233247                private void andConditionWithEOFMask(WhileStmtNode node) {
    234248                        ASTNode condition = Accessors.condition(node);
     
    261275                        Locator locator = (Locator)node;
    262276
    263                         int carryBase           = carryCounter.value();
    264                        
    265                         ASTNode      ifCondition = outerIfCondition(node, carryBase, carry1Count);
    266                         BlockStmtNode thenClause = outerIfThenClause(node, carryBase, carry1Count);
    267                         BlockStmtNode elseClause = outerIfElseClause(locator, carryBase, carry1Count);
     277                        // KH: Translate pablo. call within conditions.
     278                        int carry1Base          = carryCounter.value();
     279                        int carryNBase          = advanceNCounter.value();
     280                        ASTNode condition = outerIfCondition(node, carry1Base, carry1Count);   
     281                        ASTNode replacementCondition = CarryIntroXFormer.apply(condition, context, carry1Base, carryNBase);
     282                                               
     283                        BlockStmtNode thenClause = outerIfThenClause(node, carry1Base, carry1Count);
     284                        BlockStmtNode elseClause = outerIfElseClause(locator, carry1Base, carry1Count);
    268285                       
    269286                        return Generators.makeIfStmtNode(locator,
    270                                                                                          ifCondition,
     287                                                                                         replacementCondition,
    271288                                                                                         thenClause,
    272289                                                                                         elseClause);
     
    329346
    330347                private ASTNode transformBody(WhileStmtNode innerWhile, Context localContext) {
     348                       
     349                        // KH: Translate pablo. call within conditions.
     350                        ASTNode condition                               =       Accessors.condition(innerWhile);
     351                        ASTNode replacementCondition    =       CarryIntroXFormer.apply(condition, localContext);
     352                        condition.updateSelf(replacementCondition);
     353                       
    331354                        ASTNode body = Accessors.body(innerWhile);
    332355                        ASTNode newBody = CarryIntroXFormer.apply(body, localContext);
  • proto/pabloj/trunk/src/toolchain/pabloS/transformer/visitors/carry/Counter.java

    r3271 r3276  
    2626                return count;
    2727        }
     28        public void setValue(int count) {
     29                this.count = count;
     30        }
    2831        public IntegerConstantNode valueNode(Locator locator) {
    2932                return Generators.makeIntegerConstantNode(locator, value());
Note: See TracChangeset for help on using the changeset viewer.