Skip to content

Commit 0bf28f0

Browse files
author
Daniel Kroening
committed
introduce java_class_typet::componentt
This enables Java-specific extensions to components of Java classes (e.g., 'native', 'final').
1 parent 14f618c commit 0bf28f0

File tree

2 files changed

+40
-5
lines changed

2 files changed

+40
-5
lines changed

jbmc/src/java_bytecode/java_bytecode_convert_class.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ void java_bytecode_convert_classt::convert(
375375
{
376376
class_type.add_base(base);
377377
}
378-
class_typet::componentt base_class_field;
378+
java_class_typet::componentt base_class_field;
379379
base_class_field.type() = class_type.bases().at(0).type();
380380
base_class_field.set_name("@" + id2string(c.super_class));
381381
base_class_field.set_base_name("@" + id2string(c.super_class));
@@ -798,18 +798,18 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
798798
class_type.set_name(struct_tag_type_identifier);
799799

800800
class_type.components().reserve(3);
801-
class_typet::componentt base_class_component(
801+
java_class_typet::componentt base_class_component(
802802
"@java.lang.Object", struct_tag_typet("java::java.lang.Object"));
803803
base_class_component.set_pretty_name("@java.lang.Object");
804804
base_class_component.set_base_name("@java.lang.Object");
805805
class_type.components().push_back(base_class_component);
806806

807-
class_typet::componentt length_component("length", java_int_type());
807+
java_class_typet::componentt length_component("length", java_int_type());
808808
length_component.set_pretty_name("length");
809809
length_component.set_base_name("length");
810810
class_type.components().push_back(length_component);
811811

812-
class_typet::componentt data_component(
812+
java_class_typet::componentt data_component(
813813
"data", java_reference_type(java_type_from_char(l)));
814814
data_component.set_pretty_name("data");
815815
data_component.set_base_name("data");

jbmc/src/java_bytecode/java_types.h

+36-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,42 @@ inline bool can_cast_type<annotated_typet>(const typet &)
101101

102102
class java_class_typet:public class_typet
103103
{
104-
public:
104+
public:
105+
class componentt : public class_typet::componentt
106+
{
107+
public:
108+
componentt() = default;
109+
110+
componentt(const irep_idt &_name, typet _type)
111+
: class_typet::componentt(_name, std::move(_type))
112+
{
113+
}
114+
115+
/// is a method 'native'?
116+
bool get_is_native() const
117+
{
118+
return get_bool(ID_is_native_method);
119+
}
120+
121+
/// marks a method as 'native'
122+
void set_is_native(const bool is_native)
123+
{
124+
set(ID_is_native_method, is_native);
125+
}
126+
};
127+
128+
using componentst = std::vector<componentt>;
129+
130+
const componentst &components() const
131+
{
132+
return (const componentst &)(find(ID_components).get_sub());
133+
}
134+
135+
componentst &components()
136+
{
137+
return (componentst &)(add(ID_components).get_sub());
138+
}
139+
105140
const irep_idt &get_access() const
106141
{
107142
return get(ID_access);

0 commit comments

Comments
 (0)