array literals uses typed arrays; fix a jsgen bug (#16850)
* array litterals uses typed arrays * Update compiler/jsgen.nim Co-authored-by: Timothee Cour <timothee.cour2@gmail.com> Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
This commit is contained in:
parent
c8d9963150
commit
240879bf3d
6 changed files with 81 additions and 31 deletions
|
|
@ -1,6 +1,5 @@
|
|||
proc jsTypeOf*[T](x: T): cstring {.importjs: "typeof(#)".}
|
||||
## Returns the name of the JsObject's JavaScript type as a cstring.
|
||||
# xxx replace jsffi.jsTypeOf with this definition and add tests
|
||||
import std/private/jsutils
|
||||
|
||||
|
||||
type JsBigIntImpl {.importc: "bigint".} = int
|
||||
type JsBigInt = distinct JsBigIntImpl
|
||||
|
|
|
|||
|
|
@ -1,11 +1,3 @@
|
|||
discard """
|
||||
output: '''(x: 0, y: 0)
|
||||
(x: 5, y: 0)
|
||||
@[(x: "2", y: 4), (x: "4", y: 5), (x: "4", y: 5)]
|
||||
@[(a: "3", b: 3), (a: "1", b: 1), (a: "2", b: 2)]
|
||||
'''
|
||||
"""
|
||||
|
||||
# bug #4139
|
||||
|
||||
type
|
||||
|
|
@ -17,8 +9,8 @@ proc onLoad() =
|
|||
var foo = TestO(x: 0, y: 0)
|
||||
test.add(foo)
|
||||
foo.x = 5
|
||||
echo(test[0])
|
||||
echo foo
|
||||
doAssert $test[0] == "(x: 0, y: 0)"
|
||||
doAssert $foo == "(x: 5, y: 0)"
|
||||
|
||||
onLoad()
|
||||
|
||||
|
|
@ -34,7 +26,7 @@ proc foo(x: var seq[MyObj]) =
|
|||
|
||||
var s = @[MyObj(x: "2", y: 4), MyObj(x: "4", y: 5)]
|
||||
foo(s)
|
||||
echo s
|
||||
doAssert $s == """@[(x: "2", y: 4), (x: "4", y: 5), (x: "4", y: 5)]"""
|
||||
|
||||
# bug #5933
|
||||
import sequtils
|
||||
|
|
@ -48,4 +40,9 @@ var test = @[Test(a: "1", b: 1), Test(a: "2", b: 2)]
|
|||
|
||||
test.insert(@[Test(a: "3", b: 3)], 0)
|
||||
|
||||
echo test
|
||||
doAssert $test == """@[(a: "3", b: 3), (a: "1", b: 1), (a: "2", b: 2)]"""
|
||||
|
||||
proc hello(): array[5, int] = discard
|
||||
var x = @(hello())
|
||||
x.add(2)
|
||||
doAssert x == @[0, 0, 0, 0, 0, 2]
|
||||
|
|
|
|||
21
tests/js/ttypedarray.nim
Normal file
21
tests/js/ttypedarray.nim
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import std/private/jsutils
|
||||
|
||||
proc main()=
|
||||
template fn(a): untyped = jsConstructorName(a)
|
||||
doAssert fn(array[2, int8].default) == "Int8Array"
|
||||
doAssert fn(array[2, uint8].default) == "Uint8Array"
|
||||
doAssert fn(array[2, byte].default) == "Uint8Array"
|
||||
# doAssert fn(array[2, char].default) == "Uint8Array" # xxx fails; bug?
|
||||
doAssert fn(array[2, uint64].default) == "Array"
|
||||
# pending https://github.com/nim-lang/RFCs/issues/187 maybe use `BigUint64Array`
|
||||
doAssert fn([1'u8]) == "Uint8Array"
|
||||
doAssert fn([1'u16]) == "Uint16Array"
|
||||
doAssert fn([byte(1)]) == "Uint8Array"
|
||||
doAssert fn([1.0'f32]) == "Float32Array"
|
||||
doAssert fn(array[2, float32].default) == "Float32Array"
|
||||
doAssert fn(array[2, float].default) == "Float64Array"
|
||||
doAssert fn(array[2, float64].default) == "Float64Array"
|
||||
doAssert fn([1.0]) == "Float64Array"
|
||||
doAssert fn([1.0'f64]) == "Float64Array"
|
||||
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue