From 20a026b1bc7dcb6c5c4bf4a2bef0a90ec04fc3ea Mon Sep 17 00:00:00 2001
From: Adam Welc <adam.welc@oracle.com>
Date: Sun, 28 Aug 2016 14:08:34 -0700
Subject: [PATCH] Rewritten parameter casts for the vector builtin.

---
 .../src/com/oracle/truffle/r/nodes/builtin/base/Vector.java  | 3 ++-
 .../oracle/truffle/r/test/builtins/TestBuiltin_vector.java   | 5 +++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Vector.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Vector.java
index 5736f617e7..c942eacc8a 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Vector.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Vector.java
@@ -47,7 +47,8 @@ public abstract class Vector extends RBuiltinNode {
 
     @Override
     protected void createCasts(CastBuilder casts) {
-        casts.arg("length").asIntegerVector().mustBe(singleElement()).findFirst();
+        casts.arg("mode").defaultError(RError.SHOW_CALLER, RError.Message.INVALID_ARGUMENT, "mode").asStringVector().mustBe(singleElement()).findFirst();
+        casts.arg("length").defaultError(RError.SHOW_CALLER, RError.Message.INVALID_ARGUMENT, "length").asIntegerVector().mustBe(singleElement()).findFirst();
     }
 
     protected RType modeToType(String mode) {
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_vector.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_vector.java
index 5e7c002f47..e218f7e8d3 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_vector.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_vector.java
@@ -65,6 +65,11 @@ public class TestBuiltin_vector extends TestBase {
         assertEval("{ vector(\"numeric\", length=4) }");
         assertEval("{ vector(length=3) }");
         assertEval("{ x<-as.vector(3); y<-vector(length=x) }");
+
+        assertEval("{ vector(character()) }");
+        assertEval("{ vector(c(\"numeric\", \"numeric\")) }");
+        assertEval("{  vector(\"numeric\", integer()) }");
+        assertEval("{  vector(\"numeric\", c(7, 42)) }");
     }
 
     @Test
-- 
GitLab