Merge pull request #4960 from krux02/comparison-fix
fixed `==` and cmp to work on nimvm
This commit is contained in:
commit
38ad7400fa
1 changed files with 33 additions and 25 deletions
|
|
@ -2176,25 +2176,34 @@ proc `&` *[T](x: T, y: seq[T]): seq[T] {.noSideEffect.} =
|
||||||
for i in 0..y.len-1:
|
for i in 0..y.len-1:
|
||||||
result[i+1] = y[i]
|
result[i+1] = y[i]
|
||||||
|
|
||||||
when not defined(nimscript):
|
proc `==` *[T](x, y: seq[T]): bool {.noSideEffect.} =
|
||||||
when not defined(JS) or defined(nimphp):
|
## Generic equals operator for sequences: relies on a equals operator for
|
||||||
proc seqToPtr[T](x: seq[T]): pointer {.inline, nosideeffect.} =
|
## the element type `T`.
|
||||||
result = cast[pointer](x)
|
when nimvm:
|
||||||
|
if x.isNil and y.isNil:
|
||||||
|
return true
|
||||||
else:
|
else:
|
||||||
proc seqToPtr[T](x: seq[T]): pointer {.asmNoStackFrame, nosideeffect.} =
|
when not defined(JS) or defined(nimphp):
|
||||||
asm """return `x`"""
|
proc seqToPtr[T](x: seq[T]): pointer {.inline, nosideeffect.} =
|
||||||
|
result = cast[pointer](x)
|
||||||
proc `==` *[T](x, y: seq[T]): bool {.noSideEffect.} =
|
else:
|
||||||
## Generic equals operator for sequences: relies on a equals operator for
|
proc seqToPtr[T](x: seq[T]): pointer {.asmNoStackFrame, nosideeffect.} =
|
||||||
## the element type `T`.
|
asm """return `x`"""
|
||||||
|
|
||||||
if seqToPtr(x) == seqToPtr(y):
|
if seqToPtr(x) == seqToPtr(y):
|
||||||
result = true
|
return true
|
||||||
elif seqToPtr(x) == nil or seqToPtr(y) == nil:
|
|
||||||
result = false
|
if x.isNil or y.isNil:
|
||||||
elif x.len == y.len:
|
return false
|
||||||
for i in 0..x.len-1:
|
|
||||||
if x[i] != y[i]: return false
|
if x.len != y.len:
|
||||||
result = true
|
return false
|
||||||
|
|
||||||
|
for i in 0..x.len-1:
|
||||||
|
if x[i] != y[i]:
|
||||||
|
return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
||||||
proc find*[T, S](a: T, item: S): int {.inline.}=
|
proc find*[T, S](a: T, item: S): int {.inline.}=
|
||||||
## Returns the first index of `item` in `a` or -1 if not found. This requires
|
## Returns the first index of `item` in `a` or -1 if not found. This requires
|
||||||
|
|
@ -2632,10 +2641,15 @@ when not defined(JS): #and not defined(nimscript):
|
||||||
|
|
||||||
include "system/ansi_c"
|
include "system/ansi_c"
|
||||||
|
|
||||||
when not defined(nimscript):
|
proc cmp(x, y: string): int =
|
||||||
proc cmp(x, y: string): int =
|
when nimvm:
|
||||||
|
if x < y: result = -1
|
||||||
|
elif x > y: result = 1
|
||||||
|
else: result = 0
|
||||||
|
else:
|
||||||
result = int(c_strcmp(x, y))
|
result = int(c_strcmp(x, y))
|
||||||
|
|
||||||
|
when not defined(nimscript):
|
||||||
proc zeroMem(p: pointer, size: Natural) =
|
proc zeroMem(p: pointer, size: Natural) =
|
||||||
c_memset(p, 0, size)
|
c_memset(p, 0, size)
|
||||||
proc copyMem(dest, source: pointer, size: Natural) =
|
proc copyMem(dest, source: pointer, size: Natural) =
|
||||||
|
|
@ -2645,12 +2659,6 @@ when not defined(JS): #and not defined(nimscript):
|
||||||
proc equalMem(a, b: pointer, size: Natural): bool =
|
proc equalMem(a, b: pointer, size: Natural): bool =
|
||||||
c_memcmp(a, b, size) == 0
|
c_memcmp(a, b, size) == 0
|
||||||
|
|
||||||
else:
|
|
||||||
proc cmp(x, y: string): int =
|
|
||||||
if x < y: result = -1
|
|
||||||
elif x > y: result = 1
|
|
||||||
else: result = 0
|
|
||||||
|
|
||||||
when defined(nimscript):
|
when defined(nimscript):
|
||||||
proc readFile*(filename: string): string {.tags: [ReadIOEffect], benign.}
|
proc readFile*(filename: string): string {.tags: [ReadIOEffect], benign.}
|
||||||
## Opens a file named `filename` for reading, calls `readAll
|
## Opens a file named `filename` for reading, calls `readAll
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue