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

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

Restructure s2k package.

File size: 1.6 KB
Line 
1package toolchain.s2k.lang.builtin;
2
3import s2k.ast.HasSymbolTableNodeType;
4import toolchain.s2k.lang.type.FunctionType;
5import toolchain.s2k.lang.type.PackageType;
6import toolchain.s2k.lang.type.Type;
7import toolchain.s2k.semanticAnalyzer.Binding;
8import toolchain.s2k.semanticAnalyzer.SymbolTable;
9
10// KH: refactor for multiple packages
11
12public class S2KBuiltinsTypeBuilder {
13        public static void installOn(HasSymbolTableNodeType node) {
14                S2KBuiltinsTypeBuilder builder = new S2KBuiltinsTypeBuilder();
15                builder.installOnNode(node);
16        }
17       
18        public static final String packageName = "flow"; // KH: for now
19
20        private S2KBuiltinsTypeBuilder() {
21                super();
22        }
23       
24        private void installOnNode(HasSymbolTableNodeType node) {
25                SymbolTable table = node.getSymbolTable();
26                Binding binding = Binding.make(packageName, packageType());
27                table.add(binding);
28        }
29       
30        private Type packageType() {
31                SymbolTable flowSymbolTable = makeSymbolTable();
32                Type pabloType = PackageType.make(packageName, flowSymbolTable);
33                return pabloType;
34        }
35
36        private SymbolTable makeSymbolTable() {
37                SymbolTable symbolTable = new SymbolTable();
38               
39                for(S2KBuiltins builtin: S2KBuiltins.values()) {
40                        installBuiltinBinding(builtin, symbolTable);
41                }
42               
43                return symbolTable;
44        }
45
46        private void installBuiltinBinding(S2KBuiltins builtin, SymbolTable symbolTable) {
47                Binding binding = makeBinding(builtin);
48                symbolTable.add(binding);
49        }
50
51        private Binding makeBinding(S2KBuiltins builtin) {
52                String name = builtin.name();
53                Type type = FunctionType.make(builtin.getSignature());
54                return Binding.make(name, type);
55        }
56}
Note: See TracBrowser for help on using the repository browser.