DEADSOFTWARE

Добавлен оператор IS
[dsw-obn.git] / src / backends / jvm / generator-jvm.c
index 0295e47c145d4081113e9271d78c12af4da5e2a8..e6a26bdbb3d8230733f43e5f4232869f3fea786d 100644 (file)
@@ -1036,6 +1036,26 @@ oberon_generator_init_var(oberon_context_t * ctx, oberon_object_t * var)
        }
 }
 
+void
+oberon_generator_init_temp_var(oberon_context_t * ctx, oberon_object_t * var)
+{
+       assert(var -> class == OBERON_CLASS_VAR);
+
+       gen_var_t * v = oberon_generator_new_var();
+       var -> gen_var = v;
+
+       gen_module_t * m;
+       m = ctx -> mod -> gen_mod;
+
+       gen_proc_t * p;
+       p = m -> class -> p;
+
+       bool wide;
+       wide = jvm_is_wide_type(var -> type);
+
+       jvm_generate_and_init_local_var(v, p, wide);
+}
+
 void
 oberon_generator_init_proc(oberon_context_t * ctx, oberon_object_t * proc)
 {
@@ -1735,6 +1755,13 @@ push_operator(gen_proc_t * p, oberon_oper_t * oper)
                case OP_LOGIC_AND:
                        jvm_generate_logical_and(p, oper -> left, oper -> right);
                        break;
+
+               case OP_IS:
+                       preq = oper -> right -> result;
+                       char * cname = jvm_get_class_full_name(preq);
+                       push_expr(p, oper -> left);
+                       jvm_generate(p, 1, 1, "instanceof %s", cname);
+                       break;
                default:
                        gen_error("push_oper: unk op %i", op);
                        break;