node->type = type;
CDS_INIT_LIST_HEAD(&node->tmp_head);
cds_list_add(&node->gc, &ast->allocated_nodes);
+ cds_list_add(&node->siblings, &node->tmp_head);
switch (type) {
case NODE_ROOT:
$$ = make_node(scanner, NODE_UNARY_EXPRESSION);
$$->u.unary_expression.type = UNARY_STRING;
$$->u.unary_expression.u.string = yylval.gs->s;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| ID_TYPE
{
$$ = make_node(scanner, NODE_UNARY_EXPRESSION);
$$->u.unary_expression.type = UNARY_STRING;
$$->u.unary_expression.u.string = yylval.gs->s;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| keywords
{
$$ = make_node(scanner, NODE_UNARY_EXPRESSION);
$$->u.unary_expression.type = UNARY_STRING;
$$->u.unary_expression.u.string = yylval.gs->s;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| DECIMAL_CONSTANT
$$->u.unary_expression.type = UNARY_UNSIGNED_CONSTANT;
sscanf(yylval.gs->s, "%llu",
&$$->u.unary_expression.u.unsigned_constant);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| OCTAL_CONSTANT
{
$$->u.unary_expression.type = UNARY_UNSIGNED_CONSTANT;
sscanf(yylval.gs->s, "0%llo",
&$$->u.unary_expression.u.unsigned_constant);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| HEXADECIMAL_CONSTANT
{
$$->u.unary_expression.type = UNARY_UNSIGNED_CONSTANT;
sscanf(yylval.gs->s, "0x%llx",
&$$->u.unary_expression.u.unsigned_constant);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| STRING_LITERAL_START DQUOTE
{
$$ = make_node(scanner, NODE_UNARY_EXPRESSION);
$$->u.unary_expression.type = UNARY_STRING;
$$->u.unary_expression.u.string = "";
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| STRING_LITERAL_START s_char_sequence DQUOTE
{
$$ = make_node(scanner, NODE_UNARY_EXPRESSION);
$$->u.unary_expression.type = UNARY_STRING;
$$->u.unary_expression.u.string = $2->s;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| CHARACTER_CONSTANT_START c_char_sequence SQUOTE
{
$$ = make_node(scanner, NODE_UNARY_EXPRESSION);
$$->u.unary_expression.type = UNARY_STRING;
$$->u.unary_expression.u.string = $2->s;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| LPAREN unary_expression RPAREN
{
$$ = make_node(scanner, NODE_UNARY_EXPRESSION);
$$->u.unary_expression.type = UNARY_NESTED;
$$->u.unary_expression.u.nested_exp = $2;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| postfix_expression LSBRAC unary_expression RSBRAC
{
event_declaration_begin event_declaration_end
{
$$ = make_node(scanner, NODE_EVENT);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| event_declaration_begin ctf_assignment_expression_list event_declaration_end
{
$$ = make_node(scanner, NODE_EVENT);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
if (set_parent_node($2, $$))
reparent_error(scanner, "event_declaration");
}
stream_declaration_begin stream_declaration_end
{
$$ = make_node(scanner, NODE_STREAM);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| stream_declaration_begin ctf_assignment_expression_list stream_declaration_end
{
$$ = make_node(scanner, NODE_STREAM);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
if (set_parent_node($2, $$))
reparent_error(scanner, "stream_declaration");
}
trace_declaration_begin trace_declaration_end
{
$$ = make_node(scanner, NODE_TRACE);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| trace_declaration_begin ctf_assignment_expression_list trace_declaration_end
{
$$ = make_node(scanner, NODE_TRACE);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
if (set_parent_node($2, $$))
reparent_error(scanner, "trace_declaration");
}
{
$$ = make_node(scanner, NODE_TYPE_SPECIFIER);
$$->u.type_specifier.type = TYPESPEC_CONST;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| type_specifier
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
+ { $$ = $1; }
| declaration_specifiers CONST
{
struct ctf_node *node;
type_declarator_list:
type_declarator
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
+ { $$ = $1; }
| type_declarator_list COMMA type_declarator
{
$$ = $1;
abstract_type_declarator_list:
abstract_type_declarator
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
+ { $$ = $1; }
| abstract_type_declarator_list COMMA abstract_type_declarator
{
$$ = $1;
{
$$ = make_node(scanner, NODE_TYPE_SPECIFIER);
$$->u.type_specifier.type = TYPESPEC_CONST;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| type_specifier
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
+ { $$ = $1; }
| specifier_qualifier_list CONST
{
struct ctf_node *node;
struct_or_variant_declarator_list:
struct_or_variant_declarator
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
+ { $$ = $1; }
| struct_or_variant_declarator_list COMMA struct_or_variant_declarator
{
$$ = $1;
enumerator_list:
enumerator
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
+ { $$ = $1; }
| enumerator_list COMMA enumerator
{
$$ = $1;
abstract_declarator_list:
abstract_declarator
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
+ { $$ = $1; }
| abstract_declarator_list COMMA abstract_declarator
{
$$ = $1;
STAR
{
$$ = make_node(scanner, NODE_POINTER);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| STAR pointer
{
$$ = make_node(scanner, NODE_POINTER);
cds_list_splice(&($2)->tmp_head, &($$)->tmp_head);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
| STAR type_qualifier_list pointer
{
$$ = make_node(scanner, NODE_POINTER);
$$->u.pointer.const_qualifier = 1;
cds_list_splice(&($3)->tmp_head, &($$)->tmp_head);
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
}
;
ctf_assignment_expression_list:
ctf_assignment_expression SEMICOLON
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
+ { $$ = $1; }
| ctf_assignment_expression_list ctf_assignment_expression SEMICOLON
{
$$ = $1;