From f1edff9c8dd643dfa7e16898611ec54c66b979a8 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 17 Apr 2018 08:55:46 +0100 Subject: [PATCH] Extract convert_getstatic function --- .../java_bytecode_convert_method.cpp | 79 +++++++++++-------- .../java_bytecode_convert_method_class.h | 7 ++ 2 files changed, 52 insertions(+), 34 deletions(-) diff --git a/jbmc/src/java_bytecode/java_bytecode_convert_method.cpp b/jbmc/src/java_bytecode/java_bytecode_convert_method.cpp index 56bc4f0b65e..ea8762b2606 100644 --- a/jbmc/src/java_bytecode/java_bytecode_convert_method.cpp +++ b/jbmc/src/java_bytecode/java_bytecode_convert_method.cpp @@ -1788,40 +1788,8 @@ codet java_bytecode_convert_methodt::convert_instructions( symbol_table.has_symbol(symbol_expr.get_identifier()), "getstatic symbol should have been created before method conversion"); - if(needed_lazy_methods) - { - if(arg0.type().id()==ID_symbol) - { - needed_lazy_methods->add_needed_class( - to_symbol_type(arg0.type()).get_identifier()); - } - else if(arg0.type().id()==ID_pointer) - { - const auto &pointer_type=to_pointer_type(arg0.type()); - if(pointer_type.subtype().id()==ID_symbol) - { - needed_lazy_methods->add_needed_class( - to_symbol_type(pointer_type.subtype()).get_identifier()); - } - } - else if(is_assertions_disabled_field) - { - needed_lazy_methods->add_needed_class(arg0.get_string(ID_class)); - } - } - results[0]=java_bytecode_promotion(symbol_expr); - - // Note this initializer call deliberately inits the class used to make - // the reference, which may be a child of the class that actually defines - // the field. - codet clinit_call=get_clinit_call(arg0.get_string(ID_class)); - if(clinit_call.get_statement()!=ID_skip) - c=clinit_call; - else if(is_assertions_disabled_field) - { - // set $assertionDisabled to false - c=code_assignt(symbol_expr, false_exprt()); - } + convert_getstatic( + arg0, symbol_expr, is_assertions_disabled_field, c, results); } else if(statement=="putfield") { @@ -2465,6 +2433,49 @@ codet java_bytecode_convert_methodt::convert_instructions( return code; } +void java_bytecode_convert_methodt::convert_getstatic( + exprt &arg0, + const symbol_exprt &symbol_expr, + const bool is_assertions_disabled_field, + codet &c, + exprt::operandst &results) +{ + if(needed_lazy_methods) + { + if(arg0.type().id() == ID_symbol) + { + needed_lazy_methods->add_needed_class( + to_symbol_type(arg0.type()).get_identifier()); + } + else if(arg0.type().id() == ID_pointer) + { + const auto &pointer_type = to_pointer_type(arg0.type()); + if(pointer_type.subtype().id() == ID_symbol) + { + needed_lazy_methods->add_needed_class( + to_symbol_type(pointer_type.subtype()).get_identifier()); + } + } + else if(is_assertions_disabled_field) + { + needed_lazy_methods->add_needed_class(arg0.get_string(ID_class)); + } + } + results[0] = java_bytecode_promotion(symbol_expr); + + // Note this initializer call deliberately inits the class used to make + // the reference, which may be a child of the class that actually defines + // the field. + codet clinit_call = get_clinit_call(arg0.get_string(ID_class)); + if(clinit_call.get_statement() != ID_skip) + c = clinit_call; + else if(is_assertions_disabled_field) + { + // set $assertionDisabled to false + c = code_assignt(symbol_expr, false_exprt()); + } +} + exprt::operandst &java_bytecode_convert_methodt::convert_cmp2( const irep_idt &statement, const exprt::operandst &op, diff --git a/jbmc/src/java_bytecode/java_bytecode_convert_method_class.h b/jbmc/src/java_bytecode/java_bytecode_convert_method_class.h index 65e5458ec08..ccff0a72694 100644 --- a/jbmc/src/java_bytecode/java_bytecode_convert_method_class.h +++ b/jbmc/src/java_bytecode/java_bytecode_convert_method_class.h @@ -380,5 +380,12 @@ class java_bytecode_convert_methodt:public messaget const irep_idt &statement, const exprt::operandst &op, exprt::operandst &results) const; + + void convert_getstatic( + const exprt &arg0, + const symbol_exprt &symbol_expr, + bool is_assertions_disabled_field, + codet &c, + exprt::operandst &results); }; #endif