Removed mangling of object fields for the js target only. (#5226)

* removed mangling of object fields for the js target only.

* changed default mangling behaviour for the php target as well.

* Added test for unorthodox field names (reserved words and operators). Adjusted field accessors and object constructors / new to be ECMAScript first edition compatible, when using fieldnames which are reserved words.
This commit is contained in:
Michael Jendrusch 2017-01-17 16:43:06 +01:00 • committed by Andreas Rumpf
commit 454547da8e
2 changed files with 90 additions and 8 deletions

View file

@ -918,7 +918,7 @@ proc genFieldAddr(p: PProc, n: PNode, r: var TCompRes) =
else:
if b.sons[1].kind != nkSym: internalError(b.sons[1].info, "genFieldAddr")
var f = b.sons[1].sym
if f.loc.r == nil: f.loc.r = mangleName(f, p.target)
if f.loc.r == nil: f.loc.r = rope(f.name.s)
r.res = makeJSString($f.loc.r)
internalAssert a.typ != etyBaseIndex
r.address = a.res
@ -934,9 +934,9 @@ proc genFieldAccess(p: PProc, n: PNode, r: var TCompRes) =
else:
if n.sons[1].kind != nkSym: internalError(n.sons[1].info, "genFieldAccess")
var f = n.sons[1].sym
if f.loc.r == nil: f.loc.r = mangleName(f, p.target)
if f.loc.r == nil: f.loc.r = rope(f.name.s)
if p.target == targetJS:
r.res = "$1.$2" % [r.res, f.loc.r]
r.res = "$1['$2']" % [r.res, f.loc.r]
else:
if {sfImportc, sfExportc} * f.flags != {}:
r.res = "$1->$2" % [r.res, f.loc.r]
@ -1351,10 +1351,9 @@ proc createRecordVarAux(p: PProc, rec: PNode, excludedFieldIDs: IntSet, output:
if rec.sym.id notin excludedFieldIDs:
if output.len > 0: output.add(", ")
if p.target == targetJS:
output.add(mangleName(rec.sym, p.target))
output.add(": ")
output.addf("'$#': ", [rope(rec.sym.name.s)])
else:
output.addf("'$#' => ", [mangleName(rec.sym, p.target)])
output.addf("'$#' => ", [rope(rec.sym.name.s)])
output.add(createVar(p, rec.sym.typ, false))
else: internalError(rec.info, "createRecordVarAux")
@ -1859,9 +1858,9 @@ proc genObjConstr(p: PProc, n: PNode, r: var TCompRes) =
internalAssert it.kind == nkExprColonExpr
gen(p, it.sons[1], a)
var f = it.sons[0].sym
if f.loc.r == nil: f.loc.r = mangleName(f, p.target)
if f.loc.r == nil: f.loc.r = rope(f.name.s)
fieldIDs.incl(f.id)
addf(initList, "$#: $#" | "'$#' => $#" , [f.loc.r, a.res])
addf(initList, "'$#': $#" | "'$#' => $#" , [f.loc.r, a.res])
let t = skipTypes(n.typ, abstractInst + skipPtrs)
createObjInitList(p, t, fieldIDs, initList)
r.res = ("{$1}" | "array($#)") % [initList]