X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=blobdiff_plain;f=csrc%2Foceani.mdc;h=5dee6d24c06ed4d99130e7569b16c7ee508a94b6;hp=f2cc254612da9316433537ee9e4dba91f128deb4;hb=c7a0514248ec30eeaf225aebd22a7fc2d8fedfad;hpb=f34d3718d70bd38d10eeeb1bb42d0f3e2e6c978b diff --git a/csrc/oceani.mdc b/csrc/oceani.mdc index f2cc254..5dee6d2 100644 --- a/csrc/oceani.mdc +++ b/csrc/oceani.mdc @@ -478,12 +478,12 @@ from the `exec_types` enum. if (loc->type == Xbinode) return __fput_loc(cast(binode,loc)->left, f) || __fput_loc(cast(binode,loc)->right, f); // NOTEST - return 0; + return 0; // NOTEST } static void fput_loc(struct exec *loc, FILE *f) { if (!__fput_loc(loc, f)) - fprintf(f, "??:??: "); + fprintf(f, "??:??: "); // NOTEST } Each different type of `exec` node needs a number of functions defined, @@ -867,7 +867,7 @@ which might be reported in error messages. va_start(ap, name); vasprintf(&t.txt, name, ap); va_end(ap); - t.len = strlen(name); + t.len = strlen(t.txt); return _add_type(c, t, proto, 1); } @@ -894,8 +894,10 @@ which might be reported in error messages. fprintf(f, "%.*s", type->name.len, type->name.txt); else if (type->print_type) type->print_type(type, f); + else if (type->name.len && type->anon) + fprintf(f, "\"%.*s\"", type->name.len, type->name.txt); else - fputs("*invalid*type*", f); + fputs("*invalid*type*", f); // NOTEST } static void val_init(struct type *type, struct value *val) @@ -2149,7 +2151,7 @@ correctly. } else fputs("???", stderr); // NOTEST } else - fputs("NOTVAR", stderr); + fputs("NOTVAR", stderr); // NOTEST break; ###### propagate exec cases @@ -3096,6 +3098,7 @@ further detailed when Expression Lists are introduced. e->var = v; if (v) { v->where_decl = e; + v->where_set = e; $0 = v; } else { v = var_ref(c, $1.txt); @@ -3124,7 +3127,7 @@ further detailed when Expression Lists are introduced. | Varlist ; ${ $0 = $<1; }$ Varlist -> Varlist ; ArgDecl ${ - $0 = new(binode); + $0 = new_pos(binode, $2); $0->op = List; $0->left = $right = $ IDENTIFIER : FormalType ${ { - struct variable *v = var_decl(c, $1.txt); - $0 = new(var); + struct variable *v = var_decl(c, $ID.txt); + $0 = new_pos(var, $ID); $0->var = v; + v->where_decl = $0; + v->where_set = $0; v->type = $op = Print; b->right = NULL; b->left = reorder_bilist($op = Print; b->right = reorder_bilist($left = NULL; } }$ | print ${ - $0 = b = new(binode); + $0 = b = new_pos(binode, $1); b->op = Print; b->left = NULL; b->right = NULL;