1
0
Эх сурвалжийг харах

исправил вызов метода, все демки снова работают

kpmy 10 жил өмнө
parent
commit
f8babc80ab

+ 4 - 1
rt2/rules/call.go

@@ -165,15 +165,18 @@ func callSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
 				switch p.Object().Mode() {
 				case object.LOCAL_PROC, object.EXTERNAL_PROC:
 					proc := m.NodeByObject(n.Left().Object())
+					assert.For(proc != nil, 40)
 					call(proc[0], nil)
 				case object.TYPE_PROC:
 					var proc []node.Node
 					//sc := f.Domain().Discover(context.SCOPE).(scope.Manager)
 					return This(expectExpr(f, n.Right(), func(...IN) (out OUT) {
 						v := rt2.ValueOf(f)[n.Right().Adr()]
+						var dm context.Domain
 						var fn object.ProcedureObject
 						_, c := scope.Ops.TypeOf(v)
 						mod := rtm.ModuleOfType(f.Domain(), c)
+						dm = f.Domain().Discover(context.UNIVERSE).(context.Domain).Discover(mod.Name).(context.Domain)
 						ol := mod.Objects[mod.Enter]
 						for _, _po := range ol {
 							switch po := _po.(type) {
@@ -187,7 +190,7 @@ func callSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
 						assert.For(fn != nil, 40)
 						proc = mod.NodeByObject(fn)
 						assert.For(proc != nil, 40)
-						call(proc[0], nil)
+						call(proc[0], dm)
 						out.do = Tail(STOP)
 						out.next = LATER
 						return out

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

@@ -165,6 +165,17 @@ func (a *salloc) Allocate(n node.Node, final bool) {
 		for l := o.Link(); l != nil; l = l.Link() {
 			ol = append(ol, l)
 		}
+	case nil:
+		for _, o := range ol {
+			switch t := o.(type) {
+			case object.ProcedureObject:
+				for l := t.Link(); l != nil; l = l.Link() {
+					skip[l.Adr()] = l
+				}
+			}
+		}
+	default:
+		halt.As(100, reflect.TypeOf(o))
 
 	}
 	nl := newlvl()
@@ -220,7 +231,7 @@ func (a *salloc) Initialize(n node.Node, par scope.PARAM) (seq frame.Sequence, r
 			case node.ConstantNode:
 				v := newConst(nv)
 				l.v[l.k[o.Adr()]].Set(v)
-			case node.VariableNode:
+			case node.VariableNode, node.ParameterNode:
 				v := sm.Select(nv.Object().Adr())
 				l.v[l.k[o.Adr()]].Set(v)
 			case node.FieldNode: