@@ -43,15 +43,15 @@ struct lambda_assignment_test_datat
43
43
// / \param symbol_table: The loaded symbol table
44
44
// / \param instructions: The instructions of the method that calls invokedynamic
45
45
// / \param test_data: The parameters for the test
46
+ // / \param lambda_assignment: The assignment statement for the lambda method
46
47
void validate_lambda_assignment (
47
48
const symbol_tablet &symbol_table,
48
49
const std::vector<codet> &instructions,
49
50
const lambda_assignment_test_datat &test_data,
50
- const require_goto_statements::pointer_assignment_locationt
51
- &lambda_assignment)
51
+ const code_assignt &lambda_assignment)
52
52
{
53
53
const typecast_exprt &rhs_value = require_expr::require_typecast (
54
- lambda_assignment.non_null_assignments [ 0 ]. rhs ());
54
+ lambda_assignment.rhs ());
55
55
56
56
const symbol_exprt &rhs_symbol =
57
57
require_expr::require_symbol (rhs_value.op0 ());
@@ -85,8 +85,8 @@ void validate_lambda_assignment(
85
85
const class_typet &tmp_lambda_class_type =
86
86
require_type::require_complete_class (lambda_implementor_type_symbol.type );
87
87
88
- REQUIRE (tmp_lambda_class_type.has_base (test_data.lambda_interface ));
89
88
REQUIRE (tmp_lambda_class_type.has_base (" java::java.lang.Object" ));
89
+ REQUIRE (tmp_lambda_class_type.has_base (test_data.lambda_interface ));
90
90
91
91
class_hierarchyt class_hierarchy;
92
92
class_hierarchy (symbol_table);
@@ -111,16 +111,6 @@ void validate_lambda_assignment(
111
111
const symbol_typet &super_class_type = require_type::require_symbol (
112
112
super_class_component.type (), " java::java.lang.Object" );
113
113
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
-
124
114
THEN (" The function in the class should call the lambda method" )
125
115
{
126
116
const irep_idt method_identifier =
@@ -175,6 +165,11 @@ void validate_lambda_assignment(
175
165
176
166
// / Find the assignment to the lambda and then call validate_lamdba_assignement
177
167
// / 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
178
173
void validate_local_variable_lambda_assignment (
179
174
const symbol_tablet &symbol_table,
180
175
const std::vector<codet> &instructions,
@@ -189,7 +184,10 @@ void validate_local_variable_lambda_assignment(
189
184
REQUIRE_FALSE (lambda_assignment.null_assignment .has_value ());
190
185
191
186
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 ]);
193
191
}
194
192
195
193
SCENARIO (
@@ -315,7 +313,6 @@ SCENARIO(
315
313
test_data.lambda_interface_method_descriptor =
316
314
" .Execute:()Ljava/lang/Object;" ;
317
315
318
- // "java::LocalLambdas.lambda$test$0:()V"
319
316
test_data.lambda_function_id =
320
317
" java::LocalLambdas.lambda$test$4:()Ljava/lang/Object;" ;
321
318
test_data.expected_params = {};
@@ -356,6 +353,11 @@ SCENARIO(
356
353
357
354
// / Find the assignment to the lambda in the constructor
358
355
// / 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
359
361
void validate_member_variable_lambda_assignment (
360
362
const symbol_tablet &symbol_table,
361
363
const std::vector<codet> &instructions,
@@ -370,7 +372,10 @@ void validate_member_variable_lambda_assignment(
370
372
REQUIRE_FALSE (lambda_assignment.null_assignment .has_value ());
371
373
372
374
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 ]);
374
379
}
375
380
376
381
SCENARIO (
@@ -513,6 +518,11 @@ SCENARIO(
513
518
514
519
// / Find the assignment to the lambda in the <clinit> and then call
515
520
// / 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
516
526
void validate_static_member_variable_lambda_assignment (
517
527
const symbol_tablet &symbol_table,
518
528
const std::vector<codet> &instructions,
@@ -527,7 +537,10 @@ void validate_static_member_variable_lambda_assignment(
527
537
REQUIRE_FALSE (lambda_assignment.null_assignment .has_value ());
528
538
529
539
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 ]);
531
544
}
532
545
533
546
SCENARIO (
0 commit comments