internal/core: finalize list in slice
Fixes #500
Change-Id: Iecd8f46c36c1765b86d1d86a917d0a0889786a09
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/7042
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cue/testdata/eval/issue500.txtar b/cue/testdata/eval/issue500.txtar
new file mode 100644
index 0000000..7beacec
--- /dev/null
+++ b/cue/testdata/eval/issue500.txtar
@@ -0,0 +1,82 @@
+-- in.cue --
+package x
+
+import "strings"
+
+a: strings.Join(strings.Split("test", "")[1:], "")
+
+b: strings.Join(["t", "e", "s", "t"][1:], "")
+
+c: ["t", "e", "s", "t"][1:]
+d: strings.Join(c, "")
+
+e: strings.Join(["a"] + ["b"], "")
+
+f: ["a"] + ["b"]
+g: strings.Join(f, "")
+
+h: strings.Join(3*["a"], "")
+
+i: 3 * ["b"]
+j: strings.Join(i, "")
+
+-- out/eval --
+(struct){
+ a: (string){ "est" }
+ b: (string){ "est" }
+ c: (#list){
+ 0: (string){ "e" }
+ 1: (string){ "s" }
+ 2: (string){ "t" }
+ }
+ d: (string){ "est" }
+ e: (string){ "ab" }
+ f: (#list){
+ 0: (string){ "a" }
+ 1: (string){ "b" }
+ }
+ g: (string){ "ab" }
+ h: (string){ "aaa" }
+ i: (#list){
+ 0: (string){ "b" }
+ 1: (string){ "b" }
+ 2: (string){ "b" }
+ }
+ j: (string){ "bbb" }
+}
+-- out/compile --
+--- in.cue
+{
+ a: 〈import;strings〉.Join(〈import;strings〉.Split("test", "")[1:], "")
+ b: 〈import;strings〉.Join([
+ "t",
+ "e",
+ "s",
+ "t",
+ ][1:], "")
+ c: [
+ "t",
+ "e",
+ "s",
+ "t",
+ ][1:]
+ d: 〈import;strings〉.Join(〈0;c〉, "")
+ e: 〈import;strings〉.Join(([
+ "a",
+ ] + [
+ "b",
+ ]), "")
+ f: ([
+ "a",
+ ] + [
+ "b",
+ ])
+ g: 〈import;strings〉.Join(〈0;f〉, "")
+ h: 〈import;strings〉.Join((3 * [
+ "a",
+ ]), "")
+ i: (3 * [
+ "b",
+ ])
+ j: 〈import;strings〉.Join(〈0;i〉, "")
+}
diff --git a/internal/core/adt/expr.go b/internal/core/adt/expr.go
index 4b53894..e9b57fc 100644
--- a/internal/core/adt/expr.go
+++ b/internal/core/adt/expr.go
@@ -668,6 +668,7 @@
Conjuncts: a.Conjuncts,
})
}
+ n.status = Finalized
return n
case *Bytes: