diff truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/Message.java @ 22108:f84a7663966d

Adding Message.createNew into standard interop messages so languages like Ruby and Java can use 'new' to instantiate Java classes.
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Wed, 26 Aug 2015 12:51:55 +0200
parents 3b2ae36a942f
children e70b20f4bb00
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/Message.java	Tue Aug 25 15:10:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/Message.java	Wed Aug 26 12:51:55 2015 +0200
@@ -68,7 +68,7 @@
      * @return execute message
      */
     public static Message createExecute(int argumentsLength) {
-        return Execute.create(false, argumentsLength);
+        return Execute.create(Execute.EXECUTE, argumentsLength);
     }
 
     /**
@@ -89,7 +89,21 @@
      * @return read & execute message
      */
     public static Message createInvoke(int argumentsLength) {
-        return Execute.create(true, argumentsLength);
+        return Execute.create(Execute.INVOKE, argumentsLength);
+    }
+
+    /**
+     * Creates an allocation message. All messages created by this method are
+     * {@link Object#equals(java.lang.Object) equal} to each other regardless of the value of
+     * <code>argumentsLength</code>. The expected behavior of this message is to allocate a new
+     * instance of the {@link ForeignAccess#getReceiver(com.oracle.truffle.api.frame.Frame)
+     * receiver} and then perform its constructor with appropriate number of arguments.
+     *
+     * @param argumentsLength number of parameters to pass to the target
+     * @return read & execute message
+     */
+    public static Message createNew(int argumentsLength) {
+        return Execute.create(Execute.NEW, argumentsLength);
     }
 
     /**