diff --git a/changelog.md b/changelog.md index bc8ad22952..3bdf8a5117 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 87021de111..357e180003 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 0000000000..82f8ccb232 --- /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'