@SuppressWarnings("deprecation") private static Iterable<com.oracle.truffle.api.nodes.NodeFieldAccessor> findNodeFields(NodeClass nodeClass) { return Arrays.asList(nodeClass.getFields()); }
private static void updateRootImpl(SpecializationNode start, Node node) { NodeFieldAccessor[] fields = NodeClass.get(start).getFields(); for (int i = fields.length - 1; i >= 0; i--) { NodeFieldAccessor f = fields[i]; if (f.getName().equals("root")) { f.putObject(start, node); break; } } if (start.next != null) { updateRootImpl(start.next, node); } }
private static LinkedHashMap<String, Node> findNamedNodeChildren(Node node) { LinkedHashMap<String, Node> nodes = new LinkedHashMap<>(); NodeClass nodeClass = node.getNodeClass(); for (NodeFieldAccessor field : nodeClass.getFields()) { NodeFieldKind kind = field.getKind(); if (kind == NodeFieldKind.CHILD || kind == NodeFieldKind.CHILDREN) { Object value = field.loadValue(node); if (value != null) { if (kind == NodeFieldKind.CHILD) { nodes.put(field.getName(), (Node) value); } else if (kind == NodeFieldKind.CHILDREN) { Object[] children = (Object[]) value; for (int i = 0; i < children.length; i++) { if (children[i] != null) { nodes.put(field.getName() + "[" + i + "]", (Node) children[i]); } } } } } } return nodes; }
private Node invokeDeserialize(VariableLengthIntBuffer buffer, Class<? extends Node> nodeClass) throws UnsupportedConstantPoolTypeException { if (nodeClass == null) { return null; } Object object; try { object = unsafe.allocateInstance(nodeClass); } catch (InstantiationException e) { throw new RuntimeException("Unable to allocate truffle node " + nodeClass, e); } if (!(object instanceof Node)) { throw new RuntimeException("Class is not a truffle node " + nodeClass); } Node node = (Node) object; NodeFieldAccessor[] nodeFields = NodeClass.get(nodeClass).getFields(); deserializeChildrenFields(node, nodeFields); deserializeChildFields(node, nodeFields); deserializeDataFields(buffer, node, nodeFields); return node; }
private void serialize(VariableLengthIntBuffer buffer, Node node) throws UnsupportedConstantPoolTypeException { if (node == null) { buffer.put(VariableLengthIntBuffer.NULL); return; } Class<? extends Node> nodeClass = node.getClass(); NodeFieldAccessor[] nodeFields = NodeClass.get(nodeClass).getFields(); serializeChildFields(buffer, node, nodeFields); serializeChildrenFields(buffer, node, nodeFields); buffer.put(cp.putClass(node.getClass())); serializeDataFields(buffer, node, nodeFields); }
String sep = ""; p.print("("); for (NodeFieldAccessor field : NodeClass.get(node).getFields()) { if (field.getKind() == NodeFieldKind.CHILD || field.getKind() == NodeFieldKind.CHILDREN) { childFields.add(field);
@SuppressWarnings("deprecation") private String getFieldName(Node parent, Node node) { for (com.oracle.truffle.api.nodes.NodeFieldAccessor field : NodeClass.get(parent).getFields()) { Object value = field.loadValue(parent); if (value == node) { return field.getName(); } else if (value instanceof Node[]) { int index = 0; for (Node arrayNode : (Node[]) value) { if (arrayNode == node) { return field.getName() + "[" + index + "]"; } index++; } } } return "unknownField"; }
/** * Finds the field in a parent node, if any, that holds a specified child node. * * @return the field (possibly an array) holding the child, {@code null} if not found. * @since 0.8 or earlier */ @SuppressWarnings("deprecation") @Deprecated public static NodeFieldAccessor findChildField(Node parent, Node child) { assert child != null; NodeClass parentNodeClass = parent.getNodeClass(); for (NodeFieldAccessor field : parentNodeClass.getFields()) { if (field.getKind() == NodeFieldAccessor.NodeFieldKind.CHILD) { if (field.getObject(parent) == child) { return field; } } else if (field.getKind() == NodeFieldAccessor.NodeFieldKind.CHILDREN) { Object arrayObject = field.getObject(parent); if (arrayObject != null) { Object[] array = (Object[]) arrayObject; for (int i = 0; i < array.length; i++) { if (array[i] == child) { return field; } } } } } return null; }
/** * Finds the field in a parent node, if any, that holds a specified child node. * * @return the field (possibly an array) holding the child, {@code null} if not found. * @since 0.8 or earlier */ @SuppressWarnings("deprecation") @Deprecated public static NodeFieldAccessor findChildField(Node parent, Node child) { assert child != null; NodeClass parentNodeClass = parent.getNodeClass(); for (NodeFieldAccessor field : parentNodeClass.getFields()) { if (field.getKind() == NodeFieldAccessor.NodeFieldKind.CHILD) { if (field.getObject(parent) == child) { return field; } } else if (field.getKind() == NodeFieldAccessor.NodeFieldKind.CHILDREN) { Object arrayObject = field.getObject(parent); if (arrayObject != null) { Object[] array = (Object[]) arrayObject; for (int i = 0; i < array.length; i++) { if (array[i] == child) { return field; } } } } } return null; }
for (NodeFieldAccessor field : NodeClass.get(node).getFields()) { if (field.getKind() == NodeFieldKind.CHILD || field.getKind() == NodeFieldKind.CHILDREN) { childFields.add(field);
private void readNodeProperties(Node node) { NodeFieldAccessor[] fields = node.getNodeClass().getFields(); for (NodeFieldAccessor field : fields) { if (field.getKind() == NodeFieldKind.DATA) { String key = field.getName(); if (getPropertyElement(node, key) == null) { Object value = field.loadValue(node); setNodeProperty(node, key, value); } } } }
private static String getNodeFieldName(Node parent, Node node, String defaultName) { NodeFieldAccessor[] fields = parent.getNodeClass().getFields(); for (NodeFieldAccessor field : fields) { Object value = field.loadValue(parent); if (field.getKind() == NodeFieldKind.CHILD && value == node) { return field.getName(); } else if (field.getKind() == NodeFieldKind.CHILDREN) { int index = 0; for (Object arrayNode : (Object[]) value) { if (arrayNode == node) { return field.getName() + "[" + index + "]"; } index++; } } } return defaultName; }
for (com.oracle.truffle.api.nodes.NodeFieldAccessor accessor : nodeClass.getFields()) { Field field; try {