# HG changeset patch # User Christian Wirth # Date 1405588411 -7200 # Node ID 45fff0246a4389ca3523d1ef8d4016f1ca5a2355 # Parent 62773598c55d320cd022fc2047cfac9c399ab91a extract methods in (de)serializer diff -r 62773598c55d -r 45fff0246a43 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderDeserializer.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderDeserializer.java Thu Jul 17 11:05:11 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderDeserializer.java Thu Jul 17 11:13:31 2014 +0200 @@ -171,66 +171,74 @@ int cpi = buffer.get(); if (cpi == VariableLengthIntBuffer.NULL) { - if (fieldClass == int.class) { - unsafe.putInt(nodeInstance, offset, 0); - } else if (fieldClass == long.class) { - unsafe.putLong(nodeInstance, offset, 0L); - } else if (fieldClass == float.class) { - unsafe.putFloat(nodeInstance, offset, 0.0F); - } else if (fieldClass == double.class) { - unsafe.putDouble(nodeInstance, offset, 0.0D); - } else if (fieldClass == byte.class) { - unsafe.putByte(nodeInstance, offset, (byte) 0); - } else if (fieldClass == short.class) { - unsafe.putShort(nodeInstance, offset, (short) 0); - } else if (fieldClass == char.class) { - unsafe.putChar(nodeInstance, offset, (char) 0); - } else if (fieldClass == boolean.class) { - unsafe.putBoolean(nodeInstance, offset, false); - } else { - unsafe.putObject(nodeInstance, offset, null); - } + deserializeDataFieldsLengthNull(nodeInstance, fieldClass, offset); } else { - if (fieldClass == int.class) { - unsafe.putInt(nodeInstance, offset, cp.getInt(cpi)); - } else if (fieldClass == long.class) { - unsafe.putLong(nodeInstance, offset, cp.getLong(cpi)); - } else if (fieldClass == float.class) { - unsafe.putFloat(nodeInstance, offset, cp.getFloat(cpi)); - } else if (fieldClass == double.class) { - unsafe.putDouble(nodeInstance, offset, cp.getDouble(cpi)); - } else if (fieldClass == byte.class) { - unsafe.putByte(nodeInstance, offset, (byte) cp.getInt(cpi)); - } else if (fieldClass == short.class) { - unsafe.putShort(nodeInstance, offset, (short) cp.getInt(cpi)); - } else if (fieldClass == char.class) { - unsafe.putChar(nodeInstance, offset, (char) cp.getInt(cpi)); - } else if (fieldClass == boolean.class) { - unsafe.putBoolean(nodeInstance, offset, cp.getInt(cpi) == 1 ? true : false); - } else if (fieldClass == Integer.class) { - unsafe.putObject(nodeInstance, offset, cp.getInt(cpi)); - } else if (fieldClass == Long.class) { - unsafe.putObject(nodeInstance, offset, cp.getLong(cpi)); - } else if (fieldClass == Float.class) { - unsafe.putObject(nodeInstance, offset, cp.getFloat(cpi)); - } else if (fieldClass == Double.class) { - unsafe.putObject(nodeInstance, offset, cp.getDouble(cpi)); - } else if (fieldClass == Byte.class) { - unsafe.putObject(nodeInstance, offset, (byte) cp.getInt(cpi)); - } else if (fieldClass == Short.class) { - unsafe.putObject(nodeInstance, offset, (short) cp.getInt(cpi)); - } else if (fieldClass == Character.class) { - unsafe.putObject(nodeInstance, offset, (char) cp.getInt(cpi)); - } else if (fieldClass == Boolean.class) { - unsafe.putObject(nodeInstance, offset, cp.getInt(cpi) == 1 ? Boolean.TRUE : Boolean.FALSE); - } else { - unsafe.putObject(nodeInstance, offset, cp.getObject(fieldClass, cpi)); - } + deserializeDataFieldsDefault(nodeInstance, fieldClass, offset, cpi); } } } } + private void deserializeDataFieldsDefault(Node nodeInstance, Class fieldClass, long offset, int cpi) { + if (fieldClass == int.class) { + unsafe.putInt(nodeInstance, offset, cp.getInt(cpi)); + } else if (fieldClass == long.class) { + unsafe.putLong(nodeInstance, offset, cp.getLong(cpi)); + } else if (fieldClass == float.class) { + unsafe.putFloat(nodeInstance, offset, cp.getFloat(cpi)); + } else if (fieldClass == double.class) { + unsafe.putDouble(nodeInstance, offset, cp.getDouble(cpi)); + } else if (fieldClass == byte.class) { + unsafe.putByte(nodeInstance, offset, (byte) cp.getInt(cpi)); + } else if (fieldClass == short.class) { + unsafe.putShort(nodeInstance, offset, (short) cp.getInt(cpi)); + } else if (fieldClass == char.class) { + unsafe.putChar(nodeInstance, offset, (char) cp.getInt(cpi)); + } else if (fieldClass == boolean.class) { + unsafe.putBoolean(nodeInstance, offset, cp.getInt(cpi) == 1 ? true : false); + } else if (fieldClass == Integer.class) { + unsafe.putObject(nodeInstance, offset, cp.getInt(cpi)); + } else if (fieldClass == Long.class) { + unsafe.putObject(nodeInstance, offset, cp.getLong(cpi)); + } else if (fieldClass == Float.class) { + unsafe.putObject(nodeInstance, offset, cp.getFloat(cpi)); + } else if (fieldClass == Double.class) { + unsafe.putObject(nodeInstance, offset, cp.getDouble(cpi)); + } else if (fieldClass == Byte.class) { + unsafe.putObject(nodeInstance, offset, (byte) cp.getInt(cpi)); + } else if (fieldClass == Short.class) { + unsafe.putObject(nodeInstance, offset, (short) cp.getInt(cpi)); + } else if (fieldClass == Character.class) { + unsafe.putObject(nodeInstance, offset, (char) cp.getInt(cpi)); + } else if (fieldClass == Boolean.class) { + unsafe.putObject(nodeInstance, offset, cp.getInt(cpi) == 1 ? Boolean.TRUE : Boolean.FALSE); + } else { + unsafe.putObject(nodeInstance, offset, cp.getObject(fieldClass, cpi)); + } + } + + private static void deserializeDataFieldsLengthNull(Node nodeInstance, Class fieldClass, long offset) { + if (fieldClass == int.class) { + unsafe.putInt(nodeInstance, offset, 0); + } else if (fieldClass == long.class) { + unsafe.putLong(nodeInstance, offset, 0L); + } else if (fieldClass == float.class) { + unsafe.putFloat(nodeInstance, offset, 0.0F); + } else if (fieldClass == double.class) { + unsafe.putDouble(nodeInstance, offset, 0.0D); + } else if (fieldClass == byte.class) { + unsafe.putByte(nodeInstance, offset, (byte) 0); + } else if (fieldClass == short.class) { + unsafe.putShort(nodeInstance, offset, (short) 0); + } else if (fieldClass == char.class) { + unsafe.putChar(nodeInstance, offset, (char) 0); + } else if (fieldClass == boolean.class) { + unsafe.putBoolean(nodeInstance, offset, false); + } else { + unsafe.putObject(nodeInstance, offset, null); + } + } + private void deserializeChildFields(Node parent, NodeField[] nodeFields) { for (int i = nodeFields.length - 1; i >= 0; i--) { NodeField field = nodeFields[i]; diff -r 62773598c55d -r 45fff0246a43 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderSerializer.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderSerializer.java Thu Jul 17 11:05:11 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderSerializer.java Thu Jul 17 11:13:31 2014 +0200 @@ -115,28 +115,7 @@ } else if (fieldClass == boolean.class) { cpi = cp.putInt(unsafe.getBoolean(node, offset) ? 1 : 0); } else { - Object value = unsafe.getObject(node, offset); - if (value == null) { - cpi = VariableLengthIntBuffer.NULL; - } else if (fieldClass == Integer.class) { - cpi = cp.putInt((Integer) value); - } else if (fieldClass == Long.class) { - cpi = cp.putLong((Long) value); - } else if (fieldClass == Float.class) { - cpi = cp.putFloat((Float) value); - } else if (fieldClass == Double.class) { - cpi = cp.putDouble((Double) value); - } else if (fieldClass == Byte.class) { - cpi = cp.putInt((Byte) value); - } else if (fieldClass == Short.class) { - cpi = cp.putInt((Short) value); - } else if (fieldClass == Character.class) { - cpi = cp.putInt((Character) value); - } else if (fieldClass == Boolean.class) { - cpi = cp.putInt((Boolean) value ? 1 : 0); - } else { - cpi = cp.putObject(fieldClass, value); - } + cpi = serializeDataFieldsObject(node, fieldClass, offset); } buffer.put(cpi); @@ -144,6 +123,31 @@ } } + private int serializeDataFieldsObject(Node node, Class fieldClass, long offset) { + Object value = unsafe.getObject(node, offset); + if (value == null) { + return VariableLengthIntBuffer.NULL; + } else if (fieldClass == Integer.class) { + return cp.putInt((Integer) value); + } else if (fieldClass == Long.class) { + return cp.putLong((Long) value); + } else if (fieldClass == Float.class) { + return cp.putFloat((Float) value); + } else if (fieldClass == Double.class) { + return cp.putDouble((Double) value); + } else if (fieldClass == Byte.class) { + return cp.putInt((Byte) value); + } else if (fieldClass == Short.class) { + return cp.putInt((Short) value); + } else if (fieldClass == Character.class) { + return cp.putInt((Character) value); + } else if (fieldClass == Boolean.class) { + return cp.putInt((Boolean) value ? 1 : 0); + } else { + return cp.putObject(fieldClass, value); + } + } + private void serializeChildrenFields(VariableLengthIntBuffer buffer, Node nodeInstance, NodeField[] nodeFields) throws UnsupportedConstantPoolTypeException { for (int i = 0; i < nodeFields.length; i++) { NodeField field = nodeFields[i];