From cd0f17202ee167c0ec0db2bb497d1c4554655abd Mon Sep 17 00:00:00 2001 From: juxiliary Date: Sat, 6 Dec 2014 21:57:20 +1000 Subject: [PATCH] Fixing extraneous semicolon in jsgen output jsgen was producing javascript objects like this ``` {, name:"foo"} ``` causing syntax errors in javascript interpretors. --- compiler/jsgen.nim | 2 +- tests/js/testobjs.nim | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 tests/js/testobjs.nim diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index 108c0fe107..2ae85d5cff 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -1431,7 +1431,7 @@ proc genObjConstr(p: PProc, n: PNode, r: var TCompRes) = r.res = toRope("{") r.kind = resExpr for i in countup(1, sonsLen(n) - 1): - if i > 0: app(r.res, ", ") + if i > 1: app(r.res, ", ") var it = n.sons[i] internalAssert it.kind == nkExprColonExpr gen(p, it.sons[1], a) diff --git a/tests/js/testobjs.nim b/tests/js/testobjs.nim new file mode 100644 index 0000000000..4fb9a83dc4 --- /dev/null +++ b/tests/js/testobjs.nim @@ -0,0 +1,34 @@ +## Tests javascript object generation + +type + Kg = distinct float + Price = int + Item = object of RootObj + weight: Kg + price: Price + desc: cstring + Person = object of RootObj + name: cstring + age: int + item: Item + Test = object + name: cstring + Recurse[T] = object + data: T + next: ref Recurse[T] + +var + test = Test(name: "Jorden") + sword = Item(desc: "pointy", weight: Kg(10.0), + price: Price(50)) + knight = Person(name: "robert", age: 19, item: sword) + recurse4 = (ref Recurse[int])(data: 4, next: nil) + recurse3 = (ref Recurse[int])(data: 3, next: recurse4) + recurse2 = (ref Recurse[int])(data: 2, next: recurse3) + recurse1 = Recurse[int](data: 1, next: recurse2) + + +assert(test.name == "Jorden") +assert(knight.age == 19) +assert(knight.item.price == 50) +assert(recurse1.next.next.data == 3)