source: proto/s2k/trunk/framework/src/toolchain/s2k/transformer/visitors/infoSet/PropertyInfoSetMapBuilder.java @ 3775

Last change on this file since 3775 was 3775, checked in by ksherdy, 4 years ago

Fixed bug in S2K2B2K transformer.

File size: 2.9 KB
Line 
1/*
2 * Optimize advance operations to advance(X,n).
3 *     
4 * Advance(Advance(X))          to      Advance(X, 2), and
5 * Advance(Advance(X, n))       to  Advance(X, n+1) and
6 * Advance(Advance(X, n2), n1).
7 *
8 * @author Ken Herdy <ksherdy at sfu dot ca>
9 */
10
11package toolchain.s2k.transformer.visitors.infoSet;
12
13import java.util.HashMap;
14import java.util.Map;
15
16import s2k.ast.*;
17import toolchain.s2k.lang.BuiltinCallUtil;
18
19public class PropertyInfoSetMapBuilder {
20       
21        static public Map<ASTNode, PropertyInfoSet> forTree(ASTNode ASTree) {
22           
23            PropertyInformationSetVisitor setter = new PropertyInformationSetVisitor();
24                ASTree.accept(setter);
25                return setter.getPropertyInformationSet();     
26        }   
27   
28    static private class PropertyInformationSetVisitor extends VoidVisitor.Default {
29
30        private Map<ASTNode, PropertyInfoSet> propInfoSetMap;
31       
32        private int carry1Position;
33        private int carryNPosition;
34               
35        public Map<ASTNode, PropertyInfoSet> getPropertyInformationSet() {
36            return propInfoSetMap;
37        }
38       
39        public PropertyInformationSetVisitor() {
40            propInfoSetMap = new HashMap<ASTNode, PropertyInfoSet>();
41        }
42       
43        public void visitEnter(FilterDefNode node) {
44            carry1Position = 0;
45            carryNPosition = 0;
46        }
47       
48        public void visitLeave(FilterDefNode node) {
49            PropertyInfoSet propInfoSet = new PropertyInfoSet(carry1Position, carryNPosition, Carry1Count.forTree(node), CarryNCount.forTree(node), Carry1InitialValues.forTree(node)); // add LA, LB
50            propInfoSetMap.put(node, propInfoSet);
51        }
52       
53        public void visitEnter(WhileStmtNode node) {
54            PropertyInfoSet propInfoSet = new PropertyInfoSet(carry1Position, carryNPosition, Carry1Count.forTree(node), CarryNCount.forTree(node), Carry1InitialValues.forTree(node));  // add LA, LB
55            propInfoSetMap.put(node, propInfoSet);
56        }
57       
58        public void visitEnter(IfStmtNode node) {
59            PropertyInfoSet propInfoSet = new PropertyInfoSet(carry1Position, carryNPosition, Carry1Count.forTree(node), CarryNCount.forTree(node), Carry1InitialValues.forTree(node));  // add LA, LB
60            propInfoSetMap.put(node, propInfoSet);
61        }
62       
63        public void visitEnter(FuncCallNode node) {
64           
65            if(BuiltinCallUtil.isCarry(node)) {
66
67                PropertyInfoSet propInfoSet = new PropertyInfoSet(carry1Position, carryNPosition,  Carry1Count.forTree(node), CarryNCount.forTree(node), Carry1InitialValues.forTree(node)); // add LA, LB
68                propInfoSetMap.put(node, propInfoSet);
69
70                if(BuiltinCallUtil.isCarry1(node)) {
71                        carry1Position += 1;
72                } else if (BuiltinCallUtil.isCarryN(node)) {
73                        carryNPosition += 1;
74                }
75            }
76        }
77        }
78}
Note: See TracBrowser for help on using the repository browser.