Sfoglia il codice sorgente

перенес выполнение финализаторов на момент очередного входа в процедуру

kpmy 10 anni fa
parent
commit
9700a2a25e
3 ha cambiato i file con 13 aggiunte e 6 eliminazioni
  1. BIN
      code/XevTest0.oz
  2. 1 1
      fw.go
  3. 12 5
      rt2/rules/table.go

BIN
code/XevTest0.oz


+ 1 - 1
fw.go

@@ -27,7 +27,7 @@ func close() {
 	utils.PrintFrame(heap)
 	utils.PrintFrame("^^^^")
 	fmt.Println("closed")
-	fmt.Println(heap)
+	//fmt.Println(heap)
 }
 
 func main() {

+ 12 - 5
rt2/rules/table.go

@@ -22,7 +22,17 @@ func prologue(n node.Node) frame.Sequence {
 	//fmt.Println(reflect.TypeOf(n))
 	switch next := n.(type) {
 	case node.EnterNode:
-		return enterSeq
+		var tail frame.Sequence
+		tail = func(f frame.Frame) (frame.Sequence, frame.WAIT) {
+			q := f.Root().Queue()
+			if q != nil {
+				f.Root().PushFor(q, nil)
+				return tail, frame.NOW
+			} else {
+				return enterSeq, frame.NOW
+			}
+		}
+		return tail
 	case node.AssignNode:
 		return assignSeq
 	case node.OperationNode:
@@ -107,10 +117,7 @@ func epilogue(n node.Node) frame.Sequence {
 			next := n.Link()
 			//fmt.Println("from", reflect.TypeOf(n))
 			//fmt.Println("next", reflect.TypeOf(next))
-			q := f.Root().Queue()
-			if q != nil {
-				f.Root().PushFor(q, nil)
-			} else if next != nil {
+			if next != nil {
 				f.Root().PushFor(rt2.New(next), f.Parent())
 			}
 			return frame.End()