]> ocean-lang.org Git - ocean/blobdiff - csrc/oceani.mdc
oceani: improve content in some error messages.
[ocean] / csrc / oceani.mdc
index f2cc254612da9316433537ee9e4dba91f128deb4..5dee6d24c06ed4d99130e7569b16c7ee508a94b6 100644 (file)
@@ -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 = $<Vl;
                $0->right = $<AD;
@@ -3138,9 +3141,11 @@ further detailed when Expression Lists are introduced.
 
        $*var
        ArgDecl -> 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 = $<FT;
        } }$
 
@@ -4174,19 +4179,19 @@ printed.
 ###### SimpleStatement Grammar
 
        | print ExpressionList ${
-               $0 = b = new(binode);
+               $0 = b = new_pos(binode, $1);
                b->op = Print;
                b->right = NULL;
                b->left = reorder_bilist($<EL);
        }$
        | print ExpressionList , ${ {
-               $0 = b = new(binode);
+               $0 = b = new_pos(binode, $1);
                b->op = Print;
                b->right = reorder_bilist($<EL);
                b->left = NULL;
        } }$
        | print ${
-               $0 = b = new(binode);
+               $0 = b = new_pos(binode, $1);
                b->op = Print;
                b->left = NULL;
                b->right = NULL;