Skip to content

Commit e3ff312

Browse files
thk123Matthias Güdemann
thk123
authored and
Matthias Güdemann
committed
Use the strcutured classes to simplify and make more explict the code
1 parent 3ac7d09 commit e3ff312

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/java_bytecode/java_bytecode_parser.cpp

+17-11
Original file line numberDiff line numberDiff line change
@@ -1829,9 +1829,7 @@ java_bytecode_parsert::parse_method_handle(const pool_entryt &entry)
18291829
(entry.ref1 > 0 && entry.ref1 < 10),
18301830
"reference kind of Methodhandle must be in the range of 1 to 9");
18311831

1832-
const pool_entryt ref_entry = pool_entry(entry.ref2);
1833-
const auto &class_entry = pool_entry(ref_entry.ref1);
1834-
const auto &nameandtype_entry = pool_entry(ref_entry.ref2);
1832+
const base_ref_infot ref_entry{pool_entry(entry.ref2)};
18351833

18361834
method_handle_kindt method_handle_kind = (method_handle_kindt)entry.ref1;
18371835
switch(method_handle_kind)
@@ -1841,35 +1839,43 @@ java_bytecode_parsert::parse_method_handle(const pool_entryt &entry)
18411839
case method_handle_kindt::REF_putField:
18421840
case method_handle_kindt::REF_putStatic:
18431841
{
1844-
INVARIANT(ref_entry.tag == CONSTANT_Fieldref, "4.4.2");
1842+
INVARIANT(ref_entry.get_tag() == CONSTANT_Fieldref, "4.4.2");
18451843
break;
18461844
}
18471845
case method_handle_kindt::REF_invokeVirtual:
18481846
case method_handle_kindt::REF_newInvokeSpecial:
18491847
{
18501848

1851-
INVARIANT(ref_entry.tag == CONSTANT_Methodref, "4.4.2");
1849+
INVARIANT(ref_entry.get_tag() == CONSTANT_Methodref, "4.4.2");
18521850
break;
18531851
}
18541852
case method_handle_kindt::REF_invokeStatic:
18551853
case method_handle_kindt::REF_invokeSpecial:
18561854
{
18571855
INVARIANT(
1858-
ref_entry.tag == CONSTANT_Methodref ||
1859-
ref_entry.tag == CONSTANT_InterfaceMethodref,
1856+
ref_entry.get_tag() == CONSTANT_Methodref ||
1857+
ref_entry.get_tag() == CONSTANT_InterfaceMethodref,
18601858
"4.4.2");
18611859
break;
18621860
}
18631861
case method_handle_kindt::REF_invokeInterface:
18641862
{
1865-
INVARIANT(ref_entry.tag == CONSTANT_InterfaceMethodref,"");
1863+
INVARIANT(ref_entry.get_tag() == CONSTANT_InterfaceMethodref,"");
18661864
break;
18671865
}
18681866
}
1867+
1868+
const std::function<pool_entryt &(u2)> pool_entry_lambda =
1869+
[this](u2 index) -> pool_entryt & { return pool_entry(index); };
1870+
1871+
const class_infot &class_entry=ref_entry.get_class(pool_entry_lambda);
1872+
const name_and_type_infot &name_and_type =
1873+
ref_entry.get_name_and_type(pool_entry_lambda);
1874+
18691875
const std::string method_name =
1870-
id2string(pool_entry(class_entry.ref1).s) + "." +
1871-
id2string(pool_entry(nameandtype_entry.ref1).s) +
1872-
id2string(pool_entry(nameandtype_entry.ref2).s);
1876+
class_entry.get_name(pool_entry_lambda) + "." +
1877+
name_and_type.get_name(pool_entry_lambda) +
1878+
name_and_type.get_descriptor(pool_entry_lambda);
18731879

18741880
if(
18751881
method_name ==

0 commit comments

Comments
 (0)