X-Git-Url: https://ocean-lang.org/code/?a=blobdiff_plain;f=csrc%2Foceani.mdc;h=f5983440c25ea87ef0dcae5489b70012f40d3e12;hb=5b077f5f80cd36fed3b006dd5b0b1cc9025c1b22;hp=f36bbdb13593c6c306920bacd7d1d619513c2957;hpb=51ba21ffd913b8eb700699567567560f99a2aa9c;p=ocean diff --git a/csrc/oceani.mdc b/csrc/oceani.mdc index f36bbdb..f598344 100644 --- a/csrc/oceani.mdc +++ b/csrc/oceani.mdc @@ -1096,7 +1096,7 @@ list of in_scope names. v = t->previous; free_value(t->val); - if (t->min_depth == 0) + if (t->depth == 0) // This is a global constant free_exec(t->where_decl); free(t); @@ -2067,6 +2067,7 @@ function will be needed. $0->f.type = $<3; $0->f.init = val_init($3); }$ + | ERROR ${ tok_err(c, "Syntax error in struct field", &$1); }$ ###### forward decls static void structure_print_type(struct type *t, FILE *f); @@ -2343,8 +2344,8 @@ link to find the primary instance. /* This might be a label - allocate a var just in case */ v = var_decl(c, $1.txt); if (v) { - v->val = val_prepare(Tlabel); - v->val.label = &v->val; + v->val = val_prepare(Tnone); + v->where_decl = $0; v->where_set = $0; } } @@ -2407,6 +2408,9 @@ link to find the primary instance. v->where_decl, NULL, 0, NULL); return v->val.type; } + if (v->val.type == Tnone && v->where_decl == prog) + type_err(c, "error: variable used but not declared: %v", + prog, NULL, 0, NULL); if (v->val.type == NULL) { if (type && *ok != 0) { v->val = val_prepare(type); @@ -3074,6 +3078,7 @@ is in-place. | SimpleStatements ; ${ $0 = $<1; }$ SimpleStatement -> pass ${ $0 = NULL; }$ + | ERROR ${ tok_err(c, "Syntax error in statement", &$1); }$ ## SimpleStatement Grammar ###### print binode cases @@ -3385,6 +3390,14 @@ function. $0 = new_pos(binode, $1); $0->op = Use; $0->right = $<2; + if ($0->right->type == Xvar) { + struct var *v = cast(var, $0->right); + if (v->var->val.type == Tnone) { + /* Convert this to a label */ + v->var->val = val_prepare(Tlabel); + v->var->val.label = &v->var->val; + } + } }$ ###### print binode cases @@ -3917,6 +3930,10 @@ various declarations in the parse context. | DeclareProgram | DeclareStruct | NEWLINE + | ERROR NEWLINE ${ + tok_err(c, + "error: unhandled parse error", &$1); + }$ ## top level grammar @@ -3990,6 +4007,7 @@ searching through for the Nth constant for decreasing N. v->val = interp_exec($5); } } }$ + | ERROR NEWLINE ${ tok_err(c, "Syntax error in constant", &$1); }$ ###### print const decls { @@ -4058,7 +4076,7 @@ analysis is a bit more interesting at this level. $0->left = reorder_bilist($<3); $0->right = $<4; var_block_close(c, CloseSequential); - if (c->scope_stack) abort(); + if (c->scope_stack && !c->parse_error) abort(); }$ | ERROR ${ tok_err(c,