summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorflywind <43030857+xflywind@users.noreply.github.com>2020-11-12 16:20:10 +0800
committerGitHub <noreply@github.com>2020-11-12 09:20:10 +0100
commit1f9bf43100f7236d8ccbcaa14c43bc18f7e6e5d8 (patch)
tree9e674a5f93079fe98cb00e188fb5709301f23dc7
parent826e62953faa1f6cd9bac582246186935af4b8e6 (diff)
downloadNim-1f9bf43100f7236d8ccbcaa14c43bc18f7e6e5d8.tar.gz
fix #14157 (#15877)
* fix #14157

* Update compiler/jsgen.nim

* add changelog

* Update compiler/jsgen.nim

* Update tests/js/tmodify_cstring.nim

Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
-rw-r--r--changelog.md2
-rw-r--r--compiler/jsgen.nim4
-rw-r--r--tests/js/tmodify_cstring.nim6
3 files changed, 12 insertions, 0 deletions
diff --git a/changelog.md b/changelog.md
index bc8ad2295..3bdf8a511 100644
--- a/changelog.md
+++ b/changelog.md
@@ -35,6 +35,8 @@
 
 ## Language changes
 
+- The `cstring` doesn't support `[]=` operator in JS backend.
+
 
 
 ## Compiler changes
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim
index 87021de11..357e18000 100644
--- a/compiler/jsgen.nim
+++ b/compiler/jsgen.nim
@@ -1049,6 +1049,10 @@ proc genAsgnAux(p: PProc, x, y: PNode, noCopyNeeded: bool) =
   var a, b: TCompRes
   var xtyp = mapType(p, x.typ)
 
+  # disable `[]=` for cstring
+  if x.kind == nkBracketExpr and x.len >= 2 and x[0].typ.skipTypes(abstractInst).kind == tyCString:
+    localError(p.config, x.info, "cstring doesn't support `[]=` operator")
+
   gen(p, x, a)
   genLineDir(p, y)
   gen(p, y, b)
diff --git a/tests/js/tmodify_cstring.nim b/tests/js/tmodify_cstring.nim
new file mode 100644
index 000000000..82f8ccb23
--- /dev/null
+++ b/tests/js/tmodify_cstring.nim
@@ -0,0 +1,6 @@
+discard """
+  errormsg: "cstring doesn't support `[]=` operator"
+"""
+
+var x = cstring"abcd"
+x[0] = 'x'