lambda_expression
: OPEN_PARENS opt_lambda_parameter_list CLOSE_PARENS LAMBDA expression
{
- ValaSourceReference *src = src(@4);
- $$ = VALA_EXPRESSION (vala_code_context_create_lambda_expression (context, $5, src));
- if ($2 != NULL) {
- GList *l;
- for (l = $2; l != NULL; l = l->next) {
- vala_lambda_expression_add_parameter (VALA_LAMBDA_EXPRESSION ($$), l->data);
- g_free (l->data);
+ if ($5 == NULL) {
+ // error in lambda expression
+ $$ = NULL;
+ } else {
+ ValaSourceReference *src = src(@4);
+ $$ = VALA_EXPRESSION (vala_code_context_create_lambda_expression (context, $5, src));
+ if ($2 != NULL) {
+ GList *l;
+ for (l = $2; l != NULL; l = l->next) {
+ vala_lambda_expression_add_parameter (VALA_LAMBDA_EXPRESSION ($$), l->data);
+ g_free (l->data);
+ }
+ g_list_free ($2);
}
- g_list_free ($2);
+ g_object_unref ($5);
+ g_object_unref (src);
}
- g_object_unref ($5);
- g_object_unref (src);
}
| identifier LAMBDA expression
{
- ValaSourceReference *src = src(@2);
- $$ = VALA_EXPRESSION (vala_code_context_create_lambda_expression (context, $3, src));
- g_object_unref ($3);
- g_object_unref (src);
- vala_lambda_expression_add_parameter (VALA_LAMBDA_EXPRESSION ($$), $1);
- g_free ($1);
+ if ($3 == NULL) {
+ // error in lambda expression
+ $$ = NULL;
+ } else {
+ ValaSourceReference *src = src(@2);
+ $$ = VALA_EXPRESSION (vala_code_context_create_lambda_expression (context, $3, src));
+ g_object_unref ($3);
+ g_object_unref (src);
+ vala_lambda_expression_add_parameter (VALA_LAMBDA_EXPRESSION ($$), $1);
+ g_free ($1);
+ }
}
| OPEN_PARENS opt_lambda_parameter_list CLOSE_PARENS LAMBDA block
{
- ValaSourceReference *src = src(@4);
- $$ = VALA_EXPRESSION (vala_code_context_create_lambda_expression_with_statement_body (context, VALA_BLOCK ($5), src));
- if ($2 != NULL) {
- GList *l;
- for (l = $2; l != NULL; l = l->next) {
- vala_lambda_expression_add_parameter (VALA_LAMBDA_EXPRESSION ($$), l->data);
- g_free (l->data);
+ if ($5 == NULL) {
+ // error in lambda block
+ $$ = NULL;
+ } else {
+ ValaSourceReference *src = src(@4);
+ $$ = VALA_EXPRESSION (vala_code_context_create_lambda_expression_with_statement_body (context, VALA_BLOCK ($5), src));
+ if ($2 != NULL) {
+ GList *l;
+ for (l = $2; l != NULL; l = l->next) {
+ vala_lambda_expression_add_parameter (VALA_LAMBDA_EXPRESSION ($$), l->data);
+ g_free (l->data);
+ }
+ g_list_free ($2);
}
- g_list_free ($2);
+ g_object_unref ($5);
+ g_object_unref (src);
}
- g_object_unref ($5);
- g_object_unref (src);
}
| identifier LAMBDA block
{
- ValaSourceReference *src = src(@2);
- $$ = VALA_EXPRESSION (vala_code_context_create_lambda_expression_with_statement_body (context, VALA_BLOCK ($3), src));
- g_object_unref ($3);
- g_object_unref (src);
- vala_lambda_expression_add_parameter (VALA_LAMBDA_EXPRESSION ($$), $1);
- g_free ($1);
+ if ($3 == NULL) {
+ // error in lambda block
+ $$ = NULL;
+ } else {
+ ValaSourceReference *src = src(@2);
+ $$ = VALA_EXPRESSION (vala_code_context_create_lambda_expression_with_statement_body (context, VALA_BLOCK ($3), src));
+ g_object_unref ($3);
+ g_object_unref (src);
+ vala_lambda_expression_add_parameter (VALA_LAMBDA_EXPRESSION ($$), $1);
+ g_free ($1);
+ }
}
;