source: proto/s2k/trunk/framework/src/toolchain/s2k/lang/builtin/S2KBuiltins.java @ 4021

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

Restructure s2k package.

File size: 4.7 KB
Line 
1package toolchain.s2k.lang.builtin;
2
3import java.util.HashMap;
4import java.util.Map;
5
6import toolchain.s2k.lang.signatures.FunctionSignature;
7import static toolchain.s2k.lang.builtin.S2KBuiltinsTranslator.*;
8import static toolchain.s2k.lang.signatures.SignatureShorthand.*;
9
10public enum S2KBuiltins implements S2KBuiltin {
11    FLOW_ADVANCE(               "Advance",              CarryType.SingleBit, IDENTITY_TRANSLATION,   sig_S_S()  ),      // BuiltinCallUtil, CombineAdvances
12    FLOW_SCAN_TO_FIRST(         "ScanToFirst",          CarryType.SingleBit, IDENTITY_TRANSLATION,   sig_S_S(), InitialValue.One ),
13    FLOW_SCAN_THRU(             "ScanThru",             CarryType.SingleBit, IDENTITY_TRANSLATION,   sig_SS_S() ),      // BuiltinTranslator
14    FLOW_SCAN_TO(               "ScanTo",               CarryType.SingleBit, IDENTITY_TRANSLATION,   sig_SS_S() ),
15    FLOW_SPAN_UP_TO(            "SpanUpTo",             CarryType.SingleBit, IDENTITY_TRANSLATION,   sig_SS_S() ),
16    FLOW_INCLUSIVE_SPAN(        "InclusiveSpan",        CarryType.SingleBit, IDENTITY_TRANSLATION,   sig_SS_S() ),
17    FLOW_EXCLUSIVE_SPAN(        "ExclusiveSpan",        CarryType.SingleBit, IDENTITY_TRANSLATION,   sig_SS_S() ), 
18    FLOW_ADVANCE_THEN_SCAN_THRU("AdvanceThenScanThru",  CarryType.SingleBit, IDENTITY_TRANSLATION,   sig_SS_S() ),
19    FLOW_ADVANCE_THEN_SCAN_TO(  "AdvanceThenScanTo",    CarryType.SingleBit, IDENTITY_TRANSLATION,   sig_SS_S() ),      // BuiltinTranslator
20    FLOW_ADVANCE_N(                     "AdvanceN",                     CarryType.NBits,         IDENTITY_TRANSLATION,   sig_SI_S() ),  // AdvNCounterVisitor   
21
22    FLOW_MASK(                          "Mask",      CarryType.None, IDENTITY_TRANSLATION,      sig_II_S() ), // visitors.carry.Counter   
23    FLOW_AT_EOF(                        "atEOF",     CarryType.None, IDENTITY_TRANSLATION,    sig_S_S()  ),
24    FLOW_IN_FILE(                       "inFile",    CarryType.None, IDENTITY_TRANSLATION,    sig_S_S()  ), 
25    FLOW_ASSERT_ZERO(                   "assert_0",  CarryType.None, IDENTITY_TRANSLATION,    sig_ST_V() ), // surroundAssert0sWithIfs 
26    NULL_BUILTIN(                               "NULL",      CarryType.None, IDENTITY_TRANSLATION,    sig_V_V()  );
27
28    public enum CarryType{      SingleBit,     
29                                                        NBits,         
30                                                        IntValue,       
31                                                        None };
32                                                       
33    public enum InitialValue{ Zero, One };
34   
35    private final CarryType carryType;
36    private final InitialValue initialValue;
37        private final String name;
38        private final FunctionSignature signature;
39        private final S2KBuiltinsTranslator translator;
40
41        private S2KBuiltins(String name, CarryType carryType, S2KBuiltinsTranslator translator, FunctionSignature signature, InitialValue initialValue) {
42                this.name = name;
43                this.carryType = carryType;
44                this.translator = translator;
45                this.signature = signature;
46                this.initialValue = initialValue;
47        }
48
49        private S2KBuiltins(String name, CarryType carryType, S2KBuiltinsTranslator translator, FunctionSignature signature) {
50                this(name, carryType, translator, signature, InitialValue.Zero);
51        }
52       
53        /////////////////////////////////////////////////////////////////
54        // forName(String)  mechanism
55        /////////////////////////////////////////////////////////////////
56        static private Map<String, S2KBuiltins> builtinForName = new HashMap<String, S2KBuiltins>();
57        static {
58                for(S2KBuiltins builtin: values()) {
59                        builtinForName.put(builtin.fullyQualifiedName(), builtin);
60                }
61        }
62       
63        static public boolean isS2KBuiltins(String fullyQualifiedName) {
64                return forName(fullyQualifiedName) != NULL_BUILTIN;
65        }
66       
67        static public S2KBuiltins forName(String fullyQualifiedName) {
68                if(builtinForName.containsKey(fullyQualifiedName)) {
69                        return builtinForName.get(fullyQualifiedName);
70                }
71                return NULL_BUILTIN;
72        }
73       
74        /////////////////////////////////////////////////////////////////
75        // queries
76        /////////////////////////////////////////////////////////////////
77        public String fullyQualifiedName () { return packageName() + "." + this.baseName() ;}
78        public String packageName() { return  this.name().toLowerCase().split("_")[0]; }
79        public String baseName() { return this.name; }
80        public final CarryType getCarryType() { return carryType; }
81        public final boolean isCarryNone() { return carryType == CarryType.None; }
82        public final boolean isCarry1() { return carryType == CarryType.SingleBit; }
83        public final boolean isCarryN() { return carryType == CarryType.NBits; }
84        public final boolean isCarryIntValue() { return carryType == CarryType.IntValue; }
85        public final S2KBuiltinsTranslator getTranslator() { return translator; }
86        public final InitialValue getInitialValue() { return initialValue; }
87        public final int intInitialValue() { return (initialValue == InitialValue.One) ? 1 : 0; }
88        public FunctionSignature getSignature() { return signature; }
89
90        @Override
91        public String infoString() {
92                return this.fullyQualifiedName();
93        }
94
95        @Override
96        public S2KBuiltin getConcreteBuiltin() {
97                return this;
98        }
99
100}
Note: See TracBrowser for help on using the repository browser.