fixes #14409; fixes #10674 VM callbacks switch to table-index seqs (#21297)

* fixes #14409; fixes#10674 VM callbacks switch to table-index seqs

* fixes package name

* reduce runtime cost
This commit is contained in:
ringabout 2023-01-27 06:49:04 +08:00 • committed by GitHub
commit 4647c7b596
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 37 additions and 23 deletions

View file

@ -2011,25 +2011,29 @@ proc genTupleConstr(c: PCtx, n: PNode, dest: var TDest) =
proc genProc*(c: PCtx; s: PSym): int
proc matches(s: PSym; x: string): bool =
let y = x.split('.')
proc toKey(s: PSym): string =
var s = s
for i in 1..y.len:
if s == nil or (y[^i].cmpIgnoreStyle(s.name.s) != 0 and y[^i] != "*"):
return false
s = if sfFromGeneric in s.flags: s.owner.owner else: s.owner
while s != nil and s.kind == skPackage and s.owner != nil: s = s.owner
result = true
while s != nil:
result.add s.name.s
if s.owner != nil:
if sfFromGeneric in s.flags:
s = s.owner.owner
else:
s = s.owner
result.add "."
else:
break
proc procIsCallback(c: PCtx; s: PSym): bool =
if s.offset < -1: return true
var i = -2
for key, value in items(c.callbacks):
if s.matches(key):
doAssert s.offset == -1
s.offset = i
return true
dec i
let key = toKey(s)
if c.callbackIndex.contains(key):
let index = c.callbackIndex[key]
doAssert s.offset == -1
s.offset = -2 - index
result = true
else:
result = false
proc gen(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags = {}) =
when defined(nimCompilerStacktraceHints):