# HG changeset patch # User Michael Van De Vanter # Date 1442862938 25200 # Node ID 526de3af756dc7161213a09482251dc7f506b44b # Parent 59e022cee52919ce71d8748585ceaf59d7b1dd81# Parent 0480c4873a4a8a71250c9570b702cea98ab1c7bc Merge with 0480c4873a4a8a71250c9570b702cea98ab1c7bc diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ArrayTest.java --- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ArrayTest.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ArrayTest.java Mon Sep 21 12:15:38 2015 -0700 @@ -22,6 +22,9 @@ */ package com.oracle.truffle.api.dsl.test; +import org.junit.Assert; +import org.junit.Test; + import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.Truffle; import com.oracle.truffle.api.dsl.ImplicitCast; @@ -36,8 +39,6 @@ import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.RootNode; import com.oracle.truffle.api.nodes.UnexpectedResultException; -import org.junit.Assert; -import org.junit.Test; public class ArrayTest { diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ImplicitCastTest.java --- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ImplicitCastTest.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ImplicitCastTest.java Mon Sep 21 12:15:38 2015 -0700 @@ -22,6 +22,9 @@ */ package com.oracle.truffle.api.dsl.test; +import org.junit.Assert; +import org.junit.Test; + import com.oracle.truffle.api.dsl.ImplicitCast; import com.oracle.truffle.api.dsl.NodeChild; import com.oracle.truffle.api.dsl.NodeChildren; @@ -34,8 +37,6 @@ import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode; import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; import com.oracle.truffle.api.frame.VirtualFrame; -import org.junit.Assert; -import org.junit.Test; public class ImplicitCastTest { diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ShortCircuitTest.java --- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ShortCircuitTest.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ShortCircuitTest.java Mon Sep 21 12:15:38 2015 -0700 @@ -22,6 +22,10 @@ */ package com.oracle.truffle.api.dsl.test; +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.dsl.ImplicitCast; import com.oracle.truffle.api.dsl.NodeChild; @@ -36,8 +40,6 @@ import com.oracle.truffle.api.dsl.test.ShortCircuitTestFactory.VarArgsNodeFactory; import com.oracle.truffle.api.dsl.test.TypeSystemTest.ArgumentNode; import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; -import static org.junit.Assert.assertEquals; -import org.junit.Test; public class ShortCircuitTest { diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/InvokeMemberNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/InvokeMemberNode.java Mon Sep 21 12:15:38 2015 -0700 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2015, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.truffle.api.interop.java; + +import com.oracle.truffle.api.frame.VirtualFrame; +import com.oracle.truffle.api.interop.ForeignAccess; +import com.oracle.truffle.api.nodes.RootNode; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.List; + +final class InvokeMemberNode extends RootNode { + InvokeMemberNode() { + super(JavaInteropLanguage.class, null, null); + } + + @Override + public Object execute(VirtualFrame frame) { + JavaInterop.JavaObject receiver = (JavaInterop.JavaObject) ForeignAccess.getReceiver(frame); + final List args = ForeignAccess.getArguments(frame); + final Object nameOrIndex = args.get(0); + final int argsLength = args.size() - 1; + if (nameOrIndex instanceof Integer) { + throw new IllegalStateException(); + } else { + String name = (String) nameOrIndex; + for (Method m : receiver.clazz.getMethods()) { + final boolean isStatic = (m.getModifiers() & Modifier.STATIC) != 0; + if (isStatic) { + continue; + } + if (m.getName().equals(name) && m.getParameterCount() == argsLength) { + Object[] arr = args.subList(1, args.size()).toArray(); + return JavaFunctionNode.execute(m, receiver.obj, arr); + } + } + throw new IllegalArgumentException(name); + } + } + +} diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaFunctionNode.java --- a/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaFunctionNode.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaFunctionNode.java Mon Sep 21 12:15:38 2015 -0700 @@ -28,6 +28,7 @@ import com.oracle.truffle.api.interop.ForeignAccess; import com.oracle.truffle.api.nodes.RootNode; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.List; final class JavaFunctionNode extends RootNode { @@ -42,15 +43,19 @@ return execute(receiver, args.toArray()); } + static Object execute(JavaInterop.JavaFunctionObject receiver, Object[] args) { + return execute(receiver.method, receiver.obj, args); + } + @SuppressWarnings("paramAssign") - static Object execute(JavaInterop.JavaFunctionObject receiver, Object[] args) { + static Object execute(Method method, Object obj, Object[] args) { for (int i = 0; i < args.length; i++) { if (args[i] instanceof JavaInterop.JavaObject) { args[i] = ((JavaInterop.JavaObject) args[i]).obj; } } try { - Object ret = receiver.method.invoke(receiver.obj, args); + Object ret = method.invoke(obj, args); if (JavaInterop.isPrimitive(ret)) { return ret; } diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaInterop.java --- a/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaInterop.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaInterop.java Mon Sep 21 12:15:38 2015 -0700 @@ -335,21 +335,29 @@ } if (message == null) { - val = message(Message.READ, obj, name); - if (isPrimitive(val)) { - return val; + Object ret; + try { + List callArgs = new ArrayList<>(args.length); + callArgs.add(name); + callArgs.addAll(Arrays.asList(args)); + ret = message(Message.createInvoke(callArgs.size()), obj, callArgs.toArray()); + } catch (IllegalArgumentException ex) { + val = message(Message.READ, obj, name); + if (isPrimitive(val)) { + return val; + } + TruffleObject attr = (TruffleObject) val; + if (Boolean.FALSE.equals(message(Message.IS_EXECUTABLE, attr))) { + if (args.length == 0) { + return toJava(attr, method); + } + throw new IllegalStateException(attr + " cannot be invoked with " + args.length + " parameters"); + } + List callArgs = new ArrayList<>(args.length + 1); + // callArgs.add(attr); + callArgs.addAll(Arrays.asList(args)); + ret = message(Message.createExecute(callArgs.size()), attr, callArgs.toArray()); } - TruffleObject attr = (TruffleObject) val; - if (Boolean.FALSE.equals(message(Message.IS_EXECUTABLE, attr))) { - if (args.length == 0) { - return toJava(attr, method); - } - throw new IllegalStateException(attr + " cannot be invoked with " + args.length + " parameters"); - } - List callArgs = new ArrayList<>(args.length + 1); - // callArgs.add(attr); - callArgs.addAll(Arrays.asList(args)); - Object ret = message(Message.createExecute(callArgs.size()), attr, callArgs.toArray()); return toJava(ret, method); } throw new IllegalStateException("Unknown message: " + message); diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaObjectForeignAccess.java --- a/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaObjectForeignAccess.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaObjectForeignAccess.java Mon Sep 21 12:15:38 2015 -0700 @@ -78,7 +78,7 @@ @Override public CallTarget accessInvoke(int argumentsLength) { - return Truffle.getRuntime().createCallTarget(new JavaObjectMethodNode()); + return Truffle.getRuntime().createCallTarget(new InvokeMemberNode()); } @Override diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Layout.java --- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Layout.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Layout.java Mon Sep 21 12:15:38 2015 -0700 @@ -52,7 +52,7 @@ } /** - * Create a new {@link LayoutBuilder}. + * Creates a new {@link Builder}. */ public static Builder newLayout() { return new Builder(); diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java --- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java Mon Sep 21 12:15:38 2015 -0700 @@ -27,9 +27,9 @@ import java.io.Closeable; import java.io.File; import java.io.IOException; -import java.io.InputStreamReader; +import java.io.InputStream; import java.io.InterruptedIOException; -import java.io.OutputStreamWriter; +import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.lang.reflect.InvocationHandler; @@ -107,9 +107,9 @@ private final Thread initThread; private final Executor executor; private final Map langs; - private final Reader in; - private final Writer err; - private final Writer out; + private final InputStream in; + private final OutputStream err; + private final OutputStream out; private final EventConsumer[] handlers; private final Map globals; private final Instrumenter instrumenter; @@ -133,7 +133,7 @@ /** * Real constructor used from the builder. */ - private TruffleVM(Executor executor, Map globals, Writer out, Writer err, Reader in, EventConsumer[] handlers) { + private TruffleVM(Executor executor, Map globals, OutputStream out, OutputStream err, InputStream in, EventConsumer[] handlers) { this.executor = executor; this.out = out; this.err = err; @@ -155,9 +155,9 @@ * *
      * {@link TruffleVM} vm = {@link TruffleVM}.{@link TruffleVM#newVM() newVM()}
-     *     .{@link Builder#stdOut(java.io.Writer) stdOut}({@link Writer yourWriter})
-     *     .{@link Builder#stdErr(java.io.Writer) stdErr}({@link Writer yourWriter})
-     *     .{@link Builder#stdIn(java.io.Reader) stdIn}({@link Reader yourReader})
+     *     .{@link Builder#setOut(java.io.OutputStream) setOut}({@link OutputStream yourOutput})
+     *     .{@link Builder#setErr(java.io.OutputStream) setrr}({@link OutputStream yourOutput})
+     *     .{@link Builder#setIn(java.io.InputStream) setIn}({@link InputStream yourInput})
      *     .{@link Builder#build() build()};
      * 
* @@ -181,16 +181,16 @@ * *
      * {@link TruffleVM} vm = {@link TruffleVM}.{@link TruffleVM#newVM() newVM()}
-     *     .{@link Builder#stdOut(java.io.Writer) stdOut}({@link Writer yourWriter})
-     *     .{@link Builder#stdErr(java.io.Writer) stdErr}({@link Writer yourWriter})
-     *     .{@link Builder#stdIn(java.io.Reader) stdIn}({@link Reader yourReader})
+     *     .{@link Builder#setOut(java.io.OutputStream) setOut}({@link OutputStream yourOutput})
+     *     .{@link Builder#setErr(java.io.OutputStream) setrr}({@link OutputStream yourOutput})
+     *     .{@link Builder#setIn(java.io.InputStream) setIn}({@link InputStream yourInput})
      *     .{@link Builder#build() build()};
      * 
*/ public final class Builder { - private Writer out; - private Writer err; - private Reader in; + private OutputStream out; + private OutputStream err; + private InputStream in; private final List> handlers = new ArrayList<>(); private final Map globals = new HashMap<>(); private Executor executor; @@ -202,11 +202,20 @@ * Changes the default output for languages running in to be created * {@link TruffleVM virtual machine}. The default is to use {@link System#out}. * - * @param w the writer to use as output + * @param os the stream to use as output * @return instance of this builder */ + public Builder setOut(OutputStream os) { + out = os; + return this; + } + + /** + * @deprecated does nothing + */ + @Deprecated + @SuppressWarnings("unused") public Builder stdOut(Writer w) { - out = w; return this; } @@ -214,23 +223,41 @@ * Changes the error output for languages running in to be created * {@link TruffleVM virtual machine}. The default is to use {@link System#err}. * - * @param w the writer to use as output + * @param os the stream to use as output * @return instance of this builder */ + public Builder setErr(OutputStream os) { + err = os; + return this; + } + + /** + * @deprecated does nothing + */ + @Deprecated + @SuppressWarnings("unused") public Builder stdErr(Writer w) { - err = w; return this; } /** * Changes the default input for languages running in to be created - * {@link TruffleVM virtual machine}. The default is to use {@link System#out}. + * {@link TruffleVM virtual machine}. The default is to use {@link System#in}. * - * @param r the reader to use as input + * @param is the stream to use as input * @return instance of this builder */ + public Builder setIn(InputStream is) { + in = is; + return this; + } + + /** + * @deprecated does nothing + */ + @Deprecated + @SuppressWarnings("unused") public Builder stdIn(Reader r) { - in = r; return this; } @@ -294,13 +321,13 @@ */ public TruffleVM build() { if (out == null) { - out = new OutputStreamWriter(System.out); + out = System.out; } if (err == null) { - err = new OutputStreamWriter(System.err); + err = System.err; } if (in == null) { - in = new InputStreamReader(System.in); + in = System.in; } Executor nonNullExecutor = executor != null ? executor : new Executor() { @Override @@ -862,7 +889,7 @@ } @Override - public Env attachEnv(Object obj, TruffleLanguage language, Writer stdOut, Writer stdErr, Reader stdIn) { + protected Env attachEnv(Object obj, TruffleLanguage language, OutputStream stdOut, OutputStream stdErr, InputStream stdIn) { TruffleVM vm = (TruffleVM) obj; return super.attachEnv(vm, language, stdOut, stdErr, stdIn); } diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api/.checkstyle_checks.xml --- a/truffle/com.oracle.truffle.api/.checkstyle_checks.xml Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api/.checkstyle_checks.xml Mon Sep 21 12:15:38 2015 -0700 @@ -11,6 +11,10 @@ + + + + diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java --- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java Mon Sep 21 12:15:38 2015 -0700 @@ -25,6 +25,10 @@ package com.oracle.truffle.api; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.lang.annotation.ElementType; @@ -325,11 +329,11 @@ private final Object vm; private final TruffleLanguage lang; private final LangCtx langCtx; - private final Reader in; - private final Writer err; - private final Writer out; + private final InputStream in; + private final OutputStream err; + private final OutputStream out; - Env(Object vm, TruffleLanguage lang, Writer out, Writer err, Reader in) { + Env(Object vm, TruffleLanguage lang, OutputStream out, OutputStream err, InputStream in) { this.vm = vm; this.in = in; this.err = err; @@ -357,8 +361,13 @@ * * @return reader, never null */ + public InputStream in() { + return in; + } + + @Deprecated public Reader stdIn() { - return in; + return new InputStreamReader(in); } /** @@ -367,8 +376,13 @@ * * @return writer, never null */ + public OutputStream out() { + return out; + } + + @Deprecated public Writer stdOut() { - return out; + return new OutputStreamWriter(out); } /** @@ -377,8 +391,13 @@ * * @return writer, never null */ + public OutputStream err() { + return err; + } + + @Deprecated public Writer stdErr() { - return err; + return new OutputStreamWriter(err); } } @@ -387,7 +406,7 @@ @SuppressWarnings("rawtypes") private static final class AccessAPI extends Accessor { @Override - protected Env attachEnv(Object vm, TruffleLanguage language, Writer stdOut, Writer stdErr, Reader stdIn) { + protected Env attachEnv(Object vm, TruffleLanguage language, OutputStream stdOut, OutputStream stdErr, InputStream stdIn) { Env env = new Env(vm, language, stdOut, stdErr, stdIn); return env; } diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java --- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java Mon Sep 21 12:15:38 2015 -0700 @@ -26,8 +26,8 @@ import java.io.Closeable; import java.io.IOException; -import java.io.Reader; -import java.io.Writer; +import java.io.InputStream; +import java.io.OutputStream; import java.lang.ref.Reference; import java.lang.ref.WeakReference; @@ -44,9 +44,9 @@ import com.oracle.truffle.api.instrument.AdvancedInstrumentRootFactory; import com.oracle.truffle.api.instrument.Instrumenter; import com.oracle.truffle.api.instrument.Probe; -import com.oracle.truffle.api.instrument.WrapperNode; import com.oracle.truffle.api.instrument.ToolSupportProvider; import com.oracle.truffle.api.instrument.Visualizer; +import com.oracle.truffle.api.instrument.WrapperNode; import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.RootNode; import com.oracle.truffle.api.source.Source; @@ -185,7 +185,7 @@ } } - protected Env attachEnv(Object vm, TruffleLanguage language, Writer stdOut, Writer stdErr, Reader stdIn) { + protected Env attachEnv(Object vm, TruffleLanguage language, OutputStream stdOut, OutputStream stdErr, InputStream stdIn) { return API.attachEnv(vm, language, stdOut, stdErr, stdIn); } diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTestRunner.java --- a/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTestRunner.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTestRunner.java Mon Sep 21 12:15:38 2015 -0700 @@ -45,13 +45,12 @@ import com.oracle.truffle.sl.SLLanguage; import com.oracle.truffle.sl.builtins.SLBuiltinNode; import com.oracle.truffle.sl.test.SLTestRunner.TestCase; -import java.io.BufferedReader; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; -import java.io.StringReader; import java.net.URL; import java.nio.charset.Charset; import java.nio.file.FileSystems; @@ -229,14 +228,15 @@ notifier.fireTestStarted(testCase.name); ByteArrayOutputStream out = new ByteArrayOutputStream(); - PrintWriter printer = new PrintWriter(out); try { - TruffleVM vm = TruffleVM.newVM().stdIn(new BufferedReader(new StringReader(repeat(testCase.testInput, repeats)))).stdOut(printer).build(); + TruffleVM vm = TruffleVM.newVM().setIn(new ByteArrayInputStream(repeat(testCase.testInput, repeats).getBytes("UTF-8"))).setOut(out).build(); String script = readAllLines(testCase.path); - SLLanguage.run(vm, testCase.path, null, printer, repeats, builtins); + PrintWriter printer = new PrintWriter(out); + SLLanguage.run(vm, testCase.path, null, printer, repeats, builtins); printer.flush(); + String actualOutput = new String(out.toByteArray()); Assert.assertEquals(script, repeat(testCase.expectedOutput, repeats), actualOutput); } catch (Throwable ex) { diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/instrument/SLInstrumentTestRunner.java --- a/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/instrument/SLInstrumentTestRunner.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/instrument/SLInstrumentTestRunner.java Mon Sep 21 12:15:38 2015 -0700 @@ -40,12 +40,11 @@ */ package com.oracle.truffle.sl.test.instrument; -import java.io.BufferedReader; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringReader; +import java.io.PrintStream; import java.lang.reflect.Field; import java.nio.charset.Charset; import java.nio.file.FileSystems; @@ -234,14 +233,14 @@ notifier.fireTestStarted(testCase.name); ByteArrayOutputStream out = new ByteArrayOutputStream(); - PrintWriter printer = new PrintWriter(out); + PrintStream ps = new PrintStream(out); final ASTProber prober = new SLStandardASTProber(); try { // We use the name of the file to determine what visitor to attach to it. if (testCase.baseName.endsWith(ASSIGNMENT_VALUE_SUFFIX)) { // Set up the execution context for Simple and register our two listeners - TruffleVM vm = TruffleVM.newVM().stdIn(new BufferedReader(new StringReader(testCase.testInput))).stdOut(printer).build(); + TruffleVM vm = TruffleVM.newVM().setIn(new ByteArrayInputStream(testCase.testInput.getBytes("UTF-8"))).setOut(out).build(); final Field field = TruffleVM.class.getDeclaredField("instrumenter"); field.setAccessible(true); @@ -253,7 +252,7 @@ // Attach an instrument to every probe tagged as an assignment for (Probe probe : instrumenter.findProbesTaggedAs(StandardSyntaxTag.ASSIGNMENT)) { - SLPrintAssigmentValueListener slPrintAssigmentValueListener = new SLPrintAssigmentValueListener(printer); + SLPrintAssigmentValueListener slPrintAssigmentValueListener = new SLPrintAssigmentValueListener(ps); instrumenter.attach(probe, slPrintAssigmentValueListener, "SL print assignment value"); } @@ -262,8 +261,7 @@ } else { notifier.fireTestFailure(new Failure(testCase.name, new UnsupportedOperationException("No instrumentation found."))); } - - printer.flush(); + ps.flush(); String actualOutput = new String(out.toByteArray()); Assert.assertEquals(testCase.expectedOutput, actualOutput); } catch (Throwable ex) { @@ -307,15 +305,14 @@ /** * This sample listener provides prints the value of an assignment (after the assignment is - * complete) to the {@link PrintWriter} specified in the constructor. This listener can only be + * complete) to the {@link PrintStream} specified in the constructor. This listener can only be * attached at {@link SLWriteLocalVariableNode}, but provides no guards to protect it from being * attached elsewhere. */ public final class SLPrintAssigmentValueListener extends DefaultSimpleInstrumentListener { + private final PrintStream output; - private PrintWriter output; - - public SLPrintAssigmentValueListener(PrintWriter output) { + public SLPrintAssigmentValueListener(PrintStream output) { this.output = output; } diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.sl/.checkstyle_checks.xml --- a/truffle/com.oracle.truffle.sl/.checkstyle_checks.xml Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.sl/.checkstyle_checks.xml Mon Sep 21 12:15:38 2015 -0700 @@ -11,6 +11,10 @@ + + + + diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java --- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java Mon Sep 21 12:15:38 2015 -0700 @@ -211,7 +211,9 @@ @Override protected SLContext createContext(Env env) { - SLContext context = new SLContext(this, new BufferedReader(env.stdIn()), new PrintWriter(env.stdOut(), true)); + final BufferedReader in = new BufferedReader(new InputStreamReader(env.in())); + final PrintWriter out = new PrintWriter(env.out(), true); + SLContext context = new SLContext(this, in, out); for (NodeFactory builtin : builtins) { context.installBuiltin(builtin, true); } diff -r 59e022cee529 -r 526de3af756d truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java --- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java Sun Sep 20 17:19:59 2015 -0700 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java Mon Sep 21 12:15:38 2015 -0700 @@ -111,7 +111,7 @@ @Override public CallTarget accessInvoke(int argumentsLength) { - throw new UnsupportedOperationException(); + return null; } @Override