X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fbackends%2Fjvm%2Fgenerator-jvm.c;h=e6a26bdbb3d8230733f43e5f4232869f3fea786d;hb=72048038b5be32cc940c8452541b8bb3e75958a9;hp=0295e47c145d4081113e9271d78c12af4da5e2a8;hpb=ffca530414fc4c94c3d95b9bc52f4d0cee3326e9;p=dsw-obn.git diff --git a/src/backends/jvm/generator-jvm.c b/src/backends/jvm/generator-jvm.c index 0295e47..e6a26bd 100644 --- a/src/backends/jvm/generator-jvm.c +++ b/src/backends/jvm/generator-jvm.c @@ -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;