DEADSOFTWARE

Добавлен модуль SYSTEM и тип SYSTEM.TYPE
[dsw-obn.git] / src / backends / jvm / generator-jvm.c
index 24268e178a7474cf893ec5836b437fedc6197bcf..1ba25c9afe28ee69e957cb10b6c9572814f06176 100644 (file)
@@ -492,6 +492,7 @@ oberon_generator_init_type(oberon_context_t * ctx, oberon_type_t * type)
                case OBERON_TYPE_STRING:
                case OBERON_TYPE_SET:
                case OBERON_TYPE_NIL:
+               case OBERON_TYPE_SYSTEM_BYTE:
                        break;
                case OBERON_TYPE_RECORD:
                        m = type -> module -> gen_mod;
@@ -750,7 +751,10 @@ oberon_generate_begin_module(oberon_context_t * ctx)
        {
                if(x -> class == OBERON_CLASS_MODULE)
                {
-                       jvm_generate(p, 0, 0, "invokestatic %s/BEGIN()V", x -> module -> gen_mod -> class -> full_name);
+                       if(!x -> module -> intrinsic)
+                       {
+                               jvm_generate(p, 0, 0, "invokestatic %s/BEGIN()V", x -> module -> gen_mod -> class -> full_name);
+                       }
                }
                else if(x -> class == OBERON_CLASS_VAR)
                {
@@ -1044,13 +1048,16 @@ push_varptr(gen_proc_t * p, oberon_expr_t * expr)
                        jvm_generate_ldst_prepare(p, expr -> item.var -> gen_var);
                        break;
                case MODE_INDEX:
-                       push_item(p, (oberon_item_t *) expr -> item.parent);
+                       push_item(p, expr -> item.parent);
                        push_expr(p, expr -> item.args);
                        break;
                case MODE_FIELD:
-                       push_item(p, (oberon_item_t *) expr -> item.parent);
+                       push_item(p, expr -> item.parent);
                        jvm_generate_ldst_prepare(p, expr -> item.var -> gen_var);
                        break;
+               case MODE_DEREF:
+                       push_varptr(p, (oberon_expr_t *) expr -> item.parent);
+                       break;
                default:
                        gen_error("push_varptr: wat %i", expr -> item.mode);
                        break;