diff --git a/builtin/core.wren b/builtin/core.wren index 12c23005..56389e22 100644 --- a/builtin/core.wren +++ b/builtin/core.wren @@ -8,4 +8,19 @@ class List { result = result + "]" return result } + + + that { + var newList = [] + if (this.count > 0) { + for (element in this) { + newList.add(element) + } + } + if (that is Range || that.count > 0) { + for (element in that) { + newList.add(element) + } + } + return newList + } } diff --git a/src/wren_core.c b/src/wren_core.c index 4777bc2b..0f87f251 100644 --- a/src/wren_core.c +++ b/src/wren_core.c @@ -51,6 +51,21 @@ static const char* libSource = " result = result + \"]\"\n" " return result\n" " }\n" +"\n" +" + that {\n" +" var newList = []\n" +" if (this.count > 0) {\n" +" for (element in this) {\n" +" newList.add(element)\n" +" }\n" +" }\n" +" if (that is Range || that.count > 0) {\n" +" for (element in that) {\n" +" newList.add(element)\n" +" }\n" +" }\n" +" return newList\n" +" }\n" "}\n"; // Validates that the given argument in [args] is a Num. Returns true if it is. diff --git a/test/list/concat.wren b/test/list/concat.wren new file mode 100644 index 00000000..838e97e8 --- /dev/null +++ b/test/list/concat.wren @@ -0,0 +1,15 @@ +var a = [1, 2, 3] +var b = [4, 5, 6] +var c = a + b +var d = a + (4..6) +var e = a + [] +var f = [] + a +var g = [] + [] + +IO.print(a) // expect: [1, 2, 3] +IO.print(b) // expect: [4, 5, 6] +IO.print(c) // expect: [1, 2, 3, 4, 5, 6] +IO.print(d) // expect: [1, 2, 3, 4, 5, 6] +IO.print(e) // expect: [1, 2, 3] +IO.print(f) // expect: [1, 2, 3] +IO.print(g) // expect: []