comparison truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeClass.java @ 22341:4df3d8fd6cfd

NodeClass cleanup
author Andreas Woess <andreas.woess@oracle.com>
date Wed, 04 Nov 2015 10:47:09 +0100
parents dc83cc1f94f2
children 0d4b0e4263ee
comparison
equal deleted inserted replaced
22340:bb3c03f2442d 22341:4df3d8fd6cfd
51 } 51 }
52 }); 52 });
53 } 53 }
54 }; 54 };
55 55
56 private static final NodeFieldAccessor[] EMPTY_NODE_FIELD_ARRAY = new NodeFieldAccessor[0];
57
56 // The comprehensive list of all fields. 58 // The comprehensive list of all fields.
57 private final NodeFieldAccessor[] fields; 59 private final NodeFieldAccessor[] fields;
58 // Separate arrays for the frequently accessed fields. 60 // Separate arrays for the frequently accessed fields.
59 private final NodeFieldAccessor parentField; 61 private final NodeFieldAccessor parentField;
60 private final NodeFieldAccessor nodeClassField; 62 private final NodeFieldAccessor nodeClassField;
66 68
67 public static NodeClass get(Class<? extends Node> clazz) { 69 public static NodeClass get(Class<? extends Node> clazz) {
68 return nodeClasses.get(clazz); 70 return nodeClasses.get(clazz);
69 } 71 }
70 72
71 public static NodeClass get(Node clazz) { 73 public static NodeClass get(Node node) {
72 return clazz.getNodeClass(); 74 return node.getNodeClass();
73 } 75 }
74 76
75 public NodeClass(Class<? extends Node> clazz) { 77 NodeClass(Class<? extends Node> clazz) {
76 List<NodeFieldAccessor> fieldsList = new ArrayList<>(); 78 List<NodeFieldAccessor> fieldsList = new ArrayList<>();
77 NodeFieldAccessor parentFieldTmp = null; 79 NodeFieldAccessor parentFieldTmp = null;
78 NodeFieldAccessor nodeClassFieldTmp = null; 80 NodeFieldAccessor nodeClassFieldTmp = null;
79 List<NodeFieldAccessor> childFieldList = new ArrayList<>(); 81 List<NodeFieldAccessor> childFieldList = new ArrayList<>();
80 List<NodeFieldAccessor> childrenFieldList = new ArrayList<>(); 82 List<NodeFieldAccessor> childrenFieldList = new ArrayList<>();
113 115
114 if (parentFieldTmp == null) { 116 if (parentFieldTmp == null) {
115 throw new AssertionError("parent field not found"); 117 throw new AssertionError("parent field not found");
116 } 118 }
117 119
118 this.fields = fieldsList.toArray(new NodeFieldAccessor[fieldsList.size()]); 120 this.fields = fieldsList.toArray(EMPTY_NODE_FIELD_ARRAY);
119 this.nodeClassField = nodeClassFieldTmp; 121 this.nodeClassField = nodeClassFieldTmp;
120 this.parentField = parentFieldTmp; 122 this.parentField = parentFieldTmp;
121 this.childFields = childFieldList.toArray(new NodeFieldAccessor[childFieldList.size()]); 123 this.childFields = childFieldList.toArray(EMPTY_NODE_FIELD_ARRAY);
122 this.childrenFields = childrenFieldList.toArray(new NodeFieldAccessor[childrenFieldList.size()]); 124 this.childrenFields = childrenFieldList.toArray(EMPTY_NODE_FIELD_ARRAY);
123 this.cloneableFields = cloneableFieldList.toArray(new NodeFieldAccessor[cloneableFieldList.size()]); 125 this.cloneableFields = cloneableFieldList.toArray(EMPTY_NODE_FIELD_ARRAY);
124 this.clazz = clazz; 126 this.clazz = clazz;
125 } 127 }
126 128
127 public NodeFieldAccessor getNodeClassField() { 129 public NodeFieldAccessor getNodeClassField() {
128 return nodeClassField; 130 return nodeClassField;