From 018573ad40c073ff8e0f77b8e5c21ac6ad5da48f Mon Sep 17 00:00:00 2001 From: Zbynek Slajchrt <zbynek.slajchrt@oracle.com> Date: Tue, 7 Feb 2017 18:40:06 +0100 Subject: [PATCH] Forward analysis for shouldBe fixed --- .../r/nodes/builtin/CastBuilderTest.java | 21 +++++++++++++++++++ .../analysis/ForwardingAnalysisResult.java | 9 ++++++++ 2 files changed, 30 insertions(+) diff --git a/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/builtin/CastBuilderTest.java b/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/builtin/CastBuilderTest.java index 14bd470438..24e9d47732 100644 --- a/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/builtin/CastBuilderTest.java +++ b/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/builtin/CastBuilderTest.java @@ -22,6 +22,7 @@ */ package com.oracle.truffle.r.nodes.builtin; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.anyValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.abstractVectorValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asBoolean; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asInteger; @@ -861,6 +862,26 @@ public class CastBuilderTest { Assert.assertEquals("abc", cast("abc")); } + @Test + public void testWarningInElseBranchOfMapIf() { + arg.mapIf(numericValue(), + chain(asIntegerVector()).with(findFirst().integerElement()).end(), + chain(asIntegerVector()).with(Predef.shouldBe(anyValue().not(), RError.NO_CALLER, RError.Message.NA_INTRODUCED_COERCION)).end()); + + Assert.assertEquals(1, cast(1)); + Assert.assertEquals(1, cast("1")); + Assert.assertEquals(RError.Message.NA_INTRODUCED_COERCION.message, CastNode.getLastWarning()); + } + + @Test + public void testWarningInTrueBranchOfMapIf() { + arg.allowNull().mapIf(stringValue(), chain(asStringVector()).with(shouldBe(anyValue().not(), + RError.SHOW_CALLER, RError.Message.NA_INTRODUCED_COERCION)).end(), + asIntegerVector()); + Assert.assertEquals("1", cast("1")); + Assert.assertEquals(RError.Message.NA_INTRODUCED_COERCION.message, CastNode.getLastWarning()); + } + /** * Casts given object using the configured pipeline in {@link #arg}. */ diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/analysis/ForwardingAnalysisResult.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/analysis/ForwardingAnalysisResult.java index 34c20fe18a..353156736a 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/analysis/ForwardingAnalysisResult.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/analysis/ForwardingAnalysisResult.java @@ -151,6 +151,15 @@ public final class ForwardingAnalysisResult { nullForwarded, missingForwarded, invalid); + } else if (Object.class == tp) { + return new ForwardingAnalysisResult(FORWARDED, + FORWARDED, + FORWARDED, + FORWARDED, + FORWARDED, + FORWARDED, + FORWARDED, + invalid); } else { return this; } -- GitLab