summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2017-06-30 12:01:51 +0200
committerAraq <rumpf_a@web.de>2017-06-30 12:01:51 +0200
commit4de989d1c5e69393e3ac14fa0516203d0d06773a (patch)
tree3e416a29be7b935c4f00752e2745b01a41a7821f
parent57f4abf6f48894082939e9b9bf9b37b9a68f5c1a (diff)
downloadNim-4de989d1c5e69393e3ac14fa0516203d0d06773a.tar.gz
fixes #6035
-rw-r--r--compiler/jsgen.nim2
-rw-r--r--compiler/jstypes.nim6
-rw-r--r--tests/js/testobjs.nim20
3 files changed, 25 insertions, 3 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim
index ae5294a81..dd3bad1ad 100644
--- a/compiler/jsgen.nim
+++ b/compiler/jsgen.nim
@@ -1446,7 +1446,7 @@ proc createRecordVarAux(p: PProc, rec: PNode, excludedFieldIDs: IntSet, output:
 
 proc createObjInitList(p: PProc, typ: PType, excludedFieldIDs: IntSet, output: var Rope) =
   var t = typ
-  if tfFinal notin t.flags or t.sons[0] != nil:
+  if objHasTypeField(t):
     if output.len > 0: output.add(", ")
     addf(output, "m_type: $1" | "'m_type' => $#", [genTypeInfo(p, t)])
   while t != nil:
diff --git a/compiler/jstypes.nim b/compiler/jstypes.nim
index ae30861e7..0d5b29ace 100644
--- a/compiler/jstypes.nim
+++ b/compiler/jstypes.nim
@@ -67,9 +67,13 @@ proc genObjectFields(p: PProc, typ: PType, n: PNode): Rope =
         rope(lengthOrd(field.typ)), makeJSString(field.name.s), result]
   else: internalError(n.info, "genObjectFields")
 
+proc objHasTypeField(t: PType): bool {.inline.} =
+  tfInheritable in t.flags or t.sons[0] != nil
+
 proc genObjectInfo(p: PProc, typ: PType, name: Rope) =
+  let kind = if objHasTypeField(typ): tyObject else: tyTuple
   var s = ("var $1 = {size: 0, kind: $2, base: null, node: null, " &
-           "finalizer: null};$n") % [name, rope(ord(typ.kind))]
+           "finalizer: null};$n") % [name, rope(ord(kind))]
   prepend(p.g.typeInfo, s)
   addf(p.g.typeInfo, "var NNI$1 = $2;$n",
        [rope(typ.id), genObjectFields(p, typ, typ.n)])
diff --git a/tests/js/testobjs.nim b/tests/js/testobjs.nim
index 0166c0f38..dd66825ec 100644
--- a/tests/js/testobjs.nim
+++ b/tests/js/testobjs.nim
@@ -1,5 +1,7 @@
 discard """
-  action: run
+  output: '''{"columns":[{"t":null},{"t":null}]}
+{"columns":[{"t":null},{"t":null}]}
+'''
 """
 
 ## Tests javascript object generation
@@ -36,3 +38,19 @@ doAssert test.name == "Jorden"
 doAssert knight.age == 19
 doAssert knight.item.price == 50
 doAssert recurse1.next.next.data == 3
+
+# bug #6035
+proc toJson*[T](data: T): cstring {.importc: "JSON.stringify".}
+
+type
+  Column = object
+    t: ref Column
+
+  Test2 = object
+    columns: seq[Column]
+
+var test1 = Test2(columns: @[Column(t: nil), Column(t: nil)])
+let test2 = test1
+
+echo toJSON(test1)
+echo toJSON(test2)