X-Git-Url: https://deadsoftware.ru/gitweb?p=dsw-obn.git;a=blobdiff_plain;f=src%2Foberon.c;h=82566471b9a11b929d832f2d51ef355aa4d23dfc;hp=5abb2090477536027219f41e2e0b9e78b69d9ab5;hb=dd188cb697c08d52aefb144a4f3a943dbf3388c5;hpb=f34b0f1f6a54eda1ad328576e48d92b96ad160ac diff --git a/src/oberon.c b/src/oberon.c index 5abb209..8256647 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) { @@ -2447,6 +2462,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 +2484,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); @@ -4958,7 +4979,10 @@ oberon_create_context(ModuleImportCallback import_module) /* Types */ oberon_new_intrinsic_type(ctx, "BYTE", ctx -> system_byte_type); oberon_new_intrinsic_type(ctx, "PTR", ctx -> system_ptr_type); + oberon_new_intrinsic_type(ctx, "INT8", ctx -> byte_type); + oberon_new_intrinsic_type(ctx, "INT16", ctx -> shortint_type); oberon_new_intrinsic_type(ctx, "INT32", ctx -> int_type); + oberon_new_intrinsic_type(ctx, "INT64", ctx -> longint_type); oberon_new_intrinsic_type(ctx, "SET32", ctx -> set_type); /* Functions */