java-tree.h (build_instanceof): Declare.
* java-tree.h (build_instanceof): Declare. (build_get_class): Declare. * parse.y (patch_binop): Use build_instanceof. * expr.c (build_instanceof): New function. If class is final, don't make a function call. (expand_java_INSTANCEOF): Use it. (build_get_class): New function. From-SVN: r34021
This commit is contained in:
parent
da6d3adf1e
commit
43490bec9d
4 changed files with 270 additions and 258 deletions
|
@ -1,3 +1,13 @@
|
||||||
|
2000-05-19 Tom Tromey <tromey@cygnus.com>
|
||||||
|
|
||||||
|
* java-tree.h (build_instanceof): Declare.
|
||||||
|
(build_get_class): Declare.
|
||||||
|
* parse.y (patch_binop): Use build_instanceof.
|
||||||
|
* expr.c (build_instanceof): New function. If class is final,
|
||||||
|
don't make a function call.
|
||||||
|
(expand_java_INSTANCEOF): Use it.
|
||||||
|
(build_get_class): New function.
|
||||||
|
|
||||||
2000-05-18 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
|
2000-05-18 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
|
||||||
|
|
||||||
* jcf-write.c (generate_classfile): Scan the source_file for
|
* jcf-write.c (generate_classfile): Scan the source_file for
|
||||||
|
|
|
@ -1036,17 +1036,96 @@ expand_java_NEW (type)
|
||||||
NULL_TREE));
|
NULL_TREE));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
/* This returns an expression which will extract the class of an
|
||||||
expand_java_INSTANCEOF (type)
|
object. */
|
||||||
tree type;
|
|
||||||
|
tree
|
||||||
|
build_get_class (value)
|
||||||
|
tree value;
|
||||||
{
|
{
|
||||||
tree value = pop_value (object_ptr_type_node);
|
tree class_field = lookup_field (&dtable_type, get_identifier ("class"));
|
||||||
value = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (soft_instanceof_node)),
|
tree vtable_field = lookup_field (&object_type_node,
|
||||||
|
get_identifier ("vtable"));
|
||||||
|
return build (COMPONENT_REF, class_ptr_type,
|
||||||
|
build1 (INDIRECT_REF, dtable_type,
|
||||||
|
build (COMPONENT_REF, dtable_ptr_type,
|
||||||
|
build1 (INDIRECT_REF, object_type_node, value),
|
||||||
|
vtable_field)),
|
||||||
|
class_field);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This builds the tree representation of the `instanceof' operator.
|
||||||
|
It tries various tricks to optimize this in cases where types are
|
||||||
|
known. */
|
||||||
|
|
||||||
|
tree
|
||||||
|
build_instanceof (value, type)
|
||||||
|
tree value, type;
|
||||||
|
{
|
||||||
|
tree expr;
|
||||||
|
tree itype = TREE_TYPE (TREE_TYPE (soft_instanceof_node));
|
||||||
|
tree valtype = TREE_TYPE (TREE_TYPE (value));
|
||||||
|
tree valclass = TYPE_NAME (valtype);
|
||||||
|
tree klass;
|
||||||
|
|
||||||
|
/* When compiling from bytecode, we need to ensure that TYPE has
|
||||||
|
been loaded. */
|
||||||
|
if (CLASS_P (type) && ! CLASS_LOADED_P (type))
|
||||||
|
{
|
||||||
|
load_class (type, 1);
|
||||||
|
if (! TYPE_SIZE (type) || TREE_CODE (TYPE_SIZE (type)) == ERROR_MARK)
|
||||||
|
return error_mark_node;
|
||||||
|
}
|
||||||
|
klass = TYPE_NAME (type);
|
||||||
|
|
||||||
|
if (type == object_type_node || inherits_from_p (valtype, type))
|
||||||
|
{
|
||||||
|
/* Anything except `null' is an instance of Object. Likewise,
|
||||||
|
if the object is known to be an instance of the class, then
|
||||||
|
we only need to check for `null'. */
|
||||||
|
expr = build (COND_EXPR, itype,
|
||||||
|
value,
|
||||||
|
boolean_true_node, boolean_false_node);
|
||||||
|
}
|
||||||
|
else if (! CLASS_INTERFACE (valclass)
|
||||||
|
&& ! CLASS_INTERFACE (klass)
|
||||||
|
&& ! inherits_from_p (type, valtype)
|
||||||
|
&& (CLASS_FINAL (klass)
|
||||||
|
|| ! inherits_from_p (valtype, type)))
|
||||||
|
{
|
||||||
|
/* The classes are from different branches of the derivation
|
||||||
|
tree, so we immediately know the answer. */
|
||||||
|
expr = boolean_false_node;
|
||||||
|
}
|
||||||
|
else if (CLASS_FINAL (klass))
|
||||||
|
{
|
||||||
|
tree save = save_expr (value);
|
||||||
|
expr = build (COND_EXPR, itype,
|
||||||
|
save,
|
||||||
|
build (EQ_EXPR, itype,
|
||||||
|
build_get_class (save),
|
||||||
|
build_class_ref (type)),
|
||||||
|
boolean_false_node);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
expr = build (CALL_EXPR, itype,
|
||||||
build_address_of (soft_instanceof_node),
|
build_address_of (soft_instanceof_node),
|
||||||
tree_cons (NULL_TREE, value,
|
tree_cons (NULL_TREE, value,
|
||||||
build_tree_list (NULL_TREE,
|
build_tree_list (NULL_TREE,
|
||||||
build_class_ref (type))),
|
build_class_ref (type))),
|
||||||
NULL_TREE);
|
NULL_TREE);
|
||||||
|
}
|
||||||
|
TREE_SIDE_EFFECTS (expr) = TREE_SIDE_EFFECTS (value);
|
||||||
|
return expr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
expand_java_INSTANCEOF (type)
|
||||||
|
tree type;
|
||||||
|
{
|
||||||
|
tree value = pop_value (object_ptr_type_node);
|
||||||
|
value = build_instanceof (value, type);
|
||||||
push_value (value);
|
push_value (value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -674,6 +674,8 @@ extern tree build_anewarray PARAMS ((tree, tree));
|
||||||
extern tree build_new_array PARAMS ((tree, tree));
|
extern tree build_new_array PARAMS ((tree, tree));
|
||||||
extern tree build_java_array_length_access PARAMS ((tree));
|
extern tree build_java_array_length_access PARAMS ((tree));
|
||||||
extern tree build_java_arraynull_check PARAMS ((tree, tree, tree));
|
extern tree build_java_arraynull_check PARAMS ((tree, tree, tree));
|
||||||
|
extern tree build_get_class PARAMS ((tree));
|
||||||
|
extern tree build_instanceof PARAMS ((tree, tree));
|
||||||
extern tree create_label_decl PARAMS ((tree));
|
extern tree create_label_decl PARAMS ((tree));
|
||||||
extern void push_labeled_block PARAMS ((tree));
|
extern void push_labeled_block PARAMS ((tree));
|
||||||
extern tree prepare_eh_table_type PARAMS ((tree));
|
extern tree prepare_eh_table_type PARAMS ((tree));
|
||||||
|
|
425
gcc/java/parse.c
425
gcc/java/parse.c
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
/* A Bison parser, made from ./parse.y
|
/* A Bison parser, made from ./parse.y
|
||||||
by GNU Bison version 1.28 */
|
by GNU Bison version 1.25
|
||||||
|
*/
|
||||||
|
|
||||||
#define YYBISON 1 /* Identify Bison output. */
|
#define YYBISON 1 /* Identify Bison output. */
|
||||||
|
|
||||||
|
@ -11,113 +12,113 @@
|
||||||
#define yychar java_char
|
#define yychar java_char
|
||||||
#define yydebug java_debug
|
#define yydebug java_debug
|
||||||
#define yynerrs java_nerrs
|
#define yynerrs java_nerrs
|
||||||
#define PLUS_TK 257
|
#define PLUS_TK 258
|
||||||
#define MINUS_TK 258
|
#define MINUS_TK 259
|
||||||
#define MULT_TK 259
|
#define MULT_TK 260
|
||||||
#define DIV_TK 260
|
#define DIV_TK 261
|
||||||
#define REM_TK 261
|
#define REM_TK 262
|
||||||
#define LS_TK 262
|
#define LS_TK 263
|
||||||
#define SRS_TK 263
|
#define SRS_TK 264
|
||||||
#define ZRS_TK 264
|
#define ZRS_TK 265
|
||||||
#define AND_TK 265
|
#define AND_TK 266
|
||||||
#define XOR_TK 266
|
#define XOR_TK 267
|
||||||
#define OR_TK 267
|
#define OR_TK 268
|
||||||
#define BOOL_AND_TK 268
|
#define BOOL_AND_TK 269
|
||||||
#define BOOL_OR_TK 269
|
#define BOOL_OR_TK 270
|
||||||
#define EQ_TK 270
|
#define EQ_TK 271
|
||||||
#define NEQ_TK 271
|
#define NEQ_TK 272
|
||||||
#define GT_TK 272
|
#define GT_TK 273
|
||||||
#define GTE_TK 273
|
#define GTE_TK 274
|
||||||
#define LT_TK 274
|
#define LT_TK 275
|
||||||
#define LTE_TK 275
|
#define LTE_TK 276
|
||||||
#define PLUS_ASSIGN_TK 276
|
#define PLUS_ASSIGN_TK 277
|
||||||
#define MINUS_ASSIGN_TK 277
|
#define MINUS_ASSIGN_TK 278
|
||||||
#define MULT_ASSIGN_TK 278
|
#define MULT_ASSIGN_TK 279
|
||||||
#define DIV_ASSIGN_TK 279
|
#define DIV_ASSIGN_TK 280
|
||||||
#define REM_ASSIGN_TK 280
|
#define REM_ASSIGN_TK 281
|
||||||
#define LS_ASSIGN_TK 281
|
#define LS_ASSIGN_TK 282
|
||||||
#define SRS_ASSIGN_TK 282
|
#define SRS_ASSIGN_TK 283
|
||||||
#define ZRS_ASSIGN_TK 283
|
#define ZRS_ASSIGN_TK 284
|
||||||
#define AND_ASSIGN_TK 284
|
#define AND_ASSIGN_TK 285
|
||||||
#define XOR_ASSIGN_TK 285
|
#define XOR_ASSIGN_TK 286
|
||||||
#define OR_ASSIGN_TK 286
|
#define OR_ASSIGN_TK 287
|
||||||
#define PUBLIC_TK 287
|
#define PUBLIC_TK 288
|
||||||
#define PRIVATE_TK 288
|
#define PRIVATE_TK 289
|
||||||
#define PROTECTED_TK 289
|
#define PROTECTED_TK 290
|
||||||
#define STATIC_TK 290
|
#define STATIC_TK 291
|
||||||
#define FINAL_TK 291
|
#define FINAL_TK 292
|
||||||
#define SYNCHRONIZED_TK 292
|
#define SYNCHRONIZED_TK 293
|
||||||
#define VOLATILE_TK 293
|
#define VOLATILE_TK 294
|
||||||
#define TRANSIENT_TK 294
|
#define TRANSIENT_TK 295
|
||||||
#define NATIVE_TK 295
|
#define NATIVE_TK 296
|
||||||
#define PAD_TK 296
|
#define PAD_TK 297
|
||||||
#define ABSTRACT_TK 297
|
#define ABSTRACT_TK 298
|
||||||
#define MODIFIER_TK 298
|
#define MODIFIER_TK 299
|
||||||
#define DECR_TK 299
|
#define DECR_TK 300
|
||||||
#define INCR_TK 300
|
#define INCR_TK 301
|
||||||
#define DEFAULT_TK 301
|
#define DEFAULT_TK 302
|
||||||
#define IF_TK 302
|
#define IF_TK 303
|
||||||
#define THROW_TK 303
|
#define THROW_TK 304
|
||||||
#define BOOLEAN_TK 304
|
#define BOOLEAN_TK 305
|
||||||
#define DO_TK 305
|
#define DO_TK 306
|
||||||
#define IMPLEMENTS_TK 306
|
#define IMPLEMENTS_TK 307
|
||||||
#define THROWS_TK 307
|
#define THROWS_TK 308
|
||||||
#define BREAK_TK 308
|
#define BREAK_TK 309
|
||||||
#define IMPORT_TK 309
|
#define IMPORT_TK 310
|
||||||
#define ELSE_TK 310
|
#define ELSE_TK 311
|
||||||
#define INSTANCEOF_TK 311
|
#define INSTANCEOF_TK 312
|
||||||
#define RETURN_TK 312
|
#define RETURN_TK 313
|
||||||
#define VOID_TK 313
|
#define VOID_TK 314
|
||||||
#define CATCH_TK 314
|
#define CATCH_TK 315
|
||||||
#define INTERFACE_TK 315
|
#define INTERFACE_TK 316
|
||||||
#define CASE_TK 316
|
#define CASE_TK 317
|
||||||
#define EXTENDS_TK 317
|
#define EXTENDS_TK 318
|
||||||
#define FINALLY_TK 318
|
#define FINALLY_TK 319
|
||||||
#define SUPER_TK 319
|
#define SUPER_TK 320
|
||||||
#define WHILE_TK 320
|
#define WHILE_TK 321
|
||||||
#define CLASS_TK 321
|
#define CLASS_TK 322
|
||||||
#define SWITCH_TK 322
|
#define SWITCH_TK 323
|
||||||
#define CONST_TK 323
|
#define CONST_TK 324
|
||||||
#define TRY_TK 324
|
#define TRY_TK 325
|
||||||
#define FOR_TK 325
|
#define FOR_TK 326
|
||||||
#define NEW_TK 326
|
#define NEW_TK 327
|
||||||
#define CONTINUE_TK 327
|
#define CONTINUE_TK 328
|
||||||
#define GOTO_TK 328
|
#define GOTO_TK 329
|
||||||
#define PACKAGE_TK 329
|
#define PACKAGE_TK 330
|
||||||
#define THIS_TK 330
|
#define THIS_TK 331
|
||||||
#define BYTE_TK 331
|
#define BYTE_TK 332
|
||||||
#define SHORT_TK 332
|
#define SHORT_TK 333
|
||||||
#define INT_TK 333
|
#define INT_TK 334
|
||||||
#define LONG_TK 334
|
#define LONG_TK 335
|
||||||
#define CHAR_TK 335
|
#define CHAR_TK 336
|
||||||
#define INTEGRAL_TK 336
|
#define INTEGRAL_TK 337
|
||||||
#define FLOAT_TK 337
|
#define FLOAT_TK 338
|
||||||
#define DOUBLE_TK 338
|
#define DOUBLE_TK 339
|
||||||
#define FP_TK 339
|
#define FP_TK 340
|
||||||
#define ID_TK 340
|
#define ID_TK 341
|
||||||
#define REL_QM_TK 341
|
#define REL_QM_TK 342
|
||||||
#define REL_CL_TK 342
|
#define REL_CL_TK 343
|
||||||
#define NOT_TK 343
|
#define NOT_TK 344
|
||||||
#define NEG_TK 344
|
#define NEG_TK 345
|
||||||
#define ASSIGN_ANY_TK 345
|
#define ASSIGN_ANY_TK 346
|
||||||
#define ASSIGN_TK 346
|
#define ASSIGN_TK 347
|
||||||
#define OP_TK 347
|
#define OP_TK 348
|
||||||
#define CP_TK 348
|
#define CP_TK 349
|
||||||
#define OCB_TK 349
|
#define OCB_TK 350
|
||||||
#define CCB_TK 350
|
#define CCB_TK 351
|
||||||
#define OSB_TK 351
|
#define OSB_TK 352
|
||||||
#define CSB_TK 352
|
#define CSB_TK 353
|
||||||
#define SC_TK 353
|
#define SC_TK 354
|
||||||
#define C_TK 354
|
#define C_TK 355
|
||||||
#define DOT_TK 355
|
#define DOT_TK 356
|
||||||
#define STRING_LIT_TK 356
|
#define STRING_LIT_TK 357
|
||||||
#define CHAR_LIT_TK 357
|
#define CHAR_LIT_TK 358
|
||||||
#define INT_LIT_TK 358
|
#define INT_LIT_TK 359
|
||||||
#define FP_LIT_TK 359
|
#define FP_LIT_TK 360
|
||||||
#define TRUE_TK 360
|
#define TRUE_TK 361
|
||||||
#define FALSE_TK 361
|
#define FALSE_TK 362
|
||||||
#define BOOL_LIT_TK 362
|
#define BOOL_LIT_TK 363
|
||||||
#define NULL_TK 363
|
#define NULL_TK 364
|
||||||
|
|
||||||
#line 48 "./parse.y"
|
#line 48 "./parse.y"
|
||||||
|
|
||||||
|
@ -516,7 +517,7 @@ typedef union {
|
||||||
#define YYFLAG -32768
|
#define YYFLAG -32768
|
||||||
#define YYNTBASE 110
|
#define YYNTBASE 110
|
||||||
|
|
||||||
#define YYTRANSLATE(x) ((unsigned)(x) <= 363 ? yytranslate[x] : 272)
|
#define YYTRANSLATE(x) ((unsigned)(x) <= 364 ? yytranslate[x] : 272)
|
||||||
|
|
||||||
static const char yytranslate[] = { 0,
|
static const char yytranslate[] = { 0,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
|
@ -544,18 +545,18 @@ static const char yytranslate[] = { 0,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
|
2, 2, 2, 2, 2, 1, 2, 3, 4, 5,
|
||||||
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
|
6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
|
16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
|
||||||
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
|
26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
|
||||||
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
|
36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
|
||||||
47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
|
46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
|
||||||
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
|
56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
|
||||||
67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
|
66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
|
||||||
77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
|
76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
|
||||||
87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
|
86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
|
||||||
97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
|
96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
|
||||||
107, 108, 109
|
106, 107, 108, 109
|
||||||
};
|
};
|
||||||
|
|
||||||
#if YYDEBUG != 0
|
#if YYDEBUG != 0
|
||||||
|
@ -2387,7 +2388,6 @@ static const short yycheck[] = { 3,
|
||||||
|
|
||||||
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
|
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
|
||||||
#line 3 "/usr/share/misc/bison.simple"
|
#line 3 "/usr/share/misc/bison.simple"
|
||||||
/* This file comes from bison-1.28. */
|
|
||||||
|
|
||||||
/* Skeleton output parser for bison,
|
/* Skeleton output parser for bison,
|
||||||
Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
|
Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
|
||||||
|
@ -2404,67 +2404,47 @@ static const short yycheck[] = { 3,
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330,
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
/* As a special exception, when this file is copied by Bison into a
|
/* As a special exception, when this file is copied by Bison into a
|
||||||
Bison output file, you may use that output file without restriction.
|
Bison output file, you may use that output file without restriction.
|
||||||
This special exception was added by the Free Software Foundation
|
This special exception was added by the Free Software Foundation
|
||||||
in version 1.24 of Bison. */
|
in version 1.24 of Bison. */
|
||||||
|
|
||||||
|
#ifndef alloca
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define alloca __builtin_alloca
|
||||||
|
#else /* not GNU C. */
|
||||||
|
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
|
||||||
|
#include <alloca.h>
|
||||||
|
#else /* not sparc */
|
||||||
|
#if defined (MSDOS) && !defined (__TURBOC__)
|
||||||
|
#include <malloc.h>
|
||||||
|
#else /* not MSDOS, or __TURBOC__ */
|
||||||
|
#if defined(_AIX)
|
||||||
|
#include <malloc.h>
|
||||||
|
#pragma alloca
|
||||||
|
#else /* not MSDOS, __TURBOC__, or _AIX */
|
||||||
|
#ifdef __hpux
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
void *alloca (unsigned int);
|
||||||
|
};
|
||||||
|
#else /* not __cplusplus */
|
||||||
|
void *alloca ();
|
||||||
|
#endif /* not __cplusplus */
|
||||||
|
#endif /* __hpux */
|
||||||
|
#endif /* not _AIX */
|
||||||
|
#endif /* not MSDOS, or __TURBOC__ */
|
||||||
|
#endif /* not sparc. */
|
||||||
|
#endif /* not GNU C. */
|
||||||
|
#endif /* alloca not defined. */
|
||||||
|
|
||||||
/* This is the parser code that is written into each bison parser
|
/* This is the parser code that is written into each bison parser
|
||||||
when the %semantic_parser declaration is not specified in the grammar.
|
when the %semantic_parser declaration is not specified in the grammar.
|
||||||
It was written by Richard Stallman by simplifying the hairy parser
|
It was written by Richard Stallman by simplifying the hairy parser
|
||||||
used when %semantic_parser is specified. */
|
used when %semantic_parser is specified. */
|
||||||
|
|
||||||
#ifndef YYSTACK_USE_ALLOCA
|
|
||||||
#ifdef alloca
|
|
||||||
#define YYSTACK_USE_ALLOCA
|
|
||||||
#else /* alloca not defined */
|
|
||||||
#ifdef __GNUC__
|
|
||||||
#define YYSTACK_USE_ALLOCA
|
|
||||||
#define alloca __builtin_alloca
|
|
||||||
#else /* not GNU C. */
|
|
||||||
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
|
|
||||||
#define YYSTACK_USE_ALLOCA
|
|
||||||
#include <alloca.h>
|
|
||||||
#else /* not sparc */
|
|
||||||
/* We think this test detects Watcom and Microsoft C. */
|
|
||||||
/* This used to test MSDOS, but that is a bad idea
|
|
||||||
since that symbol is in the user namespace. */
|
|
||||||
#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
|
|
||||||
#if 0 /* No need for malloc.h, which pollutes the namespace;
|
|
||||||
instead, just don't use alloca. */
|
|
||||||
#include <malloc.h>
|
|
||||||
#endif
|
|
||||||
#else /* not MSDOS, or __TURBOC__ */
|
|
||||||
#if defined(_AIX)
|
|
||||||
/* I don't know what this was needed for, but it pollutes the namespace.
|
|
||||||
So I turned it off. rms, 2 May 1997. */
|
|
||||||
/* #include <malloc.h> */
|
|
||||||
#pragma alloca
|
|
||||||
#define YYSTACK_USE_ALLOCA
|
|
||||||
#else /* not MSDOS, or __TURBOC__, or _AIX */
|
|
||||||
#if 0
|
|
||||||
#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
|
|
||||||
and on HPUX 10. Eventually we can turn this on. */
|
|
||||||
#define YYSTACK_USE_ALLOCA
|
|
||||||
#define alloca __builtin_alloca
|
|
||||||
#endif /* __hpux */
|
|
||||||
#endif
|
|
||||||
#endif /* not _AIX */
|
|
||||||
#endif /* not MSDOS, or __TURBOC__ */
|
|
||||||
#endif /* not sparc */
|
|
||||||
#endif /* not GNU C */
|
|
||||||
#endif /* alloca not defined */
|
|
||||||
#endif /* YYSTACK_USE_ALLOCA not defined */
|
|
||||||
|
|
||||||
#ifdef YYSTACK_USE_ALLOCA
|
|
||||||
#define YYSTACK_ALLOC alloca
|
|
||||||
#else
|
|
||||||
#define YYSTACK_ALLOC malloc
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Note: there must be only one dollar sign in this file.
|
/* Note: there must be only one dollar sign in this file.
|
||||||
It is replaced by the list of actions, each action
|
It is replaced by the list of actions, each action
|
||||||
as one case of the switch. */
|
as one case of the switch. */
|
||||||
|
@ -2473,8 +2453,8 @@ static const short yycheck[] = { 3,
|
||||||
#define yyclearin (yychar = YYEMPTY)
|
#define yyclearin (yychar = YYEMPTY)
|
||||||
#define YYEMPTY -2
|
#define YYEMPTY -2
|
||||||
#define YYEOF 0
|
#define YYEOF 0
|
||||||
#define YYACCEPT goto yyacceptlab
|
#define YYACCEPT return(0)
|
||||||
#define YYABORT goto yyabortlab
|
#define YYABORT return(1)
|
||||||
#define YYERROR goto yyerrlab1
|
#define YYERROR goto yyerrlab1
|
||||||
/* Like YYERROR except do call yyerror.
|
/* Like YYERROR except do call yyerror.
|
||||||
This remains here temporarily to ease the
|
This remains here temporarily to ease the
|
||||||
|
@ -2555,12 +2535,14 @@ int yydebug; /* nonzero means print parse trace */
|
||||||
#ifndef YYMAXDEPTH
|
#ifndef YYMAXDEPTH
|
||||||
#define YYMAXDEPTH 10000
|
#define YYMAXDEPTH 10000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Define __yy_memcpy. Note that the size argument
|
|
||||||
should be passed with type unsigned int, because that is what the non-GCC
|
|
||||||
definitions require. With GCC, __builtin_memcpy takes an arg
|
|
||||||
of type size_t, but it can handle unsigned int. */
|
|
||||||
|
|
||||||
|
/* Prevent warning if -Wstrict-prototypes. */
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#ifndef YYPARSE_PARAM
|
||||||
|
int yyparse (void);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
|
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
|
||||||
#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
|
#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
|
||||||
#else /* not GNU C or C++ */
|
#else /* not GNU C or C++ */
|
||||||
|
@ -2572,7 +2554,7 @@ static void
|
||||||
__yy_memcpy (to, from, count)
|
__yy_memcpy (to, from, count)
|
||||||
char *to;
|
char *to;
|
||||||
char *from;
|
char *from;
|
||||||
unsigned int count;
|
int count;
|
||||||
{
|
{
|
||||||
register char *f = from;
|
register char *f = from;
|
||||||
register char *t = to;
|
register char *t = to;
|
||||||
|
@ -2587,10 +2569,10 @@ __yy_memcpy (to, from, count)
|
||||||
/* This is the most reliable way to avoid incompatibilities
|
/* This is the most reliable way to avoid incompatibilities
|
||||||
in available built-in functions on various systems. */
|
in available built-in functions on various systems. */
|
||||||
static void
|
static void
|
||||||
__yy_memcpy (char *to, char *from, unsigned int count)
|
__yy_memcpy (char *to, char *from, int count)
|
||||||
{
|
{
|
||||||
register char *t = to;
|
|
||||||
register char *f = from;
|
register char *f = from;
|
||||||
|
register char *t = to;
|
||||||
register int i = count;
|
register int i = count;
|
||||||
|
|
||||||
while (i-- > 0)
|
while (i-- > 0)
|
||||||
|
@ -2600,7 +2582,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#line 217 "/usr/share/misc/bison.simple"
|
#line 196 "/usr/share/misc/bison.simple"
|
||||||
|
|
||||||
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
|
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
|
||||||
into yyparse. The argument should have type void *.
|
into yyparse. The argument should have type void *.
|
||||||
|
@ -2621,15 +2603,6 @@ __yy_memcpy (char *to, char *from, unsigned int count)
|
||||||
#define YYPARSE_PARAM_DECL
|
#define YYPARSE_PARAM_DECL
|
||||||
#endif /* not YYPARSE_PARAM */
|
#endif /* not YYPARSE_PARAM */
|
||||||
|
|
||||||
/* Prevent warning if -Wstrict-prototypes. */
|
|
||||||
#ifdef __GNUC__
|
|
||||||
#ifdef YYPARSE_PARAM
|
|
||||||
int yyparse (void *);
|
|
||||||
#else
|
|
||||||
int yyparse (void);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
yyparse(YYPARSE_PARAM_ARG)
|
yyparse(YYPARSE_PARAM_ARG)
|
||||||
YYPARSE_PARAM_DECL
|
YYPARSE_PARAM_DECL
|
||||||
|
@ -2658,7 +2631,6 @@ yyparse(YYPARSE_PARAM_ARG)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int yystacksize = YYINITDEPTH;
|
int yystacksize = YYINITDEPTH;
|
||||||
int yyfree_stacks = 0;
|
|
||||||
|
|
||||||
#ifdef YYPURE
|
#ifdef YYPURE
|
||||||
int yychar;
|
int yychar;
|
||||||
|
@ -2743,32 +2715,18 @@ yynewstate:
|
||||||
if (yystacksize >= YYMAXDEPTH)
|
if (yystacksize >= YYMAXDEPTH)
|
||||||
{
|
{
|
||||||
yyerror("parser stack overflow");
|
yyerror("parser stack overflow");
|
||||||
if (yyfree_stacks)
|
|
||||||
{
|
|
||||||
free (yyss);
|
|
||||||
free (yyvs);
|
|
||||||
#ifdef YYLSP_NEEDED
|
|
||||||
free (yyls);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
yystacksize *= 2;
|
yystacksize *= 2;
|
||||||
if (yystacksize > YYMAXDEPTH)
|
if (yystacksize > YYMAXDEPTH)
|
||||||
yystacksize = YYMAXDEPTH;
|
yystacksize = YYMAXDEPTH;
|
||||||
#ifndef YYSTACK_USE_ALLOCA
|
yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
|
||||||
yyfree_stacks = 1;
|
__yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
|
||||||
#endif
|
yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
|
||||||
yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
|
__yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
|
||||||
__yy_memcpy ((char *)yyss, (char *)yyss1,
|
|
||||||
size * (unsigned int) sizeof (*yyssp));
|
|
||||||
yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
|
|
||||||
__yy_memcpy ((char *)yyvs, (char *)yyvs1,
|
|
||||||
size * (unsigned int) sizeof (*yyvsp));
|
|
||||||
#ifdef YYLSP_NEEDED
|
#ifdef YYLSP_NEEDED
|
||||||
yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
|
yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
|
||||||
__yy_memcpy ((char *)yyls, (char *)yyls1,
|
__yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
|
||||||
size * (unsigned int) sizeof (*yylsp));
|
|
||||||
#endif
|
#endif
|
||||||
#endif /* no yyoverflow */
|
#endif /* no yyoverflow */
|
||||||
|
|
||||||
|
@ -5020,7 +4978,7 @@ case 503:
|
||||||
break;}
|
break;}
|
||||||
}
|
}
|
||||||
/* the action file gets copied in in place of this dollarsign */
|
/* the action file gets copied in in place of this dollarsign */
|
||||||
#line 543 "/usr/share/misc/bison.simple"
|
#line 498 "/usr/share/misc/bison.simple"
|
||||||
|
|
||||||
yyvsp -= yylen;
|
yyvsp -= yylen;
|
||||||
yyssp -= yylen;
|
yyssp -= yylen;
|
||||||
|
@ -5215,30 +5173,6 @@ yyerrhandle:
|
||||||
|
|
||||||
yystate = yyn;
|
yystate = yyn;
|
||||||
goto yynewstate;
|
goto yynewstate;
|
||||||
|
|
||||||
yyacceptlab:
|
|
||||||
/* YYACCEPT comes here. */
|
|
||||||
if (yyfree_stacks)
|
|
||||||
{
|
|
||||||
free (yyss);
|
|
||||||
free (yyvs);
|
|
||||||
#ifdef YYLSP_NEEDED
|
|
||||||
free (yyls);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
yyabortlab:
|
|
||||||
/* YYABORT comes here. */
|
|
||||||
if (yyfree_stacks)
|
|
||||||
{
|
|
||||||
free (yyss);
|
|
||||||
free (yyvs);
|
|
||||||
#ifdef YYLSP_NEEDED
|
|
||||||
free (yyls);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
#line 2546 "./parse.y"
|
#line 2546 "./parse.y"
|
||||||
|
|
||||||
|
@ -15044,18 +14978,7 @@ patch_binop (node, wfl_op1, wfl_op2)
|
||||||
}
|
}
|
||||||
/* Otherwise we have to invoke instance of to figure it out */
|
/* Otherwise we have to invoke instance of to figure it out */
|
||||||
else
|
else
|
||||||
{
|
return build_instanceof (op1, op2_type);
|
||||||
tree call =
|
|
||||||
build (CALL_EXPR, boolean_type_node,
|
|
||||||
build_address_of (soft_instanceof_node),
|
|
||||||
tree_cons
|
|
||||||
(NULL_TREE, op1,
|
|
||||||
build_tree_list (NULL_TREE,
|
|
||||||
build_class_ref (op2_type))),
|
|
||||||
NULL_TREE);
|
|
||||||
TREE_SIDE_EFFECTS (call) = TREE_SIDE_EFFECTS (op1);
|
|
||||||
return call;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* There is no way the expression operand can be an instance of
|
/* There is no way the expression operand can be an instance of
|
||||||
the type operand. This is a compile time error. */
|
the type operand. This is a compile time error. */
|
||||||
|
@ -17302,8 +17225,6 @@ fold_constant_for_init (node, context)
|
||||||
|
|
||||||
if (code == INTEGER_CST || code == REAL_CST)
|
if (code == INTEGER_CST || code == REAL_CST)
|
||||||
return convert (TREE_TYPE (context), node);
|
return convert (TREE_TYPE (context), node);
|
||||||
if (TREE_TYPE (node) != NULL_TREE && code != VAR_DECL && code != FIELD_DECL)
|
|
||||||
return NULL_TREE;
|
|
||||||
|
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue