From 725a15eb1999fb7ffe02e7ab1222726049b0a69c Mon Sep 17 00:00:00 2001
From: Mick Jordan <mick.jordan@oracle.com>
Date: Wed, 20 May 2015 07:48:07 -0700
Subject: [PATCH] add par arg to fastr_context.eval

---
 .../library/fastr/src/NAMESPACE               |  1 +
 .../library/fastr/src/R/fastr.R               |  8 +++++--
 .../r/nodes/builtin/fastr/FastRContext.java   | 24 ++++++++++---------
 .../builtin/fastr/FastRFunctionEntry.java     |  2 +-
 4 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/com.oracle.truffle.r.native/library/fastr/src/NAMESPACE b/com.oracle.truffle.r.native/library/fastr/src/NAMESPACE
index 01b28ca472..f0650d3e3d 100644
--- a/com.oracle.truffle.r.native/library/fastr/src/NAMESPACE
+++ b/com.oracle.truffle.r.native/library/fastr/src/NAMESPACE
@@ -14,4 +14,5 @@ export(fastr.createpkgsources)
 export(fastr.createpkgsource)
 export(fastr_context.create)
 export(fastr_context.eval)
+export(fastr_context.pareval)
 export(print.fastr_context)
diff --git a/com.oracle.truffle.r.native/library/fastr/src/R/fastr.R b/com.oracle.truffle.r.native/library/fastr/src/R/fastr.R
index 43f9187ceb..e1ef3952f4 100644
--- a/com.oracle.truffle.r.native/library/fastr/src/R/fastr.R
+++ b/com.oracle.truffle.r.native/library/fastr/src/R/fastr.R
@@ -82,10 +82,14 @@ print.fastr_context <- function(context, ...) {
 	invisible(context)
 }
 
-fastr_context.eval <- function(context, expr) {
-	.FastR(.NAME="context.eval", context, expr)
+fastr_context.eval <- function(contexts, exprs, par=FALSE) {
+	.FastR(.NAME="context.eval", contexts, exprs, par)
 	invisible(NULL)
 }
 
+fastr_context.pareval <- function(contexts, exprs) {
+	fastr_context.eval(contexts, exprs, par=TRUE)
+}
+
 
 
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRContext.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRContext.java
index ca6b728781..0b95731c2e 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRContext.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRContext.java
@@ -53,20 +53,12 @@ public class FastRContext {
         }
     }
 
-    static void eval(RIntVector contexts, RStringVector exprs) {
-        if (contexts.getLength() == 1) {
-            RContext context = checkContext(contexts.getDataAt(0));
-            try {
-                context.activate();
-                context.getThisEngine().parseAndEval(Source.fromText(exprs.getDataAt(0), "<eval_input>"), true, false);
-            } finally {
-                context.destroy();
-            }
-        } else {
+    static void eval(RIntVector contexts, RStringVector exprs, boolean par) {
+        if (par) {
             RContext.EvalThread[] threads = new RContext.EvalThread[contexts.getLength()];
             for (int i = 0; i < threads.length; i++) {
                 RContext context = checkContext(contexts.getDataAt(i));
-                threads[i] = new RContext.EvalThread(context, Source.fromText(exprs.getDataAt(i % threads.length), "context_eval"));
+                threads[i] = new RContext.EvalThread(context, Source.fromText(exprs.getDataAt(i % threads.length), "<context_eval>"));
             }
             for (int i = 0; i < threads.length; i++) {
                 threads[i].start();
@@ -78,6 +70,16 @@ public class FastRContext {
             } catch (InterruptedException ex) {
 
             }
+        } else {
+            for (int i = 0; i < contexts.getLength(); i++) {
+                RContext context = checkContext(contexts.getDataAt(i));
+                try {
+                    context.activate();
+                    context.getThisEngine().parseAndEval(Source.fromText(exprs.getDataAt(i), "<context_eval>"), true, false);
+                } finally {
+                    context.destroy();
+                }
+            }
         }
     }
 
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRFunctionEntry.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRFunctionEntry.java
index a432deedad..4c60daecf6 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRFunctionEntry.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRFunctionEntry.java
@@ -73,7 +73,7 @@ public class FastRFunctionEntry {
                 return RNull.instance;
 
             case "context.eval":
-                FastRContext.eval((RIntVector) RRuntime.asAbstractVector(arg0), (RStringVector) RRuntime.asAbstractVector(argValues[1]));
+                FastRContext.eval((RIntVector) RRuntime.asAbstractVector(arg0), (RStringVector) RRuntime.asAbstractVector(argValues[1]), RRuntime.fromLogical(checkLogical(argValues[2], fastRNode)));
                 return RNull.instance;
 
             default:
-- 
GitLab