浏览代码

починил работу case и демо

kpmy 10 年之前
父节点
当前提交
528d37b1d8
共有 3 个文件被更改,包括 8 次插入6 次删除
  1. 1 1
      fw.go
  2. 2 1
      rt2/rules/case.go
  3. 5 4
      rt2/rules/expect.go

+ 1 - 1
fw.go

@@ -28,7 +28,7 @@ func close() {
 func main() {
 	flag.Parse()
 	if name == "" {
-		name = "XevDemo13"
+		name = "XevDemo14"
 	}
 	global := &stdDomain{god: true}
 	modList := rtmod.New()

+ 2 - 1
rt2/rules/case.go

@@ -5,6 +5,7 @@ import (
 	"fw/cp/node"
 	"fw/rt2"
 	"fw/rt2/frame"
+	"fw/rt2/scope"
 	"reflect"
 	"ypk/assert"
 )
@@ -49,7 +50,7 @@ func caseSeq(f frame.Frame) (frame.Sequence, frame.WAIT) {
 	}
 
 	return This(expectExpr(f, n.Left(), func(...IN) (out OUT) {
-		_x := rt2.DataOf(f)[n.Left()]
+		_x := scope.GoTypeFrom(rt2.ValueOf(f)[n.Left().Adr()])
 		switch x := _x.(type) {
 		case nil:
 			panic("nil")

+ 5 - 4
rt2/rules/expect.go

@@ -13,13 +13,13 @@ import (
 //функция вернет в данные родительского фрейма вычисленное значение expr
 func expectExpr(parent frame.Frame, expr node.Node, next Do) OUT {
 	assert.For(expr != nil, 20)
-	//	sm := rt2.ScopeOf(parent)
+	sm := rt2.ScopeOf(parent)
 	switch e := expr.(type) {
 	case node.ConstantNode:
-		rt2.DataOf(parent)[expr] = e.Data()
+		rt2.ValueOf(parent)[expr.Adr()] = sm.Provide(e.Data())(nil)
 		return OUT{do: next, next: NOW}
 	case node.VariableNode, node.ParameterNode:
-		//		rt2.DataOf(parent)[expr] = sm.Select(scope.Designator(expr))
+		rt2.ValueOf(parent)[expr.Adr()] = sm.Select(expr.Object().Adr())
 		return OUT{do: next, next: NOW}
 	case node.OperationNode, node.CallNode:
 		rt2.Push(rt2.New(expr), parent)
@@ -44,9 +44,10 @@ func expectExpr(parent frame.Frame, expr node.Node, next Do) OUT {
 			return OUT{do: next, next: NOW}
 		}
 		return OUT{do: wait, next: LATER}*/
+		panic(0)
 		return End()
 	case node.ProcedureNode:
-		rt2.DataOf(parent)[expr] = e.Object()
+		rt2.RegOf(parent)[expr] = e.Object()
 		return OUT{do: next, next: NOW}
 	default:
 		panic(fmt.Sprintln("not an expression", reflect.TypeOf(expr)))