bugfixes; step one for 'var T' as return type support

This commit is contained in:
Araq 2011-07-28 00:53:52 +02:00
commit 2f066395ba
27 changed files with 234 additions and 68 deletions

View file

@ -0,0 +1,23 @@
import tables
import lists
type
TEventArgs = object of TObject
type
TEventEmitter = object of TObject
events*: TTable[string, TDoublyLinkedList[proc(e : TEventArgs)]]
proc on*(emitter : var TEventEmitter, event : string, func : proc(e : TEventArgs)) =
if hasKey(emitter.events, event) == false:
var list: TDoublyLinkedList[proc(e : TEventArgs)]
add(emitter.events,event,list) #if not, add it.
append(emitter.events[event], func) #adds the function to the event's list. I get a error here too.
proc emit*(emitter : TEventEmitter, event : string, args : TEventArgs) =
for func in items(emitter.events[event]):
func(args) #call function with args.
proc initEmitter(emitter : TEventEmitter) =
emitter.events = initTable[string, TSinglyLinkedList[TObject]]()
var ee : TEventEmitter
ee.on("print", proc(e : TEventArgs) = echo("pie"))
ee.emit("print")

View file

@ -0,0 +1,15 @@
discard """
output: "45"
"""
var
g = 5
proc p(): var int =
var bla = addr(g) #: array [0..7, int]
result = bla[]
p() = 45
echo g

View file

@ -0,0 +1,20 @@
discard """
output: "45 hallo"
"""
type
TKachel = tuple[i: int, s: string]
TSpielwiese = object
k: seq[TKachel]
var
spielwiese: TSpielwiese
newSeq(spielwiese.k, 64)
proc at*(s: var TSpielwiese, x, y: int): var TKachel =
result = s.k[y * 8 + x]
spielwiese.at(3, 4) = (45, "hallo")
echo spielwiese.at(3,4)[0], " ", spielwiese.at(3,4)[1]

17
tests/reject/tvarres1.nim Normal file
View file

@ -0,0 +1,17 @@
discard """
file: "tvarres1.nim"
line: 12
errormsg: "address of 'bla' may not escape its stack frame"
"""
var
g = 5
proc p(): var int =
var bla: int
result = bla
p() = 45
echo g

16
tests/reject/tvarres2.nim Normal file
View file

@ -0,0 +1,16 @@
discard """
file: "tvarres1.nim"
line: 11
errormsg: "expression has no address"
"""
var
g = 5
proc p(): var int =
result = 89
p() = 45
echo g