@@ -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
4647void 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{
53- const typecast_exprt &rhs_value = require_expr::require_typecast (
54- lambda_assignment. non_null_assignments [ 0 ] .rhs ());
53+ const typecast_exprt &rhs_value =
54+ require_expr::require_typecast ( lambda_assignment.rhs ());
5555
5656 const symbol_exprt &rhs_symbol =
5757 require_expr::require_symbol (rhs_value.op0 ());
@@ -85,15 +85,16 @@ 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);
9393
9494 const auto &parents = class_hierarchy.get_parents_trans (tmp_class_identifier);
9595 REQUIRE_THAT (
9696 parents,
97+ // NOLINTNEXTLINE(whitespace/braces)
9798 Catch::Matchers::Vector::ContainsElementMatcher<irep_idt>{
9899 test_data.lambda_interface });
99100
@@ -102,6 +103,7 @@ void validate_lambda_assignment(
102103
103104 REQUIRE_THAT (
104105 interface_children,
106+ // NOLINTNEXTLINE(whitespace/braces)
105107 Catch::Matchers::Vector::ContainsElementMatcher<irep_idt>{
106108 tmp_class_identifier});
107109
@@ -111,16 +113,6 @@ void validate_lambda_assignment(
111113 const symbol_typet &super_class_type = require_type::require_symbol (
112114 super_class_component.type (), " java::java.lang.Object" );
113115
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-
124116 THEN (" The function in the class should call the lambda method" )
125117 {
126118 const irep_idt method_identifier =
@@ -175,6 +167,11 @@ void validate_lambda_assignment(
175167
176168// / Find the assignment to the lambda and then call validate_lamdba_assignement
177169// / for full validation.
170+ // / \param symbol_table: The loaded symbol table
171+ // / \param instructions: The instructions of the method that calls invokedynamic
172+ // / \param test_data: The parameters for the test
173+ // / \param lambda_variable_id: A regex matching the name of the variable which
174+ // / stores the lambda
178175void validate_local_variable_lambda_assignment (
179176 const symbol_tablet &symbol_table,
180177 const std::vector<codet> &instructions,
@@ -189,7 +186,10 @@ void validate_local_variable_lambda_assignment(
189186 REQUIRE_FALSE (lambda_assignment.null_assignment .has_value ());
190187
191188 validate_lambda_assignment (
192- symbol_table, instructions, test_data, lambda_assignment);
189+ symbol_table,
190+ instructions,
191+ test_data,
192+ lambda_assignment.non_null_assignments [0 ]);
193193}
194194
195195SCENARIO (
@@ -248,6 +248,7 @@ SCENARIO(
248248 symbol_exprt integer_param{" primitive" , java_int_type ()};
249249 symbol_exprt ref_param{" reference" ,
250250 java_type_from_string (" Ljava/lang/Object;" )};
251+ // NOLINTNEXTLINE(whitespace/braces)
251252 symbol_exprt generic_param{
252253 " specalisedGeneric" ,
253254 java_type_from_string (" LDummyGeneric<Ljava/lang/Interger;>;" )};
@@ -275,6 +276,8 @@ SCENARIO(
275276 symbol_exprt integer_param{" primitive" , java_type_from_string (" [I" )};
276277 symbol_exprt ref_param{" reference" ,
277278 java_type_from_string (" [Ljava/lang/Object;" )};
279+
280+ // NOLINTNEXTLINE(whitespace/braces)
278281 symbol_exprt generic_param{
279282 " specalisedGeneric" ,
280283 java_type_from_string (" [LDummyGeneric<Ljava/lang/Interger;>;" )};
@@ -315,7 +318,6 @@ SCENARIO(
315318 test_data.lambda_interface_method_descriptor =
316319 " .Execute:()Ljava/lang/Object;" ;
317320
318- // "java::LocalLambdas.lambda$test$0:()V"
319321 test_data.lambda_function_id =
320322 " java::LocalLambdas.lambda$test$4:()Ljava/lang/Object;" ;
321323 test_data.expected_params = {};
@@ -348,14 +350,20 @@ SCENARIO(
348350 function_prefix_regex_str +
349351 R"( ::\d+::returningSpecalisedGenericLambda$)" ));
350352 }
351- // TODO[TG-2482]: Tests for local lambdas that capture variables
353+ // TODO(tkiley): Tests for local lambdas that capture
354+ // TODO(tkiley): variables [TG-2482]
352355 }
353356 }
354357 });
355358}
356359
357360// / Find the assignment to the lambda in the constructor
358361// / and then call validate_lamdba_assignement for full validation.
362+ // / \param symbol_table: The loaded symbol table
363+ // / \param instructions: The instructions of the method that calls invokedynamic
364+ // / \param test_data: The parameters for the test
365+ // / \param lambda_variable_id: The name of the member variable that stores the
366+ // / lambda
359367void validate_member_variable_lambda_assignment (
360368 const symbol_tablet &symbol_table,
361369 const std::vector<codet> &instructions,
@@ -370,7 +378,10 @@ void validate_member_variable_lambda_assignment(
370378 REQUIRE_FALSE (lambda_assignment.null_assignment .has_value ());
371379
372380 validate_lambda_assignment (
373- symbol_table, instructions, test_data, lambda_assignment);
381+ symbol_table,
382+ instructions,
383+ test_data,
384+ lambda_assignment.non_null_assignments [0 ]);
374385}
375386
376387SCENARIO (
@@ -423,8 +434,9 @@ SCENARIO(
423434 " (ILjava/lang/Object;LDummyGeneric;)V" ;
424435
425436 symbol_exprt integer_param{" primitive" , java_int_type ()};
426- symbol_exprt ref_param{" reference" ,
437+ symbol_exprt ref_param{" reference" , // NOLINT(whitespace/braces)
427438 java_type_from_string (" Ljava/lang/Object;" )};
439+ // NOLINTNEXTLINE(whitespace/braces)
428440 symbol_exprt generic_param{
429441 " specalisedGeneric" ,
430442 java_type_from_string (" LDummyGeneric<Ljava/lang/Interger;>;" )};
@@ -447,8 +459,9 @@ SCENARIO(
447459 " ([I[Ljava/lang/Object;[LDummyGeneric;)V" ;
448460
449461 symbol_exprt integer_param{" primitive" , java_type_from_string (" [I" )};
450- symbol_exprt ref_param{" reference" ,
462+ symbol_exprt ref_param{" reference" , // NOLINT(whitespace/braces)
451463 java_type_from_string (" [Ljava/lang/Object;" )};
464+ // NOLINTNEXTLINE(whitespace/braces)
452465 symbol_exprt generic_param{
453466 " specalisedGeneric" ,
454467 java_type_from_string (" [LDummyGeneric<Ljava/lang/Interger;>;" )};
@@ -505,14 +518,20 @@ SCENARIO(
505518 " returningSpecalisedGenericLambda" );
506519 }
507520
508- // TODO[TG-2486]: Tests for member lambdas that capture member variables
521+ // TODO(tkiley): Tests for member lambdas that capture member variables
522+ // TODO(tkiley): [TG-2486]
509523 }
510524 }
511525 });
512526}
513527
514528// / Find the assignment to the lambda in the <clinit> and then call
515529// / validate_lamdba_assignement for full validation.
530+ // / \param symbol_table: The loaded symbol table
531+ // / \param instructions: The instructions of the method that calls invokedynamic
532+ // / \param test_data: The parameters for the test
533+ // / \param static_field_name: The name of the static variable that stores the
534+ // / lambda
516535void validate_static_member_variable_lambda_assignment (
517536 const symbol_tablet &symbol_table,
518537 const std::vector<codet> &instructions,
@@ -527,7 +546,10 @@ void validate_static_member_variable_lambda_assignment(
527546 REQUIRE_FALSE (lambda_assignment.null_assignment .has_value ());
528547
529548 validate_lambda_assignment (
530- symbol_table, instructions, test_data, lambda_assignment);
549+ symbol_table,
550+ instructions,
551+ test_data,
552+ lambda_assignment.non_null_assignments [0 ]);
531553}
532554
533555SCENARIO (
@@ -586,6 +608,7 @@ SCENARIO(
586608 symbol_exprt integer_param{" primitive" , java_int_type ()};
587609 symbol_exprt ref_param{" reference" ,
588610 java_type_from_string (" Ljava/lang/Object;" )};
611+ // NOLINTNEXTLINE(whitespace/braces)
589612 symbol_exprt generic_param{
590613 " specalisedGeneric" ,
591614 java_type_from_string (" LDummyGeneric<Ljava/lang/Interger;>;" )};
@@ -610,6 +633,7 @@ SCENARIO(
610633 symbol_exprt integer_param{" primitive" , java_type_from_string (" [I" )};
611634 symbol_exprt ref_param{" reference" ,
612635 java_type_from_string (" [Ljava/lang/Object;" )};
636+ // NOLINTNEXTLINE(whitespace/braces)
613637 symbol_exprt generic_param{
614638 " specalisedGeneric" ,
615639 java_type_from_string (" [LDummyGeneric<Ljava/lang/Interger;>;" )};
@@ -667,7 +691,8 @@ SCENARIO(
667691 " returningSpecalisedGenericLambda" );
668692 }
669693
670- // TODO[TG-2486]: Tests for member lambdas that capture member variables
694+ // TODO(tkiley): Tests for member lambdas that capture member variables
695+ // TODO(tkiley): [TG-2486]
671696 }
672697 }
673698 });
0 commit comments