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