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()