X-Git-Url: http://deadsoftware.ru/gitweb?p=dsw-obn.git;a=blobdiff_plain;f=src%2Foberon.c;h=931a30724697a03476cff779779b3385bad5f2b4;hp=1d9e670e82fcc1c2e197b7bcbeea9b91cc935782;hb=HEAD;hpb=8212ec191c6700e5f0ceb7600b6d30441ca2bc88 diff --git a/src/oberon.c b/src/oberon.c index 1d9e670..931a307 100644 --- a/src/oberon.c +++ b/src/oberon.c @@ -305,6 +305,21 @@ oberon_find_object(oberon_scope_t * scope, char * name, bool check_it) return result; } +static oberon_object_t * +oberon_find_object_in_scope(oberon_scope_t * scope, char * name, bool check_it) +{ + oberon_object_t * result = NULL; + + result = oberon_find_object_in_list(scope -> list, name); + + if(check_it && result == NULL) + { + oberon_error(scope -> ctx, "undefined ident %s", name); + } + + return result; +} + static oberon_object_t * oberon_create_object(oberon_scope_t * scope, char * name, int class, bool export, bool read_only) { @@ -375,6 +390,7 @@ oberon_init_scaner(oberon_context_t * ctx, oberon_scanner_t * s) ctx -> xloc.col = 1; ctx -> loc = ctx -> xloc; ctx -> c = ctx -> code[ctx -> code_index]; + oberon_set_line(ctx, 1); } static void @@ -706,12 +722,14 @@ oberon_get_lined_char(oberon_context_t * ctx) } ctx -> xloc.line += 1; ctx -> xloc.col = 1; + oberon_set_line(ctx, ctx -> xloc.line); } else if(ctx -> c == 0xA) { oberon_get_char(ctx); ctx -> xloc.line += 1; ctx -> xloc.col = 1; + oberon_set_line(ctx, ctx -> xloc.line); } else { @@ -2447,6 +2465,12 @@ oberon_proc_decl(oberon_context_t * ctx) char * name; int export; int read_only; + + if(ctx -> token == STAR) + { + oberon_assert_token(ctx, STAR); + } + name = oberon_assert_ident(ctx); oberon_def(ctx, &export, &read_only); @@ -2463,7 +2487,7 @@ oberon_proc_decl(oberon_context_t * ctx) oberon_close_scope(ctx -> decl); oberon_object_t * proc; - proc = oberon_find_object(ctx -> decl, name, 0); + proc = oberon_find_object_in_scope(ctx -> decl, name, 0); if(proc == NULL) { proc = oberon_define_object(ctx -> decl, name, OBERON_CLASS_PROC, export, read_only, false);