From: NeilBrown Date: Mon, 6 Dec 2021 06:29:32 +0000 (+1100) Subject: oceani: improve content in some error messages. X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=commitdiff_plain;h=c7a0514248ec30eeaf225aebd22a7fc2d8fedfad oceani: improve content in some error messages. In particular: use new_pos() instead of new() where appropriate set where_set where necessary set type name properly in anon types Signed-off-by: NeilBrown --- diff --git a/csrc/oceani-tests.mdc b/csrc/oceani-tests.mdc index f9dce40..d721476 100644 --- a/csrc/oceani-tests.mdc +++ b/csrc/oceani-tests.mdc @@ -1027,8 +1027,8 @@ various places that `type_err()` are called. print foo ###### output: bad_main - .tmp.code:??:??: error: expected []string but variable 'foo' is string - .tmp.code:??:??: info: this is where 'NOTVAR' was set to string + .tmp.code:2:10: error: expected []string but variable 'foo' is string + .tmp.code:2:10: info: this is where 'foo' was set to string oceani: main has wrong type. Test for type errors with functions @@ -1077,7 +1077,7 @@ Test for type errors with functions ###### output: func_err_args .tmp.code:34:5: error: function cannot return value of type foo - .tmp.code:28:14: error: expected string, found none + .tmp.code:28:8: error: expected string, found none .tmp.code:25:8: error: expected string, found number .tmp.code:15:14: error: insufficient arguments to function. .tmp.code:16:14: error: expected number found string @@ -1088,8 +1088,8 @@ Test for type errors with functions .tmp.code:20:14: error: attempt to call a non-function. .tmp.code:20:32: error: expected string found number .tmp.code:20:28: error: insufficient arguments to function. - .tmp.code:21:20: error: expected *invalid*type* but variable 'test2' is *invalid*type* - .tmp.code:??:??: info: this is where 'NOTVAR' was set to *invalid*type* + .tmp.code:21:20: error: expected "func test1" but variable 'test2' is "func test2" + .tmp.code:5:5: info: this is where 'test2' was set to "func test2" .tmp.code:10:14: error: variable used but not declared: a .tmp.code:10:17: error: variable used but not declared: z oceani: type error in program - not running. 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;