diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackages.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackages.java index 3cbd00ed57c3e9eaf903e10f38d786feb529a321..2d774b7c73d36ab3feaafe8032a4ee7b639b35ee 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackages.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackages.java @@ -33,6 +33,7 @@ import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.RootCallTarget; import com.oracle.truffle.api.Truffle; import com.oracle.truffle.api.frame.FrameDescriptor; +import com.oracle.truffle.api.frame.FrameSlot; import com.oracle.truffle.api.frame.MaterializedFrame; import com.oracle.truffle.api.source.Source; import com.oracle.truffle.r.nodes.builtin.base.BasePackage; @@ -116,6 +117,11 @@ public final class RBuiltinPackages implements RBuiltinLookup { } catch (ParseException e) { throw new RInternalError(e, "error while parsing base source from %s", baseSource.getName()); } + // forcibly clear last.warnings during startup: + FrameSlot slot = baseFrame.getFrameDescriptor().findFrameSlot("last.warning"); + if (slot != null) { + FrameSlotChangeMonitor.setObject(baseFrame, slot, null); + } } finally { RContext.getInstance().setLoadingBase(false); } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java index dc67759ab247512bf3874f8bb7d12c843877287b..6f8b4034f27b6222cb8a6a4359c65c82bcf71d22 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java @@ -91,14 +91,14 @@ public class BitwiseFunctions { v = aVal ^ bVal; break; case SHIFTR: - if (bVal > 31) { + if (bVal > 31 || bVal < 0) { v = RRuntime.INT_NA; } else { v = aVal >>> bVal; } break; case SHIFTL: - if (bVal > 31) { + if (bVal > 31 || bVal < 0) { v = RRuntime.INT_NA; } else { v = aVal << bVal; diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java index e7ef99a9b49eb492b243f11975ce615772f76b82..0977298652e9af68fe7ab8bd7a591b384d8c388f 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java @@ -22,7 +22,6 @@ */ package com.oracle.truffle.r.nodes.builtin.base; -import com.oracle.truffle.api.CompilerDirectives; import static com.oracle.truffle.r.runtime.RDispatch.INTERNAL_GENERIC; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; @@ -31,8 +30,9 @@ import java.util.Arrays; import java.util.function.DoublePredicate; import java.util.function.IntPredicate; -import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.ImportStatic; import com.oracle.truffle.api.dsl.Specialization; @@ -112,7 +112,7 @@ public class IsFiniteFunctions { protected RLogicalVector doFunConstant(RAbstractVector x, byte value) { byte[] b = new byte[x.getLength()]; Arrays.fill(b, value); - return RDataFactory.createLogicalVector(b, RDataFactory.COMPLETE_VECTOR, getDims.getDimensions(x), getNames.getNames(x)); + return transferDimNames(RDataFactory.createLogicalVector(b, RDataFactory.COMPLETE_VECTOR, getDims.getDimensions(x), getNames.getNames(x)), x); } protected RLogicalVector doFunDouble(RAbstractDoubleVector x, DoublePredicate fun) { diff --git a/documentation/graphics.md b/documentation/graphics.md index e940d16f39881787e71e3142786bacf1fd341b61..8cd2bfb9a4fa981c99f8ea45bd98b4c41523247a 100644 --- a/documentation/graphics.md +++ b/documentation/graphics.md @@ -94,3 +94,4 @@ FastR's grid implementation does not yet support: FastR does not plan to implement the R graphics engine display list and related functions. However, the grid display list is implemented. +