DEADSOFTWARE

Исправлены VAR-параметры, добавлены модули Files и Strings
[dsw-obn.git] / src / oberon.c
index 0fff8d7ba4c791846d662f1a6e728c6b2fbfe883..365f47d6a107ac047dbe13e5f3293a5ea138123d 100644 (file)
@@ -261,6 +261,7 @@ oberon_find_object_in_list(oberon_object_t * list, char * name)
        oberon_object_t * x = list;
        while(x -> next && strcmp(x -> next -> name, name) != 0)
        {
+               printf("inlist: '%s' != '%s'\n", x -> next -> name, name);
                x = x -> next;
        }
        return x -> next;
@@ -289,6 +290,7 @@ oberon_find_object(oberon_scope_t * scope, char * name, bool check_it)
 static oberon_object_t *
 oberon_create_object(oberon_scope_t * scope, char * name, int class, bool export, bool read_only)
 {
+       printf("oberon_create_object: '%s'\n", name);
        oberon_object_t * newvar = GC_MALLOC(sizeof *newvar);
        memset(newvar, 0, sizeof *newvar);
        newvar -> name = name;
@@ -316,6 +318,7 @@ oberon_define_object(oberon_scope_t * scope, char * name, int class, bool export
        oberon_object_t * x = scope -> list;
        while(x -> next && strcmp(x -> next -> name, name) != 0)
        {
+               printf("inlist: '%s' != '%s'\n", x -> next -> name, name);
                x = x -> next;
        }
 
@@ -1047,10 +1050,14 @@ oberon_cast_expr(oberon_context_t * ctx, oberon_expr_t * expr, oberon_type_t * p
                cast = oberon_new_item(MODE_CHAR, ctx -> char_type, true);
                cast -> item.integer = expr -> item.string[0];
        }
-       else
+       else if(!oberon_is_some_types(expr -> result, pref))
        {
                cast = oberon_new_operator(OP_CAST, pref, expr, NULL);
        }
+       else
+       {
+               cast = expr;
+       }
 
        return cast;
 }