source: proto/pabloj/trunk/src/toolchain/pabloS/lang/PabloSBuiltin.java @ 3259

Last change on this file since 3259 was 3259, checked in by shermer, 6 years ago

End-of-workday commit. More work towards semantic analyzer.

File size: 4.1 KB
Line 
1package toolchain.pabloS.lang;
2
3import java.util.HashMap;
4import java.util.Map;
5
6import toolchain.pabloS.lang.signatures.FunctionSignature;
7import static toolchain.pabloS.transformer.visitors.carry.BuiltinTranslator.*;
8import static toolchain.pabloS.lang.signatures.SignatureShorthand.*;
9import toolchain.pabloS.transformer.visitors.carry.BuiltinTranslator;
10
11public enum PabloSBuiltin {
12    ADVANCE(               "Advance",             CarryType.One, CARRY_TRANSLATION,  sig_S_S()  ), // BuiltinCallUtil, CombineAdvances
13    SCAN_TO_FIRST(         "ScanToFirst",         CarryType.One, CARRY_TRANSLATION,  sig_S_S(),  InitialValue.One ),
14    SCAN_THRU(             "ScanThru",            CarryType.One, CARRY_TRANSLATION,  sig_SS_S() ), // BuiltinTranslator
15    SCAN_TO(               "ScanTo",              CarryType.One, SCANTO_TRANSLATION, sig_SS_S() ),
16    SPAN_UP_TO(            "SpanUpTo",            CarryType.One, CARRY_TRANSLATION,  sig_SS_S() ),
17    INCLUSIVE_SPAN(        "InclusiveSpan",       CarryType.One, CARRY_TRANSLATION,  sig_SS_S() ),
18    EXCLUSIVE_SPAN(        "ExclusiveSpan",       CarryType.One, CARRY_TRANSLATION,  sig_SS_S() ), 
19    ADVANCE_THEN_SCAN_THRU("AdvanceThenScanThru", CarryType.One, CARRY_TRANSLATION,  sig_SS_S()  ),
20    ADVANCE_THEN_SCAN_TO(  "AdvanceThenScanTo",   CarryType.One, ADVANCE_THEN_SCANTO_TRANSLATION, sig_SS_S()  ), // BuiltinTranslator
21   
22    ADVANCE_N(    "AdvanceN",  CarryType.N,    ADVANCEN_TRANSLATION, sig_SI_S() ), // AdvNCounterVisitor   
23    ADVANCE_32(   "Advance32", CarryType.N,    CARRY_TRANSLATION,    sig_S_S()  ),
24
25    MASK(         "Mask",      CarryType.None, MASK_TRANSLATION,     sig_II_S() ), // visitors.carry.Counter   
26    AT_EOF(       "atEOF",     CarryType.None, ATEOF_TRANSLATION,    sig_S_S()  ),
27    IN_FILE(      "inFile",    CarryType.None, INFILE_TRANSLATION,   sig_S_S()  ), 
28    ASSERT_ZERO(  "assert_0",  CarryType.None, CARRY_TRANSLATION,    sig_ST_V() ), // surroundAssert0sWithIfs   
29    EOF_MASK(     "EOF_mask",  CarryType.None, CARRY_TRANSLATION,    sig_V_S()  ), // deprecated, // PabloS.ast.Generators
30    NULL_BUILTIN( "NULL",      CarryType.None, CARRY_TRANSLATION,    sig_V_V()  );
31
32    public enum CarryType{One, N, None};
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 BuiltinTranslator translator;
40
41       
42        private PabloSBuiltin(String name, CarryType carryType, BuiltinTranslator translator, FunctionSignature signature, InitialValue initialValue) {
43                this.name = name;
44                this.carryType = carryType;
45                this.translator = translator;
46                this.signature = signature;
47                this.initialValue = initialValue;
48        }
49
50        private PabloSBuiltin(String name, CarryType carryType, BuiltinTranslator translator, FunctionSignature signature) {
51                this(name, carryType, translator, signature, InitialValue.Zero);
52        }
53       
54       
55
56       
57        /////////////////////////////////////////////////////////////////
58        // forName(String)  mechanism
59        /////////////////////////////////////////////////////////////////
60        static private Map<String, PabloSBuiltin> builtinForName = new HashMap<String, PabloSBuiltin>();
61        static {
62                for(PabloSBuiltin builtin: values()) {
63                        builtinForName.put(builtin.pabloSName(), builtin);
64                }
65        }
66        public static PabloSBuiltin forName(String builtinName) {
67                if(builtinForName.containsKey(builtinName)) {
68                        return builtinForName.get(builtinName);
69                }
70                return NULL_BUILTIN;
71        }
72       
73        /////////////////////////////////////////////////////////////////
74        // queries
75        /////////////////////////////////////////////////////////////////
76        public String pabloSName() { return this.name; }
77        public final CarryType getCarryType() { return carryType; }
78        public final boolean isCarry1() { return carryType == CarryType.One; }
79        public final boolean isCarryN() { return carryType == CarryType.N; }
80        public final BuiltinTranslator getTranslator() { return translator; }
81        public final InitialValue getInitialValue() { return initialValue; }
82        public final int intInitialValue() { return (initialValue == InitialValue.One) ? 1 : 0; }
83
84        public FunctionSignature getSignature() { return signature; }
85
86}
Note: See TracBrowser for help on using the repository browser.