Mercurial > hg > truffle
comparison graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderDeserializer.java @ 20129:5b7db8941fd7
Truffle: make NodeClass and NodeField a top-level class.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Thu, 02 Apr 2015 01:22:41 +0200 |
parents | 6ba170cb6f53 |
children | 8dc73c226c63 |
comparison
equal
deleted
inserted
replaced
20128:7ad60a16bbb0 | 20129:5b7db8941fd7 |
---|---|
28 import java.util.*; | 28 import java.util.*; |
29 | 29 |
30 import sun.misc.*; | 30 import sun.misc.*; |
31 | 31 |
32 import com.oracle.truffle.api.nodes.*; | 32 import com.oracle.truffle.api.nodes.*; |
33 import com.oracle.truffle.api.nodes.NodeUtil.NodeClass; | 33 import com.oracle.truffle.api.nodes.NodeFieldAccessor.NodeFieldKind; |
34 import com.oracle.truffle.api.nodes.NodeUtil.NodeField; | |
35 import com.oracle.truffle.api.nodes.NodeUtil.NodeFieldKind; | |
36 import com.oracle.truffle.api.source.*; | 34 import com.oracle.truffle.api.source.*; |
37 | 35 |
38 /** | 36 /** |
39 * Experimental API. May change without notice. | 37 * Experimental API. May change without notice. |
40 */ | 38 */ |
146 throw new RuntimeException("Class is not a truffle node " + nodeClass); | 144 throw new RuntimeException("Class is not a truffle node " + nodeClass); |
147 } | 145 } |
148 | 146 |
149 Node node = (Node) object; | 147 Node node = (Node) object; |
150 | 148 |
151 NodeField[] nodeFields = NodeClass.get(nodeClass).getFields(); | 149 NodeFieldAccessor[] nodeFields = NodeClass.get(nodeClass).getFields(); |
152 deserializeChildrenFields(node, nodeFields); | 150 deserializeChildrenFields(node, nodeFields); |
153 deserializeChildFields(node, nodeFields); | 151 deserializeChildFields(node, nodeFields); |
154 deserializeDataFields(buffer, node, nodeFields); | 152 deserializeDataFields(buffer, node, nodeFields); |
155 | 153 |
156 return node; | 154 return node; |
157 } | 155 } |
158 | 156 |
159 private void deserializeDataFields(VariableLengthIntBuffer buffer, Node nodeInstance, NodeField[] nodeFields) throws UnsupportedConstantPoolTypeException { | 157 private void deserializeDataFields(VariableLengthIntBuffer buffer, Node nodeInstance, NodeFieldAccessor[] nodeFields) throws UnsupportedConstantPoolTypeException { |
160 for (int i = 0; i < nodeFields.length; i++) { | 158 for (int i = 0; i < nodeFields.length; i++) { |
161 NodeField field = nodeFields[i]; | 159 NodeFieldAccessor field = nodeFields[i]; |
162 if (field.getKind() == NodeFieldKind.DATA) { | 160 if (field.getKind() == NodeFieldKind.DATA) { |
163 Class<?> fieldClass = field.getType(); | 161 Class<?> fieldClass = field.getType(); |
164 long offset = field.getOffset(); | 162 long offset = field.getOffset(); |
165 | 163 |
166 // source sections are not serialized | 164 // source sections are not serialized |
237 } else { | 235 } else { |
238 unsafe.putObject(nodeInstance, offset, null); | 236 unsafe.putObject(nodeInstance, offset, null); |
239 } | 237 } |
240 } | 238 } |
241 | 239 |
242 private void deserializeChildFields(Node parent, NodeField[] nodeFields) { | 240 private void deserializeChildFields(Node parent, NodeFieldAccessor[] nodeFields) { |
243 for (int i = nodeFields.length - 1; i >= 0; i--) { | 241 for (int i = nodeFields.length - 1; i >= 0; i--) { |
244 NodeField field = nodeFields[i]; | 242 NodeFieldAccessor field = nodeFields[i]; |
245 if (field.getKind() == NodeFieldKind.CHILD) { | 243 if (field.getKind() == NodeFieldKind.CHILD) { |
246 unsafe.putObject(parent, field.getOffset(), popNode(parent, field.getType())); | 244 unsafe.putObject(parent, field.getOffset(), popNode(parent, field.getType())); |
247 } | 245 } |
248 } | 246 } |
249 } | 247 } |
250 | 248 |
251 private void deserializeChildrenFields(Node parent, NodeField[] nodeFields) { | 249 private void deserializeChildrenFields(Node parent, NodeFieldAccessor[] nodeFields) { |
252 for (int i = nodeFields.length - 1; i >= 0; i--) { | 250 for (int i = nodeFields.length - 1; i >= 0; i--) { |
253 NodeField field = nodeFields[i]; | 251 NodeFieldAccessor field = nodeFields[i]; |
254 if (field.getKind() == NodeFieldKind.CHILDREN) { | 252 if (field.getKind() == NodeFieldKind.CHILDREN) { |
255 unsafe.putObject(parent, field.getOffset(), popArray(parent, field.getType())); | 253 unsafe.putObject(parent, field.getOffset(), popArray(parent, field.getType())); |
256 } | 254 } |
257 } | 255 } |
258 } | 256 } |