* fixes #11812
* fixes #10899
* fixes #11367

(cherry picked from commit 1a77040278)
This commit is contained in:
Arne Döring
2019-07-27 07:21:47 +02:00
committed by narimiran
parent 6fdfdf48de
commit 08f094c487
2 changed files with 79 additions and 1 deletions

View File

@@ -2108,7 +2108,7 @@ proc paramTypesMatchAux(m: var TCandidate, f, a: PType,
# lift do blocks without params to lambdas
let p = c.graph
let lifted = c.semExpr(c, newProcNode(nkDo, argOrig.info, body = argOrig,
params = p.emptyNode, name = p.emptyNode, pattern = p.emptyNode,
params = nkFormalParams.newTree(p.emptyNode), name = p.emptyNode, pattern = p.emptyNode,
genericParams = p.emptyNode, pragmas = p.emptyNode, exceptions = p.emptyNode), {})
if f.kind == tyBuiltInTypeClass:
inc m.genericMatches

View File

@@ -0,0 +1,78 @@
discard """
output: '''
issue #11812
issue #10899
123
issue #11367
event consumed!
'''
"""
echo "issue #11812"
proc run(a: proc()) = a()
proc main() =
var test: int
run(proc() = test = 0)
run do:
test = 0
main()
echo "issue #10899"
proc foo(x: proc {.closure.}) =
x()
proc bar =
var x = 123
# foo proc = echo x #[ ok ]#
foo: echo x #[ SIGSEGV: Illegal storage access. (Attempt to read from nil?) ]#
bar()
echo "issue #11367"
type
EventCB = proc()
Emitter = object
cb: EventCB
Subscriber = object
discard
proc newEmitter(): Emitter =
result
proc on_event(self: var Emitter, cb: EventCB) =
self.cb = cb
proc emit(self: Emitter) =
self.cb()
proc newSubscriber(): Subscriber =
result
proc consume(self: Subscriber) =
echo "event consumed!"
proc main2() =
var emitter = newEmitter()
var subscriber = newSubscriber()
proc foo() =
subscriber.consume()
emitter.on_event() do:
subscriber.consume()
# this works
# emitter.on_event(foo)
emitter.emit()
main2()