Преглед изворни кода

разбираюсь с выгрузкой/загрузкой параметров процедур и методов

kpmy пре 10 година
родитељ
комит
87a91dbdd6

BIN
code/XevConsole.oz





BIN
code/XevDemo10.oz


BIN
code/XevDemo11.oz


BIN
code/XevDemo12.oz


BIN
code/XevDemo13.oz


BIN
code/XevDemo14.oz


BIN
code/XevDemo15.oz


BIN
code/XevDemo16.oz


BIN
code/XevDemo17.oz


BIN
code/XevDemo18.oz


BIN
code/XevDemo19.oz


BIN
code/XevDemo20.oz











BIN
code/XevStrings.oz




+ 3 - 3
rt2/rules/assign.go

@@ -116,7 +116,7 @@ func assignSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
 		case node.FieldNode:
 		case node.FieldNode:
 			rt2.Push(rt2.New(l), f)
 			rt2.Push(rt2.New(l), f)
 			rt2.Assert(f, func(f frame.Frame) (bool, int) {
 			rt2.Assert(f, func(f frame.Frame) (bool, int) {
-				return rt2.ValueOf(f)[l.Adr()] != nil, 62
+				return rt2.ValueOf(f)[l.Adr()] != nil, 63
 			})
 			})
 			seq = func(f frame.Frame) (frame.Sequence, frame.WAIT) {
 			seq = func(f frame.Frame) (frame.Sequence, frame.WAIT) {
 				left = rt2.ValueOf(f)[l.Adr()]
 				left = rt2.ValueOf(f)[l.Adr()]
@@ -126,7 +126,7 @@ func assignSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
 		case node.IndexNode:
 		case node.IndexNode:
 			rt2.Push(rt2.New(a.Left()), f)
 			rt2.Push(rt2.New(a.Left()), f)
 			rt2.Assert(f, func(f frame.Frame) (bool, int) {
 			rt2.Assert(f, func(f frame.Frame) (bool, int) {
-				return rt2.ValueOf(f)[l.Adr()] != nil, 63
+				return rt2.ValueOf(f)[l.Adr()] != nil, 64
 			})
 			})
 			seq = func(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
 			seq = func(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
 				sc := f.Domain().Discover(context.SCOPE).(scope.Manager)
 				sc := f.Domain().Discover(context.SCOPE).(scope.Manager)
@@ -141,7 +141,7 @@ func assignSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
 			rt2.Push(rt2.New(a.Left()), f)
 			rt2.Push(rt2.New(a.Left()), f)
 			rt2.Assert(f, func(f frame.Frame) (bool, int) {
 			rt2.Assert(f, func(f frame.Frame) (bool, int) {
 				ok := rt2.ValueOf(f)[l.Adr()] != nil
 				ok := rt2.ValueOf(f)[l.Adr()] != nil
-				return ok, 64
+				return ok, 65
 			})
 			})
 			seq = func(f frame.Frame) (frame.Sequence, frame.WAIT) {
 			seq = func(f frame.Frame) (frame.Sequence, frame.WAIT) {
 				left = rt2.ValueOf(f)[a.Left().Adr()]
 				left = rt2.ValueOf(f)[a.Left().Adr()]

+ 1 - 0
rt2/rules/call.go

@@ -187,6 +187,7 @@ func callSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
 					})
 					})
 					assert.For(fn != nil, 40)
 					assert.For(fn != nil, 40)
 					proc := m.NodeByObject(fn)
 					proc := m.NodeByObject(fn)
+					assert.For(proc != nil, 40)
 					call(proc[0], nil)
 					call(proc[0], nil)
 					panic(0)
 					panic(0)
 				default:
 				default:

+ 8 - 1
rt2/scope/modern/ms.go

@@ -159,11 +159,18 @@ func (a *salloc) Allocate(n node.Node, final bool) {
 			}
 			}
 		}
 		}
 	}
 	}
+	ol := mod.Objects[n]
+	switch o := n.Object().(type) {
+	case object.ProcedureObject:
+		for l := o.Link(); l != nil; l = l.Link() {
+			ol = append(ol, l)
+		}
 
 
+	}
 	nl := newlvl()
 	nl := newlvl()
 	nl.ready = final
 	nl.ready = final
 	a.area.data = append(a.area.data, nl)
 	a.area.data = append(a.area.data, nl)
-	nl.alloc(mod, n, mod.Objects[n], skip)
+	nl.alloc(mod, n, ol, skip)
 }
 }
 
 
 func (a *salloc) Dispose(n node.Node) {
 func (a *salloc) Dispose(n node.Node) {