Skip to content

Commit 3bad97a

Browse files
Remove java_bytecode dependency from remove_instanceof
1 parent 35693b4 commit 3bad97a

File tree

7 files changed

+38
-4
lines changed

7 files changed

+38
-4
lines changed

src/ansi-c/ansi_c_language.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ class ansi_c_languaget:public languaget
6363
exprt &expr,
6464
const namespacet &ns) override;
6565

66+
symbol_typet root_base_class_type() override
67+
{
68+
// does not exist
69+
UNREACHABLE;
70+
}
71+
6672
std::unique_ptr<languaget> new_language() override
6773
{ return util_make_unique<ansi_c_languaget>(); }
6874

src/cpp/cpp_language.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ class cpp_languaget:public languaget
7575
exprt &expr,
7676
const namespacet &ns) override;
7777

78+
symbol_typet root_base_class_type() override
79+
{
80+
// TODO: need a synthetic wrapper with a member that holds the type_info
81+
UNIMPLEMENTED;
82+
}
83+
7884
std::unique_ptr<languaget> new_language() override
7985
{ return util_make_unique<cpp_languaget>(); }
8086

src/goto-programs/remove_instanceof.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ Author: Chris Smowton, [email protected]
1414
#include <goto-programs/class_hierarchy.h>
1515
#include <goto-programs/class_identifier.h>
1616

17+
#include <langapi/mode.h>
18+
#include <langapi/language.h>
19+
1720
#include <util/fresh_symbol.h>
18-
#include <java_bytecode/java_types.h>
1921

2022
#include <sstream>
2123

@@ -100,9 +102,13 @@ std::size_t remove_instanceoft::lower_instanceof(
100102
// We actually insert the assignment instruction after the existing one.
101103
// This will briefly be ill-formed (use before def of instanceof_tmp) but the
102104
// two will subsequently switch places. This makes sure that the inserted
103-
// assignement doesn't end up before any labels pointing at this instruction.
104-
symbol_typet jlo=to_symbol_type(java_lang_object_type().subtype());
105-
exprt object_clsid=get_class_identifier_field(check_ptr, jlo, ns);
105+
// assignment doesn't end up before any labels pointing at this instruction.
106+
const irep_idt &mode = get_mode_from_identifier(
107+
ns, to_symbol_type(target_type).get_identifier());
108+
const auto language = get_language_from_mode(mode);
109+
CHECK_RETURN(language);
110+
exprt object_clsid =
111+
get_class_identifier_field(check_ptr, language->root_base_class_type(), ns);
106112

107113
symbolt &newsym = get_fresh_aux_symbol(
108114
object_clsid.type(),

src/java_bytecode/java_bytecode_language.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,6 +1087,11 @@ bool java_bytecode_languaget::to_expr(
10871087
return true; // fail for now
10881088
}
10891089

1090+
symbol_typet java_bytecode_languaget::root_base_class_type()
1091+
{
1092+
return to_symbol_type(java_lang_object_type().subtype());
1093+
}
1094+
10901095
java_bytecode_languaget::~java_bytecode_languaget()
10911096
{
10921097
}

src/java_bytecode/java_bytecode_language.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ class java_bytecode_languaget:public languaget
127127
exprt &expr,
128128
const namespacet &ns) override;
129129

130+
symbol_typet root_base_class_type() override;
131+
130132
std::unique_ptr<languaget> new_language() override
131133
{ return util_make_unique<java_bytecode_languaget>(); }
132134

src/jsil/jsil_language.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ class jsil_languaget:public languaget
6060
exprt &expr,
6161
const namespacet &ns) override;
6262

63+
virtual symbol_typet root_base_class_type() override
64+
{
65+
// unused
66+
UNREACHABLE;
67+
}
68+
6369
virtual std::unique_ptr<languaget> new_language() override
6470
{ return util_make_unique<jsil_languaget>(); }
6571

src/langapi/language.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ class languaget:public messaget
156156
exprt &expr,
157157
const namespacet &ns)=0;
158158

159+
/// returns the class type that contains RTTI
160+
virtual symbol_typet root_base_class_type() = 0;
161+
159162
virtual std::unique_ptr<languaget> new_language()=0;
160163

161164
void set_should_generate_opaque_method_stubs(bool should_generate_stubs);

0 commit comments

Comments
 (0)