diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguageImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguageImpl.java index e47345b70469600ebcdec25fe2fafa178f3a8977..e84096fba53c49263117a1cf1e4ec25ff356c8b1 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguageImpl.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguageImpl.java @@ -217,12 +217,6 @@ public final class TruffleRLanguageImpl extends TruffleRLanguage { } } - @Override - protected Object getLanguageGlobal(RContext context) { - // TODO: what's the meaning of "language global" for R? - return null; - } - public static RContext getCurrentContext() { return TruffleLanguage.getCurrentContext(TruffleRLanguage.class); } diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ListMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ListMR.java index 8110560bfac52c394462ba63cd59e850d0dc5aa3..17611a0c03a3d658dd229a03d5ae8dcd4802f329 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ListMR.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ListMR.java @@ -29,7 +29,6 @@ import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.frame.VirtualFrame; import com.oracle.truffle.api.interop.CanResolve; import com.oracle.truffle.api.interop.KeyInfo; -import com.oracle.truffle.api.interop.KeyInfo.Builder; import com.oracle.truffle.api.interop.MessageResolution; import com.oracle.truffle.api.interop.Resolve; import com.oracle.truffle.api.interop.TruffleObject; @@ -476,9 +475,11 @@ public class ListMR { } private static int buildKeys(Object value) { - Builder builder = KeyInfo.newBuilder(); - builder.setReadable(true).setWritable(true).setInvocable(value instanceof RFunction); - return builder.build(); + int result = KeyInfo.READABLE | KeyInfo.MODIFIABLE; + if (value instanceof RFunction) { + result |= KeyInfo.INVOCABLE; + } + return result; } private void initExtractNode() { diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java index 71f967bff098ada7715caa6243e63e75a9ebe3b9..fec7058df22ad8468e976f936a6f47c9800735cf 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java @@ -280,9 +280,7 @@ public final class RAbstractVectorAccessFactory implements StandardFactory { if (unknownIdentifier.profile(idx < 0 || idx >= lengthNode.executeInteger(receiver))) { return 0; } - KeyInfo.Builder builder = KeyInfo.newBuilder(); - builder.setReadable(true).setWritable(true); - return builder.build(); + return KeyInfo.READABLE | KeyInfo.MODIFIABLE; } @Fallback diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java index 41d74de381bcf61c03a5c62e0c39dd70db9be2e3..70ef6ffa40537c3da3e8c414ec9d3bbf7fc9aa4d 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java @@ -193,9 +193,8 @@ public class RArgsValuesAndNamesMR { } private static Object createKeyInfo(RArgsValuesAndNames receiver, int idx) { - KeyInfo.Builder builder = KeyInfo.newBuilder(); - builder.setReadable(true).setInvocable(receiver.getArgument(idx) instanceof RFunction); - return builder.build(); + int invocable = receiver.getArgument(idx) instanceof RFunction ? KeyInfo.INVOCABLE : 0; + return KeyInfo.READABLE | invocable; } @Fallback diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/REnvironmentMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/REnvironmentMR.java index 31246b547d4d2212875d1cba32709e9e2974ddd8..f53da4a554de3776f26857d0dbc47ace227c45ba 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/REnvironmentMR.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/REnvironmentMR.java @@ -29,7 +29,6 @@ import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.frame.VirtualFrame; import com.oracle.truffle.api.interop.CanResolve; import com.oracle.truffle.api.interop.KeyInfo; -import com.oracle.truffle.api.interop.KeyInfo.Builder; import com.oracle.truffle.api.interop.Message; import com.oracle.truffle.api.interop.MessageResolution; import com.oracle.truffle.api.interop.Resolve; @@ -212,13 +211,14 @@ public class REnvironmentMR { if (val == null) { return 0; } - Builder builder = KeyInfo.newBuilder(); - builder.setReadable(true); + int result = KeyInfo.READABLE; if (!receiver.isLocked() && !receiver.bindingIsLocked(identifier)) { - builder.setWritable(true); + result |= KeyInfo.MODIFIABLE; } - builder.setInvocable(val instanceof RFunction); - return builder.build(); + if (val instanceof RFunction) { + result |= KeyInfo.INVOCABLE; + } + return result; } @Fallback diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RLanguageMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RLanguageMR.java index 5861a235f3f7bbd3fd09d4d03f0a6204d9238524..d6f5b6b3f83dffb8e9d5df41452b598bc5e9a25f 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RLanguageMR.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RLanguageMR.java @@ -155,11 +155,8 @@ public class RLanguageMR { if (unknownIdentifier.profile(idx < 0 || idx >= receiver.getLength())) { return 0; } - - KeyInfo.Builder builder = KeyInfo.newBuilder(); - builder.setReadable(true); // TODO what about writeble/invocable/... - return builder.build(); + return KeyInfo.READABLE; } @Fallback diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java index 07fa19481efe5bd0ae7cd5977d436cb271a25ae3..9d5d4578293e1b7122d8786eb7d05ff8089f87b3 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java @@ -172,9 +172,9 @@ public class RPromiseMR { @Specialization protected Object access(@SuppressWarnings("unused") RPromise receiver, String identifier) { if (PROP_EXPR.equals(identifier) || PROP_VALUE.equals(identifier)) { - return KeyInfo.newBuilder().setReadable(true).build(); + return KeyInfo.READABLE; } else if (PROP_IS_EVALUATED.equals(identifier)) { - return KeyInfo.newBuilder().setReadable(true).setWritable(true).build(); + return KeyInfo.READABLE | KeyInfo.MODIFIABLE; } else { return 0; } diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RS4ObjectMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RS4ObjectMR.java index ff7122e0faae9b8585bc6caff38f9e84561ca89e..db48f8916a19b9ea45d0a58226ddf320ad34f638 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RS4ObjectMR.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RS4ObjectMR.java @@ -28,7 +28,6 @@ import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.interop.CanResolve; import com.oracle.truffle.api.interop.KeyInfo; -import com.oracle.truffle.api.interop.KeyInfo.Builder; import com.oracle.truffle.api.interop.Message; import com.oracle.truffle.api.interop.MessageResolution; import com.oracle.truffle.api.interop.Resolve; @@ -233,10 +232,9 @@ public class RS4ObjectMR { CompilerDirectives.transferToInterpreterAndInvalidate(); getAttributeNode = insert(GetAttributeNode.create()); } - Builder builder = KeyInfo.newBuilder(); - builder.setReadable(true).setWritable(!identifier.equals("class")); - builder.setInvocable(getAttributeNode.execute(receiver, identifier) instanceof RFunction); - return builder.build(); + int writeable = !identifier.equals("class") ? KeyInfo.MODIFIABLE : 0; + int executable = getAttributeNode.execute(receiver, identifier) instanceof RFunction ? KeyInfo.INVOCABLE : 0; + return KeyInfo.READABLE | writeable | executable; } protected static ArrayAttributeNode createArrayAttributeNode() { diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java index cb2d3141e1525acdea87c27561bcf6c0a0b3ff56..6f7f5c8e225d06648bc00b9ce41cbb411be430db 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,6 @@ import com.oracle.truffle.api.frame.Frame; import com.oracle.truffle.api.frame.MaterializedFrame; import com.oracle.truffle.api.interop.ForeignAccess; import com.oracle.truffle.api.interop.KeyInfo; -import com.oracle.truffle.api.interop.KeyInfo.Builder; import com.oracle.truffle.api.interop.Message; import com.oracle.truffle.api.interop.MessageResolution; import com.oracle.truffle.api.interop.Resolve; @@ -236,16 +235,14 @@ public final class RScope { public abstract static class VarMapsKeyInfoNode extends Node { protected Object access(VariablesObject receiver, String identifier) { - Builder builder = KeyInfo.newBuilder(); - builder.setReadable(true); - + int result = KeyInfo.READABLE; if (!receiver.frameAccess.bindingIsLocked(identifier)) { - builder.setWritable(true); + result |= KeyInfo.MODIFIABLE; } if (receiver.frameAccess.get(identifier) instanceof RFunction) { - builder.setInvocable(true); + result |= KeyInfo.INVOCABLE; } - return builder.build(); + return result; } } @@ -356,8 +353,7 @@ public final class RScope { @Resolve(message = "HAS_SIZE") abstract static class ArgNamesHasSizeNode extends Node { - @SuppressWarnings("unused") - public Object access(ArgumentNamesObject varNames) { + public Object access(@SuppressWarnings("unused") ArgumentNamesObject varNames) { return true; } }