mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-31 10:22:15 +00:00
reuse jsffi in json module (#17165)
* remove unnecessary when statement * remove outdated codes * reuse jsffi * move js json coverage
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
import json
|
||||
discard """
|
||||
targets: "c js"
|
||||
"""
|
||||
|
||||
|
||||
import std/json
|
||||
|
||||
type
|
||||
Foo = object
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user