JS codegen: supports toOpenArray [bugfix]
This commit is contained in:
parent
511b6ae27c
commit
eaf4b42ff9
4 changed files with 30 additions and 14 deletions
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
## Library additions
|
## Library additions
|
||||||
|
|
||||||
|
- `toOpenArray` is now available for the JS target.
|
||||||
|
|
||||||
## Library changes
|
## Library changes
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -482,7 +482,7 @@ template binaryExpr(p: PProc, n: PNode, r: var TCompRes, magic, frmt: string) =
|
||||||
a, tmp = x.rdLoc
|
a, tmp = x.rdLoc
|
||||||
b, tmp2 = y.rdLoc
|
b, tmp2 = y.rdLoc
|
||||||
when "$3" in frmt: (a, tmp) = maybeMakeTemp(p, n[1], x)
|
when "$3" in frmt: (a, tmp) = maybeMakeTemp(p, n[1], x)
|
||||||
when "$4" in frmt: (a, tmp) = maybeMakeTemp(p, n[1], x)
|
when "$4" in frmt: (b, tmp2) = maybeMakeTemp(p, n[2], y)
|
||||||
|
|
||||||
r.res = frmt % [a, b, tmp, tmp2]
|
r.res = frmt % [a, b, tmp, tmp2]
|
||||||
r.kind = resExpr
|
r.kind = resExpr
|
||||||
|
|
@ -2040,8 +2040,14 @@ proc genMagic(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
of mParseBiggestFloat:
|
of mParseBiggestFloat:
|
||||||
useMagic(p, "nimParseBiggestFloat")
|
useMagic(p, "nimParseBiggestFloat")
|
||||||
genCall(p, n, r)
|
genCall(p, n, r)
|
||||||
of mArray:
|
of mSlice:
|
||||||
genCall(p, n, r)
|
# arr.slice([begin[, end]]): 'end' is exclusive
|
||||||
|
var x, y, z: TCompRes
|
||||||
|
gen(p, n.sons[1], x)
|
||||||
|
gen(p, n.sons[2], y)
|
||||||
|
gen(p, n.sons[3], z)
|
||||||
|
r.res = "($1.slice($2, $3+1))" % [x.rdLoc, y.rdLoc, z.rdLoc]
|
||||||
|
r.kind = resExpr
|
||||||
else:
|
else:
|
||||||
genCall(p, n, r)
|
genCall(p, n, r)
|
||||||
#else internalError(p.config, e.info, 'genMagic: ' + magicToStr[op]);
|
#else internalError(p.config, e.info, 'genMagic: ' + magicToStr[op]);
|
||||||
|
|
|
||||||
|
|
@ -4484,18 +4484,19 @@ when defined(windows) and appType == "console" and defined(nimSetUtf8CodePage) a
|
||||||
discard setConsoleOutputCP(65001) # 65001 - utf-8 codepage
|
discard setConsoleOutputCP(65001) # 65001 - utf-8 codepage
|
||||||
|
|
||||||
when not defined(js):
|
when not defined(js):
|
||||||
proc toOpenArray*[T](x: seq[T]; first, last: int): openArray[T] {.
|
|
||||||
magic: "Slice".}
|
|
||||||
proc toOpenArray*[T](x: openArray[T]; first, last: int): openArray[T] {.
|
|
||||||
magic: "Slice".}
|
|
||||||
proc toOpenArray*[T](x: ptr UncheckedArray[T]; first, last: int): openArray[T] {.
|
proc toOpenArray*[T](x: ptr UncheckedArray[T]; first, last: int): openArray[T] {.
|
||||||
magic: "Slice".}
|
magic: "Slice".}
|
||||||
proc toOpenArray*[I, T](x: array[I, T]; first, last: I): openArray[T] {.
|
|
||||||
magic: "Slice".}
|
proc toOpenArray*[T](x: seq[T]; first, last: int): openArray[T] {.
|
||||||
proc toOpenArray*(x: string; first, last: int): openArray[char] {.
|
magic: "Slice".}
|
||||||
magic: "Slice".}
|
proc toOpenArray*[T](x: openArray[T]; first, last: int): openArray[T] {.
|
||||||
proc toOpenArrayByte*(x: string; first, last: int): openArray[byte] {.
|
magic: "Slice".}
|
||||||
magic: "Slice".}
|
proc toOpenArray*[I, T](x: array[I, T]; first, last: I): openArray[T] {.
|
||||||
|
magic: "Slice".}
|
||||||
|
proc toOpenArray*(x: string; first, last: int): openArray[char] {.
|
||||||
|
magic: "Slice".}
|
||||||
|
proc toOpenArrayByte*(x: string; first, last: int): openArray[byte] {.
|
||||||
|
magic: "Slice".}
|
||||||
|
|
||||||
type
|
type
|
||||||
ForLoopStmt* {.compilerproc.} = object ## \
|
ForLoopStmt* {.compilerproc.} = object ## \
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
discard """
|
discard """
|
||||||
output: '''Hello
|
output: '''Hello
|
||||||
Hello'''
|
Hello
|
||||||
|
c
|
||||||
|
d
|
||||||
|
e'''
|
||||||
"""
|
"""
|
||||||
|
|
||||||
block: # bug #2581
|
block: # bug #2581
|
||||||
|
|
@ -85,3 +88,8 @@ block: # String cmp
|
||||||
doAssert(cmp("foo", "foobar") == -3)
|
doAssert(cmp("foo", "foobar") == -3)
|
||||||
doAssert(cmp("fooz", "foog") == 19)
|
doAssert(cmp("fooz", "foog") == 19)
|
||||||
doAssert(cmp("foog", "fooz") == -19)
|
doAssert(cmp("foog", "fooz") == -19)
|
||||||
|
|
||||||
|
proc main(x: openArray[char]) =
|
||||||
|
for c in x: echo c
|
||||||
|
|
||||||
|
main(toOpenArray(['a', 'b', 'c', 'd', 'e'], 2, 4))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue