[SYMBOL_LINES] Support for line numbers on Symbols
[gnome.gobject-introspection] / giscanner / scannerparser.y
index b38fb89..600aee0 100644 (file)
@@ -145,14 +145,14 @@ primary_expression
          {
                $$ = g_hash_table_lookup (const_table, $1);
                if ($$ == NULL) {
-                       $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+                       $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                } else {
                        $$ = gi_source_symbol_ref ($$);
                }
          }
        | INTEGER
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                if (g_str_has_prefix (yytext, "0x") && strlen (yytext) > 2) {
                        $$->const_int = strtol (yytext + 2, NULL, 16);
@@ -164,11 +164,11 @@ primary_expression
          }
        | CHARACTER
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | FLOATING
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_double_set = TRUE;
                $$->const_double = 0.0;
         sscanf (yytext, "%lf", &($$->const_double));
@@ -184,7 +184,7 @@ primary_expression
 strings
        : STRING
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                yytext[strlen (yytext) - 1] = '\0';
                $$->const_string = g_strcompress (yytext + 1);
                 if (!g_utf8_validate ($$->const_string, -1, NULL))
@@ -226,31 +226,31 @@ postfix_expression
        : primary_expression
        | postfix_expression '[' expression ']'
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | postfix_expression '(' argument_expression_list ')'
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | postfix_expression '(' ')'
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | postfix_expression '.' identifier_or_typedef_name
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | postfix_expression ARROW identifier_or_typedef_name
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | postfix_expression PLUSPLUS
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | postfix_expression MINUSMINUS
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        ;
 
@@ -263,11 +263,11 @@ unary_expression
        : postfix_expression
        | PLUSPLUS unary_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | MINUSMINUS unary_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | unary_operator cast_expression
          {
@@ -288,18 +288,18 @@ unary_expression
                        $$->const_int = !gi_source_symbol_get_const_boolean ($2);
                        break;
                default:
-                       $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+                       $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                        break;
                }
          }
        | SIZEOF unary_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | SIZEOF '(' type_name ')'
          {
                ctype_free ($3);
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        ;
 
@@ -343,13 +343,13 @@ multiplicative_expression
        : cast_expression
        | multiplicative_expression '*' cast_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int * $3->const_int;
          }
        | multiplicative_expression '/' cast_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                if ($3->const_int != 0) {
                        $$->const_int = $1->const_int / $3->const_int;
@@ -357,7 +357,7 @@ multiplicative_expression
          }
        | multiplicative_expression '%' cast_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                if ($3->const_int != 0) {
                        $$->const_int = $1->const_int % $3->const_int;
@@ -369,13 +369,13 @@ additive_expression
        : multiplicative_expression
        | additive_expression '+' multiplicative_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int + $3->const_int;
          }
        | additive_expression '-' multiplicative_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int - $3->const_int;
          }
@@ -385,7 +385,7 @@ shift_expression
        : additive_expression
        | shift_expression SL additive_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int << $3->const_int;
 
@@ -397,7 +397,7 @@ shift_expression
          }
        | shift_expression SR additive_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int >> $3->const_int;
          }
@@ -407,25 +407,25 @@ relational_expression
        : shift_expression
        | relational_expression '<' shift_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int < $3->const_int;
          }
        | relational_expression '>' shift_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int > $3->const_int;
          }
        | relational_expression LTEQ shift_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int <= $3->const_int;
          }
        | relational_expression GTEQ shift_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int >= $3->const_int;
          }
@@ -435,13 +435,13 @@ equality_expression
        : relational_expression
        | equality_expression EQ relational_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int == $3->const_int;
          }
        | equality_expression NOTEQ relational_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int != $3->const_int;
          }
@@ -451,7 +451,7 @@ and_expression
        : equality_expression
        | and_expression '&' equality_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int & $3->const_int;
          }
@@ -461,7 +461,7 @@ exclusive_or_expression
        : and_expression
        | exclusive_or_expression '^' and_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int ^ $3->const_int;
          }
@@ -471,7 +471,7 @@ inclusive_or_expression
        : exclusive_or_expression
        | inclusive_or_expression '|' exclusive_or_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int = $1->const_int | $3->const_int;
          }
@@ -481,7 +481,7 @@ logical_and_expression
        : inclusive_or_expression
        | logical_and_expression ANDAND inclusive_or_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int =
                  gi_source_symbol_get_const_boolean ($1) &&
@@ -493,7 +493,7 @@ logical_or_expression
        : logical_and_expression
        | logical_or_expression OROR logical_and_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_CONST, lineno);
                $$->const_int_set = TRUE;
                $$->const_int =
                  gi_source_symbol_get_const_boolean ($1) ||
@@ -513,7 +513,7 @@ assignment_expression
        : conditional_expression
        | unary_expression assignment_operator assignment_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        ;
 
@@ -536,7 +536,7 @@ expression
        | expression ',' assignment_expression
        | EXTENSION expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        ;
 
@@ -714,7 +714,7 @@ struct_or_union_specifier
                $$->name = $2;
                $$->child_list = $4;
 
-               GISourceSymbol *sym = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               GISourceSymbol *sym = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                if ($$->type == CTYPE_STRUCT) {
                        sym->type = CSYMBOL_TYPE_STRUCT;
                } else if ($$->type == CTYPE_UNION) {
@@ -810,12 +810,12 @@ struct_declarator_list
 struct_declarator
        : /* empty, support for anonymous structs and unions */
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | declarator
        | ':' constant_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
          }
        | declarator ':' constant_expression
          {
@@ -881,7 +881,7 @@ enumerator_list
 enumerator
        : identifier
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_OBJECT);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_OBJECT, lineno);
                $$->ident = $1;
                $$->const_int_set = TRUE;
                $$->const_int = ++last_enum_value;
@@ -889,7 +889,7 @@ enumerator
          }
        | identifier '=' constant_expression
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_OBJECT);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_OBJECT, lineno);
                $$->ident = $1;
                $$->const_int_set = TRUE;
                $$->const_int = $3->const_int;
@@ -936,7 +936,7 @@ declarator
 direct_declarator
        : identifier
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                $$->ident = $1;
          }
        | '(' declarator ')'
@@ -1031,25 +1031,25 @@ parameter_declaration
          }
        | declaration_specifiers
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                $$->base_type = $1;
          }
        | ELLIPSIS
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_ELLIPSIS);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_ELLIPSIS, lineno);
          }
        ;
 
 identifier_list
        : identifier
          {
-               GISourceSymbol *sym = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               GISourceSymbol *sym = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                sym->ident = $1;
                $$ = g_list_append (NULL, sym);
          }
        | identifier_list ',' identifier
          {
-               GISourceSymbol *sym = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               GISourceSymbol *sym = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                sym->ident = $3;
                $$ = g_list_append ($1, sym);
          }
@@ -1063,7 +1063,7 @@ type_name
 abstract_declarator
        : pointer
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                gi_source_symbol_merge_type ($$, $1);
          }
        | direct_abstract_declarator
@@ -1081,12 +1081,12 @@ direct_abstract_declarator
          }
        | '[' ']'
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                gi_source_symbol_merge_type ($$, gi_source_array_new (NULL));
          }
        | '[' assignment_expression ']'
          {
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                gi_source_symbol_merge_type ($$, gi_source_array_new ($2));
          }
        | direct_abstract_declarator '[' ']'
@@ -1102,7 +1102,7 @@ direct_abstract_declarator
        | '(' ')'
          {
                GISourceType *func = gi_source_function_new ();
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                gi_source_symbol_merge_type ($$, func);
          }
        | '(' parameter_list ')'
@@ -1112,7 +1112,7 @@ direct_abstract_declarator
                if ($2 != NULL && ($2->next != NULL || ((GISourceSymbol *) $2->data)->base_type->type != CTYPE_VOID)) {
                        func->child_list = $2;
                }
-               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID);
+               $$ = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, lineno);
                gi_source_symbol_merge_type ($$, func);
          }
        | direct_abstract_declarator '(' ')'