mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-31 10:22:15 +00:00
fixes #1638
This commit is contained in:
@@ -197,18 +197,20 @@ proc getIntervalType*(m: TMagic, n: PNode): PType =
|
||||
of mSubI, mSubI64, mSubU:
|
||||
binaryOp(`|-|`)
|
||||
of mBitandI, mBitandI64:
|
||||
# since uint64 is still not even valid for 'range' (since it's no ordinal
|
||||
# yet), we exclude it from the list (see bug #1638) for now:
|
||||
var a = n.sons[1]
|
||||
var b = n.sons[2]
|
||||
# symmetrical:
|
||||
if b.kind notin {nkIntLit..nkUInt64Lit}: swap(a, b)
|
||||
if b.kind in {nkIntLit..nkUInt64Lit}:
|
||||
if b.kind notin {nkIntLit..nkUInt32Lit}: swap(a, b)
|
||||
if b.kind in {nkIntLit..nkUInt32Lit}:
|
||||
let x = b.intVal|+|1
|
||||
if (x and -x) == x and x >= 0:
|
||||
result = makeRange(a.typ, 0, b.intVal)
|
||||
of mModU:
|
||||
let a = n.sons[1]
|
||||
let b = n.sons[2]
|
||||
if b.kind in {nkIntLit..nkUInt64Lit}:
|
||||
if b.kind in {nkIntLit..nkUInt32Lit}:
|
||||
if b.intVal >= 0:
|
||||
result = makeRange(a.typ, 0, b.intVal-1)
|
||||
else:
|
||||
|
||||
@@ -10,15 +10,15 @@ type
|
||||
events*: Table[string, DoublyLinkedList[proc(e: EventArgs) {.nimcall.}]]
|
||||
|
||||
proc emit*(emitter: EventEmitter, event: string, args: EventArgs) =
|
||||
for func in nodes(emitter.events[event]):
|
||||
func.value(args) #call function with args.
|
||||
for fn in nodes(emitter.events[event]):
|
||||
fn.value(args) #call function with args.
|
||||
|
||||
proc on*(emitter: var EventEmitter, event: string,
|
||||
func: proc(e: EventArgs) {.nimcall.}) =
|
||||
fn: proc(e: EventArgs) {.nimcall.}) =
|
||||
if not hasKey(emitter.events, event):
|
||||
var list: DoublyLinkedList[proc(e: EventArgs) {.nimcall.}]
|
||||
add(emitter.events, event, list) #if not, add it.
|
||||
append(emitter.events.mget(event), func)
|
||||
append(emitter.events.mget(event), fn)
|
||||
|
||||
proc initEmitter(emitter: var EventEmitter) =
|
||||
emitter.events = initTable[string,
|
||||
|
||||
12
tests/misc/tunsigned64mod.nim
Normal file
12
tests/misc/tunsigned64mod.nim
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
# bug #1638
|
||||
|
||||
import unsigned
|
||||
|
||||
let v1 = 7
|
||||
let v2 = 7'u64
|
||||
|
||||
let t1 = v1 mod 2 # works
|
||||
let t2 = 7'u64 mod 2'u64 # works
|
||||
let t3 = v2 mod 2'u64 # Error: invalid type: 'range 0..1(uint64)
|
||||
let t4 = (v2 mod 2'u64).uint64 # works
|
||||
@@ -312,7 +312,7 @@ proc testBabelPackages(r: var TResults, cat: Category, filter: PackageFilter) =
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
const AdditionalCategories = ["debugger", "examples", "stdlib", "babel-core"]
|
||||
const AdditionalCategories = ["debugger", "examples", "lib", "babel-core"]
|
||||
|
||||
proc `&.?`(a, b: string): string =
|
||||
# candidate for the stdlib?
|
||||
@@ -342,7 +342,7 @@ proc processCategory(r: var TResults, cat: Category, options: string) =
|
||||
threadTests r, cat, options & " --threads:on"
|
||||
of "io":
|
||||
ioTests r, cat, options
|
||||
of "stdlib":
|
||||
of "lib":
|
||||
testStdlib(r, "lib/pure/*.nim", options, cat)
|
||||
testStdlib(r, "lib/packages/docutils/highlite", options, cat)
|
||||
of "examples":
|
||||
|
||||
Reference in New Issue
Block a user