diff --git a/ci.hocon b/ci.hocon index 39bed20f3574b885cac057a0be42d0abb0ed9983..e001b702457006968cf8797dbac20874d2a76f24 100644 --- a/ci.hocon +++ b/ci.hocon @@ -37,6 +37,7 @@ logfiles : [ "com.oracle.truffle.r.native/gnur/libiconv-*/iconv_configure.log" "com.oracle.truffle.r.native/gnur/libiconv-*/iconv_make.log" "*-tests/*.Rout" + "com.oracle.truffle.r.native/gnur/R-*/config.log" ] # This is needed by all (Linux) builds but is specific to the module system employed @@ -46,7 +47,7 @@ logfiles : [ pkgEnvironment: { environment : { PKG_INCLUDE_FLAGS_OVERRIDE : """-I/cm/shared/apps/zlib/1.2.8/include -I/cm/shared/apps/bzip2/1.0.6/include -I/cm/shared/apps/xz/5.2.2/include -I/cm/shared/apps/pcre/8.38/include -I/cm/shared/apps/curl/7.50.1/include""" - PKG_LDFLAGS_OVERRIDE : """-L/cm/shared/apps/zlib/1.2.8/lib -L/cm/shared/apps/bzip2/1.0.6/lib -L/cm/shared/apps/xz/5.2.2/lib -L/cm/shared/apps/pcre/8.38/lib -L/cm/shared/apps/curl/7.50.1/lib -L/cm/shared/apps/gcc/4.9.1/lib64""" + PKG_LDFLAGS_OVERRIDE : """"-L/cm/shared/apps/zlib/1.2.8/lib -L/cm/shared/apps/bzip2/1.0.6/lib -L/cm/shared/apps/xz/5.2.2/lib -L/cm/shared/apps/pcre/8.38/lib -L/cm/shared/apps/curl/7.50.1/lib -L/cm/shared/apps/gcc/4.9.1/lib64"""" TZDIR: "/usr/share/zoneinfo" } } @@ -114,7 +115,7 @@ darwinEnvironment : { F77: "/usr/local/bin/gfortran-4.9" TZDIR: "/usr/share/zoneinfo" PKG_INCLUDE_FLAGS_OVERRIDE : """-I/cm/shared/apps/zlib/1.2.8/include -I/cm/shared/apps/bzip2/1.0.6/include -I/cm/shared/apps/xz/5.2.2/include -I/cm/shared/apps/pcre/8.38/include -I/cm/shared/apps/curl/7.50.1/include""" - PKG_LDFLAGS_OVERRIDE : """-L/cm/shared/apps/zlib/1.2.8/lib -L/cm/shared/apps/bzip2/1.0.6/lib -L/cm/shared/apps/xz/5.2.2/lib -L/cm/shared/apps/pcre/8.38/lib -L/cm/shared/apps/curl/7.50.1/lib -L/cm/shared/apps/gcc/4.9.1/lib64""" + PKG_LDFLAGS_OVERRIDE : """"-L/cm/shared/apps/zlib/1.2.8/lib -L/cm/shared/apps/bzip2/1.0.6/lib -L/cm/shared/apps/xz/5.2.2/lib -L/cm/shared/apps/pcre/8.38/lib -L/cm/shared/apps/curl/7.50.1/lib -L/cm/shared/apps/gcc/4.9.1/lib64"""" } } diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java index 829ba8654d0ebf9c1fbb3cd4cf6d77794a709551..d0d48097d59d96b28d8e3770e37f6f31bb0d5131 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java @@ -224,30 +224,16 @@ class RRuntimeASTAccessImpl implements RRuntimeASTAccess { @Override @TruffleBoundary public Object createLanguageFromList(RList list, RLanguage.RepType repType) { - int origLength = list.getLength(); - int length = origLength; + int length = list.getLength(); if (length == 0) { return RNull.instance; } else if (repType == RLanguage.RepType.CALL) { - - Object fnSym = list.getDataAtAsObject(0); - /** - * A language object representing a replacement normally consists of three elements: the - * assignment symbol, the replacement function and the assigned value (i.e. rhs). - * However, under certain circumstances the last element (rhs) can get removed by - * assigning NULL, e.g. l <- quote(a(x)<–1); l[[3]] <- NULL. In such a case that - * language object is treated as if its third element were the NULL constant. - */ - if (length == 2 && fnSym instanceof RSymbol && ((RSymbol) fnSym).getName() == Utils.intern("<-")) { - length++; - } - RStringVector formals = list.getNames(); List<RCodeBuilder.Argument<RSyntaxNode>> argList = new ArrayList<>(length - 1); for (int i = 1; i < length; i++) { - String formal = formals == null || i == origLength ? null : formals.getDataAt(i); - RSyntaxNode syntaxArg = i < origLength ? (RSyntaxNode) unwrapToRNode(list.getDataAtAsObject(i)) : ConstantNode.create(RNull.instance); + String formal = formals == null ? null : formals.getDataAt(i); + RSyntaxNode syntaxArg = (RSyntaxNode) unwrapToRNode(list.getDataAtAsObject(i)); if (formal != null) { argList.add(RCodeBuilder.argument(RSourceSectionNode.LAZY_DEPARSE, formal, syntaxArg)); } else { @@ -255,7 +241,7 @@ class RRuntimeASTAccessImpl implements RRuntimeASTAccess { } } - RNode fn = unwrapToRNode(fnSym); + RNode fn = unwrapToRNode(list.getDataAtAsObject(0)); RSyntaxNode call = RContext.getASTBuilder().call(RSourceSectionNode.LAZY_DEPARSE, fn.asRSyntaxNode(), argList); RLanguage result = RDataFactory.createLanguage(call.asRNode()); if (formals != null && formals.getLength() > 0 && formals.getDataAt(0).length() > 0) { diff --git a/com.oracle.truffle.r.native/Makefile b/com.oracle.truffle.r.native/Makefile index 46d9c03cc2cc44b689afaff8737debaf43855601..dfc68d8f17b70e2af859c3bfdc9f581495c37e0e 100644 --- a/com.oracle.truffle.r.native/Makefile +++ b/com.oracle.truffle.r.native/Makefile @@ -58,12 +58,12 @@ clean: version.source := $(shell cat version.source) -$(info version: $(version.source)) +#$(info version: $(version.source)) ifeq ($(wildcard version.built),) doclean = 1 else version.built := $(shell cat version.built) -$(info version.built: $(version.built)) +#$(info version.built: $(version.built)) ifneq ($(version.source),$(version.built)) doclean = 1 else diff --git a/com.oracle.truffle.r.native/gnur/Makefile.gnur b/com.oracle.truffle.r.native/gnur/Makefile.gnur index 4533af857074b1700728819a3b30ba6d94c5191a..7c7543f43385e303e75d41e3ff04002474509a66 100644 --- a/com.oracle.truffle.r.native/gnur/Makefile.gnur +++ b/com.oracle.truffle.r.native/gnur/Makefile.gnur @@ -115,7 +115,7 @@ ifneq ($(PKG_INCLUDE_FLAGS_OVERRIDE),) endif ifneq ($(PKG_LDFLAGS_OVERRIDE),) - GNUR_CONFIG_FLAGS := $(GNUR_CONFIG_FLAGS) LDFLAGS="$(PKG_LDFLAGS_OVERRIDE)" + GNUR_CONFIG_FLAGS := $(GNUR_CONFIG_FLAGS) LDFLAGS=$(PKG_LDFLAGS_OVERRIDE) endif # setup for LLVM (if enabled) diff --git a/com.oracle.truffle.r.native/gnur/configure.patch b/com.oracle.truffle.r.native/gnur/configure.patch deleted file mode 100644 index b4f0be9936176b6dc7ce55cc96c9234ecb966b97..0000000000000000000000000000000000000000 --- a/com.oracle.truffle.r.native/gnur/configure.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- ./R-3.3.2/configure Mon Oct 24 04:34:26 2016 -+++ ./configure.new Wed Jul 26 04:43:08 2017 -@@ -35507,10 +35507,11 @@ - #include <string.h> - #include <zlib.h> - int main() { --#ifdef ZLIB_VERSION --/* Work around Debian bug: it uses 1.2.3.4 even though there was no such -- version on the master site zlib.net */ -- exit(strncmp(ZLIB_VERSION, "1.2.5", 5) < 0); -+#ifdef ZLIB_VERNUM -+ if (ZLIB_VERNUM < 0x1250) { -+ exit(1); -+ } -+ exit(0); - #else - exit(1); - #endif diff --git a/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/test/BinaryBooleanNodeTest.java b/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/test/BinaryBooleanNodeTest.java index e42acad5d95fe69b0a8e2d96adf8f124130305f1..bf64977ae002ce67cbfd57ae6051136beedb1ed0 100644 --- a/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/test/BinaryBooleanNodeTest.java +++ b/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/test/BinaryBooleanNodeTest.java @@ -181,7 +181,7 @@ public class BinaryBooleanNodeTest extends BinaryVectorTest { private static RType getResultType(BooleanOperationFactory factory, RAbstractVector a, RAbstractVector b) { RType resultType; - if ((factory == BinaryLogic.AND || factory == BinaryLogic.OR) && getArgumentType(a, b) == RType.Raw && a.getLength() > 0 && b.getLength() > 0) { + if ((factory == BinaryLogic.AND || factory == BinaryLogic.OR) && getArgumentType(a, b) == RType.Raw) { resultType = RType.Raw; } else { resultType = RType.Logical; diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java index 410699b61e260112d39191d14a591add6a4f3567..4aac9d4b03aa25c3b7117f06684dac68da56df95 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java @@ -248,7 +248,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode.Arg2 { RType argumentType = RType.maxPrecedence(leftVector.getRType(), rightVector.getRType()); RType resultType = RType.Logical; - if (isLogicOp(operation) && argumentType == RType.Raw && leftVector.getLength() > 0 && rightVector.getLength() > 0) { + if (isLogicOp(operation) && argumentType == RType.Raw) { resultType = RType.Raw; } else { resultType = RType.Logical; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/EvaluatedArgumentsVisitor.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/EvaluatedArgumentsVisitor.java index f9fea752a258a036dd7fd1d9a5b3036059e36f9e..fa3254ef13d6cbded74e37747af70715980050ed 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/EvaluatedArgumentsVisitor.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/EvaluatedArgumentsVisitor.java @@ -124,7 +124,6 @@ public final class EvaluatedArgumentsVisitor extends RSyntaxVisitor<Info> { } if (symbol.equals("<-")) { Info info = Info.createNew(); - assert arguments.length == 2; RSyntaxElement current = arguments[0]; if (arguments[0] instanceof RSyntaxLookup) { info.maybeAssignedNames.add(((RSyntaxLookup) arguments[0]).getIdentifier()); @@ -139,7 +138,9 @@ public final class EvaluatedArgumentsVisitor extends RSyntaxVisitor<Info> { return Info.ANY; } } - info.addBefore(accept(arguments[1])); + if (arguments.length == 2) { + info.addBefore(accept(arguments[1])); + } return info; } else if (wellKnownFunctions.contains(symbol)) { Info info = Info.createNew(); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ArithmeticWhiteList.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ArithmeticWhiteList.java index 23a9f595234ab11c08dfe3c16de287e0003a717a..01d39683e7544b3e00ad15e8207550334b1970f2 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ArithmeticWhiteList.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ArithmeticWhiteList.java @@ -91,5 +91,7 @@ public class ArithmeticWhiteList { WHITELIST.add("c(1i,1i,1i)/(-0.0)", "[1] NaN+NaNi NaN+NaNi NaN+NaNi\n", "[1] NaN-Infi NaN-Infi NaN-Infi\n"); WHITELIST.add("c(1i,1i,1i)/FALSE", "[1] NaN+NaNi NaN+NaNi NaN+NaNi\n", "[1] NaN+Infi NaN+Infi NaN+Infi\n"); WHITELIST.add("c(1i,1i,1i)/c(FALSE,FALSE,FALSE)", "[1] NaN+NaNi NaN+NaNi NaN+NaNi\n", "[1] NaN+Infi NaN+Infi NaN+Infi\n"); + WHITELIST.add("{ as.raw(c(1,4)) | raw() }", "raw(0)\n", "logical(0)\n"); + WHITELIST.add("{ raw() | as.raw(c(1,4))}", "raw(0)\n", "logical(0)\n"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test index 99173c702c2c216ea4d19679f0371b9f2309f6dd..fa3a468fa0f357f2df8281a4ae092569ecf9177c 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test @@ -81240,7 +81240,7 @@ Error in as.raw(1) || 1 : invalid 'x' type in 'x || y' #{ as.raw(10) && "hi" } Error in as.raw(10) && "hi" : invalid 'x' type in 'x && y' -##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testNonvectorizedLogicalSpecialChecks# +##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testNonvectorizedLogicalSpecialChecks#WhiteList.arithmetic# #{ as.raw(c(1,4)) | raw() } logical(0) @@ -81292,7 +81292,7 @@ logical(0) #{ logical(0) || logical(0) } [1] NA -##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testNonvectorizedLogicalSpecialChecks# +##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testNonvectorizedLogicalSpecialChecks#WhiteList.arithmetic# #{ raw() | as.raw(c(1,4))} logical(0) diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleArithmetic.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleArithmetic.java index 52bcbd515d643c10eb76cfcc36980d3687c64c5f..cda5165d8c9b655a17e7132eca2959e9dc3f981d 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleArithmetic.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleArithmetic.java @@ -602,8 +602,8 @@ public class TestSimpleArithmetic extends TestBase { assertEval("{ as.raw(10) && \"hi\" }"); assertEval("{ c(TRUE,FALSE) | logical() }"); assertEval("{ logical() | c(TRUE,FALSE) }"); - assertEval("{ as.raw(c(1,4)) | raw() }"); - assertEval("{ raw() | as.raw(c(1,4))}"); + assertEval(ArithmeticWhiteList.WHITELIST, "{ as.raw(c(1,4)) | raw() }"); + assertEval(ArithmeticWhiteList.WHITELIST, "{ raw() | as.raw(c(1,4))}"); assertEval("{ logical(0) || logical(0) }"); assertEval("{ logical(0) || TRUE }"); assertEval("{ logical(0) || FALSE }");