* expread.y (abs_decl): Accept '&' and '&' abs_decl.
authorJim Kingdon <jkingdon@engr.sgi.com>
Fri, 26 Apr 1991 22:57:44 +0000 (22:57 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Fri, 26 Apr 1991 22:57:44 +0000 (22:57 +0000)
expread.y (typebase): Add {unsigned,} long long {,int}.
* expread.y (variable): Allow for destructor with foo::~name.
* vax-opcode.h, expread.y, expprint.c, cplus-dem.c: Declare some
things "const".

gdb/expread.y

index b59d4ec6058a21a35dc0fea4307abc3a5f373e3c..44b1b5c6f3d9282844cb2a95cd8fac0252cb53b6 100755 (executable)
@@ -573,6 +573,24 @@ variable:  typebase COLONCOLON name
                          write_exp_string ($3);
                          write_exp_elt_opcode (OP_SCOPE);
                        }
+       |       typebase COLONCOLON '~' name
+                       {
+                         struct type *type = $1;
+                         if (TYPE_CODE (type) != TYPE_CODE_STRUCT
+                             && TYPE_CODE (type) != TYPE_CODE_UNION)
+                           error ("`%s' is not defined as an aggregate type.",
+                                  TYPE_NAME (type));
+
+                         if (strcmp (type_name_no_tag (type), $4.ptr))
+                           error ("invalid destructor `%s::~%s'",
+                                  type_name_no_tag (type), $4.ptr);
+
+                         write_exp_elt_opcode (OP_SCOPE);
+                         write_exp_elt_type (type);
+                         write_exp_string ($4);
+                         write_exp_elt_opcode (OP_SCOPE);
+                         write_exp_elt_opcode (UNOP_LOGNOT);
+                       }
        |       COLONCOLON name
                        {
                          char *name = copy_name ($2);
@@ -733,6 +751,10 @@ abs_decl:  '*'
                        { push_type (tp_pointer); $$ = 0; }
        |       '*' abs_decl
                        { push_type (tp_pointer); $$ = $2; }
+       |       '&'
+                       { push_type (tp_reference); $$ = 0; }
+       |       '&' abs_decl
+                       { push_type (tp_reference); $$ = $2; }
        |       direct_abs_decl
        ;
 
@@ -792,6 +814,14 @@ typebase
                        { $$ = builtin_type_long; }
        |       UNSIGNED LONG INT_KEYWORD
                        { $$ = builtin_type_unsigned_long; }
+       |       LONG LONG
+                       { $$ = builtin_type_long_long; }
+       |       LONG LONG INT_KEYWORD
+                       { $$ = builtin_type_long_long; }
+       |       UNSIGNED LONG LONG
+                       { $$ = builtin_type_unsigned_long_long; }
+       |       UNSIGNED LONG LONG INT_KEYWORD
+                       { $$ = builtin_type_unsigned_long_long; }
        |       SHORT INT_KEYWORD
                        { $$ = builtin_type_short; }
        |       UNSIGNED SHORT INT_KEYWORD
@@ -1152,13 +1182,13 @@ struct token
   enum exp_opcode opcode;
 };
 
-static struct token tokentab3[] =
+const static struct token tokentab3[] =
   {
     {">>=", ASSIGN_MODIFY, BINOP_RSH},
     {"<<=", ASSIGN_MODIFY, BINOP_LSH}
   };
 
-static struct token tokentab2[] =
+const static struct token tokentab2[] =
   {
     {"+=", ASSIGN_MODIFY, BINOP_ADD},
     {"-=", ASSIGN_MODIFY, BINOP_SUB},