Skip to content

Commit 45a3e79

Browse files
author
thk123
committed
Addressing review comments
Cleaned up some logic Removed some redundant tests relating to java.lang.Object Added missing documentation for helper functions Made the validate_lambda_assignment take a single assignment as the calling functions are already checking that there is precisely one)
1 parent 397c14e commit 45a3e79

File tree

1 file changed

+31
-18
lines changed

1 file changed

+31
-18
lines changed

unit/java_bytecode/java_bytecode_convert_method/convert_invoke_dynamic.cpp

+31-18
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ struct lambda_assignment_test_datat
4343
/// \param symbol_table: The loaded symbol table
4444
/// \param instructions: The instructions of the method that calls invokedynamic
4545
/// \param test_data: The parameters for the test
46+
/// \param lambda_assignment: The assignment statement for the lambda method
4647
void validate_lambda_assignment(
4748
const symbol_tablet &symbol_table,
4849
const std::vector<codet> &instructions,
4950
const lambda_assignment_test_datat &test_data,
50-
const require_goto_statements::pointer_assignment_locationt
51-
&lambda_assignment)
51+
const code_assignt &lambda_assignment)
5252
{
5353
const typecast_exprt &rhs_value = require_expr::require_typecast(
54-
lambda_assignment.non_null_assignments[0].rhs());
54+
lambda_assignment.rhs());
5555

5656
const symbol_exprt &rhs_symbol =
5757
require_expr::require_symbol(rhs_value.op0());
@@ -85,8 +85,8 @@ void validate_lambda_assignment(
8585
const class_typet &tmp_lambda_class_type =
8686
require_type::require_complete_class(lambda_implementor_type_symbol.type);
8787

88-
REQUIRE(tmp_lambda_class_type.has_base(test_data.lambda_interface));
8988
REQUIRE(tmp_lambda_class_type.has_base("java::java.lang.Object"));
89+
REQUIRE(tmp_lambda_class_type.has_base(test_data.lambda_interface));
9090

9191
class_hierarchyt class_hierarchy;
9292
class_hierarchy(symbol_table);
@@ -111,16 +111,6 @@ void validate_lambda_assignment(
111111
const symbol_typet &super_class_type = require_type::require_symbol(
112112
super_class_component.type(), "java::java.lang.Object");
113113

114-
const symbolt &base_class_symbol = require_symbol::require_symbol_exists(
115-
symbol_table, super_class_type.get_identifier());
116-
117-
REQUIRE(base_class_symbol.is_type);
118-
const class_typet &super_class_type_struct =
119-
require_type::require_incomplete_class(base_class_symbol.type);
120-
121-
require_type::require_component(super_class_type_struct, "@class_identifier");
122-
// TODO verify the components of the class have been set correctly
123-
124114
THEN("The function in the class should call the lambda method")
125115
{
126116
const irep_idt method_identifier =
@@ -175,6 +165,11 @@ void validate_lambda_assignment(
175165

176166
/// Find the assignment to the lambda and then call validate_lamdba_assignement
177167
/// for full validation.
168+
/// \param symbol_table: The loaded symbol table
169+
/// \param instructions: The instructions of the method that calls invokedynamic
170+
/// \param test_data: The parameters for the test
171+
/// \param lambda_variable_id: A regex matching the name of the variable which
172+
/// stores the lambda
178173
void validate_local_variable_lambda_assignment(
179174
const symbol_tablet &symbol_table,
180175
const std::vector<codet> &instructions,
@@ -189,7 +184,10 @@ void validate_local_variable_lambda_assignment(
189184
REQUIRE_FALSE(lambda_assignment.null_assignment.has_value());
190185

191186
validate_lambda_assignment(
192-
symbol_table, instructions, test_data, lambda_assignment);
187+
symbol_table,
188+
instructions,
189+
test_data,
190+
lambda_assignment.non_null_assignments[0]);
193191
}
194192

195193
SCENARIO(
@@ -315,7 +313,6 @@ SCENARIO(
315313
test_data.lambda_interface_method_descriptor =
316314
".Execute:()Ljava/lang/Object;";
317315

318-
//"java::LocalLambdas.lambda$test$0:()V"
319316
test_data.lambda_function_id =
320317
"java::LocalLambdas.lambda$test$4:()Ljava/lang/Object;";
321318
test_data.expected_params = {};
@@ -356,6 +353,11 @@ SCENARIO(
356353

357354
/// Find the assignment to the lambda in the constructor
358355
/// and then call validate_lamdba_assignement for full validation.
356+
/// \param symbol_table: The loaded symbol table
357+
/// \param instructions: The instructions of the method that calls invokedynamic
358+
/// \param test_data: The parameters for the test
359+
/// \param lambda_variable_id: The name of the member variable that stores the
360+
/// lambda
359361
void validate_member_variable_lambda_assignment(
360362
const symbol_tablet &symbol_table,
361363
const std::vector<codet> &instructions,
@@ -370,7 +372,10 @@ void validate_member_variable_lambda_assignment(
370372
REQUIRE_FALSE(lambda_assignment.null_assignment.has_value());
371373

372374
validate_lambda_assignment(
373-
symbol_table, instructions, test_data, lambda_assignment);
375+
symbol_table,
376+
instructions,
377+
test_data,
378+
lambda_assignment.non_null_assignments[0]);
374379
}
375380

376381
SCENARIO(
@@ -513,6 +518,11 @@ SCENARIO(
513518

514519
/// Find the assignment to the lambda in the <clinit> and then call
515520
/// validate_lamdba_assignement for full validation.
521+
/// \param symbol_table: The loaded symbol table
522+
/// \param instructions: The instructions of the method that calls invokedynamic
523+
/// \param test_data: The parameters for the test
524+
/// \param static_field_name: The name of the static variable that stores the
525+
/// lambda
516526
void validate_static_member_variable_lambda_assignment(
517527
const symbol_tablet &symbol_table,
518528
const std::vector<codet> &instructions,
@@ -527,7 +537,10 @@ void validate_static_member_variable_lambda_assignment(
527537
REQUIRE_FALSE(lambda_assignment.null_assignment.has_value());
528538

529539
validate_lambda_assignment(
530-
symbol_table, instructions, test_data, lambda_assignment);
540+
symbol_table,
541+
instructions,
542+
test_data,
543+
lambda_assignment.non_null_assignments[0]);
531544
}
532545

533546
SCENARIO(

0 commit comments

Comments
 (0)