reuse jsffi in json module (#17165)

* remove unnecessary when statement

* remove outdated codes

* reuse jsffi

* move js json coverage
This commit is contained in:
flywind
2021-03-05 02:37:12 +08:00
committed by GitHub
parent e1cc3b83fb
commit 81889fb84c
4 changed files with 17 additions and 23 deletions

View File

@@ -908,15 +908,14 @@ proc parseJson*(s: Stream, filename: string = ""; rawIntegers = false, rawFloats
when defined(js):
from std/math import `mod`
type
JSObject = object
import std/jsffi
proc parseNativeJson(x: cstring): JSObject {.importc: "JSON.parse".}
proc parseNativeJson(x: cstring): JSObject {.importjs: "JSON.parse(#)".}
proc getVarType(x: JSObject): JsonNodeKind =
result = JNull
proc getProtoName(y: JSObject): cstring
{.importc: "Object.prototype.toString.call".}
{.importjs: "Object.prototype.toString.call(#)".}
case $getProtoName(x) # TODO: Implicit returns fail here.
of "[object Array]": return JArray
of "[object Object]": return JObject
@@ -936,18 +935,6 @@ when defined(js):
`result` = `x`.length;
"""
proc `[]`(x: JSObject, y: string): JSObject =
assert x.getVarType == JObject
asm """
`result` = `x`[`y`];
"""
proc `[]`(x: JSObject, y: int): JSObject =
assert x.getVarType == JArray
asm """
`result` = `x`[`y`];
"""
proc convertObject(x: JSObject): JsonNode =
case getVarType(x)
of JArray:
@@ -965,14 +952,14 @@ when defined(js):
result[$nimProperty] = nimValue.convertObject()
asm "}}"
of JInt:
result = newJInt(cast[int](x))
result = newJInt(x.to(int))
of JFloat:
result = newJFloat(cast[float](x))
result = newJFloat(x.to(float))
of JString:
# Dunno what to do with isUnquoted here
result = newJString($cast[cstring](x))
result = newJString($x.to(cstring))
of JBool:
result = newJBool(cast[bool](x))
result = newJBool(x.to(bool))
of JNull:
result = newJNull()

View File

@@ -1,4 +1,9 @@
import json
discard """
targets: "c js"
"""
import std/json
type
Foo = object

View File

@@ -1,9 +1,10 @@
discard """
targets: "c js"
output:'''@["3", "2", "1"]
'''
"""
#12928,10456
import sequtils, algorithm, json
import std/[sequtils, algorithm, json]
proc test() =
try:

View File

@@ -1,4 +1,5 @@
discard """
targets: "c js"
output: '''
Original: (kind: P, pChildren: @[(kind: Text, textStr: "mychild"), (kind: Br)])
jsonNode: {"kind":"P","pChildren":[{"kind":"Text","textStr":"mychild"},{"kind":"Br"}]}
@@ -6,7 +7,7 @@ Reversed: (kind: P, pChildren: @[(kind: Text, textStr: "mychild"), (kind: Br)])
'''
"""
import json
import std/json
type
ContentNodeKind* = enum