]> ocean-lang.org Git - ocean/blobdiff - csrc/oceani.mdc
oceani: add an 'interp' case for Func
[ocean] / csrc / oceani.mdc
index 122bcbcc6338ac33772f83c79b7256942564ef47..c820d39153674dcc75fcb2fa5022e60c2624ffce 100644 (file)
@@ -3945,19 +3945,21 @@ casepart` to track a list of case parts.
 
        $*binode
        // This scope is closed in CondStatement
-       WhilePart -> while UseBlock OptNL do Block ${
+       WhilePart -> while UseBlock OptNL do OpenBlock ${
                        $0 = new(binode);
                        $0->op = Loop;
                        $0->left = $<UB;
-                       $0->right = $<Bl;
+                       $0->right = $<OB;
+                       var_block_close(c, CloseSequential);
                        var_block_close(c, CloseSequential);
                }$
-               | while OpenScope Expression ColonBlock ${
+               | while OpenScope Expression OpenScope ColonBlock ${
                        $0 = new(binode);
                        $0->op = Loop;
                        $0->left = $<Exp;
                        $0->right = $<CB;
                        var_block_close(c, CloseSequential);
+                       var_block_close(c, CloseSequential);
                }$
 
        $cond_statement
@@ -4501,13 +4503,16 @@ analysis is a bit more interesting at this level.
                        }
                        al = cast(binode, al->right);
                }
-               v = interp_exec(c, p->right, &vtype);
+               v = interp_exec(c, p, &vtype);
                free_value(vtype, &v);
        }
 
 ###### interp binode cases
-       case List:
-       case Func: abort();     // NOTEST
+       case List: abort();     // NOTEST
+
+       case Func:
+               rv = interp_exec(c, b->right, &rvtype);
+               break;
 
 ## And now to test it out.