mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-04 20:17:42 +00:00
* fixes #11812
* fixes #10899
* fixes #11367
(cherry picked from commit 1a77040278)
This commit is contained in:
@@ -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
|
||||
|
||||
78
tests/misc/tlambdadonotation.nim
Normal file
78
tests/misc/tlambdadonotation.nim
Normal 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()
|
||||
Reference in New Issue
Block a user