Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
node->type = type;
CDS_INIT_LIST_HEAD(&node->tmp_head);
cds_list_add(&node->gc, &ast->allocated_nodes);
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:
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;
$$ = 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;
}
| 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;
}
| 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);
$$->u.unary_expression.type = UNARY_UNSIGNED_CONSTANT;
sscanf(yylval.gs->s, "%llu",
&$$->u.unary_expression.u.unsigned_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);
$$->u.unary_expression.type = UNARY_UNSIGNED_CONSTANT;
sscanf(yylval.gs->s, "0%llo",
&$$->u.unary_expression.u.unsigned_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
{
}
| HEXADECIMAL_CONSTANT
{
$$->u.unary_expression.type = UNARY_UNSIGNED_CONSTANT;
sscanf(yylval.gs->s, "0x%llx",
&$$->u.unary_expression.u.unsigned_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 = "";
}
| 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;
}
| 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;
}
| 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;
}
| 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
{
}
| postfix_expression LSBRAC unary_expression RSBRAC
{
event_declaration_begin event_declaration_end
{
$$ = make_node(scanner, NODE_EVENT);
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);
}
| 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");
}
if (set_parent_node($2, $$))
reparent_error(scanner, "event_declaration");
}
stream_declaration_begin stream_declaration_end
{
$$ = make_node(scanner, NODE_STREAM);
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);
}
| 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");
}
if (set_parent_node($2, $$))
reparent_error(scanner, "stream_declaration");
}
trace_declaration_begin trace_declaration_end
{
$$ = make_node(scanner, NODE_TRACE);
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);
}
| 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");
}
if (set_parent_node($2, $$))
reparent_error(scanner, "trace_declaration");
}
{
$$ = make_node(scanner, NODE_TYPE_SPECIFIER);
$$->u.type_specifier.type = TYPESPEC_CONST;
{
$$ = make_node(scanner, NODE_TYPE_SPECIFIER);
$$->u.type_specifier.type = TYPESPEC_CONST;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
| declaration_specifiers CONST
{
struct ctf_node *node;
| declaration_specifiers CONST
{
struct ctf_node *node;
type_declarator_list:
type_declarator
type_declarator_list:
type_declarator
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
| type_declarator_list COMMA type_declarator
{
$$ = $1;
| type_declarator_list COMMA type_declarator
{
$$ = $1;
abstract_type_declarator_list:
abstract_type_declarator
abstract_type_declarator_list:
abstract_type_declarator
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
| abstract_type_declarator_list COMMA abstract_type_declarator
{
$$ = $1;
| abstract_type_declarator_list COMMA abstract_type_declarator
{
$$ = $1;
{
$$ = make_node(scanner, NODE_TYPE_SPECIFIER);
$$->u.type_specifier.type = TYPESPEC_CONST;
{
$$ = make_node(scanner, NODE_TYPE_SPECIFIER);
$$->u.type_specifier.type = TYPESPEC_CONST;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
| specifier_qualifier_list CONST
{
struct ctf_node *node;
| specifier_qualifier_list CONST
{
struct ctf_node *node;
struct_or_variant_declarator_list:
struct_or_variant_declarator
struct_or_variant_declarator_list:
struct_or_variant_declarator
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
| struct_or_variant_declarator_list COMMA struct_or_variant_declarator
{
$$ = $1;
| struct_or_variant_declarator_list COMMA struct_or_variant_declarator
{
$$ = $1;
enumerator_list:
enumerator
enumerator_list:
enumerator
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
| enumerator_list COMMA enumerator
{
$$ = $1;
| enumerator_list COMMA enumerator
{
$$ = $1;
abstract_declarator_list:
abstract_declarator
abstract_declarator_list:
abstract_declarator
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
| abstract_declarator_list COMMA abstract_declarator
{
$$ = $1;
| abstract_declarator_list COMMA abstract_declarator
{
$$ = $1;
STAR
{
$$ = make_node(scanner, NODE_POINTER);
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);
}
| 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);
}
| 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
ctf_assignment_expression_list:
ctf_assignment_expression SEMICOLON
- {
- $$ = $1;
- cds_list_add(&($$)->siblings, &($$)->tmp_head);
- }
| ctf_assignment_expression_list ctf_assignment_expression SEMICOLON
{
$$ = $1;
| ctf_assignment_expression_list ctf_assignment_expression SEMICOLON
{
$$ = $1;
event { a.b.c.d.e = f.g.h->i->j; };
event { a.b.c.d.e = f.g.h->i->j; };
+typealias integer { size = 32; align = 32; signed = false; } : unsigned long long *;
+typealias integer { size = 32; align = 32; signed = false; } : unsigned const long [];
switch (node->u.type_declarator.type) {
case TYPEDEC_ID:
switch (node->u.type_declarator.type) {
case TYPEDEC_ID:
- print_tabs(fd, depth);
- fprintf(fd, "<id \"");
- fprintf(fd, "%s", node->u.type_declarator.u.id);
- fprintf(fd, "\" />\n");
+ if (node->u.type_declarator.u.id) {
+ print_tabs(fd, depth);
+ fprintf(fd, "<id \"");
+ fprintf(fd, "%s", node->u.type_declarator.u.id);
+ fprintf(fd, "\" />\n");
+ }
break;
case TYPEDEC_NESTED:
if (node->u.type_declarator.u.nested.type_declarator) {
break;
case TYPEDEC_NESTED:
if (node->u.type_declarator.u.nested.type_declarator) {