source: proto/s2k/trunk/framework/src/toolchain/b2k/lang/builtin/B2KBuiltins.java @ 4023

Last change on this file since 4023 was 4023, checked in by ksherdy, 5 years ago

Restructured b2k package.

File size: 6.5 KB
Line 
1package toolchain.b2k.lang.builtin;
2 
3
4import java.util.HashMap;
5import java.util.Map;
6
7import toolchain.b2k.lang.signatures.FunctionSignature;
8import static toolchain.b2k.lang.builtin.B2KBuiltinsTranslator.ADVANCEN_TRANSLATION;
9import static toolchain.b2k.lang.builtin.B2KBuiltinsTranslator.ADVANCE_THEN_SCANTO_TRANSLATION;
10import static toolchain.b2k.lang.builtin.B2KBuiltinsTranslator.ASSERT_ZERO_TRANSLATION;
11import static toolchain.b2k.lang.builtin.B2KBuiltinsTranslator.ATEOF_TRANSLATION;
12import static toolchain.b2k.lang.builtin.B2KBuiltinsTranslator.CARRY_TRANSLATION;
13import static toolchain.b2k.lang.builtin.B2KBuiltinsTranslator.INFILE_TRANSLATION;
14import static toolchain.b2k.lang.builtin.B2KBuiltinsTranslator.MASK_TRANSLATION;
15import static toolchain.b2k.lang.builtin.B2KBuiltinsTranslator.NULL_TRANSLATION;
16import static toolchain.b2k.lang.builtin.B2KBuiltinsTranslator.SCANTO_FIRST_TRANSLATION;
17import static toolchain.b2k.lang.builtin.B2KBuiltinsTranslator.SCANTO_TRANSLATION;
18import static toolchain.b2k.lang.signatures.SignatureShorthand.sig_II_B;
19import static toolchain.b2k.lang.signatures.SignatureShorthand.sig_BI_B;
20import static toolchain.b2k.lang.signatures.SignatureShorthand.sig_BB_B;
21import static toolchain.b2k.lang.signatures.SignatureShorthand.sig_BT_V;
22import static toolchain.b2k.lang.signatures.SignatureShorthand.sig_V_B;
23import static toolchain.b2k.lang.signatures.SignatureShorthand.sig_B_B;
24import static toolchain.b2k.lang.signatures.SignatureShorthand.sig_V_V;
25import static toolchain.b2k.lang.signatures.SignatureShorthand.sig_SB_V;
26
27public enum B2KBuiltins implements B2KBuiltin {
28    FLOW_ADVANCE(               "Advance",              CarryType.SingleBit, CARRY_TRANSLATION,                 sig_B_B()  ),   // BuiltinCallUtil, CombineAdvances
29    FLOW_SCAN_TO_FIRST(         "ScanToFirst",          CarryType.SingleBit, SCANTO_FIRST_TRANSLATION,          sig_B_B(), InitialValue.One ),
30    FLOW_SCAN_THRU(             "ScanThru",             CarryType.SingleBit, CARRY_TRANSLATION,                 sig_BB_B() ),   // BuiltinTranslator
31    FLOW_SCAN_TO(               "ScanTo",               CarryType.SingleBit, SCANTO_TRANSLATION,                sig_BB_B() ),
32    FLOW_SPAN_UP_TO(            "SpanUpTo",             CarryType.SingleBit, CARRY_TRANSLATION,                 sig_BB_B() ),
33    FLOW_INCLUSIVE_SPAN(        "InclusiveSpan",        CarryType.SingleBit, CARRY_TRANSLATION,                 sig_BB_B() ),
34    FLOW_EXCLUSIVE_SPAN(        "ExclusiveSpan",        CarryType.SingleBit, CARRY_TRANSLATION,                 sig_BB_B() ), 
35    FLOW_ADVANCE_THEN_SCAN_THRU("AdvanceThenScanThru",  CarryType.SingleBit, CARRY_TRANSLATION,                 sig_BB_B() ),
36    FLOW_ADVANCE_THEN_SCAN_TO(  "AdvanceThenScanTo",    CarryType.SingleBit, ADVANCE_THEN_SCANTO_TRANSLATION,   sig_BB_B() ),   // BuiltinTranslator
37    FLOW_ADVANCE_N(                     "AdvanceN",                     CarryType.NBits,         ADVANCEN_TRANSLATION,                          sig_BI_B() ),   // AdvNCounterVisitor   
38
39    FLOW_MASK(                          "Mask",      CarryType.None, MASK_TRANSLATION,            sig_II_B() ), // visitors.carry.Counter   
40    FLOW_AT_EOF(                        "atEOF",     CarryType.None, ATEOF_TRANSLATION,           sig_B_B()  ),
41    FLOW_IN_FILE(                       "inFile",    CarryType.None, INFILE_TRANSLATION,          sig_B_B()  ), 
42    FLOW_ASSERT_ZERO(                   "assert_0",  CarryType.None, ASSERT_ZERO_TRANSLATION,     sig_BT_V() ), // surroundAssert0sWithIfs     
43
44    // Empty package
45    _PRINT_BITBLOCK(                    "PrintBitBlock",                CarryType.None, NULL_TRANSLATION, sig_SB_V()),
46    _ASSERT_BITBLOCK_ALIGN(             "AssertBitBlockAlign",  CarryType.None, NULL_TRANSLATION, sig_V_B()),
47    // KH:  Keyword ?
48    _EOF_MASK(                                  "EOF_mask",                     CarryType.None, NULL_TRANSLATION, sig_V_B()), 
49    NULL_BUILTIN(                               "NULL",                         CarryType.None, CARRY_TRANSLATION,sig_V_V());
50
51    public enum CarryType{      SingleBit,     
52                                                        NBits,         
53                                                        IntValue,       
54                                                        None };
55                                                       
56    public enum InitialValue{ Zero, One };
57   
58    private final CarryType carryType;
59    private final InitialValue initialValue;
60        private final String name;
61        private final FunctionSignature signature;
62        private final B2KBuiltinsTranslator translator;
63
64        private B2KBuiltins(String name, CarryType carryType, B2KBuiltinsTranslator translator, FunctionSignature signature, InitialValue initialValue) {
65                this.name = name;
66                this.carryType = carryType;
67                this.translator = translator;
68                this.signature = signature;
69                this.initialValue = initialValue;
70        }
71
72        private B2KBuiltins(String name, CarryType carryType, B2KBuiltinsTranslator translator, FunctionSignature signature) {
73                this(name, carryType, translator, signature, InitialValue.Zero);
74        }
75       
76        /////////////////////////////////////////////////////////////////
77        // forName(String)  mechanism
78        /////////////////////////////////////////////////////////////////
79        static private Map<String, B2KBuiltins> builtinForName = new HashMap<String, B2KBuiltins>();
80        static {
81                for(B2KBuiltins builtin: values()) {
82                        builtinForName.put(builtin.fullyQualifiedName(), builtin);
83                }
84        }
85       
86        static public boolean isS2KBuiltins(String fullyQualifiedName) {
87                return forName(fullyQualifiedName) != NULL_BUILTIN;
88        }
89       
90        static public B2KBuiltins forName(String fullyQualifiedName) {
91                if(builtinForName.containsKey(fullyQualifiedName)) {
92                        return builtinForName.get(fullyQualifiedName);
93                }
94                return NULL_BUILTIN;
95        }
96       
97        /////////////////////////////////////////////////////////////////
98        // queries
99        /////////////////////////////////////////////////////////////////
100        public String fullyQualifiedName () { return packageName() + "." + this.baseName() ;}
101        public String packageName() { return  this.name().toLowerCase().split("_")[0]; }
102        public String baseName() { return this.name; }
103        public final CarryType getCarryType() { return carryType; }
104        public final boolean isCarryNone() { return carryType == CarryType.None; }
105        public final boolean isCarry1() { return carryType == CarryType.SingleBit; }
106        public final boolean isCarryN() { return carryType == CarryType.NBits; }
107        public final boolean isCarryIntValue() { return carryType == CarryType.IntValue; }
108        public final B2KBuiltinsTranslator getTranslator() { return translator; }
109        public final InitialValue getInitialValue() { return initialValue; }
110        public final int intInitialValue() { return (initialValue == InitialValue.One) ? 1 : 0; }
111        public FunctionSignature getSignature() { return signature; }
112
113        @Override
114        public String infoString() {
115                // TODO Auto-generated method stub
116                return null;
117        }
118
119        @Override
120        public B2KBuiltin getConcreteBuiltin() {
121                return this;
122        }
123     
124  }
Note: See TracBrowser for help on using the repository browser.