Bläddra i källkod

починил вызов методов

kpmy 10 år sedan
förälder
incheckning
fa781bd962
3 ändrade filer med 18 tillägg och 13 borttagningar
  1. 1 1
      fw.go
  2. 15 12
      rt2/rules/call.go
  3. 2 0
      rt2/scope/modern/val.go

+ 1 - 1
fw.go

@@ -33,7 +33,7 @@ func close() {
 func main() {
 	flag.Parse()
 	if name == "" {
-		name = "XevInit"
+		name = "XevDemo19"
 	}
 	global := &stdDomain{god: true}
 	global.global = global

+ 15 - 12
rt2/rules/call.go

@@ -167,29 +167,32 @@ func callSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
 					proc := m.NodeByObject(n.Left().Object())
 					call(proc[0], nil)
 				case object.TYPE_PROC:
-					sc := f.Domain().Discover(context.SCOPE).(scope.Manager)
-					var fn object.ProcedureObject
-					var dm context.Domain
-					sc.Select(n.Right().Object().Adr(), func(v scope.Value) {
+					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 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) {
 							case object.ProcedureObject:
-								if po.Name() == p.Object().Name() && po.Link().Complex() == c {
+								if po.Name() == p.Object().Name() && po.Link() != nil && po.Link().Complex() == c {
 									fn = po
 								}
 
 							}
 						}
-					})
-					assert.For(fn != nil, 40)
-					proc := m.NodeByObject(fn)
-					assert.For(proc != nil, 40)
-					call(proc[0], nil)
-					panic(0)
+						assert.For(fn != nil, 40)
+						proc = mod.NodeByObject(fn)
+						assert.For(proc != nil, 40)
+						call(proc[0], nil)
+						out.do = Tail(STOP)
+						out.next = LATER
+						return out
+					}))
+
 				default:
 					halt.As(100, "wrong proc mode ", p.Object().Mode())
 				}

+ 2 - 0
rt2/scope/modern/val.go

@@ -1383,6 +1383,8 @@ func (o *ops) TypeOf(x scope.Value) (object.Type, object.ComplexType) {
 		if v.val != nil {
 			return v.val.link.Type(), v.val.link.Complex()
 		}
+	case *rec:
+		return v.link.Type(), v.link.Complex()
 	default:
 		halt.As(100, reflect.TypeOf(v))
 	}