diff options
52 files changed, 5723 insertions, 2479 deletions
diff --git a/gnu/egcs/gcc/config/alpha/alpha.h b/gnu/egcs/gcc/config/alpha/alpha.h index 857ba0d4832..85711182a52 100644 --- a/gnu/egcs/gcc/config/alpha/alpha.h +++ b/gnu/egcs/gcc/config/alpha/alpha.h @@ -95,73 +95,76 @@ extern enum alpha_fp_trap_mode alpha_fptm; /* This means that floating-point support exists in the target implementation of the Alpha architecture. This is usually the default. */ - -#define MASK_FP 1 +#define MASK_FP (1 << 0) #define TARGET_FP (target_flags & MASK_FP) /* This means that floating-point registers are allowed to be used. Note that Alpha implementations without FP operations are required to provide the FP registers. */ -#define MASK_FPREGS 2 +#define MASK_FPREGS (1 << 1) #define TARGET_FPREGS (target_flags & MASK_FPREGS) /* This means that gas is used to process the assembler file. */ -#define MASK_GAS 4 +#define MASK_GAS (1 << 2) #define TARGET_GAS (target_flags & MASK_GAS) /* This means that we should mark procedures as IEEE conformant. */ -#define MASK_IEEE_CONFORMANT 8 +#define MASK_IEEE_CONFORMANT (1 << 3) #define TARGET_IEEE_CONFORMANT (target_flags & MASK_IEEE_CONFORMANT) /* This means we should be IEEE-compliant except for inexact. */ -#define MASK_IEEE 16 +#define MASK_IEEE (1 << 4) #define TARGET_IEEE (target_flags & MASK_IEEE) /* This means we should be fully IEEE-compliant. */ -#define MASK_IEEE_WITH_INEXACT 32 +#define MASK_IEEE_WITH_INEXACT (1 << 5) #define TARGET_IEEE_WITH_INEXACT (target_flags & MASK_IEEE_WITH_INEXACT) /* This means we must construct all constants rather than emitting them as literal data. */ -#define MASK_BUILD_CONSTANTS 128 +#define MASK_BUILD_CONSTANTS (1 << 6) #define TARGET_BUILD_CONSTANTS (target_flags & MASK_BUILD_CONSTANTS) /* This means we handle floating points in VAX F- (float) or G- (double) Format. */ -#define MASK_FLOAT_VAX 512 +#define MASK_FLOAT_VAX (1 << 7) #define TARGET_FLOAT_VAX (target_flags & MASK_FLOAT_VAX) /* This means that the processor has byte and half word loads and stores (the BWX extension). */ -#define MASK_BWX 1024 +#define MASK_BWX (1 << 8) #define TARGET_BWX (target_flags & MASK_BWX) -/* This means that the processor has the CIX extension. */ -#define MASK_CIX 2048 -#define TARGET_CIX (target_flags & MASK_CIX) - /* This means that the processor has the MAX extension. */ -#define MASK_MAX 4096 +#define MASK_MAX (1 << 9) #define TARGET_MAX (target_flags & MASK_MAX) +/* This means that the processor has the FIX extension. */ +#define MASK_FIX (1 << 10) +#define TARGET_FIX (target_flags & MASK_FIX) + +/* This means that the processor has the CIX extension. */ +#define MASK_CIX (1 << 11) +#define TARGET_CIX (target_flags & MASK_CIX) + /* This means that the processor is an EV5, EV56, or PCA56. This is defined only in TARGET_CPU_DEFAULT. */ -#define MASK_CPU_EV5 8192 +#define MASK_CPU_EV5 (1 << 29) /* Likewise for EV6. */ -#define MASK_CPU_EV6 16384 +#define MASK_CPU_EV6 (1 << 30) /* This means we support the .arch directive in the assembler. Only defined in TARGET_CPU_DEFAULT. */ -#define MASK_SUPPORT_ARCH 32768 +#define MASK_SUPPORT_ARCH (1 << 31) #define TARGET_SUPPORT_ARCH (target_flags & MASK_SUPPORT_ARCH) /* These are for target os support and cannot be changed at runtime. */ @@ -204,10 +207,12 @@ extern enum alpha_fp_trap_mode alpha_fptm; {"float-ieee", -MASK_FLOAT_VAX, "Do not use VAX fp"}, \ {"bwx", MASK_BWX, "Emit code for the byte/word ISA extension"}, \ {"no-bwx", -MASK_BWX, ""}, \ - {"cix", MASK_CIX, "Emit code for the counting ISA extension"}, \ - {"no-cix", -MASK_CIX, ""}, \ {"max", MASK_MAX, "Emit code for the motion video ISA extension"}, \ {"no-max", -MASK_MAX, ""}, \ + {"fix", MASK_FIX, "Emit code for the fp move and sqrt ISA extension"}, \ + {"no-fix", -MASK_FIX, ""}, \ + {"cix", MASK_CIX, "Emit code for the counting ISA extension"}, \ + {"no-cix", -MASK_CIX, ""}, \ {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT, ""} } #define TARGET_DEFAULT MASK_FP|MASK_FPREGS @@ -258,6 +263,7 @@ extern const char *alpha_mlat_string; /* For -mmemory-latency= */ /* Corresponding to amask... */ #define CPP_AM_BWX_SPEC "-D__alpha_bwx__ -Acpu(bwx)" #define CPP_AM_MAX_SPEC "-D__alpha_max__ -Acpu(max)" +#define CPP_AM_FIX_SPEC "-D__alpha_fix__ -Acpu(fix)" #define CPP_AM_CIX_SPEC "-D__alpha_cix__ -Acpu(cix)" /* Corresponding to implver... */ @@ -270,7 +276,7 @@ extern const char *alpha_mlat_string; /* For -mmemory-latency= */ #define CPP_CPU_EV5_SPEC "%(cpp_im_ev5)" #define CPP_CPU_EV56_SPEC "%(cpp_im_ev5) %(cpp_am_bwx)" #define CPP_CPU_PCA56_SPEC "%(cpp_im_ev5) %(cpp_am_bwx) %(cpp_am_max)" -#define CPP_CPU_EV6_SPEC "%(cpp_im_ev6) %(cpp_am_bwx) %(cpp_am_max) %(cpp_am_cix)" +#define CPP_CPU_EV6_SPEC "%(cpp_im_ev6) %(cpp_am_bwx) %(cpp_am_max) %(cpp_am_fix)" #ifndef CPP_CPU_DEFAULT_SPEC # if TARGET_CPU_DEFAULT & MASK_CPU_EV6 @@ -320,6 +326,7 @@ extern const char *alpha_mlat_string; /* For -mmemory-latency= */ #define EXTRA_SPECS \ { "cpp_am_bwx", CPP_AM_BWX_SPEC }, \ { "cpp_am_max", CPP_AM_MAX_SPEC }, \ + { "cpp_am_fix", CPP_AM_FIX_SPEC }, \ { "cpp_am_cix", CPP_AM_CIX_SPEC }, \ { "cpp_im_ev4", CPP_IM_EV4_SPEC }, \ { "cpp_im_ev5", CPP_IM_EV5_SPEC }, \ @@ -848,10 +855,10 @@ extern int normal_memory_operand (); : NO_REGS) /* If we are copying between general and FP registers, we need a memory - location unless the CIX extension is available. */ + location unless the FIX extension is available. */ #define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \ - (! TARGET_CIX && (CLASS1) != (CLASS2)) + (! TARGET_FIX && (CLASS1) != (CLASS2)) /* Specify the mode to be used for memory when a secondary memory location is needed. If MODE is floating-point, use it. Otherwise, @@ -884,7 +891,7 @@ extern int normal_memory_operand (); #define REGISTER_MOVE_COST(CLASS1, CLASS2) \ (((CLASS1) == FLOAT_REGS) == ((CLASS2) == FLOAT_REGS) \ ? 2 \ - : TARGET_CIX ? 3 : 4+2*alpha_memory_latency) + : TARGET_FIX ? 3 : 4+2*alpha_memory_latency) /* A C expressions returning the cost of moving data of MODE from a register to or from memory. diff --git a/gnu/egcs/gcc/config/alpha/elf.h b/gnu/egcs/gcc/config/alpha/elf.h index b90ce9fa914..0e647ef534c 100644 --- a/gnu/egcs/gcc/config/alpha/elf.h +++ b/gnu/egcs/gcc/config/alpha/elf.h @@ -58,7 +58,7 @@ do { \ } \ fprintf (FILE, "\t.set noat\n"); \ fprintf (FILE, "\t.set noreorder\n"); \ - if (TARGET_BWX | TARGET_MAX | TARGET_CIX) \ + if (TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX) \ { \ fprintf (FILE, "\t.arch %s\n", \ (alpha_cpu == PROCESSOR_EV6 ? "ev6" \ diff --git a/gnu/egcs/gcc/config/alpha/osf.h b/gnu/egcs/gcc/config/alpha/osf.h index 956961f7cf3..5054444a759 100644 --- a/gnu/egcs/gcc/config/alpha/osf.h +++ b/gnu/egcs/gcc/config/alpha/osf.h @@ -30,9 +30,19 @@ Boston, MA 02111-1307, USA. */ -Dunix -D__osf__ -D_LONGLONG -DSYSTYPE_BSD \ -D_SYSTYPE_BSD -Asystem(unix) -Asystem(xpg4)" +/* Accept DEC C flags for multithreaded programs. We use _PTHREAD_USE_D4 + instead of PTHREAD_USE_D4 since both have the same effect and the former + doesn't invade the users' namespace. */ + +#undef CPP_SUBTARGET_SPEC +#define CPP_SUBTARGET_SPEC \ +"%{pthread|threads:-D_REENTRANT} %{threads:-D_PTHREAD_USE_D4}" + /* Under OSF4, -p and -pg require -lprof1, and -lprof1 requires -lpdf. */ -#define LIB_SPEC "%{p:-lprof1 -lpdf} %{pg:-lprof1 -lpdf} %{a:-lprof2} -lc" +#define LIB_SPEC \ +"%{p|pg:-lprof1%{pthread|threads:_r} -lpdf} %{a:-lprof2} \ + %{threads: -lpthreads} %{pthread|threads: -lpthread -lmach -lexc} -lc" /* Pass "-G 8" to ld because Alpha's CC does. Pass -O3 if we are optimizing, -O1 if we are not. Pass -shared, -non_shared or diff --git a/gnu/egcs/gcc/config/arm/aout.h b/gnu/egcs/gcc/config/arm/aout.h index 2e341b768a6..df1694aa9ca 100644 --- a/gnu/egcs/gcc/config/arm/aout.h +++ b/gnu/egcs/gcc/config/arm/aout.h @@ -236,6 +236,7 @@ do { char dstr[30]; \ fprintf (STREAM, "\t.space\t%d\n", NBYTES) /* Align output to a power of two. Horrible /bin/as. */ +#ifndef ASM_OUTPUT_ALIGN #define ASM_OUTPUT_ALIGN(STREAM, POWER) \ do \ { \ @@ -245,7 +246,9 @@ do { char dstr[30]; \ fprintf (STREAM, "\t.even\n"); \ else if (amount != 1) \ fprintf (STREAM, "\t.align\t%d\n", amount - 4); \ - } while (0) + } \ + while (0) +#endif /* Output a common block */ #ifndef ASM_OUTPUT_COMMON diff --git a/gnu/egcs/gcc/config/arm/arm.c b/gnu/egcs/gcc/config/arm/arm.c index e2fe037ad56..1ba5edd2e1b 100644 --- a/gnu/egcs/gcc/config/arm/arm.c +++ b/gnu/egcs/gcc/config/arm/arm.c @@ -70,6 +70,9 @@ static void emit_sfm PROTO ((int, int)); static enum arm_cond_code get_arm_condition_code PROTO ((rtx)); static int const_ok_for_op RTX_CODE_PROTO ((Hint, Rcode)); +/* True if we are currently building a constant table. */ +int making_const_table; + /* Define the information needed to generate branch insns. This is stored from the compare operation. */ rtx arm_compare_op0, arm_compare_op1; @@ -1563,8 +1566,11 @@ arm_finalize_pic () /* On the ARM the PC register contains 'dot + 8' at the time of the addition. */ pic_tmp = plus_constant (gen_rtx_LABEL_REF (Pmode, l1), 8); - pic_tmp2 = gen_rtx_CONST (VOIDmode, + if (GOT_PCREL) + pic_tmp2 = gen_rtx_CONST (VOIDmode, gen_rtx_PLUS (Pmode, global_offset_table, pc_rtx)); + else + pic_tmp2 = gen_rtx_CONST (VOIDmode, global_offset_table); pic_rtx = gen_rtx_CONST (Pmode, gen_rtx_MINUS (Pmode, pic_tmp2, pic_tmp)); diff --git a/gnu/egcs/gcc/config/arm/arm.h b/gnu/egcs/gcc/config/arm/arm.h index 0c6131b6d93..7b5cd490376 100644 --- a/gnu/egcs/gcc/config/arm/arm.h +++ b/gnu/egcs/gcc/config/arm/arm.h @@ -480,7 +480,25 @@ extern int arm_is_6_or_7; /* Nonzero if PIC code requires explicit qualifiers to generate PLT and GOT relocs rather than the assembler doing so implicitly. Subtargets can override this if required. */ +#ifndef NEED_PLT_GOT #define NEED_PLT_GOT 0 +#endif + +/* Nonzero if we need to refer to the GOT with a PC-relative + offset. In other words, generate + + .word _GLOBAL_OFFSET_TABLE_ - [. - (.Lxx + 8)] + + rather than + + .word _GLOBAL_OFFSET_TABLE_ - (.Lxx + 8) + + The default is true, which matches NetBSD. Subtargets can + override this if required. */ +#ifndef GOT_PCREL +#define GOT_PCREL 1 +#endif + /* Target machine storage Layout. */ @@ -1799,6 +1817,10 @@ extern int arm_pic_register; && (! CONSTANT_POOL_ADDRESS_P (X) \ || ! symbol_mentioned_p (get_pool_constant (X)))) +/* We need to know when we are making a constant pool; this determines + whether data needs to be in the GOT or can be referenced via a GOT + offset. */ +extern int making_const_table; /* Condition code information. */ @@ -2031,6 +2053,19 @@ extern struct rtx_def *arm_compare_op0, *arm_compare_op1; fputs(")", STREAM); \ } \ else output_addr_const(STREAM, X); \ + \ + /* Mark symbols as position independent. We only do this in the \ + .text segment, not in the .data segment. */ \ + if (NEED_PLT_GOT && flag_pic && making_const_table && \ + (GET_CODE(X) == SYMBOL_REF || GET_CODE(X) == LABEL_REF)) \ + { \ + if (GET_CODE(X) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P(X)) \ + fprintf(STREAM, "(GOTOFF)"); \ + else if (GET_CODE (X) == LABEL_REF) \ + fprintf(STREAM, "(GOTOFF)"); \ + else \ + fprintf(STREAM, "(GOT)"); \ + } \ } /* Output code to add DELTA to the first argument, and then jump to FUNCTION. diff --git a/gnu/egcs/gcc/config/arm/arm.md b/gnu/egcs/gcc/config/arm/arm.md index 17ffedba1d2..16e66181ead 100644 --- a/gnu/egcs/gcc/config/arm/arm.md +++ b/gnu/egcs/gcc/config/arm/arm.md @@ -2139,14 +2139,12 @@ [(set_attr "length" "8")]) (define_insn "zero_extendqidi2" - [(set (match_operand:DI 0 "s_register_operand" "=r,r") - (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "r,m")))] + [(set (match_operand:DI 0 "s_register_operand" "=r") + (zero_extend:DI (match_operand:QI 1 "s_register_operand" "r")))] "" - "@ - and%?\\t%Q0, %1, #255\;mov%?\\t%R0, #0 - ldr%?b\\t%Q0, %1\;mov%?\\t%R0, #0" + "and%?\\t%Q0, %1, #255\;mov%?\\t%R0, #0" [(set_attr "length" "8") - (set_attr "type" "*,load")]) + (set_attr "type" "*")]) (define_insn "extendsidi2" [(set (match_operand:DI 0 "s_register_operand" "=r") @@ -6216,6 +6214,7 @@ "" "* { + making_const_table = TRUE; switch (GET_MODE_CLASS (GET_MODE (operands[0]))) { case MODE_FLOAT: @@ -6238,6 +6237,7 @@ "" "* { + making_const_table = TRUE; switch (GET_MODE_CLASS (GET_MODE (operands[0]))) { case MODE_FLOAT: @@ -6259,7 +6259,7 @@ [(unspec_volatile [(const_int 0)] 4)] "" "* - /* Nothing to do (currently). */ + making_const_table = FALSE; return \"\"; ") diff --git a/gnu/egcs/gcc/config/arm/elf.h b/gnu/egcs/gcc/config/arm/elf.h index d2ba8bb1da8..63ec125c49e 100644 --- a/gnu/egcs/gcc/config/arm/elf.h +++ b/gnu/egcs/gcc/config/arm/elf.h @@ -338,4 +338,17 @@ do { \ /* For PIC code we need to explicitly specify (PLT) and (GOT) relocs. */ #define NEED_PLT_GOT flag_pic +/* The ELF assembler handles GOT addressing differently to NetBSD. */ +#define GOT_PCREL 0 + +/* Biggest alignment supported by the object file format of this + machine. Use this macro to limit the alignment which can be + specified using the `__attribute__ ((aligned (N)))' construct. If + not defined, the default value is `BIGGEST_ALIGNMENT'. */ +#define MAX_OFILE_ALIGNMENT (32768*8) + +/* Align output to a power of two. */ +#define ASM_OUTPUT_ALIGN(STREAM, POWER) \ + fprintf (STREAM, "\t.align\t%d\n", POWER) + #include "arm/aout.h" diff --git a/gnu/egcs/gcc/config/dbxcoff.h b/gnu/egcs/gcc/config/dbxcoff.h index 9497a70b83f..1d5b448879f 100644 --- a/gnu/egcs/gcc/config/dbxcoff.h +++ b/gnu/egcs/gcc/config/dbxcoff.h @@ -49,8 +49,8 @@ Boston, MA 02111-1307, USA. */ #undef DBX_OUTPUT_MAIN_SOURCE_FILE_END #define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ - fprintf (FILE, \ - "\t.text\n\t.stabs \"\",%d,0,0,Letext\nLetext:\n", N_SO) + asm_fprintf (FILE, \ + "\t.text\n\t.stabs \"\",%d,0,0,%LLetext\n%LLetext:\n", N_SO) /* Like block addresses, stabs line numbers are relative to the current function. */ diff --git a/gnu/egcs/gcc/config/dbxelf.h b/gnu/egcs/gcc/config/dbxelf.h index 9472887cc52..3971bc1c9dc 100644 --- a/gnu/egcs/gcc/config/dbxelf.h +++ b/gnu/egcs/gcc/config/dbxelf.h @@ -80,15 +80,19 @@ while (0) current function. */ #undef ASM_OUTPUT_SOURCE_LINE -#define ASM_OUTPUT_SOURCE_LINE(file, line) \ +#define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ do \ { \ static int sym_lineno = 1; \ - fprintf (file, ".stabn 68,0,%d,.LM%d-", \ - line, sym_lineno); \ - assemble_name (file, \ + char temp[256]; \ + ASM_GENERATE_INTERNAL_LABEL (temp, "LM", sym_lineno); \ + fprintf (FILE, ".stabn 68,0,%d,", LINE); \ + assemble_name (FILE, temp); \ + putc ('-', FILE); \ + assemble_name (FILE, \ XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\ - fprintf (file, "\n.LM%d:\n", sym_lineno); \ + putc ('\n', FILE); \ + ASM_OUTPUT_INTERNAL_LABEL (FILE, "LM", sym_lineno); \ sym_lineno += 1; \ } \ while (0) @@ -99,7 +103,7 @@ while (0) #undef DBX_OUTPUT_MAIN_SOURCE_FILE_END #define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ - fprintf (FILE, \ - "\t.text\n\t.stabs \"\",%d,0,0,Letext\nLetext:\n", N_SO) + asm_fprintf (FILE, \ + "\t.text\n\t.stabs \"\",%d,0,0,%LLetext\n%LLetext:\n", N_SO) #endif /* __DBX_ELF_H */ diff --git a/gnu/egcs/gcc/config/t-freebsd b/gnu/egcs/gcc/config/t-freebsd new file mode 100644 index 00000000000..99816863429 --- /dev/null +++ b/gnu/egcs/gcc/config/t-freebsd @@ -0,0 +1,4 @@ +# Don't run fixproto +STMP_FIXPROTO = +# Use only native include files +USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS) diff --git a/gnu/egcs/gcc/cp/ChangeLog b/gnu/egcs/gcc/cp/ChangeLog index 51479528fd9..3e095447447 100644 --- a/gnu/egcs/gcc/cp/ChangeLog +++ b/gnu/egcs/gcc/cp/ChangeLog @@ -1,3 +1,102 @@ +1999-06-07 Mark Mitchell <mark@codesourcery.com> + + * search.c (convert_pointer_to_single_level): Reimplement without + using get_binfo. + +1999-06-06 Mark Mitchell <mark@codesourcery.com> + + * method.c (is_back_referenceable_type): Back-reference bools when + not squangling. + +1999-06-04 Jason Merrill <jason@yorick.cygnus.com> + + * semantics.c (finish_if_stmt_cond): Copy cond to permanent_obstack. + (finish_while_stmt_cond, finish_do_stmt, finish_for_cond): Likewise. + +1999-05-30 Mark Mitchell <mark@codesourcery.com> + + * lex.c (make_lang_type): Create TYPE_BINFO for + TEMPLATE_TYPE_PARMs just like for non-template types. + +1999-05-28 Nathan Sidwell <nathan@acm.org> + + * decl.c (complete_array_type): Allocate off same obstack. Fix + DO_DEFAULT comment to match reality. + +1999-05-22 Mark Mitchell <mark@codesourcery.com> + + * tree.c (mapcar): Handle NON_LVALUE_EXPR. + +1999-05-21 Mark Mitchell <mark@codesourcery.com> + + * typeck.c (build_ptrmemfunc): Handle PTRMEM_CSTs carefully to + reveal optimization opportunities. + +1999-05-20 Mark Mitchell <mark@codesourcery.com> + + * decl.c (grokdeclarator): Don't treat [] as indicating a + zero-sized array in a typedef. + + * call.c (build_object_call): Don't look at DECL_NAME for a type. + (pt.c): Or CP_TYPE_QUALS for an ERROR_MARK. + (typeck.c): Or TYPE_MAIN_VARIANT for a type. + +1999-05-20 Jason Merrill <jason@yorick.cygnus.com> + + * tree.c (lvalue_p_1): A NOP_EXPR can be an lvalue. + (build_cplus_new): Make sure that what we return is of the right type. + +1999-05-20 Mark Mitchell <mark@codesourcery.com> + + * cp-tree.h (make_ptrmem_cst): New function. + * expr.c (cplus_expand_constant): Split out from ... + (cplus_expand_expr): Here. Use cplus_expand_constant. + (init_cplus_expand): Set lang_expand_constant. + * pt.c (convert_nontype_argument): Use make_ptrmem_cst. + * tree.c (make_ptrmem_cst): Define. + * typeck.c (unary_complex_lvalue): Use make_ptrmem_cst. + * typeck2.c (initializer_constant_valid_p): Use make_ptrmem_cst. + +1999-05-19 Mark Mitchell <mark@codesourcery.com> + + * decl2.c (start_static_storage_duration_function): Fix comment. + (finish_file): Create static storage duration functions lazily. + +Wed May 19 02:50:53 1999 Arvind Sankar <arvinds@mit.edu> + + * gxxint.texi: Fix typo. + +1999-05-18 Jason Merrill <jason@yorick.cygnus.com> + + * call.c (joust): Compare the types of the conv ops, not the + target types of the conversions. + +Tue May 18 00:21:34 1999 Zack Weinberg <zack@rabi.phys.columbia.edu> + + * lang-specs.h: Define __GNUC__ and __GNUC_MINOR__ only if -no-gcc + was not given. + +1999-05-17 Mark Mitchell <mark@codesourcery.com> + + * cp-tree.def (TEMPLATE_ID_EXPR): Update documentation. + * decl.c (grokfndecl): Don't allow inline declarations of friend + template specializations, or friend template specializations with + default arguments. + * pt.c (tsubst): Handle substitution into array types that does + not yield a fixed upper bound, even when not processing a + template. + (tsubst_copy): Deal with the fact that the second operand to a + TEMPLATE_ID_EXPR may be NULL_TREE, a TREE_LIST, or a TREE_VEC. + * search.c (marked_pushdecls_p): Don't descend into + TEMPLATE_TYPE_PARMs and the like. + (unmarked_pushdecls_p): Likewise. + + * call.c (build_over_call): Don't throw away + initializations/copies of empty classes; use MODIFY_EXPR and + INIT_EXPR as for non-empty classes. + * class.c (finish_struct_1): Put the padding byte for an empty + class on the TYPE_NONCOPIED_PARTS list for the class. + 1999-05-16 Mark Mitchell <mark@codesourcery.com> * decl2.c (build_expr_from_tree): Handle COMPONENT_REFs that diff --git a/gnu/egcs/gcc/cp/class.c b/gnu/egcs/gcc/cp/class.c index 1466e949771..f7998c1c976 100644 --- a/gnu/egcs/gcc/cp/class.c +++ b/gnu/egcs/gcc/cp/class.c @@ -3133,6 +3133,7 @@ finish_struct_1 (t, warn_anon) int aggregate = 1; int empty = 1; int has_pointers = 0; + tree inline_friends; if (warn_anon && code != UNION_TYPE && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))) pedwarn ("anonymous class type not used to declare any objects"); @@ -3740,6 +3741,13 @@ finish_struct_1 (t, warn_anon) if (DECL_SIZE (x) != integer_zero_node) empty = 0; } + + /* CLASSTYPE_INLINE_FRIENDS is really TYPE_NONCOPIED_PARTS. Thus, + we have to save this before we start modifying + TYPE_NONCOPIED_PARTS. */ + inline_friends = CLASSTYPE_INLINE_FRIENDS (t); + CLASSTYPE_INLINE_FRIENDS (t) = NULL_TREE; + if (empty) { /* C++: do not let empty structures exist. */ @@ -3747,7 +3755,11 @@ finish_struct_1 (t, warn_anon) (FIELD_DECL, NULL_TREE, char_type_node); TREE_CHAIN (decl) = fields; TYPE_FIELDS (t) = decl; + TYPE_NONCOPIED_PARTS (t) + = tree_cons (NULL_TREE, decl, TYPE_NONCOPIED_PARTS (t)); + TREE_STATIC (TYPE_NONCOPIED_PARTS (t)) = 1; } + if (n_baseclasses) TYPE_FIELDS (t) = chainon (last_x, TYPE_FIELDS (t)); @@ -4021,8 +4033,7 @@ finish_struct_1 (t, warn_anon) } /* Write out inline function definitions. */ - do_inline_function_hair (t, CLASSTYPE_INLINE_FRIENDS (t)); - CLASSTYPE_INLINE_FRIENDS (t) = 0; + do_inline_function_hair (t, inline_friends); if (CLASSTYPE_VSIZE (t) != 0) { @@ -4049,7 +4060,9 @@ finish_struct_1 (t, warn_anon) /* In addition to this one, all the other vfields should be listed. */ /* Before that can be done, we have to have FIELD_DECLs for them, and a place to find them. */ - TYPE_NONCOPIED_PARTS (t) = build_tree_list (default_conversion (TYPE_BINFO_VTABLE (t)), vfield); + TYPE_NONCOPIED_PARTS (t) + = tree_cons (default_conversion (TYPE_BINFO_VTABLE (t)), + vfield, TYPE_NONCOPIED_PARTS (t)); if (warn_nonvdtor && TYPE_HAS_DESTRUCTOR (t) && DECL_VINDEX (TREE_VEC_ELT (method_vec, 1)) == NULL_TREE) diff --git a/gnu/egcs/gcc/cp/cp-tree.def b/gnu/egcs/gcc/cp/cp-tree.def index da0f1642fd8..70801fc9563 100644 --- a/gnu/egcs/gcc/cp/cp-tree.def +++ b/gnu/egcs/gcc/cp/cp-tree.def @@ -173,10 +173,10 @@ DEFTREECODE (USING_DECL, "using_decl", 'd', 0) DEFTREECODE (DEFAULT_ARG, "default_arg", 'c', 2) /* A template-id, like foo<int>. The first operand is the template. - The second is the list of explicitly specified arguments. The - template will be a FUNCTION_DECL, TEMPLATE_DECL, or an OVERLOAD. - If the template-id refers to a member template, the template may be - an IDENTIFIER_NODE. */ + The second is the TREE_LIST or TREE_VEC of explicitly specified + arguments. The template will be a FUNCTION_DECL, TEMPLATE_DECL, or + an OVERLOAD. If the template-id refers to a member template, the + template may be an IDENTIFIER_NODE. */ DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", 'e', 2) /* An association between name and entity. Parameters are the scope diff --git a/gnu/egcs/gcc/cp/expr.c b/gnu/egcs/gcc/cp/expr.c index bc745ff0a00..83bdff9eba7 100644 --- a/gnu/egcs/gcc/cp/expr.c +++ b/gnu/egcs/gcc/cp/expr.c @@ -36,6 +36,62 @@ static tree extract_scalar_init PROTO((tree, tree)); static rtx cplus_expand_expr PROTO((tree, rtx, enum machine_mode, enum expand_modifier)); +/* Hook used by output_constant to expand language-specific + constants. */ + +static tree +cplus_expand_constant (cst) + tree cst; +{ + switch (TREE_CODE (cst)) + { + case PTRMEM_CST: + { + tree type = TREE_TYPE (cst); + tree member; + tree offset; + + /* Find the member. */ + member = PTRMEM_CST_MEMBER (cst); + + if (TREE_CODE (member) == FIELD_DECL) + { + /* Find the offset for the field. */ + offset = convert (sizetype, + size_binop (EASY_DIV_EXPR, + DECL_FIELD_BITPOS (member), + size_int (BITS_PER_UNIT))); + + /* We offset all pointer to data members by 1 so that we + can distinguish between a null pointer to data member + and the first data member of a structure. */ + offset = size_binop (PLUS_EXPR, offset, size_int (1)); + + cst = cp_convert (type, offset); + } + else + { + tree delta; + tree idx; + tree pfn; + tree delta2; + + expand_ptrmemfunc_cst (cst, &delta, &idx, &pfn, &delta2); + + cst = build_ptrmemfunc1 (type, delta, idx, + pfn, delta2); + } + } + break; + + default: + /* There's nothing to do. */ + break; + } + + return cst; +} + /* Hook used by expand_expr to expand language-specific tree codes. */ static rtx @@ -163,43 +219,8 @@ cplus_expand_expr (exp, target, tmode, modifier) } case PTRMEM_CST: - { - tree member; - tree offset; - - /* Find the member. */ - member = PTRMEM_CST_MEMBER (exp); - - if (TREE_CODE (member) == FIELD_DECL) - { - /* Find the offset for the field. */ - offset = convert (sizetype, - size_binop (EASY_DIV_EXPR, - DECL_FIELD_BITPOS (member), - size_int (BITS_PER_UNIT))); - - /* We offset all pointer to data members by 1 so that we - can distinguish between a null pointer to data member - and the first data member of a structure. */ - offset = size_binop (PLUS_EXPR, offset, size_int (1)); - - return expand_expr (cp_convert (type, offset), target, tmode, - modifier); - } - else - { - tree delta; - tree idx; - tree pfn; - tree delta2; - - expand_ptrmemfunc_cst (exp, &delta, &idx, &pfn, &delta2); - - return expand_expr (build_ptrmemfunc1 (type, delta, idx, - pfn, delta2), - target, tmode, modifier); - } - } + return expand_expr (cplus_expand_constant (exp), + target, tmode, modifier); case OFFSET_REF: { @@ -237,6 +258,7 @@ void init_cplus_expand () { lang_expand_expr = cplus_expand_expr; + lang_expand_constant = cplus_expand_constant; } /* If DECL had its rtl moved from where callers expect it diff --git a/gnu/egcs/gcc/cp/gxxint.texi b/gnu/egcs/gcc/cp/gxxint.texi index c63b672959b..05f1373b252 100644 --- a/gnu/egcs/gcc/cp/gxxint.texi +++ b/gnu/egcs/gcc/cp/gxxint.texi @@ -1748,7 +1748,7 @@ Used to indicate a template function. Encodes the C++ and Java @code{int} types. @item I -Encodes typedef names of the form @code{int@var{n}_t, where @var{n} is a +Encodes typedef names of the form @code{int@var{n}_t}, where @var{n} is a positive decimal number. The @samp{I} is followed by either two hexidecimal digits, which encode the value of @var{n}, or by an arbitrary number of hexidecimal digits between underscores. For diff --git a/gnu/egcs/gcc/cp/lang-specs.h b/gnu/egcs/gcc/cp/lang-specs.h index 5f3d9f9e203..648bc1f0953 100644 --- a/gnu/egcs/gcc/cp/lang-specs.h +++ b/gnu/egcs/gcc/cp/lang-specs.h @@ -33,7 +33,8 @@ Boston, MA 02111-1307, USA. */ "%{E|M|MM:cpp -lang-c++ %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\ %{C:%{!E:%eGNU C++ does not support -C without using -E}}\ %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\ - -D__GNUC__=%v1 -D__GNUG__=%v1 -D__GNUC_MINOR__=%v2 -D__cplusplus\ + %{!no-gcc:-D__GNUC__=%v1 -D__GNUG__=%v1 -D__GNUC_MINOR__=%v2}\ + -D__cplusplus\ %{ansi:-trigraphs -D__STRICT_ANSI__} %{!undef:%{!ansi:%p} %P}\ %{!fno-exceptions:-D__EXCEPTIONS}\ %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} %{trigraphs}\ @@ -43,8 +44,8 @@ Boston, MA 02111-1307, USA. */ %{!E:%{!M:%{!MM:cc1plus %i %1 %2\ -lang-c++ %{nostdinc*} %{C} %{A*} %{I*} %{P} %{$} %I\ %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\ - -D__GNUC__=%v1 -D__GNUG__=%v1\ - -D__GNUC_MINOR__=%v2 -D__cplusplus\ + %{!no-gcc:-D__GNUC__=%v1 -D__GNUG__=%v1\ + -D__GNUC_MINOR__=%v2} -D__cplusplus\ %{ansi:-trigraphs -D__STRICT_ANSI__} %{!undef:%{!ansi:%p} %P}\ %{!fno-exceptions:-D__EXCEPTIONS}\ %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\ @@ -64,7 +65,8 @@ Boston, MA 02111-1307, USA. */ {"cpp -lang-c++ %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\ %{C:%{!E:%eGNU C++ does not support -C without using -E}}\ %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\ - -D__GNUC__=%v1 -D__GNUG__=%v1 -D__GNUC_MINOR__=%v2 -D__cplusplus\ + %{!no-gcc:-D__GNUC__=%v1 -D__GNUG__=%v1 -D__GNUC_MINOR__=%v2}\ + -D__cplusplus\ %{ansi:-trigraphs -D__STRICT_ANSI__} %{!undef:%{!ansi:%p} %P}\ %{!fno-exceptions:-D__EXCEPTIONS}\ %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} %{trigraphs}\ diff --git a/gnu/egcs/gcc/cp/method.c b/gnu/egcs/gcc/cp/method.c index 39f7f041937..323aff58ebf 100644 --- a/gnu/egcs/gcc/cp/method.c +++ b/gnu/egcs/gcc/cp/method.c @@ -372,10 +372,16 @@ is_back_referenceable_type (type) switch (TREE_CODE (type)) { + case BOOLEAN_TYPE: + if (!flag_do_squangling) + /* Even though the mangling of this is just `b', we did + historically generate back-references for it. */ + return 1; + /* Fall through. */ + case INTEGER_TYPE: case REAL_TYPE: case VOID_TYPE: - case BOOLEAN_TYPE: /* These types have single-character manglings, so there's no point in generating back-references. */ return 0; diff --git a/gnu/egcs/gcc/cp/search.c b/gnu/egcs/gcc/cp/search.c index 33873a0a305..209256803e2 100644 --- a/gnu/egcs/gcc/cp/search.c +++ b/gnu/egcs/gcc/cp/search.c @@ -2057,17 +2057,29 @@ static tree convert_pointer_to_single_level (to_type, expr) tree to_type, expr; { + tree derived; tree binfo_of_derived; - tree last; + int i; - binfo_of_derived = TYPE_BINFO (TREE_TYPE (TREE_TYPE (expr))); - last = get_binfo (to_type, TREE_TYPE (TREE_TYPE (expr)), 0); - my_friendly_assert (BINFO_INHERITANCE_CHAIN (last) == binfo_of_derived, - 980827); + derived = TREE_TYPE (TREE_TYPE (expr)); + binfo_of_derived = TYPE_BINFO (derived); my_friendly_assert (BINFO_INHERITANCE_CHAIN (binfo_of_derived) == NULL_TREE, 980827); - return build_vbase_path (PLUS_EXPR, build_pointer_type (to_type), expr, - last, 1); + for (i = CLASSTYPE_N_BASECLASSES (derived) - 1; i >= 0; --i) + { + tree binfo = BINFO_BASETYPE (binfo_of_derived, i); + my_friendly_assert (BINFO_INHERITANCE_CHAIN (binfo) == binfo_of_derived, + 980827); + if (same_type_p (BINFO_TYPE (binfo), to_type)) + return build_vbase_path (PLUS_EXPR, + build_pointer_type (to_type), + expr, binfo, 1); + } + + my_friendly_abort (19990607); + + /* NOTREACHED */ + return NULL_TREE; } tree markedp (binfo, data) @@ -2122,7 +2134,8 @@ marked_pushdecls_p (binfo, data) tree binfo; void *data ATTRIBUTE_UNUSED; { - return BINFO_PUSHDECLS_MARKED (binfo) ? binfo : NULL_TREE; + return (CLASS_TYPE_P (BINFO_TYPE (binfo)) + && BINFO_PUSHDECLS_MARKED (binfo)) ? binfo : NULL_TREE; } static tree @@ -2130,7 +2143,8 @@ unmarked_pushdecls_p (binfo, data) tree binfo; void *data ATTRIBUTE_UNUSED; { - return !BINFO_PUSHDECLS_MARKED (binfo) ? binfo : NULL_TREE; + return (CLASS_TYPE_P (BINFO_TYPE (binfo)) + && !BINFO_PUSHDECLS_MARKED (binfo)) ? binfo : NULL_TREE; } #if 0 diff --git a/gnu/egcs/gcc/cp/semantics.c b/gnu/egcs/gcc/cp/semantics.c index 847a982e260..6586937fa49 100644 --- a/gnu/egcs/gcc/cp/semantics.c +++ b/gnu/egcs/gcc/cp/semantics.c @@ -120,7 +120,7 @@ finish_if_stmt_cond (cond, if_stmt) if (last_tree != if_stmt) RECHAIN_STMTS_FROM_LAST (if_stmt, IF_COND (if_stmt)); else - IF_COND (if_stmt) = cond; + IF_COND (if_stmt) = copy_to_permanent (cond); } else { @@ -219,7 +219,7 @@ finish_while_stmt_cond (cond, while_stmt) RECHAIN_STMTS_FROM_LAST (while_stmt, WHILE_COND (while_stmt)); else - TREE_OPERAND (while_stmt, 0) = cond; + TREE_OPERAND (while_stmt, 0) = copy_to_permanent (cond); } else { @@ -294,7 +294,7 @@ finish_do_stmt (cond, do_stmt) tree do_stmt; { if (processing_template_decl) - DO_COND (do_stmt) = cond; + DO_COND (do_stmt) = copy_to_permanent (cond); else { emit_line_note (input_filename, lineno); @@ -378,7 +378,7 @@ finish_for_cond (cond, for_stmt) if (last_tree != for_stmt) RECHAIN_STMTS_FROM_LAST (for_stmt, FOR_COND (for_stmt)); else - FOR_COND (for_stmt) = cond; + FOR_COND (for_stmt) = copy_to_permanent (cond); } else { diff --git a/gnu/egcs/gcc/cp/typeck2.c b/gnu/egcs/gcc/cp/typeck2.c index 76a30b202d6..3dae61ecc66 100644 --- a/gnu/egcs/gcc/cp/typeck2.c +++ b/gnu/egcs/gcc/cp/typeck2.c @@ -400,6 +400,7 @@ initializer_constant_valid_p (value, endtype) case REAL_CST: case STRING_CST: case COMPLEX_CST: + case PTRMEM_CST: return null_pointer_node; case ADDR_EXPR: diff --git a/gnu/egcs/gcc/f/BUGS b/gnu/egcs/gcc/f/BUGS index f97b75e3949..ffd90cc8320 100644 --- a/gnu/egcs/gcc/f/BUGS +++ b/gnu/egcs/gcc/f/BUGS @@ -2,7 +2,7 @@ `bugs0.texi' and `bugs.texi'. `BUGS' is *not* a source file, although it is normally included within source distributions. - This file lists known bugs in the EGCS-1.2 version of the GNU + This file lists known bugs in the FSF-0.5.25 version of the GNU Fortran compiler. Copyright (C) 1995-1999 Free Software Foundation, Inc. You may copy, distribute, and modify it freely as long as you preserve this copyright notice and permission notice. @@ -11,9 +11,9 @@ Known Bugs In GNU Fortran ************************* This section identifies bugs that `g77' *users* might run into in -the EGCS-1.2 version of `g77'. This includes bugs that are actually in -the `gcc' back end (GBE) or in `libf2c', because those sets of code are -at least somewhat under the control of (and necessarily intertwined +the FSF-0.5.25 version of `g77'. This includes bugs that are actually +in the `gcc' back end (GBE) or in `libf2c', because those sets of code +are at least somewhat under the control of (and necessarily intertwined with) `g77', so it isn't worth separating them out. For information on bugs in *other* versions of `g77', see @@ -27,7 +27,7 @@ particularly concentrated on any version of this information that is distributed as part of a *released* `g77'. In particular, while this information is intended to apply to the -EGCS-1.2 version of `g77', only an official *release* of that version +FSF-0.5.25 version of `g77', only an official *release* of that version is expected to contain documentation that is most consistent with the `g77' product in that version. diff --git a/gnu/egcs/gcc/f/ChangeLog b/gnu/egcs/gcc/f/ChangeLog index 21c9a360866..e8d745a88ee 100644 --- a/gnu/egcs/gcc/f/ChangeLog +++ b/gnu/egcs/gcc/f/ChangeLog @@ -1,3 +1,85 @@ +Mon Jun 7 08:42:40 1999 Craig Burley <craig@jcb-sc.com> + + * Make-lang.in: Any target using libsubdir must depend + on installdirs. + +Sat Jun 5 23:50:36 1999 Craig Burley <craig@jcb-sc.com> + + * g77.texi: Describe a few more missing features people + have emailed me about. + +Sat Jun 5 17:03:23 1999 Craig Burley <craig@jcb-sc.com> + + From Dave Love to egcs-patches on 20 May 1999 17:38:38 +0100: + * g77.texi: Clean up fossil text vis-a-vis Intel CPUs. + +Fri Jun 4 13:56:56 1999 Craig Burley <craig@jcb-sc.com> + + * Make-lang.in: Use libsubdir, not prefix, to store + temporary lang-f77 `flag' file. + +Fri Jun 4 10:26:04 1999 Craig Burley <craig@jcb-sc.com> + + * news.texi (News): Mention GCC 2.95 in favor of EGCS 1.2. + Mention that libg2c is multilibbed. + +Fri Jun 4 10:09:50 1999 Craig Burley <craig@jcb-sc.com> + + * g77.texi (Missing Features): Add `Better Warnings' + item. + +Fri May 28 16:51:41 1999 Craig Burley <craig@jcb-sc.com> + + * g77.texi: Fix thinko. + +Wed May 26 14:43:27 1999 Craig Burley <craig@jcb-sc.com> + + * news.texi: Document Tue May 18 03:52:04 1999 patch. + Fix a grammo. + +Wed May 26 14:25:07 1999 Craig Burley <craig@jcb-sc.com> + + * g77.texi, news.texi, root.texi, version.c: Start renaming + EGCS 1.2 to GCC 2.95, and start using 0.5.25 to designate + the version of g77 within GCC 2.95. + +Wed May 26 11:45:21 1999 Craig Burley <craig@jcb-sc.com> + + Rename -fsubscript-check to -fbounds-check and + -ff2c-subscript-check to -ffortran-bounds-check: + * g77.texi: Rename options in docs, clarify usage. + * lang-options.h: Rename options, clarify doclets. + * news.texi: Rename options, don't bother with fortran-specific + option. + * top.c (ffe_decode_option): Rename recognized strings. + +Tue May 25 18:21:09 1999 Craig Burley <craig@jcb-sc.com> + + * com.c (FFECOM_FASTER_ARRAY_REFS): Delete this vestige, + now that -fflatten-arrays exists. + +Tue May 25 17:48:34 1999 Craig Burley <craig@jcb-sc.com> + + Fix 19990525-0.f: + * com.c (ffecom_arg_ptr_to_expr): Strip off parens around + CHARACTER expression. + (ffecom_prepare_expr_): Ditto. + +Tue May 18 03:52:04 1999 Craig Burley <craig@jcb-sc.com> + + Support use of back end's improved open-coding of complex divide: + * com.c (ffecom_tree_divide_): Use RDIV_EXPR for complex divide, + instead of run-time call to [cz]_div, if `-Os' option specified. + (lang_init_options): Tell back end we want support for wide range + of inputs to complex divide. + + * Bump version. + +Tue May 18 00:21:34 1999 Zack Weinberg <zack@rabi.phys.columbia.edu> + + * lang-specs.h: Define __GNUC__ and __GNUC_MINOR__ only if -no-gcc + was not given. + Thu May 13 12:23:20 1999 Craig Burley <craig@jcb-sc.com> Fix INTEGER*8 subscripts in array references: diff --git a/gnu/egcs/gcc/f/INSTALL b/gnu/egcs/gcc/f/INSTALL index b8c24dbdb8a..e0349ec0cc8 100644 --- a/gnu/egcs/gcc/f/INSTALL +++ b/gnu/egcs/gcc/f/INSTALL @@ -13,9 +13,15 @@ Installing GNU Fortran The following information describes how to install `g77'. - Note that, for `egcs' users, much of the information is obsolete, -and is superceded by the `egcs' installation procedures. Such -information is accordingly omitted and flagged as such. + The information in this file generally pertains to dealing with +*source* distributions of `g77' and `gcc'. It is possible that some of +this information will be applicable to some *binary* distributions of +these products--however, since these distributions are not made by the +maintainers of `g77', responsibility for binary distributions rests with +whoever built and first distributed them. + + Nevertheless, efforts to make `g77' easier to both build and install +from source and package up as a binary distribution are ongoing. *Warning:* The information below is still under development, and might not accurately reflect the `g77' code base of which it is a part. @@ -24,7 +30,7 @@ particularly concentrated on any version of this information that is distributed as part of a *released* `g77'. In particular, while this information is intended to apply to the -EGCS-1.2 version of `g77', only an official *release* of that version +FSF-0.5.25 version of `g77', only an official *release* of that version is expected to contain documentation that is most consistent with the `g77' product in that version. @@ -33,8 +39,221 @@ is expected to contain documentation that is most consistent with the Prerequisites ============= - For `egcs' users, this information is superceded by the `egcs' -installation instructions. + The procedures described to unpack, configure, build, and install +`g77' assume your system has certain programs already installed. + + The following prerequisites should be met by your system before you +follow the `g77' installation instructions: + +`gzip' and `tar' + To unpack the `gcc' and `g77' distributions, you'll need the + `gunzip' utility in the `gzip' distribution. Most UNIX systems + already have `gzip' installed. If yours doesn't, you can get it + from the FSF. + + Note that you'll need `tar' and other utilities as well, but all + UNIX systems have these. There are GNU versions of all these + available--in fact, a complete GNU UNIX system can be put together + on most systems, if desired. + + The version of GNU `gzip' used to package this release is + 1.2.4. (The version of GNU `tar' used to package this release is + 1.12.) + +`gcc-2.8.1.tar.gz' + You need to have this, or some other applicable, version of `gcc' + on your system. The version should be an exact copy of a + distribution from the FSF. Its size is approximately 8.4MB. + + If you've already unpacked `gcc-2.8.1.tar.gz' into a directory + (named `gcc-2.8.1') called the "source tree" for `gcc', you can + delete the distribution itself, but you'll need to remember to + skip any instructions to unpack this distribution. + + Without an applicable `gcc' source tree, you cannot build `g77'. + You can obtain an FSF distribution of `gcc' from the FSF. + +`g77-0.5.25.tar.gz' + You probably have already unpacked this package, or you are + reading an advance copy of these installation instructions, which + are contained in this distribution. The size of this package is + approximately 1.4MB. + + You can obtain an FSF distribution of `g77' from the FSF, the same + way you obtained `gcc'. + +Enough disk space + The amount of disk space needed to unpack, build, install, and use + `g77' depends on the type of system you're using, how you build + `g77', and how much of it you install (primarily, which languages + you install). + + The sizes shown below assume all languages distributed in + `gcc-2.8.1', plus `g77', will be built and installed. These sizes + are indicative of GNU/Linux systems on Intel x86 running COFF and + on Digital Alpha (AXP) systems running ELF. These should be + fairly representative of 32-bit and 64-bit systems, respectively. + + Note that all sizes are approximate and subject to change without + notice! They are based on preliminary releases of g77 made shortly + before the public beta release. + + -- `gcc' and `g77' distributions occupy 10MB packed, 40MB + unpacked. These consist of the source code and documentation, + plus some derived files (mostly documentation), for `gcc' and + `g77'. Any deviations from these numbers for different kinds + of systems are likely to be very minor. + + -- A "bootstrap" build requires an additional 91MB for a total + of 132MB on an ix86, and an additional 136MB for a total of + 177MB on an Alpha. + + -- Removing `gcc/stage1' after the build recovers 13MB for a + total of 119MB on an ix86, and recovers 21MB for a total of + 155MB on an Alpha. + + After doing this, the integrity of the build can still be + verified via `make compare', and the `gcc' compiler modified + and used to build itself for testing fairly quickly, using + the copy of the compiler kept in `gcc/stage2'. + + -- Removing `gcc/stage2' after the build further recovers 39MB + for a total of 80MB, and recovers 57MB for a total of 98MB on + an Alpha. + + After doing this, the compiler can still be installed, + especially if GNU `make' is used to avoid gratuitous rebuilds + (or, the installation can be done by hand). + + -- Installing `gcc' and `g77' copies 23MB onto the `--prefix' + disk for a total of 103MB on an ix86, and copies 31MB onto + the `--prefix' disk for a total of 130MB on an Alpha. + + After installation, if no further modifications and builds of + `gcc' or `g77' are planned, the source and build directory may be + removed, leaving the total impact on a system's disk storage as + that of the amount copied during installation. + + Systems with the appropriate version of `gcc' installed don't + require the complete bootstrap build. Doing a "straight build" + requires about as much space as does a bootstrap build followed by + removing both the `gcc/stage1' and `gcc/stage2' directories. + + Installing `gcc' and `g77' over existing versions might require + less *new* disk space, but note that, unlike many products, `gcc' + installs itself in a way that avoids overwriting other installed + versions of itself, so that other versions may easily be invoked + (via `gcc -V VERSION'). + + So, the amount of space saved as a result of having an existing + version of `gcc' and `g77' already installed is not + much--typically only the command drivers (`gcc', `g77', `g++', and + so on, which are small) and the documentation is overwritten by + the new installation. The rest of the new installation is done + without replacing existing installed versions (assuming they have + different version numbers). + +`make' + Your system must have `make', and you will probably save yourself + a lot of trouble if it is GNU `make' (sometimes referred to as + `gmake'). In particular, you probably need GNU `make' to build + outside the source directory (with `configure''s `--srcdir' + option.) + + The version of GNU `make' used to develop this release is + 3.76.1. + +`cc' + Your system must have a working C compiler. If it doesn't, you + might be able to obtain a prebuilt binary of some version of `gcc' + from the network or on CD-ROM, perhaps from the FSF. The best + source of information about binaries is probably a system-specific + Usenet news group, initially via its FAQ. + + *Note Installing GNU CC: (gcc)Installation, for more information + on prerequisites for installing `gcc'. + +`sed' + All UNIX systems have `sed', but some have a broken version that + cannot handle configuring, building, or installing `gcc' or `g77'. + + The version of GNU `sed' used to develop this release is + 2.05. (Note that GNU `sed' version 3.0 was withdrawn by the + FSF--if you happen to have this version installed, replace it with + version 2.05 immediately. See a GNU distribution site for further + explanation.) + +`root' access or equivalent + To perform the complete installation procedures on a system, you + need to have `root' access to that system, or equivalent access to + the `--prefix' directory tree specified on the `configure' command + line. + + Portions of the procedure (such as configuring and building `g77') + can be performed by any user with enough disk space and virtual + memory. + + However, these instructions are oriented towards less-experienced + users who want to install `g77' on their own personal systems. + + System administrators with more experience will want to determine + for themselves how they want to modify the procedures described + below to suit the needs of their installation. + +`autoconf' + The version of GNU `autoconf' used to develop this release is + 2.12. + + `autoconf' is not needed in the typical case of installing `gcc' + and `g77'. *Note Missing tools?::, for information on when it + might be needed and how to work around not having it. + +`bison' + The version of GNU `bison' used to develop this release is + 1.25. + + `bison' is not needed in the typical case of installing `gcc' and + `g77'. *Note Missing tools?::, for information on when it might + be needed and how to work around not having it. + +`gperf' + The version of GNU `gperf' used to develop this release is + 2.5. + + `gperf' is not needed in the typical case of installing `gcc' and + `g77'. *Note Missing tools?::, for information on when it might + be needed and how to work around not having it. + +`makeinfo' + The version of GNU `makeinfo' used to develop this release is + 1.68. + + `makeinfo' is part of the GNU `texinfo' package; `makeinfo' + version 1.68 is distributed as part of GNU `texinfo' version + 3.12. + + `makeinfo' is not needed in the typical case of installing `gcc' + and `g77'. *Note Missing tools?::, for information on when it + might be needed and how to work around not having it. + + An up-to-date version of GNU `makeinfo' is still convenient when + obtaining a new version of a GNU distribution such as `gcc' or + `g77', as it allows you to obtain the `.diff.gz' file instead of + the entire `.tar.gz' distribution (assuming you have installed + `patch'). + +`patch' + The version of GNU `patch' used to develop this release is + 2.5. + + Beginning with `g77' version 0.5.23, it is no longer necessary to + patch the `gcc' back end to build `g77'. + + An up-to-date version of GNU `patch' is still convenient when + obtaining a new version of a GNU distribution such as `gcc' or + `g77', as it allows you to obtain the `.diff.gz' file instead of + the entire `.tar.gz' distribution (assuming you have installed the + tools needed to rebuild derived files, such as `makeinfo'). Problems Installing =================== @@ -83,7 +302,46 @@ not yet established. Missing strtoul or bsearch .......................... - This information does not apply to the `egcs' version of `g77'. + On SunOS4 systems, linking the `f771' program used to produce an +error message concerning an undefined symbol named `_strtoul', because +the `strtoul' library function is not provided on that system. + + Other systems have, in the past, been reported to not provide their +own `strtoul' or `bsearch' function. + + Some versions `g77' tried to default to providing bare-bones +versions of `bsearch' and `strtoul' automatically, but every attempt at +this has failed for at least one kind of system. + + To limit the failures to those few systems actually missing the +required routines, the bare-bones versions are still provided, in +`egcs/gcc/f/proj.c', if the appropriate macros are defined. These are +`NEED_BSEARCH' for `bsearch' and `NEED_STRTOUL' for `NEED_STRTOUL'. + + Therefore, if you are sure your system is missing `bsearch' or +`strtoul' in its library, define the relevant macro(s) before building +`g77'. This can be done by editing `egcs/gcc/f/proj.c' and inserting +either or both of the following `#define' statements before the comment +shown: + + /* Insert #define statements here. */ + + #define NEED_BSEARCH + #define NEED_STRTOUL + + Then, continue configuring and building `g77' as usual. + + Or, you can define these on the `make' command line. To build with +the bundled `cc' on SunOS4, for example, try: + make bootstrap BOOT_CFLAGS='-O2 -g -DNEED_STRTOUL' + + If you then encounter problems compiling `egcs/gcc/f/proj.c', it +might be due to a discrepancy between how `bsearch' or `strtoul' are +defined by that file and how they're declared by your system's header +files. + + In that case, you'll have to use some basic knowledge of C to work +around the problem, perhaps by editing `egcs/gcc/f/proj.c' somewhat. Cleanup Kills Stage Directories ............................... @@ -334,18 +592,970 @@ support 64-bit systems. Quick Start =========== - For `egcs' users, this information is superceded by the `egcs' -installation instructions. + This procedure configures, builds, and installs `g77' "out of the +box" and works on most UNIX systems. Each command is identified by a +unique number, used in the explanatory text that follows. For the most +part, the output of each command is not shown, though indications of +the types of responses are given in a few cases. + + To perform this procedure, the installer must be logged in as user +`root'. Much of it can be done while not logged in as `root', and +users experienced with UNIX administration should be able to modify the +procedure properly to do so. + + Following traditional UNIX conventions, it is assumed that the +source trees for `g77' and `gcc' will be placed in `/usr/src'. It also +is assumed that the source distributions themselves already reside in +`/usr/FSF', a naming convention used by the author of `g77' on his own +system: + + /usr/FSF/gcc-2.8.1.tar.gz + /usr/FSF/g77-0.5.25.tar.gz + + If you vary *any* of the steps below, you might run into trouble, +including possibly breaking existing programs for other users of your +system. Before doing so, it is wise to review the explanations of some +of the steps. These explanations follow this list of steps. + + sh[ 1]# cd /usr/src + + sh[ 2]# gunzip -c < /usr/FSF/gcc-2.8.1.tar.gz | tar xf - + [Might say "Broken pipe"...that is normal on some systems.] + + sh[ 3]# gunzip -c < /usr/FSF/g77-0.5.25.tar.gz | tar xf - + ["Broken pipe" again possible.] + + sh[ 4]# ln -s gcc-2.8.1 gcc + + sh[ 5]# ln -s g77-0.5.25 g77 + + sh[ 6]# mv -i g77/* gcc + [No questions should be asked by mv here; or, you made a mistake.] + + sh[ 7]# cd gcc + sh[ 8]# ./configure --prefix=/usr + [Do not do the above if gcc is not installed in /usr/bin. + You might need a different --prefix=..., as + described below.] + + sh[ 9]# make bootstrap + [This takes a long time, and is where most problems occur.] + + sh[10]# make compare + [This verifies that the compiler is `sane'. + If any files are printed, you have likely found a g77 bug.] + + sh[11]# rm -fr stage1 + + sh[12]# make -k install + [The actual installation.] + + sh[13]# g77 -v + [Verify that g77 is installed, obtain version info.] + + sh[14]# + + *Note Updating Your Info Directory: Updating Documentation, for +information on how to update your system's top-level `info' directory +to contain a reference to this manual, so that users of `g77' can +easily find documentation instead of having to ask you for it. + + Elaborations of many of the above steps follows: + +Step 1: `cd /usr/src' + You can build `g77' pretty much anyplace. By convention, this + manual assumes `/usr/src'. It might be helpful if other users on + your system knew where to look for the source code for the + installed version of `g77' and `gcc' in any case. + +Step 3: `gunzip -d < /usr/FSF/g77-0.5.25.tar.gz | tar xf -' + It is not always necessary to obtain the latest version of `g77' + as a complete `.tar.gz' file if you have a complete, earlier + distribution of `g77'. If appropriate, you can unpack that earlier + version of `g77', and then apply the appropriate patches to + achieve the same result--a source tree containing version + 0.5.25 of `g77'. + +Step 4: `ln -s gcc-2.8.1 gcc' + +Step 5: `ln -s g77-0.5.25 g77' + These commands mainly help reduce typing, and help reduce visual + clutter in examples in this manual showing what to type to install + `g77'. + + *Note Unpacking::, for information on using distributions of `g77' + made by organizations other than the FSF. + +Step 6: `mv -i g77/* gcc' + After doing this, you can, if you like, type `rm g77' and `rmdir + g77-0.5.25' to remove the empty directory and the symbol link to + it. But, it might be helpful to leave them around as quick + reminders of which version(s) of `g77' are installed on your + system. + + *Note Unpacking::, for information on the contents of the `g77' + directory (as merged into the `gcc' directory). + +Step 8: `./configure --prefix=/usr' + This is where you specify that the `g77' and `gcc' executables are + to be installed in `/usr/bin/', the `g77' and `gcc' documentation + is to be installed in `/usr/info/' and `/usr/man/', and so on. + + You should ensure that any existing installation of the `gcc' + executable is in `/usr/bin/'. + + However, if that existing version of `gcc' is not 2.8.1, or if you + simply wish to avoid risking overwriting it with a newly built + copy of the same version, you can specify `--prefix=/usr/local' + (which is the default) or some other path, and invoke the newly + installed version directly from that path's `bin' directory. + + *Note Where in the World Does Fortran (and GNU CC) Go?: Where to + Install, for more information on determining where to install + `g77'. *Note Configuring gcc::, for more information on the + configuration process triggered by invoking the `./configure' + script. + +Step 9: `make bootstrap' + *Note Installing GNU CC: (gcc)Installation, for information on the + kinds of diagnostics you should expect during this procedure. + + *Note Building gcc::, for complete `g77'-specific information on + this step. + +Step 10: `make compare' + *Note Where to Port Bugs: Bug Lists, for information on where to + report that you observed files having different contents during + this phase. + + *Note How to Report Bugs: Bug Reporting, for information on *how* + to report bugs like this. + +Step 11: `rm -fr stage1' + You don't need to do this, but it frees up disk space. + +Step 12: `make -k install' + If this doesn't seem to work, try: + + make -k install install-libf77 + + Or, make sure you're using GNU `make'. + + *Note Installation of Binaries::, for more information. + + *Note Updating Your Info Directory: Updating Documentation, for + information on entering this manual into your system's list of + texinfo manuals. + +Step 13: `g77 -v' + If this command prints approximately 25 lines of output, including + the GNU Fortran Front End version number (which should be the same + as the version number for the version of `g77' you just built and + installed) and the version numbers for the three parts of the + `libf2c' library (`libF77', `libI77', `libU77'), and those version + numbers are all in agreement, then there is a high likelihood that + the installation has been successfully completed. + + You might consider doing further testing. For example, log in as + a non-privileged user, then create a small Fortran program, such + as: + + PROGRAM SMTEST + DO 10 I=1, 10 + PRINT *, 'Hello World #', I + 10 CONTINUE + END + + Compile, link, and run the above program, and, assuming you named + the source file `smtest.f', the session should look like this: + + sh# g77 -o smtest smtest.f + sh# ./smtest + Hello World # 1 + Hello World # 2 + Hello World # 3 + Hello World # 4 + Hello World # 5 + Hello World # 6 + Hello World # 7 + Hello World # 8 + Hello World # 9 + Hello World # 10 + sh# + + If invoking `g77' doesn't seem to work, the problem might be that + you've installed it in a location that is not in your shell's + search path. For example, if you specified `--prefix=/gnu', and + `/gnu/bin' is not in your `PATH' environment variable, you must + explicitly specify the location of the compiler via `/gnu/bin/g77 + -o smtest smtest.f'. + + After proper installation, you don't need to keep your gcc and g77 + source and build directories around anymore. Removing them can + free up a lot of disk space. Complete Installation ===================== - For `egcs' users, this information is superceded by the `egcs' -installation instructions. + Here is the complete `g77'-specific information on how to configure, +build, and install `g77'. + +Unpacking +--------- + + The `gcc' source distribution is a stand-alone distribution. It is +designed to be unpacked (producing the `gcc' source tree) and built as +is, assuming certain prerequisites are met (including the availability +of compatible UNIX programs such as `make', `cc', and so on). + + However, before building `gcc', you will want to unpack and merge +the `g77' distribution in with it, so that you build a Fortran-capable +version of `gcc', which includes the `g77' command, the necessary +run-time libraries, and this manual. + + Unlike `gcc', the `g77' source distribution is *not* a stand-alone +distribution. It is designed to be unpacked and, afterwards, +immediately merged into an applicable `gcc' source tree. That is, the +`g77' distribution *augments* a `gcc' distribution--without `gcc', +generally only the documentation is immediately usable. + + A sequence of commands typically used to unpack `gcc' and `g77' is: + + sh# cd /usr/src + sh# gunzip -c /usr/FSF/gcc-2.8.1.tar.gz | tar xf - + sh# gunzip -c /usr/FSF/g77-0.5.25.tar.gz | tar xf - + sh# ln -s gcc-2.8.1 gcc + sh# ln -s g77-0.5.25 g77 + sh# mv -i g77/* gcc + + *Notes:* The commands beginning with `gunzip...' might print `Broken +pipe...' as they complete. That is nothing to worry about, unless you +actually *hear* a pipe breaking. The `ln' commands are helpful in +reducing typing and clutter in installation examples in this manual. +Hereafter, the top level of `gcc' source tree is referred to as `gcc', +and the top level of just the `g77' source tree (prior to issuing the +`mv' command, above) is referred to as `g77'. + + There are three top-level names in a `g77' distribution: + + g77/COPYING.g77 + g77/README.g77 + g77/f + + All three entries should be moved (or copied) into a `gcc' source +tree (typically named after its version number and as it appears in the +FSF distributions--e.g. `gcc-2.8.1'). + + `g77/f' is the subdirectory containing all of the code, +documentation, and other information that is specific to `g77'. The +other two files exist to provide information on `g77' to someone +encountering a `gcc' source tree with `g77' already present, who has +not yet read these installation instructions and thus needs help +understanding that the source tree they are looking at does not come +from a single FSF distribution. They also help people encountering an +unmerged `g77' source tree for the first time. + + *Note:* Please use *only* `gcc' and `g77' source trees as +distributed by the FSF. Use of modified versions is likely to result +in problems that appear to be in the `g77' code but, in fact, are not. +Do not use such modified versions unless you understand all the +differences between them and the versions the FSF distributes--in which +case you should be able to modify the `g77' (or `gcc') source trees +appropriately so `g77' and `gcc' can coexist as they do in the stock +FSF distributions. + +Merging Distributions +--------------------- + + After merging the `g77' source tree into the `gcc' source tree, you +have put together a complete `g77' source tree. + + As of version 0.5.23, `g77' no longer modifies the version number of +`gcc', nor does it patch `gcc' itself. + + `g77' still depends on being merged with an appropriate version of +`gcc'. For version 0.5.25 of `g77', the specific version of `gcc' +supported is 2.8.1. + + However, other versions of `gcc' might be suitable "hosts" for this +version of `g77'. + + GNU version numbers make it easy to figure out whether a particular +version of a distribution is newer or older than some other version of +that distribution. The format is, generally, MAJOR.MINOR.PATCH, with +each field being a decimal number. (You can safely ignore leading +zeros; for example, 1.5.3 is the same as 1.5.03.) The MAJOR field only +increases with time. The other two fields are reset to 0 when the +field to their left is incremented; otherwise, they, too, only increase +with time. So, version 2.6.2 is newer than version 2.5.8, and version +3.0 is newer than both. (Trailing `.0' fields often are omitted in +announcements and in names for distributions and the directories they +create.) + + If your version of `gcc' is older than the oldest version supported +by `g77' (as casually determined by listing the contents of +`egcs/gcc/f/INSTALL/', which contains these installation instructions +in plain-text format), you should obtain a newer, supported version of +`gcc'. (You could instead obtain an older version of `g77', or try and +get your `g77' to work with the old `gcc', but neither approach is +recommended, and you shouldn't bother reporting any bugs you find if you +take either approach, because they're probably already fixed in the +newer versions you're not using.) + + If your version of `gcc' is newer than the newest version supported +by `g77', it is possible that your `g77' will work with it anyway. If +the version number for `gcc' differs only in the PATCH field, you might +as well try that version of `gcc'. Since it has the same MAJOR and +MINOR fields, the resulting combination is likely to work. + + So, for example, if a particular version of `g77' has support for +`gcc' versions 2.8.0 and 2.8.1, it is likely that `gcc-2.8.2' would +work well with `g77'. + + However, `gcc-2.9.0' would almost certainly not work with that +version of `g77' without appropriate modifications, so a new version of +`g77' would be needed. + + This complexity is the result of `gcc' and `g77' being separate +distributions. By keeping them separate, each product is able to be +independently improved and distributed to its user base more frequently. + + However, the GBE interface defined by `gcc' typically undergoes some +incompatible changes at least every time the MINOR field of the version +number is incremented, and such changes require corresponding changes to +the `g77' front end (FFE). + +Where in the World Does Fortran (and GNU CC) Go? +------------------------------------------------ + + Before configuring, you should make sure you know where you want the +`g77' and `gcc' binaries to be installed after they're built, because +this information is given to the configuration tool and used during the +build itself. + + A `g77' installation normally includes installation of a +Fortran-aware version of `gcc', so that the `gcc' command recognizes +Fortran source files and knows how to compile them. + + For this to work, the version of `gcc' that you will be building as +part of `g77' *must* be installed as the "active" version of `gcc' on +the system. + + Sometimes people make the mistake of installing `gcc' as +`/usr/local/bin/gcc', leaving an older, non-Fortran-aware version in +`/usr/bin/gcc'. (Or, the opposite happens.) This can result in `gcc' +being unable to compile Fortran source files, because when the older +version of `gcc' is invoked, it complains that it does not recognize +the language, or the file name suffix. + + So, determine whether `gcc' already is installed on your system, +and, if so, *where* it is installed, and prepare to configure the new +version of `gcc' you'll be building so that it installs over the +existing version of `gcc'. + + You might want to back up your existing copy of `/usr/bin/gcc', and +the entire `/usr/lib' directory, before you perform the actual +installation (as described in this manual). + + Existing `gcc' installations typically are found in `/usr' or +`/usr/local'. (This means the commands are installed in `/usr/bin' or +`/usr/local/bin', the libraries in `/usr/lib' or `/usr/local/lib', and +so on.) + + If you aren't certain where the currently installed version of `gcc' +and its related programs reside, look at the output of this command: + + gcc -v -o /tmp/delete-me -xc /dev/null -xnone + + All sorts of interesting information on the locations of various +`gcc'-related programs and data files should be visible in the output +of the above command. (The output also is likely to include a +diagnostic from the linker, since there's no `main_()' function.) +However, you do have to sift through it yourself; `gcc' currently +provides no easy way to ask it where it is installed and where it looks +for the various programs and data files it calls on to do its work. + + Just *building* `g77' should not overwrite any installed +programs--but, usually, after you build `g77', you will want to install +it, so backing up anything it might overwrite is a good idea. (This is +true for any package, not just `g77', though in this case it is +intentional that `g77' overwrites `gcc' if it is already installed--it +is unusual that the installation process for one distribution +intentionally overwrites a program or file installed by another +distribution, although, in this case, `g77' is an augmentation of the +`gcc' distribution.) + + Another reason to back up the existing version first, or make sure +you can restore it easily, is that it might be an older version on +which other users have come to depend for certain behaviors. However, +even the new version of `gcc' you install will offer users the ability +to specify an older version of the actual compilation programs if +desired, and these older versions need not include any `g77' components. +*Note Specifying Target Machine and Compiler Version: (gcc)Target +Options, for information on the `-V' option of `gcc'. + +Configuring GNU CC +------------------ + + `g77' is configured automatically when you configure `gcc'. There +are two parts of `g77' that are configured in two different +ways--`g77', which "camps on" to the `gcc' configuration mechanism, and +`libg2c', which uses a variation of the GNU `autoconf' configuration +system. + + Generally, you shouldn't have to be concerned with either `g77' or +`libg2c' configuration, unless you're configuring `g77' as a +cross-compiler. In this case, the `libg2c' configuration, and possibly +the `g77' and `gcc' configurations as well, might need special +attention. (This also might be the case if you're porting `gcc' to a +whole new system--even if it is just a new operating system on an +existing, supported CPU.) + + To configure the system, see *Note Installing GNU CC: +(gcc)Installation, following the instructions for running `./configure'. +Pay special attention to the `--prefix=' option, which you almost +certainly will need to specify. + + (Note that `gcc' installation information is provided as a +plain-text file in `gcc/INSTALL'.) + + The information printed by the invocation of `./configure' should +show that the `f' directory (the Fortran language) has been configured. +If it does not, there is a problem. + + *Note:* Configuring with the `--srcdir' argument, or by starting in +an empty directory and typing a command such as `../gcc/configure' to +build with separate build and source directories, is known to work with +GNU `make', but it is known to not work with other variants of `make'. +Irix5.2 and SunOS4.1 versions of `make' definitely won't work outside +the source directory at present. + + `g77''s portion of the `configure' script used to issue a warning +message about this when configuring for building binaries outside the +source directory, but no longer does this as of version 0.5.23. + + Instead, `g77' simply rejects most common attempts to build it using +a non-GNU `make' when the build directory is not the same as the source +directory, issuing an explanatory diagnostic. + +Building GNU CC +--------------- + + Building `g77' requires building enough of `gcc' that these +instructions assume you're going to build all of `gcc', including +`g++', `protoize', and so on. You can save a little time and disk +space by changes the `LANGUAGES' macro definition in `gcc/Makefile.in' +or `gcc/Makefile', but if you do that, you're on your own. One change +is almost *certainly* going to cause failures: removing `c' or `f77' +from the definition of the `LANGUAGES' macro. + + After configuring `gcc', which configures `g77' and `libg2c' +automatically, you're ready to start the actual build by invoking +`make'. + + *Note:* You *must* have run the `configure' script in `gcc' before +you run `make', even if you're using an already existing `gcc' +development directory, because `./configure' does the work to recognize +that you've added `g77' to the configuration. + + There are two general approaches to building GNU CC from scratch: + +"bootstrap" + This method uses minimal native system facilities to build a + barebones, unoptimized `gcc', that is then used to compile + ("bootstrap") the entire system. + +"straight" + This method assumes a more complete native system exists, and uses + that just once to build the entire system. + + On all systems without a recent version of `gcc' already installed, +the bootstrap method must be used. In particular, `g77' uses +extensions to the C language offered, apparently, only by `gcc'. + + On most systems with a recent version of `gcc' already installed, +the straight method can be used. This is an advantage, because it +takes less CPU time and disk space for the build. However, it does +require that the system have fairly recent versions of many GNU +programs and other programs, which are not enumerated here. + +Bootstrap Build +............... + + A complete bootstrap build is done by issuing a command beginning +with `make bootstrap ...', as described in *Note Installing GNU CC: +(gcc)Installation. This is the most reliable form of build, but it +does require the most disk space and CPU time, since the complete system +is built twice (in Stages 2 and 3), after an initial build (during +Stage 1) of a minimal `gcc' compiler using the native compiler and +libraries. + + You might have to, or want to, control the way a bootstrap build is +done by entering the `make' commands to build each stage one at a time, +as described in the `gcc' manual. For example, to save time or disk +space, you might want to not bother doing the Stage 3 build, in which +case you are assuming that the `gcc' compiler you have built is +basically sound (because you are giving up the opportunity to compare a +large number of object files to ensure they're identical). + + To save some disk space during installation, after Stage 2 is built, +you can type `rm -fr stage1' to remove the binaries built during Stage +1. + + Also, see *Note Installing GNU CC: (gcc)Installation, for important +information on building `gcc' that is not described in this `g77' +manual. For example, explanations of diagnostic messages and whether +they're expected, or indicate trouble, are found there. + +Straight Build +.............. + + If you have a recent version of `gcc' already installed on your +system, and if you're reasonably certain it produces code that is +object-compatible with the version of `gcc' you want to build as part +of building `g77', you can save time and disk space by doing a straight +build. + + To build just the compilers along with the necessary run-time +libraries, issue the following command: + + make -k CC=gcc + + If you run into problems using this method, you have two options: + + * Abandon this approach and do a bootstrap build. + + * Try to make this approach work by diagnosing the problems you're + running into and retrying. + + Especially if you do the latter, you might consider submitting any +solutions as bug/fix reports. *Note Known Causes of Trouble with GNU +Fortran: Trouble. + + However, understand that many problems preventing a straight build +from working are not `g77' problems, and, in such cases, are not likely +to be addressed in future versions of `g77'. Consider treating them as +`gcc' bugs instead. + +Pre-installation Checks +----------------------- + + Before installing the system, which includes installing `gcc', you +might want to do some minimum checking to ensure that some basic things +work. + + Here are some commands you can try, and output typically printed by +them when they work: + + sh# cd /usr/src/gcc + sh# ./g77 -B./ -v + g77 version 0.5.25 + Driving: ./g77 -B./ -v -c -xf77-version /dev/null -xnone + Reading specs from ./specs + gcc version 2.8.1 + cpp -lang-c -v -isystem ./include -undef -D__GNUC__=2 ... + GNU CPP version 2.8.1 (Alpha GNU/Linux with ELF) + #include "..." search starts here: + #include <...> search starts here: + include + /usr/alpha-linux/include + /usr/lib/gcc-lib/alpha-linux/2.8.1/include + /usr/include + End of search list. + ./f771 -fnull-version -quiet -dumpbase g77-version.f -version ... + GNU F77 version 2.8.1 (alpha-linux) compiled ... + GNU Fortran Front End version 0.5.25 + as -nocpp -o /tmp/cca14485.o /tmp/cca14485.s + ld -m elf64alpha -G 8 -O1 -dynamic-linker /lib/ld-linux.so.2 ... + /tmp/cca14485 + __G77_LIBF77_VERSION__: 0.5.25 + @(#)LIBF77 VERSION 19970919 + __G77_LIBI77_VERSION__: 0.5.25 + @(#) LIBI77 VERSION pjw,dmg-mods 19980405 + __G77_LIBU77_VERSION__: 0.5.25 + @(#) LIBU77 VERSION 19970919 + sh# ./xgcc -B./ -v -o /tmp/delete-me -xc /dev/null -xnone + Reading specs from ./specs + gcc version 2.8.1 + ./cpp -lang-c -v -isystem ./include -undef ... + GNU CPP version 2.8.1 (Alpha GNU/Linux with ELF) + #include "..." search starts here: + #include <...> search starts here: + include + /usr/alpha-linux/include + /usr/lib/gcc-lib/alpha-linux/2.8.1/include + /usr/include + End of search list. + ./cc1 /tmp/cca18063.i -quiet -dumpbase null.c -version ... + GNU C version 2.8.1 (alpha-linux) compiled ... + as -nocpp -o /tmp/cca180631.o /tmp/cca18063.s + ld -m elf64alpha -G 8 -O1 -dynamic-linker /lib/ld-linux.so.2 ... + /usr/lib/crt1.o: In function `_start': + ../sysdeps/alpha/elf/start.S:77: undefined reference to `main' + ../sysdeps/alpha/elf/start.S:77: undefined reference to `main' + sh# + + (Note that long lines have been truncated, and `...' used to +indicate such truncations.) + + The above two commands test whether `g77' and `gcc', respectively, +are able to compile empty (null) source files, whether invocation of +the C preprocessor works, whether libraries can be linked, and so on. + + If the output you get from either of the above two commands is +noticeably different, especially if it is shorter or longer in ways +that do not look consistent with the above sample output, you probably +should not install `gcc' and `g77' until you have investigated further. + + For example, you could try compiling actual applications and seeing +how that works. (You might want to do that anyway, even if the above +tests work.) + + To compile using the not-yet-installed versions of `gcc' and `g77', +use the following commands to invoke them. + + To invoke `g77', type: + + /usr/src/gcc/g77 -B/usr/src/gcc/ ... + + To invoke `gcc', type: + + /usr/src/gcc/xgcc -B/usr/src/gcc/ ... + +Installation of Binaries +------------------------ + + After configuring, building, and testing `g77' and `gcc', when you +are ready to install them on your system, type: + + make -k CC=gcc install + + As described in *Note Installing GNU CC: (gcc)Installation, the +values for the `CC' and `LANGUAGES' macros should be the same as those +you supplied for the build itself. + + So, the details of the above command might vary if you used a +bootstrap build (where you might be able to omit both definitions, or +might have to supply the same definitions you used when building the +final stage) or if you deviated from the instructions for a straight +build. + + If the above command does not install `libg2c.a' as expected, try +this: + + make -k ... install install-libf77 + + We don't know why some non-GNU versions of `make' sometimes require +this alternate command, but they do. (Remember to supply the +appropriate definition for `CC' where you see `...' in the above +command.) + + Note that using the `-k' option tells `make' to continue after some +installation problems, like not having `makeinfo' installed on your +system. It might not be necessary for your system. + + *Note:* `g77' no longer installs files not directly part of `g77', +such as `/usr/bin/f77', `/usr/lib/libf2c.a', and `/usr/include/f2c.h', +or their `/usr/local' equivalents. + + *Note Distributing Binaries::, for information on how to accommodate +systems with no existing non-`g77' `f77' compiler and systems with +`f2c' installed. + +Updating Your Info Directory +---------------------------- + + As part of installing `g77', you should make sure users of `info' +can easily access this manual on-line. + + `g77' does this automatically by invoking the `install-info' command +when you use `make install' to install `g77'. + + If that fails, or if the `info' directory it updates is not the one +normally accessed by users, consider invoking it yourself. For example: + + install-info --info-dir=/usr/info /usr/info/g77.info + + The above example assumes the `g77' documentation already is +installed in `/usr/info' and that `/usr/info/dir' is the file you wish +to update. Adjust the command accordingly, if those assumptions are +wrong. + +Missing tools? +-------------- + + A build of `gcc' might fail due to one or more tools being called +upon by `make' (during the build or install process), when those tools +are not installed on your system. + + This situation can result from any of the following actions +(performed by you or someone else): + + * Changing the source code or documentation yourself (as a developer + or technical writer). + + * Applying a patch that changes the source code or documentation + (including, sometimes, the official patches distributed by the + FSF). + + * Deleting the files that are created by the (missing) tools. + + The `make maintainer-clean' command is supposed to delete these + files, so invoking this command without having all the appropriate + tools installed is not recommended. + + * Creating the source directory using a method that does not + preserve the date-time-modified information in the original + distribution. + + For example, the UNIX `cp -r' command copies a directory tree + without preserving the date-time-modified information. Use `cp + -pr' instead. + + The reason these activities cause `make' to try and invoke tools +that it probably wouldn't when building from a perfectly "clean" source +directory containing `gcc' and `g77' is that some files in the source +directory (and the corresponding distribution) aren't really source +files, but *derived* files that are produced by running tools with the +corresponding source files as input. These derived files "depend", in +`make' terminology, on the corresponding source files. + + `make' determines that a file that depends on another needs to be +updated if the date-time-modified information for the source file shows +that it is newer than the corresponding information for the derived +file. + + If it makes that determination, `make' runs the appropriate commands +(specified in the "Makefile") to update the derived file, and this +process typically calls upon one or more installed tools to do the work. + + The "safest" approach to dealing with this situation is to recreate +the `gcc' and `g77' source directories from complete `gcc' and `g77' +distributions known to be provided by the FSF. + + Another fairly "safe" approach is to simply install the tools you +need to complete the build process. This is especially appropriate if +you've changed the source code or applied a patch to do so. + + However, if you're certain that the problem is limited entirely to +incorrect date-time-modified information, that there are no +discrepancies between the contents of source files and files derived +from them in the source directory, you can often update the +date-time-modified information for the derived files to work around the +problem of not having the appropriate tools installed. + + On UNIX systems, the simplest way to update the date-time-modified +information of a file is to use the use the `touch' command. + + How to use `touch' to update the derived files updated by each of +the tools is described below. *Note:* New versions of `g77' might +change the set of files it generates by invoking each of these tools. +If you cannot figure out for yourself how to handle such a situation, +try an older version of `g77' until you find someone who can (or until +you obtain and install the relevant tools). + +Missing `autoconf'? +................... + + If you cannot install `autoconf', make sure you have started with a +*fresh* distribution of `gcc' and `g77', do *not* do `make +maintainer-clean', and, to ensure that `autoconf' is not invoked by +`make' during the build, type these commands: + + sh# cd egcs/libf2c + sh# touch configure libU77/configure + sh# cd ../../.. + sh# + +Missing `bison'? +................ + + If you cannot install `bison', make sure you have started with a +*fresh* distribution of `gcc', do *not* do `make maintainer-clean', +and, to ensure that `bison' is not invoked by `make' during the build, +type these commands: + + sh# cd gcc + sh# touch bi-parser.c bi-parser.h c-parse.c c-parse.h cexp.c + sh# touch cp/parse.c cp/parse.h objc-parse.c + sh# cd .. + sh# + +Missing `gperf'? +................ + + If you cannot install `gperf', make sure you have started with a +*fresh* distribution of `gcc', do *not* do `make maintainer-clean', +and, to ensure that `gperf' is not invoked by `make' during the build, +type these commands: + + sh# cd gcc + sh# touch c-gperf.h + sh# cd .. + sh# + +Missing `makeinfo'? +................... + + If `makeinfo' is needed but unavailable when installing (via `make +install'), some files, like `libg2c.a', might not be installed, because +once `make' determines that it cannot invoke `makeinfo', it cancels any +further processing. + + If you cannot install `makeinfo', an easy work-around is to specify +`MAKEINFO=true' on the `make' command line, or to specify the `-k' +option (`make -k install'). + + Another approach is to force the relevant files to be up-to-date by +typing these commands and then re-trying the installation step: + + sh# cd gcc + sh# touch f/g77.info f/BUGS f/INSTALL f/NEWS + sh# cd .. + sh# Distributing Binaries ===================== - For `egcs' users, this information is superceded by the `egcs' -installation instructions. + If you are building `g77' for distribution to others in binary form, +first make sure you are aware of your legal responsibilities (read the +file `gcc/COPYING' thoroughly). + + Then, consider your target audience and decide where `g77' should be +installed. + + For systems like GNU/Linux that have no native Fortran compiler (or +where `g77' could be considered the native compiler for Fortran and +`gcc' for C, etc.), you should definitely configure `g77' for +installation in `/usr/bin' instead of `/usr/local/bin'. Specify the +`--prefix=/usr' option when running `./configure'. + + You might also want to set up the distribution so the `f77' command +is a link to `g77', although a script that accepts "classic" UNIX `f77' +options and translates the command-line to the appropriate `g77' +command line would be more appropriate. If you do this, *please* also +provide a "man page" in `man/man1/f77.1' describing the command. (A +link to `man/man1/g77.1' is appropriate if `bin/f77' is a link to +`bin/g77'.) + + For a system that might already have `f2c' installed, consider +whether inter-operation with `g77' will be important to users of `f2c' +on that system. If you want to improve the likelihood that users will +be able to use both `f2c' and `g77' to compile code for a single program +without encountering link-time or run-time incompatibilities, make sure +that, whenever they intend to combine `f2c'-produced code with +`g77'-produced code in an executable, they: + + * Use the `lib/gcc-lib/.../include/g2c.h' file generated by the + `g77' build in place of the `f2c.h' file that normally comes with + `f2c' (or versions of `g77' prior to 0.5.23) when compiling *all* + of the `f2c'-produced C code + + * Link to the `lib/gcc-lib/.../libg2c.a' library built by the `g77' + build instead of the `libf2c.a' library that normally comes with + `f2c' (or versions of `g77' prior to 0.5.23) + + How you choose to effect the above depends on whether the existing +installation of `f2c' must be maintained. + + In any case, it is important to try and ensure that the installation +keeps working properly even after subsequent re-installation of `f2c', +which probably involves overwriting `/usr/local/lib/libf2c.a' and +`/usr/local/include/f2c.h', or similar. + + At least, copying `libg2c.a' and `g2c.h' into the appropriate +"public" directories allows users to more easily select the version of +`libf2c' they wish to use for a particular build. The names are +changed by `g77' to make this coexistence easier to maintain; even if +`f2c' is installed later, the `g77' files normally installed by its +installation process aren't disturbed. Use of symbolic links from one +set of files to another might result in problems after a subsequent +reinstallation of either `f2c' or `g77', so be sure to alert users of +your distribution accordingly. + + (Make sure you clearly document, in the description of your +distribution, how installation of your distribution will affect +existing installations of `gcc', `f2c', `f77', `libf2c.a', and so on. +Similarly, you should clearly document any requirements you assume will +be met by users of your distribution.) + + For other systems with native `f77' (and `cc') compilers, configure +`g77' as you (or most of your audience) would configure `gcc' for their +installations. Typically this is for installation in `/usr/local', and +would not include a new version of `/usr/bin/f77' or +`/usr/local/bin/f77', so users could still use the native `f77'. + + In any case, for `g77' to work properly, you *must* ensure that the +binaries you distribute include: + +`bin/g77' + This is the command most users use to compile Fortran. + +`bin/gcc' + This is the command some users use to compile Fortran, typically + when compiling programs written in other languages at the same + time. The `bin/gcc' executable file must have been built from a + `gcc' source tree into which a `g77' source tree was merged and + configured, or it will not know how to compile Fortran programs. + +`info/g77.info*' + This is the documentation for `g77'. If it is not included, users + will have trouble understanding diagnostics messages and other + such things, and will send you a lot of email asking questions. + + Please edit this documentation (by editing `egcs/gcc/f/*.texi' and + doing `make doc' from the `/usr/src/gcc' directory) to reflect any + changes you've made to `g77', or at least to encourage users of + your binary distribution to report bugs to you first. + + Also, whether you distribute binaries or install `g77' on your own + system, it might be helpful for everyone to add a line listing + this manual by name and topic to the top-level `info' node in + `/usr/info/dir'. That way, users can find `g77' documentation more + easily. *Note Updating Your Info Directory: Updating + Documentation. + +`man/man1/g77.1' + This is the short man page for `g77'. It is not always kept + up-to-date, but you might as well include it for people who really + like "man" pages. + +`lib/gcc-lib' + This is the directory containing the "private" files installed by + and for `gcc', `g77', `g++', and other GNU compilers. + +`lib/gcc-lib/.../f771' + This is the actual Fortran compiler. + +`lib/gcc-lib/.../libg2c.a' + This is the run-time library for `g77'-compiled programs. + + Whether you want to include the slightly updated (and possibly +improved) versions of `cc1', `cc1plus', and whatever other binaries get +rebuilt with the changes the GNU Fortran distribution makes to the GNU +back end, is up to you. These changes are highly unlikely to break any +compilers, because they involve doing things like adding to the list of +acceptable compiler options (so, for example, `cc1plus' accepts, and +ignores, options that only `f771' actually processes). + + Please assure users that unless they have a specific need for their +existing, older versions of `gcc' command, they are unlikely to +experience any problems by overwriting it with your version--though +they could certainly protect themselves by making backup copies first! + + Otherwise, users might try and install your binaries in a "safe" +place, find they cannot compile Fortran programs with your distribution +(because, perhaps, they're invoking their old version of the `gcc' +command, which does not recognize Fortran programs), and assume that +your binaries (or, more generally, GNU Fortran distributions in +general) are broken, at least for their system. + + Finally, *please* ask for bug reports to go to you first, at least +until you're sure your distribution is widely used and has been well +tested. This especially goes for those of you making any changes to +the `g77' sources to port `g77', e.g. to OS/2. <fortran@gnu.org> has +received a fair number of bug reports that turned out to be problems +with other peoples' ports and distributions, about which nothing could +be done for the user. Once you are quite certain a bug report does not +involve your efforts, you can forward it to us. diff --git a/gnu/egcs/gcc/f/Make-lang.in b/gnu/egcs/gcc/f/Make-lang.in index 39c9cc2087d..a531abb5707 100644 --- a/gnu/egcs/gcc/f/Make-lang.in +++ b/gnu/egcs/gcc/f/Make-lang.in @@ -308,12 +308,14 @@ f77.install-normal: # Install the driver program as $(target)-g77 # and also as either g77 (if native) or $(tooldir)/bin/g77. -f77.install-common: +# Make sure `installdirs' target (from gcc Makefile) has been +# run, since we use libsubdir to store our `flag' file, lang-f77. +f77.install-common: installdirs case "$(LANGUAGES)" in \ - *[fF]77*) touch $(prefix)/lang-f77;; \ - *) rm -f $(prefix)/lang-f77;; \ + *[fF]77*) touch $(libsubdir)/lang-f77;; \ + *) rm -f $(libsubdir)/lang-f77;; \ esac - -if [ -f $(prefix)/lang-f77 -a -f f771$(exeext) ] ; then \ + -if [ -f $(libsubdir)/lang-f77 -a -f f771$(exeext) ] ; then \ if [ -f g77-cross$(exeext) ] ; then \ rm -f $(bindir)/$(G77_CROSS_NAME)$(exeext); \ $(INSTALL_PROGRAM) g77-cross$(exeext) $(bindir)/$(G77_CROSS_NAME)$(exeext); \ @@ -333,16 +335,18 @@ f77.install-common: echo ' f77-install-ok in the source or build directory.)'; \ echo ''; \ else true; fi - rm -f $(prefix)/lang-f77 + rm -f $(libsubdir)/lang-f77 # $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir # to do the install. The sed rule was copied from stmp-int-hdrs. -f77.install-info: f77.info +# Make sure `installdirs' target (from gcc Makefile) has been +# run, since we use libsubdir to store our `flag' file, lang-f77. +f77.install-info: f77.info installdirs case "$(LANGUAGES)" in \ - *[fF]77*) touch $(prefix)/lang-f77;; \ - *) rm -f $(prefix)/lang-f77;; \ + *[fF]77*) touch $(libsubdir)/lang-f77;; \ + *) rm -f $(libsubdir)/lang-f77;; \ esac - if [ -f $(prefix)/lang-f77 -a -f f/g77.info ] ; then \ + if [ -f $(libsubdir)/lang-f77 -a -f f/g77.info ] ; then \ rm -f $(infodir)/g77.info*; \ for f in f/g77.info*; do \ realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ @@ -350,20 +354,22 @@ f77.install-info: f77.info done; \ chmod a-x $(infodir)/g77.info*; \ else true; fi - @if [ -f $(prefix)/lang-f77 -a -f $(srcdir)/f/g77.info ] ; then \ + @if [ -f $(libsubdir)/lang-f77 -a -f $(srcdir)/f/g77.info ] ; then \ if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ echo " install-info --info-dir=$(infodir) $(infodir)/g77.info"; \ install-info --info-dir=$(infodir) $(infodir)/g77.info || : ; \ else : ; fi; \ else : ; fi - rm -f $(prefix)/lang-f77 + rm -f $(libsubdir)/lang-f77 -f77.install-man: $(srcdir)/f/g77.1 +# Make sure `installdirs' target (from gcc Makefile) has been +# run, since we use libsubdir to store our `flag' file, lang-f77. +f77.install-man: $(srcdir)/f/g77.1 installdirs case "$(LANGUAGES)" in \ - *[fF]77*) touch $(prefix)/lang-f77;; \ - *) rm -f $(prefix)/lang-f77;; \ + *[fF]77*) touch $(libsubdir)/lang-f77;; \ + *) rm -f $(libsubdir)/lang-f77;; \ esac - -if [ -f $(prefix)/lang-f77 -a -f f771$(exeext) ] ; then \ + -if [ -f $(libsubdir)/lang-f77 -a -f f771$(exeext) ] ; then \ if [ -f g77-cross$(exeext) ] ; then \ rm -f $(man1dir)/$(G77_CROSS_NAME)$(manext); \ $(INSTALL_DATA) $(srcdir)/f/g77.1 $(man1dir)/$(G77_CROSS_NAME)$(manext); \ @@ -374,27 +380,29 @@ f77.install-man: $(srcdir)/f/g77.1 chmod a-x $(man1dir)/$(G77_INSTALL_NAME)$(manext); \ fi; \ else true; fi - rm -f $(prefix)/lang-f77 + rm -f $(libsubdir)/lang-f77 -f77.uninstall: +# Make sure `installdirs' target (from gcc Makefile) has been +# run, since we use libsubdir to store our `flag' file, lang-f77. +f77.uninstall: installdirs case "$(LANGUAGES)" in \ - *[fF]77*) touch $(prefix)/lang-f77;; \ - *) rm -f $(prefix)/lang-f77;; \ + *[fF]77*) touch $(libsubdir)/lang-f77;; \ + *) rm -f $(libsubdir)/lang-f77;; \ esac - @if [ -f $(prefix)/lang-f77 ] ; then \ + @if [ -f $(libsubdir)/lang-f77 ] ; then \ if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ echo " install-info --delete --info-dir=$(infodir) $(infodir)/g77.info"; \ install-info --delete --info-dir=$(infodir) $(infodir)/g77.info || : ; \ else : ; fi; \ else : ; fi - -if [ -f $(prefix)/lang-f77 ]; then \ + -if [ -f $(libsubdir)/lang-f77 ]; then \ rm -rf $(bindir)/$(G77_INSTALL_NAME)$(exeext); \ rm -rf $(bindir)/$(G77_CROSS_NAME)$(exeext); \ rm -rf $(man1dir)/$(G77_INSTALL_NAME)$(manext); \ rm -rf $(man1dir)/$(G77_CROSS_NAME)$(manext); \ rm -rf $(infodir)/g77.info*; \ fi - rm -f $(prefix)/lang-f77 + rm -f $(libsubdir)/lang-f77 # # Clean hooks: # A lot of the ancillary files are deleted by the main makefile. diff --git a/gnu/egcs/gcc/f/NEWS b/gnu/egcs/gcc/f/NEWS index 2cde7928341..63570febeb8 100644 --- a/gnu/egcs/gcc/f/NEWS +++ b/gnu/egcs/gcc/f/NEWS @@ -2,7 +2,7 @@ `news0.texi' and `news.texi'. `NEWS' is *not* a source file, although it is normally included within source distributions. - This file lists news about the EGCS-1.2 version (and some other + This file lists news about the FSF-0.5.25 version (and some other versions) of the GNU Fortran compiler. Copyright (C) 1995-1999 Free Software Foundation, Inc. You may copy, distribute, and modify it freely as long as you preserve this copyright notice and permission @@ -50,7 +50,7 @@ particularly concentrated on any version of this information that is distributed as part of a *released* `g77'. In particular, while this information is intended to apply to the -EGCS-1.2 version of `g77', only an official *release* of that version +FSF-0.5.25 version of `g77', only an official *release* of that version is expected to contain documentation that is most consistent with the `g77' product in that version. @@ -66,10 +66,10 @@ about previous `g77' versions up-to-date. the mainline, development version of `g77' within `egcs') is available at `http://egcs.cygnus.com/onlinedocs/g77_news.html'. - The following information was last updated on 1999-05-13: + The following information was last updated on 1999-06-04: -In `egcs' 1.2 (versus 1.1.2): -============================= +In 0.5.25, `GCC' 2.95 (`EGCS' 1.2) versus `EGCS' 1.1.2: +======================================================= 1. `g77' no longer generates bad code for assignments, or other conversions, of `REAL' or `COMPLEX' constant expressions to type @@ -102,15 +102,13 @@ In `egcs' 1.2 (versus 1.1.2): 7. The `-ax' option is now obeyed when compiling Fortran programs. (It is passed to the `f771' driver.) - * The new `-fsubscript-check' option causes `g77' to compile - run-time bounds checks of array subscripts, as well as of - substring start and end points. + * The new `-fbounds-check' option causes `g77' to compile run-time + bounds checks of array subscripts, as well as of substring start + and end points. - The current implementation uses the `libf2c' library routine - `s_rnge' to print the diagnostic. Since a future version of `g77' - might use a different implementation, use the new - `-ff2c-subscript-check' option if your application requires use of - `s_rnge' or a compile-time diagnostic. + * `libg2c' now supports building as multilibbed library, which + provides better support for systems that require options such as + `-mieee' to work properly. * Source file names with the suffixes `.FOR' and `.FPP' now are recognized by `g77' as if they ended in `.for' and `.fpp', @@ -123,10 +121,10 @@ In `egcs' 1.2 (versus 1.1.2): consistent with the other subroutine forms of `libU77' intrinsics. * `g77' now warns about a reference to an intrinsic that has an - interface that is not Year 2000 (Y2K) compliant. Also, the - `libg2c' has been changed to increase the likelihood of catching - references to the implementations of these intrinsics using the - `EXTERNAL' mechanism (which would avoid the new warnings). + interface that is not Year 2000 (Y2K) compliant. Also, `libg2c' + has been changed to increase the likelihood of catching references + to the implementations of these intrinsics using the `EXTERNAL' + mechanism (which would avoid the new warnings). 8. `g77' now warns about a reference to a function when the corresponding *subsequent* function program unit disagrees with @@ -143,15 +141,19 @@ In `egcs' 1.2 (versus 1.1.2): local double-precision variables that are not in `EQUIVALENCE' areas and not `SAVE''d. + 10. `g77' now open-codes ("inlines") division of `COMPLEX' operands + instead of generating a run-time call to the `libf2c' routines + `c_div' or `z_div', unless the `-Os' option is specified. + * `g77' no longer generates code to maintain `errno', a C-language concept, when performing operations such as the `SqRt' intrinsic. - 10. `g77' developers can temporarily use the `-fflatten-arrays' option + 11. `g77' developers can temporarily use the `-fflatten-arrays' option to compare how the compiler handles code generation using C-like constructs as compared to the Fortran-like method constructs normally used. - 11. A substantial portion of the `g77' front end's code-generation + 12. A substantial portion of the `g77' front end's code-generation component was rewritten. It now generates code using facilities more robustly supported by the `gcc' back end. One effect of this rewrite is that some codes no longer produce a spurious "label LAB @@ -159,14 +161,35 @@ In `egcs' 1.2 (versus 1.1.2): * Support for the `-fugly' option has been removed. - 12. Improve documentation and indexing, including information on Year + 13. Improve documentation and indexing, including information on Year 2000 (Y2K) compliance, and providing more information on internals of the front end. - 13. Upgrade to `libf2c' as of 1999-05-10. + 14. Upgrade to `libf2c' as of 1999-05-10. + +In 0.5.24 versus 0.5.23: +======================== + + There is no `g77' version 0.5.24 at this time, or planned. 0.5.24 +is the version number designated for bug fixes and, perhaps, some new +features added, to 0.5.23. Version 0.5.23 requires `gcc' 2.8.1, as +0.5.24 was planned to require. -In 0.5.24 and `egcs' 1.1.2 (versus 0.5.23 and 1.1.1): -===================================================== + Due to `EGCS' becoming `GCC' (which is now an acronym for "GNU +Compiler Collection"), and `EGCS' 1.2 becoming officially designated +`GCC' 2.95, there seems to be no need for an actual 0.5.24 release. + + To reduce the confusion already resulting from use of 0.5.24 to +designate `g77' versions within `EGCS' versions 1.0 and 1.1, as well as +in versions of `g77' documentation and notices during that period, +"mainline" `g77' version numbering resumes at 0.5.25 with `GCC' 2.95 +(`EGCS' 1.2), skipping over 0.5.24 as a placeholder version number. + + To repeat, there is no `g77' 0.5.24, but there is now a 0.5.25. +Please remain calm and return to your keypunch units. + +In `EGCS' 1.1.2 versus `EGCS' 1.1.1: +==================================== * Fix the `IDate' intrinsic (VXT) (in `libg2c') so the returned year is in the documented, non-Y2K-compliant range of 0-99, instead of @@ -180,8 +203,8 @@ In 0.5.24 and `egcs' 1.1.2 (versus 0.5.23 and 1.1.1): * Improve documentation. -In 0.5.24 and `egcs' 1.1.1 (versus 0.5.23 and 1.1): -=================================================== +In `EGCS' 1.1.1 versus `EGCS' 1.1: +================================== * Fix `libg2c' so it performs an implicit `ENDFILE' operation (as appropriate) whenever a `REWIND' is done. @@ -202,51 +225,28 @@ In 0.5.24 and `egcs' 1.1.1 (versus 0.5.23 and 1.1): some systems (those with shells requiring `else true' clauses on `if' constructs for the completion code to be set properly). -In `egcs' 1.1 (versus 0.5.24): -============================== - - 14. Fix `g77' crash compiling code containing the construct - `CMPLX(0.)' or similar. - - 15. Fix `g77' crash (or apparently infinite run-time) when compiling - certain complicated expressions involving `COMPLEX' arithmetic - (especially multiplication). - - 16. Fix a code-generation bug that afflicted Intel x86 targets when - `-O2' was specified compiling, for example, an old version of the - `DNRM2' routine. +In `EGCS' 1.1 versus `EGCS' 1.0.3: +================================== - The x87 coprocessor stack was being mismanaged in cases involving - assigned `GOTO' and `ASSIGN'. - - * Align static double-precision variables and arrays on Intel x86 - targets regardless of whether `-malign-double' is specified. - - Generally, this affects only local variables and arrays having the - `SAVE' attribute or given initial values via `DATA'. - -In `egcs' 1.1 (versus `egcs' 1.0.3): -==================================== - - 17. Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte + 15. Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte beyond the end of its `CHARACTER' argument, and in the `libU77' intrinsics `GMTime' and `LTime' that overwrote their arguments. - 18. Assumed arrays with negative bounds (such as `REAL A(-1:*)') no + 16. Assumed arrays with negative bounds (such as `REAL A(-1:*)') no longer elicit spurious diagnostics from `g77', even on systems with pointers having different sizes than integers. This bug is not known to have existed in any recent version of `gcc'. It was introduced in an early release of `egcs'. - 19. Valid combinations of `EXTERNAL', passing that external as a dummy + 17. Valid combinations of `EXTERNAL', passing that external as a dummy argument without explicitly giving it a type, and, in a subsequent program unit, referencing that external as an external function with a different type no longer crash `g77'. - 20. `CASE DEFAULT' no longer crashes `g77'. + 18. `CASE DEFAULT' no longer crashes `g77'. - 21. The `-Wunused' option no longer issues a spurious warning about + 19. The `-Wunused' option no longer issues a spurious warning about the "master" procedure generated by `g77' for procedures containing `ENTRY' statements. @@ -271,25 +271,25 @@ In `egcs' 1.1 (versus `egcs' 1.0.3): `libf2c' environment, even when `libf2c' (now `libg2c') is a shared library. - 22. `g77' no longer installs the `f77' command and `f77.1' man page in + 20. `g77' no longer installs the `f77' command and `f77.1' man page in the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok' file exists in the source or build directory. See the installation documentation for more information. - 23. `g77' no longer installs the `libf2c.a' library and `f2c.h' + 21. `g77' no longer installs the `libf2c.a' library and `f2c.h' include file in the `/usr' or `/usr/local' heirarchy, even if the `f2c-install-ok' or `f2c-exists-ok' files exist in the source or build directory. See the installation documentation for more information. - 24. The `libf2c.a' library produced by `g77' has been renamed to + 22. The `libf2c.a' library produced by `g77' has been renamed to `libg2c.a'. It is installed only in the `gcc' "private" directory heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the `libf2c' library from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. - 25. The `f2c.h' include (header) file produced by `g77' has been + 23. The `f2c.h' include (header) file produced by `g77' has been renamed to `g2c.h'. It is installed only in the `gcc' "private" directory heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the include file from @@ -301,11 +301,11 @@ In `egcs' 1.1 (versus `egcs' 1.0.3): than the one built and installed as part of the same `g77' version is picked up. - 26. During the configuration and build process, `g77' creates + 24. During the configuration and build process, `g77' creates subdirectories it needs only as it needs them. Other cleaning up of the configuration and build process has been performed as well. - 27. `install-info' now used to update the directory of Info + 25. `install-info' now used to update the directory of Info documentation to contain an entry for `g77' (during installation). * Some diagnostics have been changed from warnings to errors, to @@ -314,24 +314,34 @@ In `egcs' 1.1 (versus `egcs' 1.0.3): in the `OPEN', `INQUIRE', `READ', and `WRITE' statements, and about truncations of various sorts of constants. - 28. Improve compilation of `FORMAT' expressions so that a null byte is + 26. Improve compilation of `FORMAT' expressions so that a null byte is appended to the last operand if it is a constant. This provides a cleaner run-time diagnostic as provided by `libf2c' for statements like `PRINT '(I1', 42'. - 29. Improve documentation and indexing. + 27. Improve documentation and indexing. - 30. The upgrade to `libf2c' as of 1998-06-18 should fix a variety of + 28. The upgrade to `libf2c' as of 1998-06-18 should fix a variety of problems, including those involving some uses of the `T' format specifier, and perhaps some build (porting) problems as well. -In 0.5.24 and `egcs' 1.1 (versus 0.5.23): -========================================= +In `EGCS' 1.1 versus `g77' 0.5.23: +================================== - 31. `g77' no longer produces incorrect code and initial values for + 29. Fix a code-generation bug that afflicted Intel x86 targets when + `-O2' was specified compiling, for example, an old version of the + `DNRM2' routine. + + The x87 coprocessor stack was being mismanaged in cases involving + assigned `GOTO' and `ASSIGN'. + + 30. `g77' no longer produces incorrect code and initial values for `EQUIVALENCE' and `COMMON' aggregates that, due to "unnatural" ordering of members vis-a-vis their types, require initial padding. + 31. Fix `g77' crash compiling code containing the construct + `CMPLX(0.)' or similar. + 32. `g77' no longer crashes when compiling code containing specification statements such as `INTEGER(KIND=7) PTR'. @@ -346,6 +356,16 @@ In 0.5.24 and `egcs' 1.1 (versus 0.5.23): Previously, `g77' treated these expressions as denoting special "pointer" arguments for the purposes of filewide analysis. + 34. Fix `g77' crash (or apparently infinite run-time) when compiling + certain complicated expressions involving `COMPLEX' arithmetic + (especially multiplication). + + * Align static double-precision variables and arrays on Intel x86 + targets regardless of whether `-malign-double' is specified. + + Generally, this affects only local variables and arrays having the + `SAVE' attribute or given initial values via `DATA'. + * The `g77' driver now ensures that `-lg2c' is specified in the link phase prior to any occurrence of `-lm'. This prevents accidentally linking to a routine in the SunOS4 `-lm' library when @@ -366,9 +386,9 @@ In 0.5.24 and `egcs' 1.1 (versus 0.5.23): * The F90 `System_Clock' intrinsic allows the optional arguments (except for the `Count' argument) to be omitted. - 34. Upgrade to `libf2c' as of 1998-06-18. + 35. Upgrade to `libf2c' as of 1998-06-18. - 35. Improve documentation and indexing. + 36. Improve documentation and indexing. In previous versions: ===================== diff --git a/gnu/egcs/gcc/f/com.c b/gnu/egcs/gcc/f/com.c index a3e0eb1b3a0..9500956cc22 100644 --- a/gnu/egcs/gcc/f/com.c +++ b/gnu/egcs/gcc/f/com.c @@ -213,8 +213,6 @@ typedef struct { unsigned :16, :16, :16; } vms_ino_t; /* Externals defined here. */ -#define FFECOM_FASTER_ARRAY_REFS 0 /* Generates faster code? */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC /* tree.h declares a bunch of stuff that it expects the front end to @@ -9378,6 +9376,10 @@ ffecom_tree_divide_ (tree tree_type, tree left, tree right, right); case COMPLEX_TYPE: + if (! optimize_size) + return ffecom_2 (RDIV_EXPR, tree_type, + left, + right); { ffecomGfrt ix; @@ -10596,6 +10598,9 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length) assert (ffeinfo_kindtype (ffebld_info (expr)) == FFEINFO_kindtypeCHARACTER1); + while (ffebld_op (expr) == FFEBLD_opPAREN) + expr = ffebld_left (expr); + catlist = ffecom_concat_list_new_ (expr, FFETARGET_charactersizeNONE); switch (ffecom_concat_list_count_ (catlist)) { @@ -13038,6 +13043,12 @@ ffecom_prepare_expr_ (ffebld expr, ffebld dest UNUSED) /* Generate whatever temporaries are needed to represent the result of the expression. */ + if (bt == FFEINFO_basictypeCHARACTER) + { + while (ffebld_op (expr) == FFEBLD_opPAREN) + expr = ffebld_left (expr); + } + switch (ffebld_op (expr)) { default: @@ -15019,6 +15030,7 @@ lang_init_options () flag_reduce_all_givs = 1; flag_argument_noalias = 2; flag_errno_math = 0; + flag_complex_divide_method = 1; } void diff --git a/gnu/egcs/gcc/f/ffe.texi b/gnu/egcs/gcc/f/ffe.texi index 4108bb850bc..7a8b0e8790c 100644 --- a/gnu/egcs/gcc/f/ffe.texi +++ b/gnu/egcs/gcc/f/ffe.texi @@ -11,15 +11,1047 @@ This chapter describes some aspects of the design and implementation of the @code{g77} front end. +Much of the information below applies not to current +releases of @code{g77}, +but to the 0.6 rewrite being designed and implemented +as of late May, 1999. + +To find about things that are ``To Be Determined'' or ``To Be Done'', +search for the string TBD. +If you want to help by working on one or more of these items, +email me at @email{@value{email-burley}}. +If you're planning to do more than just research issues and offer comments, +see @uref{http://egcs.cygnus.com/contribute.html} for steps you might +need to take first. @menu +* Overview of Sources:: +* Overview of Translation Process:: * Philosophy of Code Generation:: * Two-pass Design:: * Challenges Posed:: * Transforming Statements:: * Transforming Expressions:: +* Internal Naming Conventions:: @end menu +@node Overview of Sources +@section Overview of Sources + +The current directory layout includes the following: + +@table @file +@item @value{srcdir}/gcc/ +Non-g77 files in gcc + +@item @value{srcdir}/gcc/f/ +GNU Fortran front end sources + +@item @value{srcdir}/libf2c/ +@code{libg2c} configuration and @code{g2c.h} file generation + +@item @value{srcdir}/libf2c/libF77/ +General support and math portion of @code{libg2c} + +@item @value{srcdir}/libf2c/libI77/ +I/O portion of @code{libg2c} + +@item @value{srcdir}/libf2c/libU77/ +Additional interfaces to Unix @code{libc} for @code{libg2c} +@end table + +Components of note in @code{g77} are described below. + +@file{f/} as a whole contains the source for @code{g77}, +while @file{libf2c/} contains a portion of the separate program +@code{f2c}. +Note that the @code{libf2c} code is not part of the program @code{g77}, +just distributed with it. + +@file{f/} contains text files that document the Fortran compiler, source +files for the GNU Fortran Front End (FFE), and some other stuff. +The @code{g77} compiler code is placed in @file{f/} because it, +along with its contents, +is designed to be a subdirectory of a @code{gcc} source directory, +@file{gcc/}, +which is structured so that language-specific front ends can be ``dropped +in'' as subdirectories. +The C++ front end (@code{g++}), is an example of this---it resides in +the @file{cp/} subdirectory. +Note that the C front end (also referred to as @code{gcc}) +is an exception to this, as its source files reside +in the @file{gcc/} directory itself. + +@file{libf2c/} contains the run-time libraries for the @code{f2c} program, +also used by @code{g77}. +These libraries normally referred to collectively as @code{libf2c}. +When built as part of @code{g77}, +@code{libf2c} is installed under the name @code{libg2c} to avoid +conflict with any existing version of @code{libf2c}, +and thus is often referred to as @code{libg2c} when the +@code{g77} version is specifically being referred to. + +The @code{netlib} version of @code{libf2c/} +contains two distinct libraries, +@code{libF77} and @code{libI77}, +each in their own subdirectories. +In @code{g77}, this distinction is not made, +beyond maintaining the subdirectory structure in the source-code tree. + +@file{libf2c/} is not part of the program @code{g77}, +just distributed with it. +It contains files not present +in the official (@code{netlib}) version of @code{libf2c}, +and also contains some minor changes made from @code{libf2c}, +to fix some bugs, +and to facilitate automatic configuration, building, and installation of +@code{libf2c} (as @code{libg2c}) for use by @code{g77} users. +See @file{libf2c/README} for more information, +including licensing conditions +governing distribution of programs containing code from @code{libg2c}. + +@code{libg2c}, @code{g77}'s version of @code{libf2c}, +adds Dave Love's implementation of @code{libU77}, +in the @file{libf2c/libU77/} directory. +This library is distributed under the +GNU Library General Public License (LGPL)---see the +file @file{libf2c/libU77/COPYING.LIB} +for more information, +as this license +governs distribution conditions for programs containing code +from this portion of the library. + +Files of note in @file{f/} and @file{libf2c/} are described below: + +@table @file +@item f/BUGS +Lists some important bugs known to be in g77. +Or use Info (or GNU Emacs Info mode) to read +the ``Actual Bugs'' node of the @code{g77} documentation: + +@smallexample +info -f f/g77.info -n "Actual Bugs" +@end smallexample + +@item f/ChangeLog +Lists recent changes to @code{g77} internals. + +@item libf2c/ChangeLog +Lists recent changes to @code{libg2c} internals. + +@item f/NEWS +Contains the per-release changes. +These include the user-visible +changes described in the node ``Changes'' +in the @code{g77} documentation, plus internal +changes of import. +Or use: + +@smallexample +info -f f/g77.info -n News +@end smallexample + +@item f/g77.info* +The @code{g77} documentation, in Info format, +produced by building @code{g77}. + +All users of @code{g77} (not just installers) should read this, +using the @code{more} command if neither the @code{info} command, +nor GNU Emacs (with its Info mode), are available, or if users +aren't yet accustomed to using these tools. +All of these files are readable as ``plain text'' files, +though they're easier to navigate using Info readers +such as @code{info} and GNU Emacs Info mode. +@end table + +If you want to explore the FFE code, which lives entirely in @file{f/}, +here are a few clues. +The file @file{g77spec.c} contains the @code{g77}-specific source code +for the @code{g77} command only---this just forms a variant of the +@code{gcc} command, so, +just as the @code{gcc} command itself does not contain the C front end, +the @code{g77} command does not contain the Fortran front end (FFE). +The FFE code ends up in an executable named @file{f771}, +which does the actual compiling, +so it contains the FFE plus the @code{gcc} back end (GBE), +the latter to do most of the optimization, and the code generation. + +The file @file{parse.c} is the source file for @code{yyparse()}, +which is invoked by the GBE to start the compilation process, +for @file{f771}. + +The file @file{top.c} contains the top-level FFE function @code{ffe_file} +and it (along with top.h) define all @samp{ffe_[a-z].*}, @samp{ffe[A-Z].*}, +and @samp{FFE_[A-Za-z].*} symbols. + +The file @file{fini.c} is a @code{main()} program that is used when building +the FFE to generate C header and source files for recognizing keywords. +The files @file{malloc.c} and @file{malloc.h} comprise a memory manager +that defines all @samp{malloc_[a-z].*}, @samp{malloc[A-Z].*}, and +@samp{MALLOC_[A-Za-z].*} symbols. + +All other modules named @var{xyz} +are comprised of all files named @samp{@var{xyz}*.@var{ext}} +and define all @samp{ffe@var{xyz}_[a-z].*}, @samp{ffe@var{xyz}[A-Z].*}, +and @samp{FFE@var{XYZ}_[A-Za-z].*} symbols. +If you understand all this, congratulations---it's easier for me to remember +how it works than to type in these regular expressions. +But it does make it easy to find where a symbol is defined. +For example, the symbol @samp{ffexyz_set_something} would be defined +in @file{xyz.h} and implemented there (if it's a macro) or in @file{xyz.c}. + +The ``porting'' files of note currently are: + +@table @file +@item proj.c +@itemx proj.h +This defines the ``language'' used by all the other source files, +the language being Standard C plus some useful things +like @code{ARRAY_SIZE} and such. + +@item target.c +@itemx target.h +These describe the target machine +in terms of what data types are supported, +how they are denoted +(to what C type does an @code{INTEGER*8} map, for example), +how to convert between them, +and so on. +Over time, versions of @code{g77} rely less on this file +and more on run-time configuration based on GBE info +in @file{com.c}. + +@item com.c +@itemx com.h +These are the primary interface to the GBE. + +@item ste.c +@itemx ste.h +This contains code for implementing recognized executable statements +in the GBE. + +@item src.c +@itemx src.h +These contain information on the format(s) of source files +(such as whether they are never to be processed as case-insensitive +with regard to Fortran keywords). +@end table + +If you want to debug the @file{f771} executable, +for example if it crashes, +note that the global variables @code{lineno} and @code{input_filename} +are usually set to reflect the current line being read by the lexer +during the first-pass analysis of a program unit and to reflect +the current line being processed during the second-pass compilation +of a program unit. + +If an invocation of the function @code{ffestd_exec_end} is on the stack, +the compiler is in the second pass, otherwise it is in the first. + +(This information might help you reduce a test case and/or work around +a bug in @code{g77} until a fix is available.) + +@node Overview of Translation Process +@section Overview of Translation Process + +The order of phases translating source code to the form accepted +by the GBE is: + +@enumerate +@item +Stripping punched-card sources (@file{g77stripcard.c}) + +@item +Lexing (@file{lex.c}) + +@item +Stand-alone statement identification (@file{sta.c}) + +@item +Parsing (@file{stb.c} and @file{expr.c}) + +@item +Constructing (@file{stc.c}) + +@item +Collecting (@file{std.c}) + +@item +Expanding (@file{ste.c}) +@end enumerate + +To get a rough idea of how a particularly twisted Fortran statement +gets treated by the passes, consider: + +@smallexample + FORMAT(I2 4H)=(J/ + & I3) +@end smallexample + +The job of @file{lex.c} is to know enough about Fortran syntax rules +to break the statement up into distinct lexemes without requiring +any feedback from subsequent phases: + +@smallexample +`FORMAT' +`(' +`I24H' +`)' +`=' +`(' +`J' +`/' +`I3' +`)' +@end smallexample + +The job of @file{sta.c} is to figure out the kind of statement, +or, at least, statement form, that sequence of lexemes represent. + +The sooner it can do this (in terms of using the smallest number of +lexemes, starting with the first for each statement), the better, +because that leaves diagnostics for problems beyond the recognition +of the statement form to subsequent phases, +which can usually better describe the nature of the problem. + +In this case, the @samp{=} at ``level zero'' +(not nested within parentheses) +tells @file{sta.c} that this is an @emph{assignment-form}, +not @code{FORMAT}, statement. + +An assignment-form statement might be a statement-function +definition or an executable assignment statement. + +To make that determination, +@file{sta.c} looks at the first two lexemes. + +Since the second lexeme is @samp{(}, +the first must represent an array for this to be an assignment statement, +else it's a statement function. + +Either way, @file{sta.c} hands off the statement to @file{stb.c} +(either its statement-function parser or its assignment-statement parser). + +@file{stb.c} forms a +statement-specific record containing the pertinent information. +That information includes a source expression and, +for an assignment statement, a destination expression. +Expressions are parsed by @file{expr.c}. + +This record is passed to @file{stc.c}, +which copes with the implications of the statement +within the context established by previous statements. + +For example, if it's the first statement in the file +or after an @code{END} statement, +@file{stc.c} recognizes that, first of all, +a main program unit is now being lexed +(and tells that to @file{std.c} +before telling it about the current statement). + +@file{stc.c} attaches whatever information it can, +usually derived from the context established by the preceding statements, +and passes the information to @file{std.c}. + +@file{std.c} saves this information away, +since the GBE cannot cope with information +that might be incomplete at this stage. + +For example, @samp{I3} might later be determined +to be an argument to an alternate @code{ENTRY} point. + +When @file{std.c} is told about the end of an external (top-level) +program unit, +it passes all the information it has saved away +on statements in that program unit +to @file{ste.c}. + +@file{ste.c} ``expands'' each statement, in sequence, by +constructing the appropriate GBE information and calling +the appropriate GBE routines. + +Details on the transformational phases follow. +Keep in mind that Fortran numbering is used, +so the first character on a line is column 1, +decimal numbering is used, and so on. + +@menu +* g77stripcard:: +* lex.c:: +* sta.c:: +* stb.c:: +* expr.c:: +* stc.c:: +* std.c:: +* ste.c:: + +* Gotchas (Transforming):: +* TBD (Transforming):: +@end menu + +@node g77stripcard +@subsection g77stripcard + +The @code{g77stripcard} program handles removing content beyond +column 72 (adjustable via a command-line option), +optionally warning about that content being something other +than trailing whitespace or Fortran commentary. + +This program is needed because @code{lex.c} doesn't pay attention +to maximum line lengths at all, to make it easier to maintain, +as well as faster (for sources that don't depend on the maximum +column length vis-a-vis trailing non-blank non-commentary content). + +Just how this program will be run---whether automatically for +old source (perhaps as the default for @file{.f} files?)---is not +yet determined. + +In the meantime, it might as well be implemented as a typical UNIX pipe. + +It should accept a @samp{-fline-length-@var{n}} option, +with the default line length set to 72. + +When the text it strips off the end of a line is not blank +(not spaces and tabs), +it should insert an additional comment line +(beginning with @samp{!}, +so it works for both fixed-form and free-form files) +containing the text, +following the stripped line. +The inserted comment should have a prefix of some kind, +TBD, that distinguishes the comment as representing stripped text. +Users could use that to @code{sed} out such lines, if they wished---it +seems silly to provide a command-line option to delete information +when it can be so easily filtered out by another program. + +(This inserted comment should be designed to ``fit in'' well +with whatever the Fortran community is using these days for +preprocessor, translator, and other such products, like OpenMP. +What that's all about, and how @code{g77} can elegantly fit its +special comment conventions into it all, is TBD as well. +We don't want to reinvent the wheel here, but if there turn out +to be too many conflicting conventions, we might have to invent +one that looks nothing like the others, but which offers their +host products a better infrastructure in which to fit and coexist +peacefully.) + +@code{g77stripcard} probably shouldn't do any tab expansion or other +fancy stuff. +People can use @code{expand} or other pre-filtering if they like. +The idea here is to keep each stage quite simple, while providing +excellent performance for ``normal'' code. + +(Code with junk beyond column 73 is not really ``normal'', +as it comes from a card-punch heritage, +and will be increasingly hard for tomorrow's Fortran programmers to read.) + +@node lex.c +@subsection lex.c + +To help make the lexer simple, fast, and easy to maintain, +while also having @code{g77} generally encourage Fortran programmers +to write simple, maintainable, portable code by maximizing the +performance of compiling that kind of code: + +@itemize @bullet +@item +There'll be just one lexer, for both fixed-form and free-form source. + +@item +It'll care about the form only when handling the first 7 columns of +text, stuff like spaces between strings of alphanumerics, and +how lines are continued. + +Some other distinctions will be handled by subsequent phases, +so at least one of them will have to know which form is involved. + +For example, @samp{I = 2 . 4} is acceptable in fixed form, +and works in free form as well given the implementation @code{g77} +presently uses. +But the standard requires a diagnostic for it in free form, +so the parser has to be able to recognize that +the lexemes aren't contiguous +(information the lexer @emph{does} have to provide) +and that free-form source is being parsed, +so it can provide the diagnostic. + +The @code{g77} lexer doesn't try to gather @samp{2 . 4} into a single lexeme. +Otherwise, it'd have to know a whole lot more about how to parse Fortran, +or subsequent phases (mainly parsing) would have two paths through +lots of critical code---one to handle the lexeme @samp{2}, @samp{.}, +and @samp{4} in sequence, another to handle the lexeme @samp{2.4}. + +@item +It won't worry about line lengths +(beyond the first 7 columns for fixed-form source). + +That is, once it starts parsing the ``statement'' part of a line +(column 7 for fixed-form, column 1 for free-form), +it'll keep going until it finds a newline, +rather than ignoring everything past a particular column +(72 or 132). + +The implication here is that there shouldn't @emph{be} +anything past that last column, other than whitespace or +commentary, because users using typical editors +(or viewing output as typically printed) +won't necessarily know just where the last column is. + +Code that has ``garbage'' beyond the last column +(almost certainly only fixed-form code with a punched-card legacy, +such as code using columns 73-80 for ``sequence numbers'') +will have to be run through @code{g77stripcard} first. + +Also, keeping track of the maximum column position while also watching out +for the end of a line @emph{and} while reading from a file +just makes things slower. +Since a file must be read, and watching for the end of the line +is necessary (unless the typical input file was preprocessed to +include the necessary number of trailing spaces), +dropping the tracking of the maximum column position +is the only way to reduce the complexity of the pertinent code +while maintaining high performance. + +@item +ASCII encoding is assumed for the input file. + +Code written in other character sets will have to be converted first. + +@item +Tabs (ASCII code 9) +will be converted to spaces via the straightforward +approach. + +Specifically, a tab is converted to between one and eight spaces +as necessary to reach column @var{n}, +where dividing @samp{(@var{n} - 1)} by eight +results in a remainder of zero. + +@item +Linefeeds (ASCII code 10) +mark the ends of lines. + +@item +A carriage return (ASCII code 13) +is accept if it immediately precedes a linefeed, +in which case it is ignored. + +Otherwise, it is rejected (with a diagnostic). + +@item +Any other characters other than the above +that are not part of the GNU Fortran Character Set +(@pxref{Character Set}) +are rejected with a diagnostic. + +This includes backspaces, form feeds, and the like. + +(It might make sense to allow a form feed in column 1 +as long as that's the only character on a line. +It certainly wouldn't seem to cost much in terms of performance.) + +@item +The end of the input stream (EOF) +ends the current line. + +@item +The distinction between uppercase and lowercase letters +will be preserved. + +It will be up to subsequent phases to decide to fold case. + +Current plans are to permit any casing for Fortran (reserved) keywords +while preserving casing for user-defined names. +(This might not be made the default for @file{.f} files, though.) + +Preserving case seems necessary to provide more direct access +to facilities outside of @code{g77}, such as to C or Pascal code. + +Names of intrinsics will probably be matchable in any case, +However, there probably won't be any option to require +a particular mixed-case appearance of intrinsics +(as there was for @code{g77} prior to version 0.6), +because that's painful to maintain, +and probably nobody uses it. + +(How @samp{external SiN; r = sin(x)} would be handled is TBD. +I think old @code{g77} might already handle that pretty elegantly, +but whether we can cope with allowing the same fragment to reference +a @emph{different} procedure, even with the same interface, +via @samp{s = SiN(r)}, needs to be determined. +If it can't, we need to make sure that when code introduces +a user-defined name, any intrinsic matching that name +using a case-insensitive comparison +is ``turned off''.) + +@item +Backslashes in @code{CHARACTER} and Hollerith constants +are not allowed. + +This avoids the confusion introduced by some Fortran compiler vendors +providing C-like interpretation of backslashes, +while others provide straight-through interpretation. + +Some kind of lexical construct (TBD) will be provided to allow +flagging of a @code{CHARACTER} +(but probably not a Hollerith) +constant that permits backslashes. +It'll necessarily be a prefix, such as: + +@smallexample +PRINT *, C'This line has a backspace \b here.' +PRINT *, F'This line has a straight backslash \ here.' +@end smallexample + +Further, command-line options might be provided to specify that +one prefix or the other is to be assumed as the default +for @code{CHARACTER} constants. + +However, it seems more helpful for @code{g77} to provide a program +that converts prefix all constants +(or just those containing backslashes) +with the desired designation, +so printouts of code can be read +without knowing the compile-time options used when compiling it. + +If such a program is provided +(let's name it @code{g77slash} for now), +then a command-line option to @code{g77} should not be provided. +(Though, given that it'll be easy to implement, it might be hard +to resist user requests for it ``to compile faster than if we +have to invoke another filter''.) + +This program would take a command-line option to specify the +default interpretation of slashes, +affecting which prefix it uses for constants. + +@code{g77slash} probably should automatically convert Hollerith +constants that contain slashes +to the appropriate @code{CHARACTER} constants. +Then @code{g77} wouldn't have to define a prefix syntax for Hollerith +constants specifying whether they want C-style or straight-through +backslashes. +@end itemize + +The above implements nearly exactly what is specified by +@ref{Character Set}, +and +@ref{Lines}, +except it also provides automatic conversion of tabs +and ignoring of newline-related carriage returns. + +It also effects the ``pure visual'' model, +by which is meant that a user viewing his code +in a typical text editor +(assuming it's not preprocessed via @code{g77stripcard} or similar) +doesn't need any special knowledge +of whether spaces on the screen are really tabs, +whether lines end immediately after the last visible non-space character +or after a number of spaces and tabs that follow it, +or whether the last line in the file is ended by a newline. + +Most editors don't make these distinctions, +the ANSI FORTRAN 77 standard doesn't require them to, +and it permits a standard-conforming compiler +to define a method for transforming source code to +``standard form'' however it wants. + +So, GNU Fortran defines it such that users have the best chance +of having the code be interpreted the way it looks on the screen +of the typical editor. + +(Fancy editors should @emph{never} be required to correctly read code +written in classic two-dimensional-plaintext form. +By correct reading I mean ability to read it, book-like, without +mistaking text ignored by the compiler for program code and vice versa, +and without having to count beyond the first several columns. +The vague meaning of ASCII TAB, among other things, complicates +this somewhat, but as long as ``everyone'', including the editor, +other tools, and printer, agrees about the every-eighth-column convention, +the GNU Fortran ``pure visual'' model meets these requirements. +Any language or user-visible source form +requiring special tagging of tabs, +the ends of lines after spaces/tabs, +and so on, is broken by this definition. +Fortunately, Fortran @emph{itself} is not broken, +even if most vendor-supplied defaults for their Fortran compilers @emph{are} +in this regard.) + +Further, this model provides a clean interface +to whatever preprocessors or code-generators are used +to produce input to this phase of @code{g77}. +Mainly, they need not worry about long lines. + +@node sta.c +@subsection sta.c + +@node stb.c +@subsection stb.c + +@node expr.c +@subsection expr.c + +@node stc.c +@subsection stc.c + +@node std.c +@subsection std.c + +@node ste.c +@subsection ste.c + +@node Gotchas (Transforming) +@subsection Gotchas (Transforming) + +This section is not about transforming ``gotchas'' into something else. +It is about the weirder aspects of transforming Fortran, +however that's defined, +into a more modern, canonical form. + +@subsubsection Multi-character Lexemes + +Each lexeme carries with it a pointer to where it appears in the source. + +To provide the ability for diagnostics to point to column numbers, +in addition to line numbers and names, +lexemes that represent more than one (significant) character +in the source code need, generally, +to provide pointers to where each @emph{character} appears in the source. + +This provides the ability to properly identify the precise location +of the problem in code like + +@smallexample +SUBROUTINE X +END +BLOCK DATA X +END +@end smallexample + +which, in fixed-form source, would result in single lexemes +consisting of the strings @samp{SUBROUTINEX} and @samp{BLOCKDATAX}. +(The problem is that @samp{X} is defined twice, +so a pointer to the @samp{X} in the second definition, +as well as a follow-up pointer to the corresponding pointer in the first, +would be preferable to pointing to the beginnings of the statements.) + +This need also arises when parsing (and diagnosing) @code{FORMAT} +statements. + +Further, it arises when diagnosing +@code{FMT=} specifiers that contain constants +(or partial constants, or even propagated constants!) +in I/O statements, as in: + +@smallexample +PRINT '(I2, 3HAB)', J +@end smallexample + +(A pointer to the beginning of the prematurely-terminated Hollerith +constant, and/or to the close parenthese, is preferable to a pointer +to the open-parenthese or the apostrophe that precedes it.) + +Multi-character lexemes, which would seem to naturally include +at least digit strings, alphanumeric strings, @code{CHARACTER} +constants, and Hollerith constants, therefore need to provide +location information on each character. +(Maybe Hollerith constants don't, but it's unnecessary to except them.) + +The question then arises, what about @emph{other} multi-character lexemes, +such as @samp{**} and @samp{//}, +and Fortran 90's @samp{(/}, @samp{/)}, @samp{::}, and so on? + +Turns out there's a need to identify the location of the second character +of these two-character lexemes. +For example, in @samp{I(/J) = K}, the slash needs to be diagnosed +as the problem, not the open parenthese. +Similarly, it is preferable to diagnose the second slash in +@samp{I = J // K} rather than the first, given the implicit typing +rules, which would result in the compiler disallowing the attempted +concatenation of two integers. +(Though, since that's more of a semantic issue, +it's not @emph{that} much preferable.) + +Even sequences that could be parsed as digit strings could use location info, +for example, to diagnose the @samp{9} in the octal constant @samp{O'129'}. +(This probably will be parsed as a character string, +to be consistent with the parsing of @samp{Z'129A'}.) + +To avoid the hassle of recording the location of the second character, +while also preserving the general rule that each significant character +is distinctly pointed to by the lexeme that contains it, +it's best to simply not have any fixed-size lexemes +larger than one character. + +This new design is expected to make checking for two +@samp{*} lexemes in a row much easier than the old design, +so this is not much of a sacrifice. +It probably makes the lexer much easier to implement +than it makes the parser harder. + +@subsubsection Space-padding Lexemes + +Certain lexemes need to be padded with virtual spaces when the +end of the line (or file) is encountered. + +This is necessary in fixed form, to handle lines that don't +extend to column 72, assuming that's the line length in effect. + +@subsubsection Bizarre Free-form Hollerith Constants + +Last I checked, the Fortran 90 standard actually required the compiler +to silently accept something like + +@smallexample +FORMAT ( 1 2 Htwelve chars ) +@end smallexample + +as a valid @code{FORMAT} statement specifying a twelve-character +Hollerith constant. + +The implication here is that, since the new lexer is a zero-feedback one, +it won't know that the special case of a @code{FORMAT} statement being parsed +requires apparently distinct lexemes @samp{1} and @samp{2} to be treated as +a single lexeme. + +(This is a horrible misfeature of the Fortran 90 language. +It's one of many such misfeatures that almost make me want +to not support them, and forge ahead with designing a new +``GNU Fortran'' language that has the features, +but not the misfeatures, of Fortran 90, +and provide utility programs to do the conversion automatically.) + +So, the lexer must gather distinct chunks of decimal strings into +a single lexeme in contexts where a single decimal lexeme might +start a Hollerith constant. + +(Which probably means it might as well do that all the time +for all multi-character lexemes, even in free-form mode, +leaving it to subsequent phases to pull them apart as they see fit.) + +Compare the treatment of this to how + +@smallexample +CHARACTER * 4 5 HEY +@end smallexample + +and + +@smallexample +CHARACTER * 12 HEY +@end smallexample + +must be treated---the former must be diagnosed, due to the separation +between lexemes, the latter must be accepted as a proper declaration. + +@subsubsection Hollerith Constants + +Recognizing a Hollerith constant---specifically, +that an @samp{H} or @samp{h} after a digit string begins +such a constant---requires some knowledge of context. + +Hollerith constants (such as @samp{2HAB}) can appear after: + +@itemize @bullet +@item +@samp{(} + +@item +@samp{,} + +@item +@samp{=} + +@item +@samp{+}, @samp{-}, @samp{/} + +@item +@samp{*}, except as noted below +@end itemize + +Hollerith constants don't appear after: + +@itemize @bullet +@item +@samp{CHARACTER*}, +which can be treated generally as +any @samp{*} that is the second lexeme of a statement +@end itemize + +@subsubsection Confusing Function Keyword + +While + +@smallexample +REAL FUNCTION FOO () +@end smallexample + +must be a @code{FUNCTION} statement and + +@smallexample +REAL FUNCTION FOO (5) +@end smallexample + +must be a type-definition statement, + +@smallexample +REAL FUNCTION FOO (@var{names}) +@end smallexample + +where @var{names} is a comma-separated list of names, +can be one or the other. + +The only way to disambiguate that statement +(short of mandating free-form source or a short maximum +length for name for external procedures) +is based on the context of the statement. + +In particular, the statement is known to be within an +already-started program unit +(but not at the outer level of the @code{CONTAINS} block), +it is a type-declaration statement. + +Otherwise, the statement is a @code{FUNCTION} statement, +in that it begins a function program unit +(external, or, within @code{CONTAINS}, nested). + +@subsubsection Weird READ + +The statement + +@smallexample +READ (N) +@end smallexample + +is equivalent to either + +@smallexample +READ (UNIT=(N)) +@end smallexample + +or + +@smallexample +READ (FMT=(N)) +@end smallexample + +depending on which would be valid in context. + +Specifically, if @samp{N} is type @code{INTEGER}, +@samp{READ (FMT=(N))} would not be valid, +because parentheses may not be used around @samp{N}, +whereas they may around it in @samp{READ (UNIT=(N))}. + +Further, if @samp{N} is type @code{CHARACTER}, +the opposite is true---@samp{READ (UNIT=(N))} is not valid, +but @samp{READ (FMT=(N))} is. + +Strictly speaking, if anything follows + +@smallexample +READ (N) +@end smallexample + +in the statement, whether the first lexeme after the close +parenthese is a comma could be used to disambiguate the two cases, +without looking at the type of @samp{N}, +because the comma is required for the @samp{READ (FMT=(N))} +interpretation and disallowed for the @samp{READ (UNIT=(N))} +interpretation. + +However, in practice, many Fortran compilers allow +the comma for the @samp{READ (UNIT=(N))} +interpretation anyway +(in that they generally allow a leading comma before +an I/O list in an I/O statement), +and much code takes advantage of this allowance. + +(This is quite a reasonable allowance, since the +juxtaposition of a comma-separated list immediately +after an I/O control-specification list, which is also comma-separated, +without an intervening comma, +looks sufficiently ``wrong'' to programmers +that they can't resist the itch to insert the comma. +@samp{READ (I, J), K, L} simply looks cleaner than +@samp{READ (I, J) K, L}.) + +So, type-based disambiguation is needed unless strict adherence +to the standard is always assumed, and we're not going to assume that. + +@node TBD (Transforming) +@subsection TBD (Transforming) + +Continue researching gotchas, designing the transformational process, +and implementing it. + +Specific issues to resolve: + +@itemize @bullet +@item +Just where should @code{INCLUDE} processing take place? + +Clearly before (or part of) statement identification (@file{sta.c}), +since determining whether @samp{I(J)=K} is a statement-function +definition or an assignment statement requires knowing the context, +which in turn requires having processed @code{INCLUDE} files. + +@item +Just where should (if it was implemented) @code{USE} processing take place? + +This gets into the whole issue of how @code{g77} should handle the concept +of modules. +I think GNAT already takes on this issue, but don't know more than that. +Jim Giles has written extensively on @code{comp.lang.fortran} +about his opinions on module handling, as have others. +Jim's views should be taken into account. + +Actually, Richard M. Stallman (RMS) also has written up +some guidelines for implementing such things, +but I'm not sure where I read them. +Perhaps the old @email{gcc2@@cygnus.com} list. + +If someone could dig references to these up and get them to me, +that would be much appreciated! +Even though modules are not on the short-term list for implementation, +it'd be helpful to know @emph{now} how to avoid making them harder to +implement them @emph{later}. + +@item +Should the @code{g77} command become just a script that invokes +all the various preprocessing that might be needed, +thus making it seem slower than necessary for legacy code +that people are unwilling to convert, +or should we provide a separate script for that, +thus encouraging people to convert their code once and for all? + +At least, a separate script to behave as old @code{g77} did, +perhaps named @code{g77old}, might ease the transition, +as might a corresponding one that converts source codes +named @code{g77oldnew}. + +These scripts would take all the pertinent options @code{g77} used +to take and run the appropriate filters, +passing the results to @code{g77} or just making new sources out of them +(in a subdirectory, leaving the user to do the dirty deed of +moving or copying them over the old sources). + +@item +Do other Fortran compilers provide a prefix syntax +to govern the treatment of backslashes in @code{CHARACTER} +(or Hollerith) constants? + +Knowing what other compilers provide would help. + +@item +Is it okay to drop support for the @samp{-fintrin-case-initcap}, +@samp{-fmatch-case-initcap}, @samp{-fsymbol-case-initcap}, +and @samp{-fcase-initcap} options? + +I've asked @email{info-gnu-fortran@@gnu.org} for input on this. +Not having to support these makes it easier to write the new front end, +and might also avoid complicated its design. +@end itemize + @node Philosophy of Code Generation @section Philosophy of Code Generation @@ -476,7 +1508,7 @@ Further, after the @code{SYSTEM_CLOCK} library routine returns, the compiler must ensure that the temporary variable it wrote is copied into the appropriate element of the @samp{CLOCKS} array. (This assumes the compiler doesn't just reject the code, -which it should if it is compiling under some kind of a "strict" option.) +which it should if it is compiling under some kind of a ``strict'' option.) @item To determine the correct index into the @samp{CLOCKS} array, @@ -882,6 +1914,111 @@ to hold the value of the expression. @item Other stuff??? +@end itemize +@node Internal Naming Conventions +@section Internal Naming Conventions -@end itemize +Names exported by FFE modules have the following (regular-expression) forms. +Note that all names beginning @code{ffe@var{mod}} or @code{FFE@var{mod}}, +where @var{mod} is lowercase or uppercase alphanumerics, respectively, +are exported by the module @code{ffe@var{mod}}, +with the source code doing the exporting in @file{@var{mod}.h}. +(Usually, the source code for the implementation is in @file{@var{mod}.c}.) + +Identifiers that don't fit the following forms +are not considered exported, +even if they are according to the C language. +(For example, they might be made available to other modules +solely for use within expansions of exported macros, +not for use within any source code in those other modules.) + +@table @code +@item ffe@var{mod} +The single typedef exported by the module. + +@item FFE@var{umod}_[A-Z][A-Z0-9_]* +(Where @var{umod} is the uppercase for of @var{mod}.) + +A @code{#define} or @code{enum} constant of the type @code{ffe@var{mod}}. + +@item ffe@var{mod}[A-Z][A-Z][a-z0-9]* +A typedef exported by the module. + +The portion of the identifier after @code{ffe@var{mod}} is +referred to as @code{ctype}, a capitalized (mixed-case) form +of @code{type}. + +@item FFE@var{umod}_@var{type}[A-Z][A-Z0-9_]*[A-Z0-9]? +(Where @var{umod} is the uppercase for of @var{mod}.) + +A @code{#define} or @code{enum} constant of the type +@code{ffe@var{mod}@var{type}}, +where @var{type} is the lowercase form of @var{ctype} +in an exported typedef. + +@item ffe@var{mod}_@var{value} +A function that does or returns something, +as described by @var{value} (see below). + +@item ffe@var{mod}_@var{value}_@var{input} +A function that does or returns something based +primarily on the thing described by @var{input} (see below). +@end table + +Below are names used for @var{value} and @var{input}, +along with their definitions. + +@table @code +@item col +A column number within a line (first column is number 1). + +@item file +An encapsulation of a file's name. + +@item find +Looks up an instance of some type that matches specified criteria, +and returns that, even if it has to create a new instance or +crash trying to find it (as appropriate). + +@item initialize +Initializes, usually a module. No type. + +@item int +A generic integer of type @code{int}. + +@item is +A generic integer that contains a true (non-zero) or false (zero) value. + +@item len +A generic integer that contains the length of something. + +@item line +A line number within a source file, +or a global line number. + +@item lookup +Looks up an instance of some type that matches specified criteria, +and returns that, or returns nil. + +@item name +A @code{text} that points to a name of something. + +@item new +Makes a new instance of the indicated type. +Might return an existing one if appropriate---if so, +similar to @code{find} without crashing. + +@item pt +Pointer to a particular character (line, column pairs) +in the input file (source code being compiled). + +@item run +Performs some herculean task. No type. + +@item terminate +Terminates, usually a module. No type. + +@item text +A @code{char *} that points to generic text. +@end table diff --git a/gnu/egcs/gcc/f/g77.texi b/gnu/egcs/gcc/f/g77.texi index 25070dbd5f8..0d7a213575a 100644 --- a/gnu/egcs/gcc/f/g77.texi +++ b/gnu/egcs/gcc/f/g77.texi @@ -2,7 +2,7 @@ @c %**start of header @setfilename g77.info -@set last-update 1999-05-13 +@set last-update 1999-06-06 @set copyrights-g77 1995-1999 @include root.texi @@ -1471,7 +1471,7 @@ by type. Explanations are in the following sections. -falias-check -fargument-alias -fargument-noalias -fno-argument-noalias-global -fno-globals -fflatten-arrays --fsubscript-check -ff2c-subscript-check +-fbounds-check -ffortran-bounds-check @end smallexample @end table @@ -3386,10 +3386,10 @@ It is intended for use only by @code{g77} developers, to evaluate code-generation issues. It might be removed at any time. -@cindex -fsubscript-check option -@cindex -ff2c-subscript-check option -@item -fsubscript-check -@itemx -ff2c-subscript-check +@cindex -fbounds-check option +@cindex -ffortran-bounds-check option +@item -fbounds-check +@itemx -ffortran-bounds-check @cindex bounds checking @cindex range checking @cindex array bounds checking @@ -3414,12 +3414,12 @@ such as references to below the beginning of an assumed-size array. @code{g77} also generates checks for @code{CHARACTER} substring references, something @code{f2c} currently does not do. -Since a future version of @code{g77} might use a different implementation, -use the new @samp{-ff2c-subscript-check} option -if your application requires use of @code{s_rnge} or a compile-time diagnostic. +Use the new @samp{-ffortran-bounds-check} option +to specify bounds-checking for only the Fortran code you are compiling, +not necessarily for code written in other languages. @emph{Note:} To provide more detailed information on the offending subscript, -@code{g77} provides @code{s_rnge} +@code{g77} provides the @code{libg2c} run-time library routine @code{s_rnge} with somewhat differently-formatted information. Here's a sample diagnostic: @@ -4243,7 +4243,7 @@ stream-based text file is translated to GNU Fortran lines as follows: A newline in the file is the character that represents the end of a line of text to the underlying system. For example, on ASCII-based systems, a newline is the @key{NL} -character, which has ASCII value 12 (decimal). +character, which has ASCII value 10 (decimal). @item Each newline in the file serves to end the line of text that precedes @@ -10774,30 +10774,25 @@ compiler, typically @code{gcc}.) @node Use Submodel Options @subsection Use Submodel Options -@cindex Pentium optimizations -@cindex optimization, for Pentium -@cindex 586/686 CPUs @cindex submodels Using an appropriate @samp{-m} option to generate specific code for your CPU may be worthwhile, though it may mean the executable won't run on other versions of the CPU that don't support the same instruction set. @xref{Submodel Options,,Hardware Models and Configurations,gcc,Using and -Porting GNU CC}. +Porting GNU CC}. For instance on an x86 system the compiler might have +been built---as shown by @samp{g77 -v}---for the target +@samp{i386-pc-linux-gnu}, i.e.@: an @samp{i386} CPU@. In that case to +generate code best optimized for a Pentium you could use the option +@samp{-march=pentium}. -For recent CPUs that don't have explicit support in -the released version of @code{gcc}, it may still be possible to get -improvements. -For instance, the flags recommended for 586/686 -(Pentium(Pro)) chips for building the Linux kernel are: +For recent CPUs that don't have explicit support in the released version +of @code{gcc}, it @emph{might} still be possible to get improvements +with certain @samp{-m} options. -@smallexample --m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 --fomit-frame-pointer -@end smallexample - -@noindent @samp{-fomit-frame-pointer} will, however, inhibit debugging -on x86 systems. +@samp{-fomit-frame-pointer} can help performance on x86 systems and +others. It will, however, inhibit debugging on the systems on which it +is not turned on anyway by @samp{-O}. @node Trouble @chapter Known Causes of Trouble with GNU Fortran @@ -11178,7 +11173,7 @@ themselves as @emph{visible} problems some time later. Overflowing the bounds of an array---usually by writing beyond the end of it---is one of two kinds of bug that often occurs in Fortran code. -(Compile your code with the @samp{-fsubscript-check} option +(Compile your code with the @samp{-fbounds-check} option to catch many of these kinds of errors at program run time.) The other kind of bug is a mismatch between the actual arguments @@ -11418,6 +11413,7 @@ GNU Fortran dialects: * Suppressing Space Padding:: * Fortran Preprocessor:: * Bit Operations on Floating-point Data:: +* Really Ugly Character Assignments:: New facilities: * POSIX Standard:: @@ -11426,8 +11422,10 @@ New facilities: * Large Automatic Arrays:: * Support for Threads:: * Increasing Precision/Range:: +* Enabling Debug Lines:: Better diagnostics: +* Better Warnings:: * Gracefully Handle Sensible Bad Code:: * Non-standard Conversions:: * Non-standard Intrinsics:: @@ -11444,6 +11442,8 @@ Better diagnostics: Run-time facilities: * Uninitialized Variables at Run Time:: * Portable Unformatted Files:: +* Better List-directed I/O:: +* Default to Console I/O:: Debugging: * Labels Visible to Debugger:: @@ -12094,6 +12094,24 @@ PRINT *, IAND(A, B) END @end smallexample +@node Really Ugly Character Assignments +@subsection Really Ugly Character Assignments + +An option such as @samp{-fugly-char} should be provided +to allow + +@smallexample +REAL*8 A1 +DATA A1 / '12345678' / +@end smallexample + +and: + +@smallexample +REAL*8 A1 +A1 = 'ABCDEFGH' +@end smallexample + @node POSIX Standard @subsection @code{POSIX} Standard @@ -12174,6 +12192,73 @@ are thread-safe, nor does @code{g77} have support for parallel processing processors). A package such as PVM might help here. +@node Enabling Debug Lines +@subsection Enabling Debug Lines +@cindex debug line +@cindex comment line, debug + +An option such as @samp{-fdebug-lines} should be provided +to turn fixed-form lines beginning with @samp{D} +to be treated as if they began with a space, +instead of as if they began with a @samp{C} +(as comment lines). + +@node Better Warnings +@subsection Better Warnings + +Because of how @code{g77} generates code via the back end, +it doesn't always provide warnings the user wants. +Consider: + +@smallexample +PROGRAM X +PRINT *, A +END +@end smallexample + +Currently, the above is not flagged as a case of +using an uninitialized variable, +because @code{g77} generates a run-time library call that looks, +to the GBE, like it might actually @emph{modify} @samp{A} at run time. +(And, in fact, depending on the previous run-time library call, +it would!) + +Fixing this requires one of the following: + +@itemize @bullet +@item +Switch to new library, @code{libg77}, that provides +a more ``clean'' interface, +vis-a-vis input, output, and modified arguments, +so the GBE can tell what's going on. + +This would provide a pretty big performance improvement, +at least theoretically, and, ultimately, in practice, +for some types of code. + +@item +Have @code{g77} pass a pointer to a temporary +containing a copy of @samp{A}, +instead of to @samp{A} itself. +The GBE would then complain about the copy operation +involving a potentially uninitialized variable. + +This might also provide a performance boost for some code, +because @samp{A} might then end up living in a register, +which could help with inner loops. + +@item +Have @code{g77} use a GBE construct similar to @code{ADDR_EXPR} +but with extra information on the fact that the +item pointed to won't be modified +(a la @code{const} in C). + +Probably the best solution for now, but not quite trivial +to implement in the general case. +Worth considering after @code{g77} 0.6 is considered +pretty solid. +@end itemize + @node Gracefully Handle Sensible Bad Code @subsection Gracefully Handle Sensible Bad Code @@ -12413,6 +12498,49 @@ only incur overhead when they are read on a system with a different format.) A future @code{g77} runtime library should use such techniques. +@node Better List-directed I/O +@subsection Better List-directed I/O + +Values output using list-directed I/O +(@samp{PRINT *, R, D}) +should be written with a field width, precision, and so on +appropriate for the type (precision) of each value. + +(Currently, no distinction is made between single-precision +and double-precision values +by @code{libf2c}.) + +It is likely this item will require the @code{libg77} project +to be undertaken. + +In the meantime, use of formatted I/O is recommended. +While it might be of little consolation, +@code{g77} does support @samp{FORMAT(F<WIDTH>.4)}, for example, +as long as @samp{WIDTH} is defined as a named constant +(via @code{PARAMETER}). +That at least allows some compile-time specification +of the precision of a data type, +perhaps controlled by preprocessing directives. + +@node Default to Console I/O +@subsection Default to Console I/O + +The default I/O units, +specified by @samp{READ @var{fmt}}, +@samp{READ (UNIT=*)}, +@samp{WRITE (UNIT=*)}, and +@samp{PRINT @var{fmt}}, +should not be units 5 (input) and 6 (output), +but, rather, unit numbers not normally available +for use in statements such as @code{OPEN} and @code{CLOSE}. + +Changing this would allow a program to connect units 5 and 6 +to files via @code{OPEN}, +but still use @samp{READ (UNIT=*)} and @samp{PRINT} +to do I/O to the ``console''. + +This change probably requires the @code{libg77} project. + @node Labels Visible to Debugger @subsection Labels Visible to Debugger @@ -13808,8 +13936,16 @@ the source code of @code{g77} and rebuilding. How to do this depends on the version of @code{g77}: @table @code -@item EGCS-1.0 -@itemx FSF +@item G77 0.5.24 (EGCS 1.1) +@itemx G77 0.5.25 (EGCS 1.2) +Change the @code{lang_init_options} routine in @file{egcs/gcc/f/com.c}. + +(Note that these versions of @code{g77} +perform internal consistency checking automatically +when the @samp{-fversion} option is specified.) + +@item G77 0.5.23 +@itemx G77 0.5.24 (EGCS 1.0) Change the way @code{f771} handles the @samp{-fset-g77-defaults} option, which is always provided as the first option when called by @code{g77} or @code{gcc}. @@ -13833,14 +13969,6 @@ It is in @file{@value{path-g77}/lang-specs.h} that @samp{-fset-g77-defaults}, even when the user has not explicitly specified them. Other ``internal'' options such as @samp{-quiet} also are passed via this mechanism. - -@item EGCS-1.1 -@itemx EGCS-1.2 -Change the @code{lang_init_options} routine in @file{egcs/gcc/f/com.c}. - -(Note that these versions of @code{g77} -perform internal consistency checking automatically -when the @samp{-fversion} option is specified.) @end table @node Projects diff --git a/gnu/egcs/gcc/f/lang-specs.h b/gnu/egcs/gcc/f/lang-specs.h index 9cdc8c48212..b4492a6327d 100644 --- a/gnu/egcs/gcc/f/lang-specs.h +++ b/gnu/egcs/gcc/f/lang-specs.h @@ -38,7 +38,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA {"cpp -lang-c %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\ %{C:%{!E:%eGNU C does not support -C without using -E}}\ %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\ - -D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\ + %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2}\ %{ansi:-trigraphs -$ -D__STRICT_ANSI__}\ %{!undef:%P} -D_LANGUAGE_FORTRAN %{trigraphs} \ %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} -traditional\ @@ -88,7 +88,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA {"cpp -lang-c %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I \ %{C:%{!E:%eGNU C does not support -C without using -E}} \ %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG} \ - -D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 \ + %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2} \ %{ansi:-trigraphs -$ -D__STRICT_ANSI__} \ %{!undef:%P} -D_LANGUAGE_FORTRAN %{trigraphs} \ %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} -traditional \ diff --git a/gnu/egcs/gcc/f/news.texi b/gnu/egcs/gcc/f/news.texi index 0a4b8e4e137..ea0a1312f03 100644 --- a/gnu/egcs/gcc/f/news.texi +++ b/gnu/egcs/gcc/f/news.texi @@ -9,7 +9,7 @@ @c in the standalone derivations of this file (e.g. NEWS). @set copyrights-news 1995-1999 -@set last-update-news 1999-05-13 +@set last-update-news 1999-06-04 @include root.texi @@ -151,7 +151,7 @@ is available at The following information was last updated on @value{last-update-news}: -@heading In @code{egcs} 1.2 (versus 1.1.2): +@heading In 0.5.25, @code{GCC} 2.95 (@code{EGCS} 1.2) versus @code{EGCS} 1.1.2: @itemize @bullet @ifclear USERVISONLY @item @@ -217,15 +217,15 @@ The @samp{-ax} option is now obeyed when compiling Fortran programs. @end ifclear @item -The new @samp{-fsubscript-check} option +The new @samp{-fbounds-check} option causes @code{g77} to compile run-time bounds checks of array subscripts, as well as of substring start and end points. -The current implementation uses the @code{libf2c} -library routine @code{s_rnge} to print the diagnostic. -Since a future version of @code{g77} might use a different implementation, -use the new @samp{-ff2c-subscript-check} option -if your application requires use of @code{s_rnge} or a compile-time diagnostic. +@item +@code{libg2c} now supports building as multilibbed library, +which provides better support for systems +that require options such as @samp{-mieee} +to work properly. @item Source file names with the suffixes @samp{.FOR} and @samp{.FPP} @@ -245,7 +245,7 @@ of @code{libU77} intrinsics. @item @code{g77} now warns about a reference to an intrinsic that has an interface that is not Year 2000 (Y2K) compliant. -Also, the @code{libg2c} has been changed to increase the likelihood +Also, @code{libg2c} has been changed to increase the likelihood of catching references to the implementations of these intrinsics using the @code{EXTERNAL} mechanism (which would avoid the new warnings). @@ -282,6 +282,14 @@ that are not in @code{EQUIVALENCE} areas and not @code{SAVE}'d. @end ifclear +@ifclear USERVISONLY +@item +@code{g77} now open-codes (``inlines'') division of @code{COMPLEX} operands +instead of generating a run-time call to +the @code{libf2c} routines @code{c_div} or @code{z_div}, +unless the @samp{-Os} option is specified. +@end ifclear + @item @code{g77} no longer generates code to maintain @code{errno}, a C-language concept, @@ -323,7 +331,34 @@ Upgrade to @code{libf2c} as of 1999-05-10. @end ifclear @end itemize -@heading In 0.5.24 and @code{egcs} 1.1.2 (versus 0.5.23 and 1.1.1): +@heading In 0.5.24 versus 0.5.23: + +There is no @code{g77} version 0.5.24 at this time, +or planned. +0.5.24 is the version number designated for bug fixes and, +perhaps, some new features added, +to 0.5.23. +Version 0.5.23 requires @code{gcc} 2.8.1, +as 0.5.24 was planned to require. + +Due to @code{EGCS} becoming @code{GCC} +(which is now an acronym for ``GNU Compiler Collection''), +and @code{EGCS} 1.2 becoming officially designated @code{GCC} 2.95, +there seems to be no need for an actual 0.5.24 release. + +To reduce the confusion already resulting from use of 0.5.24 +to designate @code{g77} versions within @code{EGCS} versions 1.0 and 1.1, +as well as in versions of @code{g77} documentation and notices +during that period, +``mainline'' @code{g77} version numbering resumes +at 0.5.25 with @code{GCC} 2.95 (@code{EGCS} 1.2), +skipping over 0.5.24 as a placeholder version number. + +To repeat, there is no @code{g77} 0.5.24, but there is now a 0.5.25. +Please remain calm and return to your keypunch units. + +@c 1999-03-15: EGCS 1.1.2 released. +@heading In @code{EGCS} 1.1.2 versus @code{EGCS} 1.1.1: @ifclear USERVISONLY @itemize @bullet @item @@ -352,7 +387,8 @@ Improve documentation. @end itemize @end ifclear -@heading In 0.5.24 and @code{egcs} 1.1.1 (versus 0.5.23 and 1.1): +@c 1998-12-04: EGCS 1.1.1 released. +@heading In @code{EGCS} 1.1.1 versus @code{EGCS} 1.1: @ifclear USERVISONLY @itemize @bullet @item @@ -383,54 +419,8 @@ for the completion code to be set properly). @end itemize @end ifclear -@heading In @code{egcs} 1.1 (versus 0.5.24): -@itemize @bullet -@ifclear USERVISONLY -@item -Fix @code{g77} crash compiling code -containing the construct @samp{CMPLX(0.)} or similar. -@end ifclear - -@ifclear USERVISONLY -@item -Fix @code{g77} crash -(or apparently infinite run-time) -when compiling certain complicated expressions -involving @code{COMPLEX} arithmetic -(especially multiplication). -@end ifclear - -@ifclear USERVISONLY -@cindex DNRM2 -@cindex stack, 387 coprocessor -@cindex Intel x86 -@cindex -O2 -@item -Fix a code-generation bug that afflicted -Intel x86 targets when @samp{-O2} was specified -compiling, for example, an old version of -the @code{DNRM2} routine. - -The x87 coprocessor stack was being -mismanaged in cases involving assigned @code{GOTO} -and @code{ASSIGN}. -@end ifclear - -@cindex alignment -@cindex double-precision performance -@cindex -malign-double -@item -Align static double-precision variables and arrays -on Intel x86 targets -regardless of whether @samp{-malign-double} is specified. - -Generally, this affects only local variables and arrays -having the @code{SAVE} attribute -or given initial values via @code{DATA}. -@end itemize - -@c 1998-09-01: egcs-1.1 released. -@heading In @code{egcs} 1.1 (versus @code{egcs} 1.0.3): +@c 1998-09-03: EGCS 1.1 released. +@heading In @code{EGCS} 1.1 versus @code{EGCS} 1.0.3: @itemize @bullet @ifclear USERVISONLY @item @@ -608,9 +598,26 @@ as well. @end ifclear @end itemize -@heading In 0.5.24 and @code{egcs} 1.1 (versus 0.5.23): +@c 1998-09-03: EGCS 1.1 released. +@heading In @code{EGCS} 1.1 versus @code{g77} 0.5.23: @itemize @bullet @ifclear USERVISONLY +@cindex DNRM2 +@cindex stack, 387 coprocessor +@cindex Intel x86 +@cindex -O2 +@item +Fix a code-generation bug that afflicted +Intel x86 targets when @samp{-O2} was specified +compiling, for example, an old version of +the @code{DNRM2} routine. + +The x87 coprocessor stack was being +mismanaged in cases involving assigned @code{GOTO} +and @code{ASSIGN}. +@end ifclear + +@ifclear USERVISONLY @item @code{g77} no longer produces incorrect code and initial values @@ -621,6 +628,12 @@ vis-a-vis their types, require initial padding. @ifclear USERVISONLY @item +Fix @code{g77} crash compiling code +containing the construct @samp{CMPLX(0.)} or similar. +@end ifclear + +@ifclear USERVISONLY +@item @code{g77} no longer crashes when compiling code containing specification statements such as @samp{INTEGER(KIND=7) PTR}. @@ -645,6 +658,27 @@ Previously, @code{g77} treated these expressions as denoting special ``pointer'' arguments for the purposes of filewide analysis. +@ifclear USERVISONLY +@item +Fix @code{g77} crash +(or apparently infinite run-time) +when compiling certain complicated expressions +involving @code{COMPLEX} arithmetic +(especially multiplication). +@end ifclear + +@cindex alignment +@cindex double-precision performance +@cindex -malign-double +@item +Align static double-precision variables and arrays +on Intel x86 targets +regardless of whether @samp{-malign-double} is specified. + +Generally, this affects only local variables and arrays +having the @code{SAVE} attribute +or given initial values via @code{DATA}. + @item The @code{g77} driver now ensures that @samp{-lg2c} is specified in the link phase prior to any @@ -702,7 +736,7 @@ for such information. @ifclear DOC-NEWS @c 1998-05-20: 0.5.23 released. -@heading In 0.5.23 (versus 0.5.22): +@heading In 0.5.23 versus 0.5.22: @itemize @bullet @item This release contains several regressions against @@ -906,7 +940,7 @@ as well. @end itemize @c 1998-03-16: 0.5.22 released. -@heading In 0.5.22 (versus 0.5.21): +@heading In 0.5.22 versus 0.5.21: @itemize @bullet @ifclear USERVISONLY @item @@ -1096,8 +1130,8 @@ This fixes a formatted-I/O bug that afflicted @end ifclear @end itemize -@c 1998-03-15: egcs-1.0.2 released. -@heading In @code{egcs} 1.0.2 (versus @code{egcs} 1.0.1): +@c 1998-03-18: EGCS 1.0.2 released. +@heading In @code{EGCS} 1.0.2 versus @code{EGCS} 1.0.1: @itemize @bullet @ifclear USERVISONLY @item @@ -1142,8 +1176,8 @@ Fix compiler so it accepts @samp{-fgnu-intrinsics-*} and @samp{-fbadu77-intrinsics-*} options. @end itemize -@c 1998-01-02: egcs-1.0.1 released. -@heading In @code{egcs} 1.0.1 (versus @code{egcs} 1.0): +@c 1998-01-06: EGCS 1.0.1 released. +@heading In @code{EGCS} 1.0.1 versus @code{EGCS} 1.0: @ifclear USERVISONLY @itemize @bullet @item @@ -1152,8 +1186,8 @@ machines such as Alphas. @end itemize @end ifclear -@c 1997-12-03: egcs-1.0 released. -@heading In @code{egcs} 1.0 (versus 0.5.21): +@c 1997-12-03: EGCS 1.0 released. +@heading In @code{EGCS} 1.0 versus @code{g77} 0.5.21: @itemize @bullet @item Version 1.0 of @code{egcs} diff --git a/gnu/egcs/gcc/f/root.texi b/gnu/egcs/gcc/f/root.texi index fd21eb76381..37d8286013e 100644 --- a/gnu/egcs/gcc/f/root.texi +++ b/gnu/egcs/gcc/f/root.texi @@ -3,30 +3,27 @@ @c (e.g. a release branch in the CVS repository for egcs), @c clear this and set the version information correctly. @set DEVELOPMENT -@set version-g77 0.5.24 +@set version-g77 0.5.25 @set version-egcs 1.2 @c EGCS-G77 is set to indicate this is the EGCS version of g77. -@set EGCS-G77 +@clear EGCS-G77 @ifclear EGCS-G77 @c FSF-G77 is set to indicate this is the FSF version of g77. @set FSF-G77 @end ifclear -@ifset EGCS-G77 @set email-general egcs@@egcs.cygnus.com @set email-bugs egcs-bugs@@egcs.cygnus.com @set path-g77 egcs/gcc/f @set path-libf2c egcs/libf2c + +@ifset EGCS-G77 @set which-g77 EGCS-@value{version-egcs} @end ifset @ifset FSF-G77 -@set email-general fortran@@gnu.org -@set email-bugs fortran@@gnu.org -@set path-g77 gcc/f -@set path-libf2c gcc/f/runtime @set which-g77 FSF-@value{version-g77} @end ifset diff --git a/gnu/egcs/gcc/f/top.c b/gnu/egcs/gcc/f/top.c index 0d6fb35e214..07ddd83740c 100644 --- a/gnu/egcs/gcc/f/top.c +++ b/gnu/egcs/gcc/f/top.c @@ -323,13 +323,13 @@ ffe_decode_option (argc, argv) ffe_set_is_globals (TRUE); else if (strcmp (&opt[2], "no-globals") == 0) ffe_set_is_globals (FALSE); - else if (strcmp (&opt[2], "subscript-check") == 0) + else if (strcmp (&opt[2], "bounds-check") == 0) ffe_set_is_subscript_check (TRUE); - else if (strcmp (&opt[2], "no-subscript-check") == 0) + else if (strcmp (&opt[2], "no-bounds-check") == 0) ffe_set_is_subscript_check (FALSE); - else if (strcmp (&opt[2], "f2c-subscript-check") == 0) + else if (strcmp (&opt[2], "fortran-bounds-check") == 0) ffe_set_is_subscript_check (TRUE); - else if (strcmp (&opt[2], "no-f2c-subscript-check") == 0) + else if (strcmp (&opt[2], "no-fortran-bounds-check") == 0) ffe_set_is_subscript_check (FALSE); else if (strcmp (&opt[2], "typeless-boz") == 0) ffe_set_is_typeless_boz (TRUE); diff --git a/gnu/egcs/gcc/f/version.c b/gnu/egcs/gcc/f/version.c index 6705384221d..9b211b1074b 100644 --- a/gnu/egcs/gcc/f/version.c +++ b/gnu/egcs/gcc/f/version.c @@ -1 +1 @@ -const char *ffe_version_string = "0.5.24-19990513"; +const char *ffe_version_string = "0.5.25 19990526 (prerelease)"; diff --git a/gnu/egcs/gcc/java/ChangeLog b/gnu/egcs/gcc/java/ChangeLog index 61ccfe6b3f9..c396a8003ec 100644 --- a/gnu/egcs/gcc/java/ChangeLog +++ b/gnu/egcs/gcc/java/ChangeLog @@ -1,3 +1,133 @@ +Sat Jun 5 11:46:59 1999 Anthony Green <green@cygnus.com> + + * Make-lang.in (gcjh): More parallel build fixes. + +1999-06-03 Mike Stump <mrs@wrs.com> + + * Make-lang.in (JCF_DUMP_SOURCES, jvgenmain): Fix parallel builds. + +Wed Jun 2 10:44:38 1999 Anthony Green <green@cygnus.com> + + * except.c (link_handler): Chain exception handlers in order. + +Wed Jun 2 10:41:24 1999 Anthony Green <green@cygnus.com> + + * expr.c (expand_byte_code): Fill unreachable bytecode regions + with nops and process as usual in order to always set correct EH + ranges. Emit detailed warnings about unreachable bytecodes. + +Wed Jun 2 10:35:13 1999 Anthony Green <green@cygnus.com> + + * class.c (build_utf8_ref): Mark cinit and utf8 tree nodes as + constant. + +Fri May 28 18:22:45 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * parse.y (lookup_field_wrapper): Unified returned value to NULL + or the searched field decl. + +Fri May 28 11:34:05 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * parse.y (fold_constant_for_init): Convert numerical constant + values to the type of the assigned field. + +Thu May 27 19:57:40 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * expr.c (lookup_field): Relaxed the test on class loading error + detection. + * parse.y (fold_constant_for_init): Enabeled old code. + +Wed May 26 18:06:02 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * parse.y (valid_ref_assignconv_cast_p): Let `_Jv_CheckCast' + decide the validity of the cast of a java.lang.Cloneable reference + to an array. + (patch_conditional_expr): Fixed first argument passed to + binary_numeric_promotion. + +Wed May 26 15:33:06 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * parse.y (qualify_ambiguous_name): Take into account that a + CONVERT_EXPR might specify a type as a WFL. + +Tue May 25 15:06:13 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * parse.y (patch_assignment): Save the rhs before using it as an + argument to _Jv_CheckArrayStore. + +Tue May 25 11:23:59 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * lex.c (java_parse_doc_section): Fixed `tag' buffer size. + +Mon May 24 13:26:00 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * lex.c (java_lex): Accepts `+' or `-' after the beginning of a + floating point litteral only when the exponent indicator has been + parsed. + +Sat May 22 13:54:41 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * parse.y (formal_parameter:): Construct argument tree list + element even if a yet unsupported final parameter was encountered. + +Tue May 18 00:28:58 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * parse.y (finish_method_declaration): Issue errors for native or + abstract methods declared with a method body, as well as for non + native or non abstract methods with no method body. + +1999-05-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * class.c (build_utf8_ref): Initialize variable `field'. + + * decl.c (init_decl_processing): Initialize variable `field'. + + * expr.c (build_known_method_ref): Mark parameters `method_type', + `method_signature' and `arg_list' with ATTRIBUTE_UNUSED. + (process_jvm_instruction): Likewise for parameter `length'. + + * jvspec.c (lang_specific_driver): Mark variables `saw_math', + `saw_libc', `saw_gc', `saw_threadlib' and `saw_libgcj' with + ATTRIBUTE_UNUSED. + + * parse.y (maybe_generate_clinit): Remove unused variable + `has_non_primitive_fields'. + (find_in_imports_on_demand): Initialize variables `node_to_use' + and `cl'. + (patch_binop): Likewise for variable `prom_type'. + (patch_unaryop): Likewise for variable `prom_type'. + + * verify.c (verify_jvm_instructions): Likewise for variable `last'. + + * xref.c (xref_table): Add missing initializer. + +1999-05-14 Tom Tromey <tromey@cygnus.com> + + * java-except.h (struct eh_range): Removed unused `next' member. + * verify.c (verify_jvm_instructions): Call check_nested_ranges + after adding all exception handlers. Sort exception ranges in + order of start PC. + (struct pc_index): New structure. + (start_pc_cmp): New function. + * except.c (add_handler): Return `void'. Don't call link_handler; + instead construct an ordinary linked list and do range + coalescing. + (check_nested_ranges): New function. + (link_handler): Changed interface to allow merging of eh_ranges. + Split overlapping ranges. Return `void'. + +Mon May 17 19:20:24 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * parse.y (constructor_block_end:): New rule, tagged <node>. + (constructor_body:): Use `constructor_block_end' instead of + `block_end'. + +Mon May 17 18:01:40 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> + + * parse.y (statement_nsi:): Pop `for' statement block. + (java_complete_lhs): Labeled blocks containing no statement are + marked as completing normally. + Fri May 14 12:31:08 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> * xref.c (xref_set_current_fp): New function, defined. @@ -43,13 +173,13 @@ Thu May 13 13:23:38 1999 Alexandre Petit-Bianco <apbianco@cygnus.com> * xref.h (xref_get_data): New function, declared. (XREF_GET_DATA): Use xref_get_data. -1999-05-13 Kaveh R. Ghazi <ghazi@snafu.rutgers.edu> +1999-05-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * gjavah.c (print_include): Cast the result of `strlen' to int when comparing against a signed value. (add_namelet): Likewise. -1999-05-12 Kaveh R. Ghazi <ghazi@snafu.rutgers.edu> +1999-05-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * expr.c (expand_invoke): Mark parameter `nargs' with ATTRIBUTE_UNUSED. @@ -1545,7 +1675,7 @@ Sat Dec 12 20:13:19 1998 Per Bothner <bothner@cygnus.com> * parse.y (java_complete_expand_methods): Call write_classfile here, and not in java_expand_classes (which only gets first class). -Sat Dec 12 19:46:04 1998 Alexandre Petit-Bianco <apbianco@sendai.cygnus.com> +Sat Dec 12 19:46:04 1998 Alexandre Petit-Bianco <apbianco@cygnus.com> * parse.y (<type_declaration>): Do maybe_generate_clinit last. (register_fields): If a static fields has an initializer, just @@ -1582,7 +1712,7 @@ Sat Dec 12 19:21:11 1998 Per Bothner <bothner@cygnus.com> * class.c (make_class_data): Renamed dtable -> vtable, and dtable_method_count -> vtable_method_count. -Thu Dec 10 20:00:54 1998 Alexandre Petit-Bianco <apbianco@sendai.cygnus.com> +Thu Dec 10 20:00:54 1998 Alexandre Petit-Bianco <apbianco@cygnus.com> * decl.c (long_zero_node, float_zero_node, double_zero_node): New global variables, initialized. @@ -3333,7 +3463,7 @@ Thu Sep 3 18:04:09 1998 Per Bothner <bothner@cygnus.com> * gjavah.c: Support new -prepend -add -append flags. (print_method_info): Method is not virtual if class is final. -Thu Sep 3 12:03:53 1998 Alexandre Petit-Bianco <apbianco@sendai.cygnus.com> +Thu Sep 3 12:03:53 1998 Alexandre Petit-Bianco <apbianco@cygnus.com> * jv-scan.c: Fixed copyright assignment. * keyword.gperf: Likewise. diff --git a/gnu/egcs/gcc/java/Make-lang.in b/gnu/egcs/gcc/java/Make-lang.in index 557001bcc94..5c9bf1349c2 100644 --- a/gnu/egcs/gcc/java/Make-lang.in +++ b/gnu/egcs/gcc/java/Make-lang.in @@ -97,7 +97,7 @@ $(GCJ)-cross$(exeext): $(GCJ)$(exeext) # Dependencies here must be kept in sync with dependencies in Makefile.in. jvgenmain$(exeext): $(srcdir)/java/jvgenmain.c $(srcdir)/java/mangle.c \ - $(OBSTACK) $(LIBDEPS) + $(OBSTACK) $(LIBDEPS) $(TREE_H) cd java && $(MAKE) $(FLAGS_TO_PASS) $(JAVA_FLAGS_TO_PASS) ../jvgenmain$(exeext) # This must be kept in sync with dependencies in Makefile.in. @@ -107,7 +107,7 @@ GCJH_SOURCES = $(srcdir)/java/gjavah.c $(srcdir)/java/jcf-io.c \ $(srcdir)/java/javaop.def $(srcdir)/java/jcf-depend.c \ $(srcdir)/java/jcf-path.c -gcjh$(exeext): $(GCJH_SOURCES) $(LIBDEPS) +gcjh$(exeext): $(GCJH_SOURCES) $(LIBDEPS) $(TREE_H) cd java && $(MAKE) $(FLAGS_TO_PASS) $(JAVA_FLAGS_TO_PASS) ../gcjh$(exeext) # This must be kept in sync with dependencies in Makefile.in. @@ -119,7 +119,7 @@ jv-scan$(exeext): $(JV_SCAN_SOURCES) stamp-objlist $(LIBDEPS) # This must be kept in sync with dependencies in Makefile.in. JCF_DUMP_SOURCES = $(srcdir)/java/jcf-dump.c $(srcdir)/java/jcf-io.c \ - $(srcdir)/java/zextract.c $(srcdir)/../libiberty/memmove.c + $(srcdir)/java/zextract.c $(srcdir)/../libiberty/memmove.c $(TREE_H) jcf-dump$(exeext): $(JCF_DUMP_SOURCES) cd java && $(MAKE) $(FLAGS_TO_PASS) $(JAVA_FLAGS_TO_PASS) ../jcf-dump$(exeext) diff --git a/gnu/egcs/gcc/java/class.c b/gnu/egcs/gcc/java/class.c index 2e00e74eb47..8217a950768 100644 --- a/gnu/egcs/gcc/java/class.c +++ b/gnu/egcs/gcc/java/class.c @@ -559,7 +559,7 @@ build_utf8_ref (name) int name_len = IDENTIFIER_LENGTH(name); char buf[60]; char *buf_ptr; - tree ctype, field, str_type, cinit, string; + tree ctype, field = NULL_TREE, str_type, cinit, string; static int utf8_count = 0; int name_hash; tree ref = IDENTIFIER_UTF8_REF (name); @@ -583,6 +583,7 @@ build_utf8_ref (name) TREE_TYPE (string) = str_type; PUSH_FIELD_VALUE (cinit, "data", string); FINISH_RECORD_CONSTRUCTOR (cinit); + TREE_CONSTANT (cinit) = 1; /* Build a unique identifier based on buf. */ sprintf(buf, "_Utf%d", ++utf8_count); @@ -608,6 +609,7 @@ build_utf8_ref (name) DECL_ARTIFICIAL (decl) = 1; DECL_IGNORED_P (decl) = 1; TREE_READONLY (decl) = 1; + TREE_THIS_VOLATILE (decl) = 0; DECL_INITIAL (decl) = cinit; TREE_CHAIN (decl) = utf8_decl_list; layout_decl (decl, 0); diff --git a/gnu/egcs/gcc/java/decl.c b/gnu/egcs/gcc/java/decl.c index 625ba8a5bea..de03e5fd007 100644 --- a/gnu/egcs/gcc/java/decl.c +++ b/gnu/egcs/gcc/java/decl.c @@ -432,7 +432,7 @@ void init_decl_processing () { register tree endlink; - tree field; + tree field = NULL_TREE; tree t; current_function_decl = NULL; diff --git a/gnu/egcs/gcc/java/except.c b/gnu/egcs/gcc/java/except.c index 8fbf0b60e06..0e6eb398f8f 100644 --- a/gnu/egcs/gcc/java/except.c +++ b/gnu/egcs/gcc/java/except.c @@ -108,51 +108,102 @@ find_handler (pc) return find_handler_in_range (pc, h, cache_next_child); } -#if 0 -first_child; -next_sibling; -outer; -#endif +/* Recursive helper routine for check_nested_ranges. */ -/* Recursive helper routine for add_handler. */ - -static int -link_handler (start_pc, end_pc, handler, type, outer) - int start_pc, end_pc; - tree handler; - tree type; - struct eh_range *outer; +static void +link_handler (range, outer) + struct eh_range *range, *outer; { struct eh_range **ptr; - if (start_pc < outer->start_pc || end_pc > outer->end_pc) - return 0; /* invalid or non-nested exception range */ - if (start_pc == outer->start_pc && end_pc == outer->end_pc) + + if (range->start_pc == outer->start_pc && range->end_pc == outer->end_pc) + { + outer->handlers = chainon (range->handlers, outer->handlers); + return; + } + + /* If the new range completely encloses the `outer' range, then insert it + between the outer range and its parent. */ + if (range->start_pc <= outer->start_pc && range->end_pc >= outer->end_pc) + { + range->outer = outer->outer; + range->next_sibling = NULL; + range->first_child = outer; + outer->outer->first_child = range; + outer->outer = range; + return; + } + + /* Handle overlapping ranges by splitting the new range. */ + if (range->start_pc < outer->start_pc || range->end_pc > outer->end_pc) { - outer->handlers = tree_cons (type, handler, outer->handlers); - return 1; + struct eh_range *h + = (struct eh_range *) oballoc (sizeof (struct eh_range)); + if (range->start_pc < outer->start_pc) + { + h->start_pc = range->start_pc; + h->end_pc = outer->start_pc; + range->start_pc = outer->start_pc; + } + else + { + h->start_pc = outer->end_pc; + h->end_pc = range->end_pc; + range->end_pc = outer->end_pc; + } + h->first_child = NULL; + h->outer = NULL; + h->handlers = build_tree_list (TREE_PURPOSE (range->handlers), + TREE_VALUE (range->handlers)); + h->next_sibling = NULL; + /* Restart both from the top to avoid having to make this + function smart about reentrancy. */ + link_handler (h, &whole_range); + link_handler (range, &whole_range); + return; } + ptr = &outer->first_child; for (;; ptr = &(*ptr)->next_sibling) { - if (*ptr == NULL || end_pc <= (*ptr)->start_pc) + if (*ptr == NULL || range->end_pc <= (*ptr)->start_pc) { - struct eh_range *h = (struct eh_range *) - oballoc (sizeof (struct eh_range)); - h->start_pc = start_pc; - h->end_pc = end_pc; - h->next_sibling = *ptr; - h->first_child = NULL; - h->outer = outer; - h->handlers = build_tree_list (type, handler); - *ptr = h; - return 1; + range->next_sibling = *ptr; + range->first_child = NULL; + range->outer = outer; + *ptr = range; + return; + } + else if (range->start_pc < (*ptr)->end_pc) + { + link_handler (range, *ptr); + return; } - else if (start_pc < (*ptr)->end_pc) - return link_handler (start_pc, end_pc, handler, type, *ptr); /* end_pc > (*ptr)->start_pc && start_pc >= (*ptr)->end_pc. */ } } +/* The first pass of exception range processing (calling add_handler) + constructs a linked list of exception ranges. We turn this into + the data structure expected by the rest of the code, and also + ensure that exception ranges are properly nested. */ + +void +handle_nested_ranges () +{ + struct eh_range *ptr, *next; + + ptr = whole_range.first_child; + whole_range.first_child = NULL; + for (; ptr; ptr = next) + { + next = ptr->next_sibling; + ptr->next_sibling = NULL; + link_handler (ptr, &whole_range); + } +} + + /* Called to re-initialize the exception machinery for a new method. */ void @@ -174,13 +225,54 @@ java_set_exception_lang_code () set_exception_version_code (1); } -int +/* Add an exception range. If we already have an exception range + which has the same handler and label, and the new range overlaps + that one, then we simply extend the existing range. Some bytecode + obfuscators generate seemingly nonoverlapping exception ranges + which, when coalesced, do in fact nest correctly. + + This constructs an ordinary linked list which check_nested_ranges() + later turns into the data structure we actually want. + + We expect the input to come in order of increasing START_PC. This + function doesn't attempt to detect the case where two previously + added disjoint ranges could be coalesced by a new range; that is + what the sorting counteracts. */ + +void add_handler (start_pc, end_pc, handler, type) int start_pc, end_pc; tree handler; tree type; { - return link_handler (start_pc, end_pc, handler, type, &whole_range); + struct eh_range *ptr, *prev = NULL, *h; + + for (ptr = whole_range.first_child; ptr; ptr = ptr->next_sibling) + { + if (start_pc >= ptr->start_pc + && start_pc <= ptr->end_pc + && TREE_PURPOSE (ptr->handlers) == type + && TREE_VALUE (ptr->handlers) == handler) + { + /* Already found an overlapping range, so coalesce. */ + ptr->end_pc = MAX (ptr->end_pc, end_pc); + return; + } + prev = ptr; + } + + h = (struct eh_range *) oballoc (sizeof (struct eh_range)); + h->start_pc = start_pc; + h->end_pc = end_pc; + h->first_child = NULL; + h->outer = NULL; + h->handlers = build_tree_list (type, handler); + h->next_sibling = NULL; + + if (prev == NULL) + whole_range.first_child = h; + else + prev->next_sibling = h; } diff --git a/gnu/egcs/gcc/java/expr.c b/gnu/egcs/gcc/java/expr.c index d975c42c5ed..9beb724ea37 100644 --- a/gnu/egcs/gcc/java/expr.c +++ b/gnu/egcs/gcc/java/expr.c @@ -1162,7 +1162,7 @@ lookup_field (typep, name) if (CLASS_P (*typep) && !CLASS_LOADED_P (*typep)) { load_class (*typep, 1); - if (TREE_CODE (TYPE_SIZE (*typep)) == ERROR_MARK) + if (!TYPE_SIZE (*typep) || TREE_CODE (TYPE_SIZE (*typep)) == ERROR_MARK) return error_mark_node; } do @@ -1431,7 +1431,8 @@ tree dtable_ident = NULL_TREE; tree build_known_method_ref (method, method_type, self_type, method_signature, arg_list) - tree method, method_type, self_type, method_signature, arg_list; + tree method, method_type ATTRIBUTE_UNUSED, self_type, + method_signature ATTRIBUTE_UNUSED, arg_list ATTRIBUTE_UNUSED; { tree func; if (is_compiled_class (self_type)) @@ -1985,6 +1986,7 @@ expand_byte_code (jcf, method) int i; int saw_index; unsigned char *linenumber_pointer; + int dead_code_index = -1; #undef RET /* Defined by config/i386/i386.h */ #undef AND /* Causes problems with opcodes for iand and land. */ @@ -2163,15 +2165,29 @@ expand_byte_code (jcf, method) if (! (instruction_bits [PC] & BCODE_VERIFIED)) { - /* never executed - skip */ - warning ("Some bytecode operations (starting at pc %d) can never be executed", PC); - while (PC < length - && ! (instruction_bits [PC] & BCODE_VERIFIED)) - PC++; - continue; + if (dead_code_index == -1) + { + /* This is the start of a region of unreachable bytecodes. + They still need to be processed in order for EH ranges + to get handled correctly. However, we can simply + replace these bytecodes with nops. */ + dead_code_index = PC; + } + + /* Turn this bytecode into a nop. */ + byte_ops[PC] = 0x0; + } + else + { + if (dead_code_index != -1) + { + /* We've just reached the end of a region of dead code. */ + warning ("Unreachable bytecode from %d to before %d.", + dead_code_index, PC); + dead_code_index = -1; + } } - /* Handle possible line number entry for this PC. This code handles out-of-order and multiple linenumbers per PC, @@ -2203,6 +2219,13 @@ expand_byte_code (jcf, method) maybe_poplevels (PC); maybe_end_try (PC); } /* for */ + + if (dead_code_index != -1) + { + /* We've just reached the end of a region of dead code. */ + warning ("Unreachable bytecode from %d to the end of the method.", + dead_code_index); + } } static void @@ -2230,7 +2253,7 @@ int process_jvm_instruction (PC, byte_ops, length) int PC; unsigned char* byte_ops; - long length; + long length ATTRIBUTE_UNUSED; { const char *opname; /* Temporary ??? */ int oldpc = PC; /* PC at instruction start. */ diff --git a/gnu/egcs/gcc/java/java-except.h b/gnu/egcs/gcc/java/java-except.h index cdc123d744a..07b3feb3046 100644 --- a/gnu/egcs/gcc/java/java-except.h +++ b/gnu/egcs/gcc/java/java-except.h @@ -47,11 +47,6 @@ struct eh_range /* The next child of outer, in address order. */ struct eh_range *next_sibling; - -#if 0 - /* Next handler, sorted by ascending start_pc then descending end_pc. */ - tree next; -#endif }; /* A dummy range that represents the entire method. */ @@ -69,6 +64,8 @@ extern void maybe_start_try PROTO ((int)); extern void maybe_end_try PROTO ((int)); -extern int add_handler PROTO ((int, int, tree, tree)); +extern void add_handler PROTO ((int, int, tree, tree)); + +extern void handle_nested_ranges PROTO ((void)); extern void expand_resume_after_catch PROTO ((void)); diff --git a/gnu/egcs/gcc/java/jvspec.c b/gnu/egcs/gcc/java/jvspec.c index 95330da332d..815ff3fd8bc 100644 --- a/gnu/egcs/gcc/java/jvspec.c +++ b/gnu/egcs/gcc/java/jvspec.c @@ -145,19 +145,19 @@ lang_specific_driver (fn, in_argc, in_argv, in_added_libraries) int saw_speclang = 0; /* "-lm" or "-lmath" if it appears on the command line. */ - char *saw_math = 0; + char *saw_math ATTRIBUTE_UNUSED = 0; /* "-lc" if it appears on the command line. */ - char *saw_libc = 0; + char *saw_libc ATTRIBUTE_UNUSED = 0; /* "-lgcjgc" if it appears on the command line. */ - char *saw_gc = 0; + char *saw_gc ATTRIBUTE_UNUSED = 0; /* Saw `-l' option for the thread library. */ - char *saw_threadlib = 0; + char *saw_threadlib ATTRIBUTE_UNUSED = 0; /* Saw `-lgcj' on command line. */ - int saw_libgcj = 0; + int saw_libgcj ATTRIBUTE_UNUSED = 0; /* Saw -C or -o option, respectively. */ int saw_C = 0; diff --git a/gnu/egcs/gcc/java/lex.c b/gnu/egcs/gcc/java/lex.c index 18d873fb135..fbaa23d80f0 100644 --- a/gnu/egcs/gcc/java/lex.c +++ b/gnu/egcs/gcc/java/lex.c @@ -427,7 +427,7 @@ java_parse_doc_section (c) /* We're parsing @deprecated */ if (valid_tag && (c == '@')) { - char tag [10]; + char tag [11]; int tag_index = 0; while (tag_index < 10 && c != UEOF && c != ' ' && c != '\n') @@ -741,7 +741,7 @@ java_lex (java_lval) stage = 4; /* So we fall through */ } - if ((c=='-' || c =='+') && stage < 3) + if ((c=='-' || c =='+') && stage == 2) { stage = 3; literal_token [literal_index++] = c; diff --git a/gnu/egcs/gcc/java/parse-scan.c b/gnu/egcs/gcc/java/parse-scan.c index fcc19aa63cc..6340ee8795f 100644 --- a/gnu/egcs/gcc/java/parse-scan.c +++ b/gnu/egcs/gcc/java/parse-scan.c @@ -1375,7 +1375,7 @@ static const short yycheck[] = { 3, #define YYPURE 1 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/x1/java/install/share/bison.simple" +#line 3 "/usr/cygnus/gnupro-98r2/share/bison.simple" /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. @@ -1568,7 +1568,7 @@ __yy_memcpy (char *to, char *from, int count) #endif #endif -#line 196 "/x1/java/install/share/bison.simple" +#line 196 "/usr/cygnus/gnupro-98r2/share/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. @@ -2156,7 +2156,7 @@ case 337: break;} } /* the action file gets copied in in place of this dollarsign */ -#line 498 "/x1/java/install/share/bison.simple" +#line 498 "/usr/cygnus/gnupro-98r2/share/bison.simple" yyvsp -= yylen; yyssp -= yylen; diff --git a/gnu/egcs/gcc/java/parse.c b/gnu/egcs/gcc/java/parse.c index 92ed988cf24..53fc6dc4963 100644 --- a/gnu/egcs/gcc/java/parse.c +++ b/gnu/egcs/gcc/java/parse.c @@ -402,11 +402,11 @@ typedef union { -#define YYFINAL 775 +#define YYFINAL 777 #define YYFLAG -32768 #define YYNTBASE 110 -#define YYTRANSLATE(x) ((unsigned)(x) <= 364 ? yytranslate[x] : 265) +#define YYTRANSLATE(x) ((unsigned)(x) <= 364 ? yytranslate[x] : 266) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -465,41 +465,42 @@ static const short yyprhs[] = { 0, 363, 365, 369, 373, 376, 380, 383, 387, 388, 391, 394, 396, 400, 404, 406, 409, 411, 414, 418, 420, 421, 425, 428, 432, 436, 441, 444, 448, 452, 457, - 462, 468, 476, 483, 485, 487, 488, 493, 494, 500, - 501, 507, 508, 515, 519, 524, 527, 531, 534, 538, - 541, 545, 547, 550, 552, 554, 556, 558, 560, 563, - 566, 569, 573, 578, 580, 584, 588, 591, 595, 597, - 599, 601, 604, 606, 608, 610, 613, 616, 620, 622, - 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, - 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, - 664, 666, 669, 672, 675, 678, 681, 684, 687, 690, - 694, 699, 704, 710, 715, 721, 728, 736, 743, 745, - 747, 749, 751, 753, 755, 757, 763, 766, 770, 775, - 783, 791, 792, 796, 801, 804, 808, 814, 817, 821, - 825, 830, 832, 835, 838, 840, 843, 847, 850, 853, - 857, 860, 865, 868, 871, 875, 880, 883, 885, 893, - 901, 908, 912, 918, 923, 931, 938, 941, 944, 948, - 951, 952, 954, 956, 959, 960, 962, 964, 968, 972, - 975, 979, 982, 986, 989, 993, 996, 1000, 1003, 1007, - 1010, 1014, 1018, 1021, 1025, 1031, 1037, 1040, 1045, 1049, - 1051, 1055, 1059, 1064, 1067, 1069, 1072, 1075, 1080, 1083, - 1087, 1092, 1095, 1098, 1100, 1102, 1104, 1106, 1110, 1112, - 1114, 1116, 1118, 1122, 1126, 1130, 1134, 1138, 1142, 1146, - 1150, 1156, 1161, 1168, 1174, 1179, 1185, 1191, 1198, 1202, - 1206, 1211, 1217, 1220, 1224, 1228, 1232, 1234, 1238, 1242, - 1246, 1250, 1255, 1260, 1265, 1270, 1274, 1278, 1280, 1283, - 1287, 1291, 1294, 1297, 1301, 1305, 1309, 1313, 1316, 1320, - 1325, 1331, 1338, 1344, 1351, 1356, 1361, 1366, 1371, 1375, - 1380, 1384, 1389, 1391, 1393, 1395, 1397, 1400, 1403, 1405, - 1407, 1410, 1413, 1415, 1418, 1421, 1424, 1427, 1430, 1433, - 1435, 1438, 1441, 1443, 1446, 1449, 1455, 1460, 1465, 1471, - 1476, 1479, 1485, 1490, 1496, 1498, 1502, 1506, 1510, 1514, - 1518, 1522, 1524, 1528, 1532, 1536, 1540, 1542, 1546, 1550, - 1554, 1558, 1562, 1566, 1568, 1572, 1576, 1580, 1584, 1588, - 1592, 1596, 1600, 1604, 1608, 1610, 1614, 1618, 1622, 1626, - 1628, 1632, 1636, 1638, 1642, 1646, 1648, 1652, 1656, 1658, - 1662, 1666, 1668, 1672, 1676, 1678, 1684, 1689, 1693, 1699, - 1701, 1703, 1707, 1711, 1713, 1715, 1717, 1719, 1721, 1723 + 459, 462, 467, 473, 481, 488, 490, 492, 493, 498, + 499, 505, 506, 512, 513, 520, 524, 529, 532, 536, + 539, 543, 546, 550, 552, 555, 557, 559, 561, 563, + 565, 568, 571, 574, 578, 583, 585, 589, 593, 596, + 600, 602, 604, 606, 609, 611, 613, 615, 618, 621, + 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, + 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, + 665, 667, 669, 671, 674, 677, 680, 683, 686, 689, + 692, 695, 699, 704, 709, 715, 720, 726, 733, 741, + 748, 750, 752, 754, 756, 758, 760, 762, 768, 771, + 775, 780, 788, 796, 797, 801, 806, 809, 813, 819, + 822, 826, 830, 835, 837, 840, 843, 845, 848, 852, + 855, 858, 862, 865, 870, 873, 876, 880, 885, 888, + 890, 898, 906, 913, 917, 923, 928, 936, 943, 946, + 949, 953, 956, 957, 959, 961, 964, 965, 967, 969, + 973, 977, 980, 984, 987, 991, 994, 998, 1001, 1005, + 1008, 1012, 1015, 1019, 1023, 1026, 1030, 1036, 1042, 1045, + 1050, 1054, 1056, 1060, 1064, 1069, 1072, 1074, 1077, 1080, + 1085, 1088, 1092, 1097, 1100, 1103, 1105, 1107, 1109, 1111, + 1115, 1117, 1119, 1121, 1123, 1127, 1131, 1135, 1139, 1143, + 1147, 1151, 1155, 1161, 1166, 1173, 1179, 1184, 1190, 1196, + 1203, 1207, 1211, 1216, 1222, 1225, 1229, 1233, 1237, 1239, + 1243, 1247, 1251, 1255, 1260, 1265, 1270, 1275, 1279, 1283, + 1285, 1288, 1292, 1296, 1299, 1302, 1306, 1310, 1314, 1318, + 1321, 1325, 1330, 1336, 1343, 1349, 1356, 1361, 1366, 1371, + 1376, 1380, 1385, 1389, 1394, 1396, 1398, 1400, 1402, 1405, + 1408, 1410, 1412, 1415, 1418, 1420, 1423, 1426, 1429, 1432, + 1435, 1438, 1440, 1443, 1446, 1448, 1451, 1454, 1460, 1465, + 1470, 1476, 1481, 1484, 1490, 1495, 1501, 1503, 1507, 1511, + 1515, 1519, 1523, 1527, 1529, 1533, 1537, 1541, 1545, 1547, + 1551, 1555, 1559, 1563, 1567, 1571, 1573, 1577, 1581, 1585, + 1589, 1593, 1597, 1601, 1605, 1609, 1613, 1615, 1619, 1623, + 1627, 1631, 1633, 1637, 1641, 1643, 1647, 1651, 1653, 1657, + 1661, 1663, 1667, 1671, 1673, 1677, 1681, 1683, 1689, 1694, + 1698, 1704, 1706, 1708, 1712, 1716, 1718, 1720, 1722, 1724, + 1726, 1728 }; static const short yyrhs[] = { 123, @@ -517,7 +518,7 @@ static const short yyrhs[] = { 123, 55, 119, 99, 0, 55, 1, 0, 55, 119, 1, 0, 55, 119, 101, 5, 99, 0, 55, 119, 101, 1, 0, 55, 119, 101, 5, 1, 0, 132, 0, - 165, 0, 99, 0, 1, 0, 44, 0, 131, 44, + 166, 0, 99, 0, 1, 0, 44, 0, 131, 44, 0, 0, 131, 67, 122, 135, 136, 133, 138, 0, 0, 67, 122, 135, 136, 134, 138, 0, 131, 67, 1, 0, 67, 1, 0, 67, 122, 1, 0, 131, @@ -526,13 +527,13 @@ static const short yyrhs[] = { 123, 1, 0, 117, 0, 137, 100, 117, 0, 137, 100, 1, 0, 95, 96, 0, 95, 139, 96, 0, 140, 0, 139, 140, 0, 141, 0, 156, 0, 158, 0, - 178, 0, 142, 0, 142, 99, 0, 147, 0, 132, - 0, 165, 0, 112, 143, 99, 0, 131, 112, 143, + 179, 0, 142, 0, 142, 99, 0, 147, 0, 132, + 0, 166, 0, 112, 143, 99, 0, 131, 112, 143, 99, 0, 144, 0, 143, 100, 144, 0, 143, 100, 1, 0, 145, 0, 145, 92, 146, 0, 145, 92, 1, 0, 145, 92, 146, 1, 0, 122, 0, 145, 97, 98, 0, 122, 1, 0, 145, 97, 1, 0, - 145, 98, 1, 0, 263, 0, 176, 0, 0, 149, + 145, 98, 1, 0, 264, 0, 177, 0, 0, 149, 148, 155, 0, 149, 1, 0, 112, 150, 153, 0, 59, 150, 153, 0, 131, 112, 150, 153, 0, 131, 59, 150, 153, 0, 112, 1, 0, 131, 112, 1, @@ -543,139 +544,139 @@ static const short yyrhs[] = { 123, 1, 0, 112, 145, 0, 131, 112, 145, 0, 112, 1, 0, 131, 112, 1, 0, 0, 53, 154, 0, 53, 1, 0, 116, 0, 154, 100, 116, 0, 154, - 100, 1, 0, 178, 0, 178, 99, 0, 99, 0, - 157, 178, 0, 157, 178, 99, 0, 44, 0, 0, + 100, 1, 0, 179, 0, 179, 99, 0, 99, 0, + 157, 179, 0, 157, 179, 99, 0, 44, 0, 0, 160, 159, 162, 0, 161, 153, 0, 131, 161, 153, 0, 120, 93, 94, 0, 120, 93, 151, 94, 0, - 179, 180, 0, 179, 163, 180, 0, 179, 181, 180, - 0, 179, 163, 181, 180, 0, 164, 93, 94, 99, - 0, 164, 93, 232, 94, 99, 0, 119, 101, 65, - 93, 232, 94, 99, 0, 119, 101, 65, 93, 94, - 99, 0, 76, 0, 65, 0, 0, 61, 122, 166, - 171, 0, 0, 131, 61, 122, 167, 171, 0, 0, - 61, 122, 170, 168, 171, 0, 0, 131, 61, 122, - 170, 169, 171, 0, 61, 122, 1, 0, 131, 61, - 122, 1, 0, 63, 117, 0, 170, 100, 117, 0, - 63, 1, 0, 170, 100, 1, 0, 95, 96, 0, - 95, 172, 96, 0, 173, 0, 172, 173, 0, 174, - 0, 175, 0, 132, 0, 165, 0, 142, 0, 149, - 99, 0, 149, 1, 0, 95, 96, 0, 95, 177, - 96, 0, 95, 177, 100, 96, 0, 146, 0, 177, - 100, 146, 0, 177, 100, 1, 0, 95, 96, 0, - 179, 181, 180, 0, 95, 0, 96, 0, 182, 0, - 181, 182, 0, 183, 0, 185, 0, 132, 0, 184, - 99, 0, 112, 143, 0, 131, 112, 143, 0, 187, - 0, 190, 0, 194, 0, 195, 0, 206, 0, 210, - 0, 187, 0, 191, 0, 196, 0, 207, 0, 211, - 0, 178, 0, 188, 0, 192, 0, 197, 0, 209, - 0, 217, 0, 218, 0, 219, 0, 221, 0, 220, - 0, 223, 0, 99, 0, 122, 88, 0, 189, 185, - 0, 122, 1, 0, 189, 186, 0, 193, 99, 0, - 1, 99, 0, 1, 95, 0, 1, 96, 0, 164, - 93, 1, 0, 164, 93, 94, 1, 0, 164, 93, - 232, 1, 0, 164, 93, 232, 94, 1, 0, 119, - 101, 65, 1, 0, 119, 101, 65, 93, 1, 0, - 119, 101, 65, 93, 232, 1, 0, 119, 101, 65, - 93, 232, 94, 1, 0, 119, 101, 65, 93, 94, - 1, 0, 260, 0, 244, 0, 245, 0, 241, 0, - 242, 0, 238, 0, 230, 0, 48, 93, 263, 94, - 185, 0, 48, 1, 0, 48, 93, 1, 0, 48, - 93, 263, 1, 0, 48, 93, 263, 94, 186, 56, - 185, 0, 48, 93, 263, 94, 186, 56, 186, 0, - 0, 199, 198, 200, 0, 68, 93, 263, 94, 0, - 68, 1, 0, 68, 93, 1, 0, 68, 93, 263, - 94, 1, 0, 95, 96, 0, 95, 203, 96, 0, - 95, 201, 96, 0, 95, 201, 203, 96, 0, 202, - 0, 201, 202, 0, 203, 181, 0, 204, 0, 203, - 204, 0, 62, 264, 88, 0, 47, 88, 0, 62, - 1, 0, 62, 264, 1, 0, 47, 1, 0, 66, - 93, 263, 94, 0, 205, 185, 0, 66, 1, 0, - 66, 93, 1, 0, 66, 93, 263, 1, 0, 205, - 186, 0, 51, 0, 208, 185, 66, 93, 263, 94, - 99, 0, 213, 99, 263, 99, 215, 94, 185, 0, - 213, 99, 99, 215, 94, 185, 0, 213, 99, 1, - 0, 213, 99, 263, 99, 1, 0, 213, 99, 99, - 1, 0, 213, 99, 263, 99, 215, 94, 186, 0, - 213, 99, 99, 215, 94, 186, 0, 71, 93, 0, - 71, 1, 0, 71, 93, 1, 0, 212, 214, 0, - 0, 216, 0, 184, 0, 216, 1, 0, 0, 216, - 0, 193, 0, 216, 100, 193, 0, 216, 100, 1, - 0, 54, 99, 0, 54, 122, 99, 0, 54, 1, - 0, 54, 122, 1, 0, 73, 99, 0, 73, 122, - 99, 0, 73, 1, 0, 73, 122, 1, 0, 58, - 99, 0, 58, 263, 99, 0, 58, 1, 0, 58, - 263, 1, 0, 49, 263, 99, 0, 49, 1, 0, - 49, 263, 1, 0, 222, 93, 263, 94, 178, 0, - 222, 93, 263, 94, 1, 0, 222, 1, 0, 222, - 93, 1, 94, 0, 222, 93, 1, 0, 44, 0, - 70, 178, 224, 0, 70, 178, 227, 0, 70, 178, - 224, 227, 0, 70, 1, 0, 225, 0, 224, 225, - 0, 226, 178, 0, 60, 93, 152, 94, 0, 60, - 1, 0, 60, 93, 1, 0, 60, 93, 1, 94, - 0, 64, 178, 0, 64, 1, 0, 229, 0, 233, - 0, 111, 0, 76, 0, 93, 263, 94, 0, 230, - 0, 237, 0, 238, 0, 239, 0, 119, 101, 67, - 0, 113, 101, 67, 0, 59, 101, 67, 0, 119, - 101, 76, 0, 93, 263, 1, 0, 119, 101, 1, - 0, 113, 101, 1, 0, 59, 101, 1, 0, 72, - 116, 93, 232, 94, 0, 72, 116, 93, 94, 0, - 72, 116, 93, 232, 94, 138, 0, 72, 116, 93, - 94, 138, 0, 231, 122, 93, 94, 0, 231, 122, - 93, 94, 138, 0, 231, 122, 93, 232, 94, 0, - 231, 122, 93, 232, 94, 138, 0, 72, 1, 99, - 0, 72, 116, 1, 0, 72, 116, 93, 1, 0, - 72, 116, 93, 232, 1, 0, 231, 1, 0, 231, - 122, 1, 0, 119, 101, 72, 0, 228, 101, 72, - 0, 263, 0, 232, 100, 263, 0, 232, 100, 1, - 0, 72, 113, 234, 0, 72, 115, 234, 0, 72, - 113, 234, 236, 0, 72, 115, 234, 236, 0, 72, - 115, 236, 176, 0, 72, 113, 236, 176, 0, 72, - 1, 98, 0, 72, 1, 97, 0, 235, 0, 234, - 235, 0, 97, 263, 98, 0, 97, 263, 1, 0, - 97, 1, 0, 97, 98, 0, 236, 97, 98, 0, - 236, 97, 1, 0, 228, 101, 122, 0, 65, 101, - 122, 0, 65, 1, 0, 119, 93, 94, 0, 119, - 93, 232, 94, 0, 228, 101, 122, 93, 94, 0, - 228, 101, 122, 93, 232, 94, 0, 65, 101, 122, - 93, 94, 0, 65, 101, 122, 93, 232, 94, 0, - 65, 101, 1, 94, 0, 65, 101, 1, 101, 0, - 119, 97, 263, 98, 0, 229, 97, 263, 98, 0, - 119, 97, 1, 0, 119, 97, 263, 1, 0, 229, - 97, 1, 0, 229, 97, 263, 1, 0, 228, 0, - 119, 0, 241, 0, 242, 0, 240, 46, 0, 240, - 45, 0, 244, 0, 245, 0, 3, 243, 0, 4, - 243, 0, 246, 0, 3, 1, 0, 4, 1, 0, - 46, 243, 0, 46, 1, 0, 45, 243, 0, 45, - 1, 0, 240, 0, 89, 243, 0, 90, 243, 0, - 247, 0, 89, 1, 0, 90, 1, 0, 93, 113, - 236, 94, 243, 0, 93, 113, 94, 243, 0, 93, - 263, 94, 246, 0, 93, 119, 236, 94, 246, 0, - 93, 113, 97, 1, 0, 93, 1, 0, 93, 113, - 236, 94, 1, 0, 93, 113, 94, 1, 0, 93, - 119, 236, 94, 1, 0, 243, 0, 248, 5, 243, - 0, 248, 6, 243, 0, 248, 7, 243, 0, 248, - 5, 1, 0, 248, 6, 1, 0, 248, 7, 1, - 0, 248, 0, 249, 3, 248, 0, 249, 4, 248, - 0, 249, 3, 1, 0, 249, 4, 1, 0, 249, - 0, 250, 8, 249, 0, 250, 9, 249, 0, 250, - 10, 249, 0, 250, 8, 1, 0, 250, 9, 1, - 0, 250, 10, 1, 0, 250, 0, 251, 20, 250, - 0, 251, 18, 250, 0, 251, 21, 250, 0, 251, - 19, 250, 0, 251, 57, 114, 0, 251, 20, 1, - 0, 251, 18, 1, 0, 251, 21, 1, 0, 251, - 19, 1, 0, 251, 57, 1, 0, 251, 0, 252, - 16, 251, 0, 252, 17, 251, 0, 252, 16, 1, - 0, 252, 17, 1, 0, 252, 0, 253, 11, 252, - 0, 253, 11, 1, 0, 253, 0, 254, 12, 253, - 0, 254, 12, 1, 0, 254, 0, 255, 13, 254, - 0, 255, 13, 1, 0, 255, 0, 256, 14, 255, - 0, 256, 14, 1, 0, 256, 0, 257, 15, 256, - 0, 257, 15, 1, 0, 257, 0, 257, 87, 263, - 88, 258, 0, 257, 87, 88, 1, 0, 257, 87, - 1, 0, 257, 87, 263, 88, 1, 0, 258, 0, - 260, 0, 261, 262, 259, 0, 261, 262, 1, 0, - 119, 0, 237, 0, 239, 0, 91, 0, 92, 0, - 259, 0, 263, 0 + 180, 163, 0, 180, 164, 163, 0, 180, 182, 163, + 0, 180, 164, 182, 163, 0, 181, 0, 181, 99, + 0, 165, 93, 94, 99, 0, 165, 93, 233, 94, + 99, 0, 119, 101, 65, 93, 233, 94, 99, 0, + 119, 101, 65, 93, 94, 99, 0, 76, 0, 65, + 0, 0, 61, 122, 167, 172, 0, 0, 131, 61, + 122, 168, 172, 0, 0, 61, 122, 171, 169, 172, + 0, 0, 131, 61, 122, 171, 170, 172, 0, 61, + 122, 1, 0, 131, 61, 122, 1, 0, 63, 117, + 0, 171, 100, 117, 0, 63, 1, 0, 171, 100, + 1, 0, 95, 96, 0, 95, 173, 96, 0, 174, + 0, 173, 174, 0, 175, 0, 176, 0, 132, 0, + 166, 0, 142, 0, 149, 99, 0, 149, 1, 0, + 95, 96, 0, 95, 178, 96, 0, 95, 178, 100, + 96, 0, 146, 0, 178, 100, 146, 0, 178, 100, + 1, 0, 95, 96, 0, 180, 182, 181, 0, 95, + 0, 96, 0, 183, 0, 182, 183, 0, 184, 0, + 186, 0, 132, 0, 185, 99, 0, 112, 143, 0, + 131, 112, 143, 0, 188, 0, 191, 0, 195, 0, + 196, 0, 207, 0, 211, 0, 188, 0, 192, 0, + 197, 0, 208, 0, 212, 0, 179, 0, 189, 0, + 193, 0, 198, 0, 210, 0, 218, 0, 219, 0, + 220, 0, 222, 0, 221, 0, 224, 0, 99, 0, + 122, 88, 0, 190, 186, 0, 122, 1, 0, 190, + 187, 0, 194, 99, 0, 1, 99, 0, 1, 95, + 0, 1, 96, 0, 165, 93, 1, 0, 165, 93, + 94, 1, 0, 165, 93, 233, 1, 0, 165, 93, + 233, 94, 1, 0, 119, 101, 65, 1, 0, 119, + 101, 65, 93, 1, 0, 119, 101, 65, 93, 233, + 1, 0, 119, 101, 65, 93, 233, 94, 1, 0, + 119, 101, 65, 93, 94, 1, 0, 261, 0, 245, + 0, 246, 0, 242, 0, 243, 0, 239, 0, 231, + 0, 48, 93, 264, 94, 186, 0, 48, 1, 0, + 48, 93, 1, 0, 48, 93, 264, 1, 0, 48, + 93, 264, 94, 187, 56, 186, 0, 48, 93, 264, + 94, 187, 56, 187, 0, 0, 200, 199, 201, 0, + 68, 93, 264, 94, 0, 68, 1, 0, 68, 93, + 1, 0, 68, 93, 264, 94, 1, 0, 95, 96, + 0, 95, 204, 96, 0, 95, 202, 96, 0, 95, + 202, 204, 96, 0, 203, 0, 202, 203, 0, 204, + 182, 0, 205, 0, 204, 205, 0, 62, 265, 88, + 0, 47, 88, 0, 62, 1, 0, 62, 265, 1, + 0, 47, 1, 0, 66, 93, 264, 94, 0, 206, + 186, 0, 66, 1, 0, 66, 93, 1, 0, 66, + 93, 264, 1, 0, 206, 187, 0, 51, 0, 209, + 186, 66, 93, 264, 94, 99, 0, 214, 99, 264, + 99, 216, 94, 186, 0, 214, 99, 99, 216, 94, + 186, 0, 214, 99, 1, 0, 214, 99, 264, 99, + 1, 0, 214, 99, 99, 1, 0, 214, 99, 264, + 99, 216, 94, 187, 0, 214, 99, 99, 216, 94, + 187, 0, 71, 93, 0, 71, 1, 0, 71, 93, + 1, 0, 213, 215, 0, 0, 217, 0, 185, 0, + 217, 1, 0, 0, 217, 0, 194, 0, 217, 100, + 194, 0, 217, 100, 1, 0, 54, 99, 0, 54, + 122, 99, 0, 54, 1, 0, 54, 122, 1, 0, + 73, 99, 0, 73, 122, 99, 0, 73, 1, 0, + 73, 122, 1, 0, 58, 99, 0, 58, 264, 99, + 0, 58, 1, 0, 58, 264, 1, 0, 49, 264, + 99, 0, 49, 1, 0, 49, 264, 1, 0, 223, + 93, 264, 94, 179, 0, 223, 93, 264, 94, 1, + 0, 223, 1, 0, 223, 93, 1, 94, 0, 223, + 93, 1, 0, 44, 0, 70, 179, 225, 0, 70, + 179, 228, 0, 70, 179, 225, 228, 0, 70, 1, + 0, 226, 0, 225, 226, 0, 227, 179, 0, 60, + 93, 152, 94, 0, 60, 1, 0, 60, 93, 1, + 0, 60, 93, 1, 94, 0, 64, 179, 0, 64, + 1, 0, 230, 0, 234, 0, 111, 0, 76, 0, + 93, 264, 94, 0, 231, 0, 238, 0, 239, 0, + 240, 0, 119, 101, 67, 0, 113, 101, 67, 0, + 59, 101, 67, 0, 119, 101, 76, 0, 93, 264, + 1, 0, 119, 101, 1, 0, 113, 101, 1, 0, + 59, 101, 1, 0, 72, 116, 93, 233, 94, 0, + 72, 116, 93, 94, 0, 72, 116, 93, 233, 94, + 138, 0, 72, 116, 93, 94, 138, 0, 232, 122, + 93, 94, 0, 232, 122, 93, 94, 138, 0, 232, + 122, 93, 233, 94, 0, 232, 122, 93, 233, 94, + 138, 0, 72, 1, 99, 0, 72, 116, 1, 0, + 72, 116, 93, 1, 0, 72, 116, 93, 233, 1, + 0, 232, 1, 0, 232, 122, 1, 0, 119, 101, + 72, 0, 229, 101, 72, 0, 264, 0, 233, 100, + 264, 0, 233, 100, 1, 0, 72, 113, 235, 0, + 72, 115, 235, 0, 72, 113, 235, 237, 0, 72, + 115, 235, 237, 0, 72, 115, 237, 177, 0, 72, + 113, 237, 177, 0, 72, 1, 98, 0, 72, 1, + 97, 0, 236, 0, 235, 236, 0, 97, 264, 98, + 0, 97, 264, 1, 0, 97, 1, 0, 97, 98, + 0, 237, 97, 98, 0, 237, 97, 1, 0, 229, + 101, 122, 0, 65, 101, 122, 0, 65, 1, 0, + 119, 93, 94, 0, 119, 93, 233, 94, 0, 229, + 101, 122, 93, 94, 0, 229, 101, 122, 93, 233, + 94, 0, 65, 101, 122, 93, 94, 0, 65, 101, + 122, 93, 233, 94, 0, 65, 101, 1, 94, 0, + 65, 101, 1, 101, 0, 119, 97, 264, 98, 0, + 230, 97, 264, 98, 0, 119, 97, 1, 0, 119, + 97, 264, 1, 0, 230, 97, 1, 0, 230, 97, + 264, 1, 0, 229, 0, 119, 0, 242, 0, 243, + 0, 241, 46, 0, 241, 45, 0, 245, 0, 246, + 0, 3, 244, 0, 4, 244, 0, 247, 0, 3, + 1, 0, 4, 1, 0, 46, 244, 0, 46, 1, + 0, 45, 244, 0, 45, 1, 0, 241, 0, 89, + 244, 0, 90, 244, 0, 248, 0, 89, 1, 0, + 90, 1, 0, 93, 113, 237, 94, 244, 0, 93, + 113, 94, 244, 0, 93, 264, 94, 247, 0, 93, + 119, 237, 94, 247, 0, 93, 113, 97, 1, 0, + 93, 1, 0, 93, 113, 237, 94, 1, 0, 93, + 113, 94, 1, 0, 93, 119, 237, 94, 1, 0, + 244, 0, 249, 5, 244, 0, 249, 6, 244, 0, + 249, 7, 244, 0, 249, 5, 1, 0, 249, 6, + 1, 0, 249, 7, 1, 0, 249, 0, 250, 3, + 249, 0, 250, 4, 249, 0, 250, 3, 1, 0, + 250, 4, 1, 0, 250, 0, 251, 8, 250, 0, + 251, 9, 250, 0, 251, 10, 250, 0, 251, 8, + 1, 0, 251, 9, 1, 0, 251, 10, 1, 0, + 251, 0, 252, 20, 251, 0, 252, 18, 251, 0, + 252, 21, 251, 0, 252, 19, 251, 0, 252, 57, + 114, 0, 252, 20, 1, 0, 252, 18, 1, 0, + 252, 21, 1, 0, 252, 19, 1, 0, 252, 57, + 1, 0, 252, 0, 253, 16, 252, 0, 253, 17, + 252, 0, 253, 16, 1, 0, 253, 17, 1, 0, + 253, 0, 254, 11, 253, 0, 254, 11, 1, 0, + 254, 0, 255, 12, 254, 0, 255, 12, 1, 0, + 255, 0, 256, 13, 255, 0, 256, 13, 1, 0, + 256, 0, 257, 14, 256, 0, 257, 14, 1, 0, + 257, 0, 258, 15, 257, 0, 258, 15, 1, 0, + 258, 0, 258, 87, 264, 88, 259, 0, 258, 87, + 88, 1, 0, 258, 87, 1, 0, 258, 87, 264, + 88, 1, 0, 259, 0, 261, 0, 262, 263, 260, + 0, 262, 263, 1, 0, 119, 0, 238, 0, 240, + 0, 91, 0, 92, 0, 260, 0, 264, 0 }; #endif @@ -694,44 +695,45 @@ static const short yyrline[] = { 0, 796, 798, 802, 805, 812, 818, 826, 828, 830, 832, 834, 838, 840, 844, 851, 852, 856, 859, 861, 863, 865, 867, 869, 871, 873, 880, 883, 885, 894, 896, - 900, 905, 910, 914, 919, 921, 923, 930, 932, 934, - 938, 941, 943, 947, 949, 950, 955, 961, 968, 976, - 983, 986, 989, 993, 996, 1000, 1009, 1011, 1013, 1018, - 1025, 1033, 1035, 1039, 1046, 1056, 1060, 1063, 1066, 1069, - 1072, 1075, 1078, 1081, 1083, 1087, 1093, 1098, 1100, 1104, - 1107, 1111, 1113, 1116, 1118, 1119, 1121, 1125, 1129, 1135, - 1140, 1143, 1145, 1149, 1155, 1159, 1164, 1173, 1177, 1182, - 1194, 1196, 1199, 1201, 1203, 1207, 1211, 1214, 1218, 1220, - 1221, 1222, 1223, 1224, 1228, 1230, 1231, 1232, 1233, 1236, - 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, - 1250, 1255, 1266, 1269, 1273, 1280, 1290, 1296, 1302, 1308, - 1310, 1316, 1318, 1324, 1326, 1328, 1330, 1332, 1336, 1338, - 1339, 1340, 1341, 1342, 1343, 1346, 1352, 1354, 1356, 1360, - 1365, 1370, 1376, 1386, 1392, 1394, 1396, 1403, 1406, 1408, - 1410, 1414, 1416, 1419, 1423, 1425, 1428, 1435, 1441, 1443, - 1445, 1449, 1457, 1460, 1462, 1464, 1468, 1473, 1482, 1487, - 1490, 1497, 1499, 1501, 1505, 1508, 1517, 1524, 1526, 1530, - 1543, 1545, 1551, 1557, 1561, 1563, 1567, 1570, 1572, 1576, - 1579, 1581, 1583, 1587, 1590, 1592, 1594, 1598, 1601, 1603, - 1605, 1609, 1615, 1617, 1621, 1628, 1630, 1632, 1634, 1638, - 1646, 1649, 1651, 1656, 1660, 1662, 1669, 1677, 1694, 1696, - 1698, 1702, 1705, 1710, 1712, 1715, 1717, 1719, 1721, 1722, - 1723, 1724, 1728, 1730, 1732, 1737, 1739, 1741, 1743, 1745, - 1749, 1752, 1757, 1759, 1764, 1765, 1766, 1767, 1768, 1770, - 1772, 1774, 1776, 1778, 1782, 1784, 1787, 1793, 1798, 1802, - 1805, 1807, 1809, 1813, 1815, 1817, 1819, 1823, 1826, 1830, - 1836, 1838, 1846, 1873, 1875, 1879, 1884, 1891, 1895, 1898, - 1900, 1911, 1922, 1927, 1936, 1938, 1942, 1945, 1947, 1952, - 1957, 1962, 1969, 1971, 1972, 1973, 1976, 1981, 1986, 1988, - 1989, 1991, 1993, 1994, 1996, 2000, 2003, 2007, 2010, 2014, - 2016, 2018, 2020, 2021, 2023, 2027, 2036, 2038, 2040, 2053, - 2055, 2061, 2063, 2065, 2069, 2071, 2076, 2081, 2086, 2088, - 2090, 2094, 2096, 2101, 2106, 2108, 2112, 2114, 2119, 2124, - 2129, 2131, 2133, 2137, 2139, 2144, 2149, 2154, 2159, 2161, - 2163, 2165, 2167, 2169, 2173, 2175, 2180, 2185, 2187, 2191, - 2193, 2198, 2202, 2204, 2209, 2213, 2215, 2220, 2224, 2226, - 2231, 2235, 2237, 2242, 2246, 2248, 2253, 2259, 2261, 2265, - 2267, 2270, 2273, 2281, 2283, 2284, 2287, 2289, 2292, 2296 + 900, 905, 910, 914, 919, 924, 926, 933, 935, 937, + 941, 944, 946, 950, 952, 953, 958, 964, 971, 979, + 986, 989, 992, 996, 999, 1003, 1012, 1014, 1016, 1020, + 1022, 1025, 1032, 1040, 1042, 1046, 1053, 1063, 1067, 1070, + 1073, 1076, 1079, 1082, 1085, 1088, 1090, 1094, 1100, 1105, + 1107, 1111, 1114, 1118, 1120, 1123, 1125, 1126, 1128, 1132, + 1136, 1142, 1147, 1150, 1152, 1156, 1162, 1166, 1171, 1180, + 1184, 1189, 1201, 1203, 1206, 1208, 1210, 1214, 1218, 1221, + 1225, 1227, 1228, 1229, 1230, 1231, 1235, 1237, 1238, 1239, + 1240, 1244, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, + 1254, 1255, 1258, 1263, 1274, 1277, 1281, 1288, 1298, 1304, + 1310, 1316, 1318, 1324, 1326, 1332, 1334, 1336, 1338, 1340, + 1344, 1346, 1347, 1348, 1349, 1350, 1351, 1354, 1360, 1362, + 1364, 1368, 1373, 1378, 1384, 1394, 1400, 1402, 1404, 1411, + 1414, 1416, 1418, 1422, 1424, 1427, 1431, 1433, 1436, 1443, + 1449, 1451, 1453, 1457, 1465, 1468, 1470, 1472, 1476, 1481, + 1490, 1495, 1498, 1505, 1507, 1509, 1513, 1516, 1525, 1532, + 1534, 1538, 1551, 1553, 1559, 1565, 1569, 1571, 1575, 1578, + 1580, 1584, 1587, 1589, 1591, 1595, 1598, 1600, 1602, 1606, + 1609, 1611, 1613, 1617, 1623, 1625, 1629, 1636, 1638, 1640, + 1642, 1646, 1654, 1657, 1659, 1664, 1668, 1670, 1677, 1685, + 1702, 1704, 1706, 1710, 1713, 1718, 1720, 1723, 1725, 1727, + 1729, 1730, 1731, 1732, 1736, 1738, 1740, 1745, 1747, 1749, + 1751, 1753, 1757, 1760, 1765, 1767, 1772, 1773, 1774, 1775, + 1776, 1778, 1780, 1782, 1784, 1786, 1790, 1792, 1795, 1801, + 1806, 1810, 1813, 1815, 1817, 1821, 1823, 1825, 1827, 1831, + 1834, 1838, 1844, 1846, 1854, 1881, 1883, 1887, 1892, 1899, + 1903, 1906, 1908, 1919, 1930, 1935, 1944, 1946, 1950, 1953, + 1955, 1960, 1965, 1970, 1977, 1979, 1980, 1981, 1984, 1989, + 1994, 1996, 1997, 1999, 2001, 2002, 2004, 2008, 2011, 2015, + 2018, 2022, 2024, 2026, 2028, 2029, 2031, 2035, 2044, 2046, + 2048, 2061, 2063, 2069, 2071, 2073, 2077, 2079, 2084, 2089, + 2094, 2096, 2098, 2102, 2104, 2109, 2114, 2116, 2120, 2122, + 2127, 2132, 2137, 2139, 2141, 2145, 2147, 2152, 2157, 2162, + 2167, 2169, 2171, 2173, 2175, 2177, 2181, 2183, 2188, 2193, + 2195, 2199, 2201, 2206, 2210, 2212, 2217, 2221, 2223, 2228, + 2232, 2234, 2239, 2243, 2245, 2250, 2254, 2256, 2261, 2267, + 2269, 2273, 2275, 2278, 2281, 2289, 2291, 2292, 2295, 2297, + 2300, 2304 }; #endif @@ -764,7 +766,7 @@ static const char * const yytname[] = { "$","error","$undefined.","PLUS_TK", "variable_declarator_id","variable_initializer","method_declaration","@3","method_header", "method_declarator","formal_parameter_list","formal_parameter","throws","class_type_list", "method_body","static_initializer","static","constructor_declaration","@4","constructor_header", -"constructor_declarator","constructor_body","explicit_constructor_invocation", +"constructor_declarator","constructor_body","constructor_block_end","explicit_constructor_invocation", "this_or_super","interface_declaration","@5","@6","@7","@8","extends_interfaces", "interface_body","interface_member_declarations","interface_member_declaration", "constant_declaration","abstract_method_declaration","array_initializer","variable_initializers", @@ -807,41 +809,42 @@ static const short yyr1[] = { 0, 151, 151, 151, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 157, 159, 158, 160, 160, 161, 161, 162, 162, 162, 162, 163, - 163, 163, 163, 164, 164, 166, 165, 167, 165, 168, - 165, 169, 165, 165, 165, 170, 170, 170, 170, 171, - 171, 172, 172, 173, 173, 173, 173, 174, 175, 175, - 176, 176, 176, 177, 177, 177, 178, 178, 179, 180, - 181, 181, 182, 182, 182, 183, 184, 184, 185, 185, - 185, 185, 185, 185, 186, 186, 186, 186, 186, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 188, 189, 190, 190, 191, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 193, 193, - 193, 193, 193, 193, 193, 194, 194, 194, 194, 195, - 196, 198, 197, 199, 199, 199, 199, 200, 200, 200, - 200, 201, 201, 202, 203, 203, 204, 204, 204, 204, - 204, 205, 206, 206, 206, 206, 207, 208, 209, 210, - 210, 210, 210, 210, 211, 211, 212, 212, 212, 213, - 214, 214, 214, 214, 215, 215, 216, 216, 216, 217, - 217, 217, 217, 218, 218, 218, 218, 219, 219, 219, - 219, 220, 220, 220, 221, 221, 221, 221, 221, 222, - 223, 223, 223, 223, 224, 224, 225, 226, 226, 226, - 226, 227, 227, 228, 228, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 163, 164, 164, 164, 164, 165, 165, 167, 166, 168, + 166, 169, 166, 170, 166, 166, 166, 171, 171, 171, + 171, 172, 172, 173, 173, 174, 174, 174, 174, 175, + 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, + 180, 181, 182, 182, 183, 183, 183, 184, 185, 185, + 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, + 187, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 189, 190, 191, 191, 192, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, + 195, 196, 197, 199, 198, 200, 200, 200, 200, 201, + 201, 201, 201, 202, 202, 203, 204, 204, 205, 205, + 205, 205, 205, 206, 207, 207, 207, 207, 208, 209, + 210, 211, 211, 211, 211, 211, 212, 212, 213, 213, + 213, 214, 215, 215, 215, 215, 216, 216, 217, 217, + 217, 218, 218, 218, 218, 219, 219, 219, 219, 220, + 220, 220, 220, 221, 221, 221, 222, 222, 222, 222, + 222, 223, 224, 224, 224, 224, 225, 225, 226, 227, + 227, 227, 227, 228, 228, 229, 229, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 231, 231, 232, 232, 232, 233, - 233, 233, 233, 233, 233, 233, 233, 234, 234, 235, - 235, 235, 236, 236, 236, 237, 237, 237, 238, 238, - 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, - 239, 239, 240, 240, 240, 240, 241, 242, 243, 243, - 243, 243, 243, 243, 243, 244, 244, 245, 245, 246, - 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 248, 248, 248, 248, 248, 248, - 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, - 250, 250, 250, 251, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 252, 252, 252, 252, 252, 253, - 253, 253, 254, 254, 254, 255, 255, 255, 256, 256, - 256, 257, 257, 257, 258, 258, 258, 258, 258, 259, - 259, 260, 260, 261, 261, 261, 262, 262, 263, 264 + 230, 230, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 232, 232, 233, 233, + 233, 234, 234, 234, 234, 234, 234, 234, 234, 235, + 235, 236, 236, 236, 237, 237, 237, 238, 238, 238, + 239, 239, 239, 239, 239, 239, 239, 239, 240, 240, + 240, 240, 240, 240, 241, 241, 241, 241, 242, 243, + 244, 244, 244, 244, 244, 244, 244, 245, 245, 246, + 246, 247, 247, 247, 247, 247, 247, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 249, 249, 249, 249, + 249, 249, 249, 250, 250, 250, 250, 250, 251, 251, + 251, 251, 251, 251, 251, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 253, 253, 253, 253, + 253, 254, 254, 254, 255, 255, 255, 256, 256, 256, + 257, 257, 257, 258, 258, 258, 259, 259, 259, 259, + 259, 260, 260, 261, 261, 262, 262, 262, 263, 263, + 264, 265 }; static const short yyr2[] = { 0, @@ -859,42 +862,43 @@ static const short yyr2[] = { 0, 2, 3, 2, 3, 2, 3, 4, 3, 3, 3, 1, 3, 3, 2, 3, 2, 3, 0, 2, 2, 1, 3, 3, 1, 2, 1, 2, 3, 1, 0, - 3, 2, 3, 3, 4, 2, 3, 3, 4, 4, - 5, 7, 6, 1, 1, 0, 4, 0, 5, 0, - 5, 0, 6, 3, 4, 2, 3, 2, 3, 2, - 3, 1, 2, 1, 1, 1, 1, 1, 2, 2, - 2, 3, 4, 1, 3, 3, 2, 3, 1, 1, - 1, 2, 1, 1, 1, 2, 2, 3, 1, 1, + 3, 2, 3, 3, 4, 2, 3, 3, 4, 1, + 2, 4, 5, 7, 6, 1, 1, 0, 4, 0, + 5, 0, 5, 0, 6, 3, 4, 2, 3, 2, + 3, 2, 3, 1, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 3, 4, 1, 3, 3, 2, 3, + 1, 1, 1, 2, 1, 1, 1, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 4, 4, 5, 4, 5, 6, 7, 6, 1, 1, - 1, 1, 1, 1, 1, 5, 2, 3, 4, 7, - 7, 0, 3, 4, 2, 3, 5, 2, 3, 3, - 4, 1, 2, 2, 1, 2, 3, 2, 2, 3, - 2, 4, 2, 2, 3, 4, 2, 1, 7, 7, - 6, 3, 5, 4, 7, 6, 2, 2, 3, 2, - 0, 1, 1, 2, 0, 1, 1, 3, 3, 2, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 4, 4, 5, 4, 5, 6, 7, 6, + 1, 1, 1, 1, 1, 1, 1, 5, 2, 3, + 4, 7, 7, 0, 3, 4, 2, 3, 5, 2, + 3, 3, 4, 1, 2, 2, 1, 2, 3, 2, + 2, 3, 2, 4, 2, 2, 3, 4, 2, 1, + 7, 7, 6, 3, 5, 4, 7, 6, 2, 2, + 3, 2, 0, 1, 1, 2, 0, 1, 1, 3, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, - 3, 3, 2, 3, 5, 5, 2, 4, 3, 1, - 3, 3, 4, 2, 1, 2, 2, 4, 2, 3, - 4, 2, 2, 1, 1, 1, 1, 3, 1, 1, - 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, - 5, 4, 6, 5, 4, 5, 5, 6, 3, 3, - 4, 5, 2, 3, 3, 3, 1, 3, 3, 3, - 3, 4, 4, 4, 4, 3, 3, 1, 2, 3, - 3, 2, 2, 3, 3, 3, 3, 2, 3, 4, - 5, 6, 5, 6, 4, 4, 4, 4, 3, 4, - 3, 4, 1, 1, 1, 1, 2, 2, 1, 1, - 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, - 2, 2, 1, 2, 2, 5, 4, 4, 5, 4, - 2, 5, 4, 5, 1, 3, 3, 3, 3, 3, - 3, 1, 3, 3, 3, 3, 1, 3, 3, 3, - 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 1, 3, 3, 3, 3, 1, - 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, - 3, 1, 3, 3, 1, 5, 4, 3, 5, 1, - 1, 3, 3, 1, 1, 1, 1, 1, 1, 1 + 3, 2, 3, 3, 2, 3, 5, 5, 2, 4, + 3, 1, 3, 3, 4, 2, 1, 2, 2, 4, + 2, 3, 4, 2, 2, 1, 1, 1, 1, 3, + 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 5, 4, 6, 5, 4, 5, 5, 6, + 3, 3, 4, 5, 2, 3, 3, 3, 1, 3, + 3, 3, 3, 4, 4, 4, 4, 3, 3, 1, + 2, 3, 3, 2, 2, 3, 3, 3, 3, 2, + 3, 4, 5, 6, 5, 6, 4, 4, 4, 4, + 3, 4, 3, 4, 1, 1, 1, 1, 2, 2, + 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, + 2, 1, 2, 2, 1, 2, 2, 5, 4, 4, + 5, 4, 2, 5, 4, 5, 1, 3, 3, 3, + 3, 3, 3, 1, 3, 3, 3, 3, 1, 3, + 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, + 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, + 1, 3, 3, 1, 3, 3, 1, 5, 4, 3, + 5, 1, 1, 3, 3, 1, 1, 1, 1, 1, + 1, 1 }; static const short yydefact[] = { 0, @@ -902,1334 +906,1312 @@ static const short yydefact[] = { 0, 0, 36, 43, 44, 38, 0, 51, 52, 46, 27, 0, 23, 24, 25, 0, 62, 0, 41, 0, 0, 37, 39, 0, 0, 56, 0, 0, 47, 45, 0, - 164, 0, 0, 160, 63, 0, 69, 42, 40, 0, - 0, 0, 61, 0, 49, 0, 26, 168, 17, 166, - 15, 0, 157, 0, 0, 68, 16, 0, 0, 59, - 165, 0, 162, 64, 69, 50, 48, 12, 0, 10, - 11, 170, 0, 8, 9, 13, 14, 15, 0, 176, - 178, 0, 177, 0, 172, 174, 175, 169, 167, 161, - 67, 71, 72, 70, 0, 159, 0, 57, 113, 0, + 166, 0, 0, 162, 63, 0, 69, 42, 40, 0, + 0, 0, 61, 0, 49, 0, 26, 170, 17, 168, + 15, 0, 159, 0, 0, 68, 16, 0, 0, 59, + 167, 0, 164, 64, 69, 50, 48, 12, 0, 10, + 11, 172, 0, 8, 9, 13, 14, 15, 0, 178, + 180, 0, 179, 0, 174, 176, 177, 171, 169, 163, + 67, 71, 72, 70, 0, 161, 0, 57, 113, 0, 128, 111, 0, 0, 90, 93, 128, 0, 0, 0, - 115, 0, 0, 180, 179, 171, 173, 0, 0, 60, - 163, 0, 0, 0, 0, 108, 99, 88, 0, 0, + 115, 0, 0, 182, 181, 173, 175, 0, 0, 60, + 165, 0, 0, 0, 0, 108, 99, 88, 0, 0, 0, 0, 107, 21, 18, 22, 20, 19, 114, 128, - 112, 0, 128, 74, 73, 55, 189, 75, 23, 0, + 112, 0, 128, 74, 73, 55, 191, 75, 23, 0, 86, 0, 77, 79, 83, 85, 0, 80, 0, 81, 140, 128, 87, 82, 0, 58, 119, 116, 0, 0, 0, 121, 130, 131, 129, 120, 118, 92, 0, 91, - 95, 0, 0, 0, 0, 0, 0, 0, 337, 0, - 0, 0, 0, 6, 5, 2, 3, 4, 7, 336, - 0, 404, 0, 103, 403, 334, 339, 0, 335, 340, - 341, 342, 420, 405, 406, 435, 409, 410, 413, 423, - 442, 447, 454, 465, 470, 473, 476, 479, 482, 485, - 490, 499, 491, 0, 102, 100, 98, 101, 110, 89, - 109, 187, 0, 128, 76, 78, 84, 106, 0, 137, - 0, 142, 0, 55, 0, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 337, 0, 221, 0, 8, - 404, 0, 0, 195, 0, 210, 0, 191, 193, 0, - 194, 199, 211, 0, 200, 212, 0, 201, 202, 213, - 252, 0, 203, 0, 214, 204, 291, 0, 215, 216, - 217, 219, 218, 0, 220, 245, 244, 0, 242, 243, - 240, 241, 239, 126, 124, 0, 117, 0, 0, 414, - 404, 340, 342, 411, 415, 412, 419, 418, 417, 416, - 0, 388, 0, 0, 0, 16, 0, 424, 421, 425, - 422, 431, 0, 404, 0, 181, 184, 0, 0, 0, - 0, 0, 96, 0, 0, 363, 0, 408, 407, 0, + 95, 0, 0, 0, 0, 0, 0, 0, 339, 0, + 0, 0, 0, 6, 5, 2, 3, 4, 7, 338, + 0, 406, 0, 103, 405, 336, 341, 0, 337, 342, + 343, 344, 422, 407, 408, 437, 411, 412, 415, 425, + 444, 449, 456, 467, 472, 475, 478, 481, 484, 487, + 492, 501, 493, 0, 102, 100, 98, 101, 110, 89, + 109, 189, 0, 128, 76, 78, 84, 106, 0, 137, + 0, 142, 0, 55, 0, 0, 280, 0, 0, 0, + 0, 0, 0, 0, 0, 339, 0, 223, 0, 8, + 406, 0, 0, 197, 0, 212, 0, 193, 195, 0, + 196, 201, 213, 0, 202, 214, 0, 203, 204, 215, + 254, 0, 205, 0, 216, 206, 293, 0, 217, 218, + 219, 221, 220, 0, 222, 247, 246, 0, 244, 245, + 242, 243, 241, 126, 124, 0, 117, 0, 0, 416, + 406, 342, 344, 413, 417, 414, 421, 420, 419, 418, + 0, 390, 0, 0, 0, 16, 0, 426, 423, 427, + 424, 433, 0, 406, 0, 183, 186, 0, 0, 0, + 0, 0, 96, 0, 0, 365, 0, 410, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 497, 498, 0, 144, 0, 143, 136, 105, 134, 138, - 189, 141, 0, 228, 229, 227, 247, 0, 313, 0, - 302, 300, 0, 310, 308, 0, 274, 0, 255, 0, - 324, 0, 288, 0, 306, 304, 0, 0, 197, 0, - 0, 224, 222, 0, 0, 190, 188, 192, 196, 320, - 404, 223, 226, 0, 273, 0, 404, 0, 293, 297, - 290, 0, 0, 317, 0, 127, 125, 123, 122, 133, - 132, 350, 345, 0, 387, 377, 376, 359, 0, 370, - 378, 0, 371, 0, 360, 0, 0, 0, 0, 0, - 0, 347, 338, 182, 0, 349, 344, 389, 0, 367, - 399, 0, 348, 343, 365, 346, 366, 386, 401, 0, - 364, 0, 439, 436, 440, 437, 441, 438, 445, 443, - 446, 444, 451, 448, 452, 449, 453, 450, 461, 456, - 463, 458, 460, 455, 462, 457, 464, 0, 459, 468, - 466, 469, 467, 472, 471, 475, 474, 478, 477, 481, - 480, 484, 483, 488, 0, 0, 493, 492, 145, 135, - 404, 0, 0, 146, 0, 248, 0, 314, 312, 303, - 301, 311, 309, 275, 0, 256, 0, 0, 0, 321, - 325, 0, 322, 289, 307, 305, 338, 0, 198, 230, - 0, 0, 0, 253, 0, 294, 0, 282, 0, 0, - 319, 0, 395, 396, 0, 382, 383, 0, 379, 372, - 0, 375, 373, 374, 361, 352, 0, 433, 427, 430, - 0, 0, 428, 186, 183, 185, 390, 0, 400, 397, - 0, 402, 398, 355, 0, 487, 0, 0, 147, 0, - 0, 148, 249, 0, 276, 272, 0, 329, 0, 333, - 332, 326, 323, 327, 234, 0, 231, 232, 0, 0, - 0, 258, 0, 262, 0, 265, 0, 299, 298, 284, - 0, 296, 0, 318, 0, 393, 0, 381, 380, 385, - 384, 354, 362, 351, 432, 426, 434, 429, 369, 368, - 391, 0, 356, 357, 489, 486, 0, 149, 0, 0, - 0, 246, 0, 199, 0, 206, 207, 0, 208, 209, - 0, 257, 330, 0, 235, 0, 0, 233, 271, 268, - 269, 500, 0, 260, 263, 0, 259, 0, 266, 0, - 0, 283, 0, 316, 315, 394, 353, 392, 358, 0, - 150, 0, 0, 0, 225, 277, 0, 331, 328, 238, - 236, 0, 270, 267, 261, 0, 281, 0, 0, 0, - 151, 0, 250, 0, 0, 237, 279, 280, 153, 0, - 0, 0, 0, 152, 0, 0, 0, 0, 286, 0, - 251, 285, 0, 0, 0 + 499, 500, 0, 144, 0, 143, 136, 105, 134, 138, + 191, 141, 0, 230, 231, 229, 249, 0, 315, 0, + 304, 302, 0, 312, 310, 0, 276, 0, 257, 0, + 326, 0, 290, 0, 308, 306, 0, 0, 199, 0, + 0, 226, 224, 0, 0, 192, 190, 194, 198, 322, + 406, 225, 228, 0, 275, 0, 406, 0, 295, 299, + 292, 0, 0, 319, 0, 127, 125, 123, 122, 133, + 132, 352, 347, 0, 389, 379, 378, 361, 0, 372, + 380, 0, 373, 0, 362, 0, 0, 0, 0, 0, + 0, 349, 340, 184, 0, 351, 346, 391, 0, 369, + 401, 0, 350, 345, 367, 348, 368, 388, 403, 0, + 366, 0, 441, 438, 442, 439, 443, 440, 447, 445, + 448, 446, 453, 450, 454, 451, 455, 452, 463, 458, + 465, 460, 462, 457, 464, 459, 466, 0, 461, 470, + 468, 471, 469, 474, 473, 477, 476, 480, 479, 483, + 482, 486, 485, 490, 0, 0, 495, 494, 145, 135, + 406, 146, 0, 0, 150, 0, 250, 0, 316, 314, + 305, 303, 313, 311, 277, 0, 258, 0, 0, 0, + 323, 327, 0, 324, 291, 309, 307, 340, 0, 200, + 232, 0, 0, 0, 255, 0, 296, 0, 284, 0, + 0, 321, 0, 397, 398, 0, 384, 385, 0, 381, + 374, 0, 377, 375, 376, 363, 354, 0, 435, 429, + 432, 0, 0, 430, 188, 185, 187, 392, 0, 402, + 399, 0, 404, 400, 357, 0, 489, 0, 0, 147, + 0, 0, 151, 148, 251, 0, 278, 274, 0, 331, + 0, 335, 334, 328, 325, 329, 236, 0, 233, 234, + 0, 0, 0, 260, 0, 264, 0, 267, 0, 301, + 300, 286, 0, 298, 0, 320, 0, 395, 0, 383, + 382, 387, 386, 356, 364, 353, 434, 428, 436, 431, + 371, 370, 393, 0, 358, 359, 491, 488, 0, 149, + 0, 0, 0, 248, 0, 201, 0, 208, 209, 0, + 210, 211, 0, 259, 332, 0, 237, 0, 0, 235, + 273, 270, 271, 502, 0, 262, 265, 0, 261, 0, + 268, 0, 0, 285, 0, 318, 317, 396, 355, 394, + 360, 0, 152, 0, 0, 0, 227, 279, 0, 333, + 330, 240, 238, 0, 272, 269, 263, 0, 283, 0, + 0, 0, 153, 0, 252, 0, 0, 239, 281, 282, + 155, 0, 0, 0, 0, 154, 0, 0, 0, 0, + 288, 0, 253, 287, 0, 0, 0 }; -static const short yydefgoto[] = { 773, +static const short yydefgoto[] = { 775, 210, 279, 211, 85, 86, 68, 60, 87, 212, 22, 23, 24, 8, 9, 10, 11, 12, 13, 14, 15, 283, 284, 132, 105, 47, 70, 104, 130, 162, 163, 164, 91, 114, 115, 116, 213, 166, 259, 92, 111, 181, 182, 136, 185, 398, 168, 169, 170, 261, 171, - 172, 402, 552, 285, 18, 43, 72, 65, 107, 44, - 63, 94, 95, 96, 97, 214, 358, 286, 175, 437, - 718, 288, 289, 290, 291, 693, 292, 293, 294, 295, - 696, 296, 297, 298, 299, 697, 300, 444, 301, 584, - 653, 654, 655, 656, 302, 303, 699, 304, 305, 306, - 700, 307, 308, 451, 661, 662, 309, 310, 311, 312, - 313, 314, 315, 570, 571, 572, 573, 215, 216, 217, - 218, 489, 219, 470, 471, 472, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 393, 490, 713 + 172, 402, 552, 553, 285, 18, 43, 72, 65, 107, + 44, 63, 94, 95, 96, 97, 214, 358, 286, 175, + 555, 720, 288, 289, 290, 291, 695, 292, 293, 294, + 295, 698, 296, 297, 298, 299, 699, 300, 444, 301, + 585, 655, 656, 657, 658, 302, 303, 701, 304, 305, + 306, 702, 307, 308, 451, 663, 664, 309, 310, 311, + 312, 313, 314, 315, 571, 572, 573, 574, 215, 216, + 217, 218, 489, 219, 470, 471, 472, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 393, 490, 715 }; -static const short yypact[] = { 538, --32768,-32768, 61, -61, 310, 456,-32768,-32768, 245, 513, - 578,-32768,-32768,-32768,-32768, 567,-32768,-32768,-32768,-32768, - 19,-32768,-32768,-32768, 160,-32768, 296,-32768, 33, 603, --32768,-32768, 680, 629,-32768, -61, 486,-32768,-32768, 503, --32768, 504, -50, -27,-32768, 510, 130,-32768,-32768, -61, - 693, 338,-32768, 356,-32768, 37,-32768,-32768,-32768,-32768, - -2, 830,-32768, 520, -50,-32768,-32768, 342, 521,-32768, --32768, -50, -27,-32768, 130,-32768,-32768,-32768, 530,-32768, --32768,-32768, 539, 156,-32768,-32768, 197, -55, 787,-32768, --32768, 53,-32768, 988,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 236, 132,-32768, -50,-32768,-32768, 371, - 379,-32768, 122, 550,-32768, 716, 379, 43, 77, 260, --32768, 562, 565,-32768,-32768,-32768,-32768, 568, 869,-32768, --32768, 132, 421, 574, 95,-32768,-32768,-32768, 580, 1258, - 113, 478,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 379, --32768, 759, 379,-32768,-32768, 523, 519,-32768, 548, 787, --32768, 1021,-32768,-32768, 576,-32768, 203,-32768, 602,-32768, --32768, 625,-32768,-32768, 1818,-32768,-32768,-32768, 582, 948, - -29,-32768,-32768,-32768, 588,-32768,-32768,-32768, 350,-32768, --32768, 2787, 2838, 2903, 2954, 609, 28, 700,-32768, 3019, - 3070, 3135, 5134,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 632, 949, 66,-32768, 642, 656,-32768, 583,-32768, 437, --32768, 771, 831,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 887, 895, 950, 1007, 889, 745, 762, 758, 777, 268, --32768,-32768,-32768, 819,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 896, 625,-32768,-32768,-32768,-32768, 671, 712, - 704,-32768, 502, 114, 306, 3186,-32768, 263, 2091, 47, - 391, 416, 232, 423, 307, 723, 5433,-32768, -61, 733, - 1018, 319, 918,-32768, 728,-32768, 1750,-32768,-32768, 725, --32768,-32768,-32768, 1886,-32768,-32768, 788,-32768,-32768,-32768, --32768, 1886,-32768, 1886,-32768,-32768, 5484, 791,-32768,-32768, --32768,-32768,-32768, 426,-32768, 706, 782, 831, 892, 897, --32768,-32768,-32768,-32768, 850, 590,-32768, 711, 593,-32768, - 545,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 31,-32768, 622, 908, 739, 739, 430,-32768,-32768,-32768, --32768,-32768, 683, 998, 86,-32768,-32768, 694, 468, 5201, - 3251, 30,-32768, 474, 3302,-32768, 458,-32768,-32768, 3367, - 3418, 3483, 3534, 3599, 3650, 3715, 3766, 3831, 3882, 3947, - 3998, 719, 4063, 4114, 4179, 4230, 4295, 4346, 4411, 2142, --32768,-32768, 4462,-32768, 188,-32768,-32768,-32768, 797,-32768, --32768,-32768, 1750,-32768,-32768,-32768,-32768, 4527,-32768, 59, --32768,-32768, 74,-32768,-32768, 127,-32768, 4578,-32768, 4643, --32768, 796,-32768, 5042,-32768,-32768, 217, 295, 744, 2207, - 775,-32768,-32768, -61, 2258,-32768,-32768,-32768,-32768,-32768, - 1087,-32768,-32768, 754,-32768, 804, 1038, 948,-32768,-32768, --32768, 69, 2323,-32768, 4694,-32768, 850,-32768,-32768,-32768, --32768,-32768,-32768, 494, 808,-32768,-32768,-32768, 2374, 739, --32768, 490, 739, 490,-32768, 2439, 4759, 224, 359, 2490, - 450,-32768, 1509,-32768, 2026,-32768,-32768,-32768, 617,-32768, --32768, 234,-32768,-32768,-32768,-32768,-32768, 810,-32768, 248, --32768, 5252,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 887, --32768, 887,-32768, 895,-32768, 895,-32768, 895,-32768, 950, --32768, 950,-32768, 950,-32768, 950,-32768, 156,-32768,-32768, - 1007,-32768, 1007,-32768, 889,-32768, 745,-32768, 762,-32768, - 758,-32768, 777,-32768, 880, 820,-32768,-32768,-32768,-32768, - 1076, 1750, 827,-32768, 1750,-32768, 352,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 438,-32768, 829, 461, 309, 796, --32768, 602,-32768,-32768,-32768,-32768,-32768, 469, 744,-32768, - 928, 94, 185,-32768, 838,-32768, 5176,-32768, 5067, 834, - 851, 856,-32768,-32768, 5317,-32768,-32768, 262,-32768, 859, - 265,-32768, 859,-32768,-32768, 132, 102,-32768,-32768,-32768, - 4810, 1388,-32768,-32768,-32768,-32768,-32768, 4875,-32768,-32768, - 5368,-32768,-32768, 132, 627,-32768, 4926, 799,-32768, 1750, - 2555,-32768,-32768, 1952,-32768,-32768, 396,-32768, 737,-32768, --32768,-32768,-32768,-32768,-32768, 2606,-32768,-32768, 952, 355, - 4991,-32768, 190,-32768, 1484,-32768, 5433,-32768,-32768,-32768, - 867, 863, 5109,-32768, 402,-32768, 648,-32768,-32768,-32768, --32768,-32768,-32768, 132,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 726,-32768, 132,-32768,-32768, 471,-32768, 239, 116, - 477,-32768, 910, 920, 1952,-32768,-32768, 1952,-32768,-32768, - 884,-32768, 893, 901,-32768, 995, 142,-32768,-32768,-32768, --32768,-32768, 424,-32768,-32768, 1614,-32768, 1682,-32768, 905, - 1886,-32768, 907,-32768,-32768,-32768,-32768,-32768,-32768, 2671, --32768, 242, 4527, 1886,-32768,-32768, 2722,-32768,-32768,-32768, --32768, 1008,-32768,-32768,-32768, 917,-32768, 1886, 289, 177, --32768, 439,-32768, 5067, 919,-32768,-32768,-32768,-32768, 291, - 1952, 925, 5109,-32768, 965, 1952, 942, 1952,-32768, 1952, --32768,-32768, 1039, 1045,-32768 +static const short yypact[] = { 507, +-32768,-32768, 15, -30, 18, 244,-32768,-32768, 414, 443, + 556,-32768,-32768,-32768,-32768, 714,-32768,-32768,-32768,-32768, + 23,-32768,-32768,-32768, 359,-32768, 340,-32768, 49, 601, +-32768,-32768, 585, 603,-32768, -30, 417,-32768,-32768, 92, +-32768, 489, -24, 107,-32768, 529, 295,-32768,-32768, -30, + 710, 452,-32768, 344,-32768, 40,-32768,-32768,-32768,-32768, + 192, 1047,-32768, 530, -24,-32768,-32768, 388, 534,-32768, +-32768, -24, 107,-32768, 295,-32768,-32768,-32768, 540,-32768, +-32768,-32768, 548, 258,-32768,-32768, 307, 442, 736,-32768, +-32768, 77,-32768, 1638,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 312, 406,-32768, -24,-32768,-32768, 379, + -18,-32768, 426, 331,-32768, 693, -18, 120, 210, 429, +-32768, 564, 587,-32768,-32768,-32768,-32768, 593, 951,-32768, +-32768, 406, 607, 617, 214,-32768,-32768,-32768, 618, 1077, + 219, 531,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -18, +-32768, 361, -18,-32768,-32768, 460, 471,-32768, 494, 736, +-32768, 1204,-32768,-32768, 500,-32768, 180,-32768, 535,-32768, +-32768, 591,-32768,-32768, 1759,-32768,-32768,-32768, 620, 728, + 377,-32768,-32768,-32768, 613,-32768,-32768,-32768, 157,-32768, +-32768, 2663, 2728, 2779, 2844, 655, 32, 707,-32768, 2895, + 2960, 3011, 5025,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 673, 881, 56,-32768, 678, 746,-32768, 640,-32768, 671, +-32768, 715, 866,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 899, 921, 1006, 838, 920, 654, 814, 820, 847, 263, +-32768,-32768,-32768, 850,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 963, 591,-32768,-32768,-32768,-32768, 484, 769, + 775,-32768, -1, 306, 353, 3076,-32768, 232, 1357, 35, + 392, 419, 228, 424, 234, 779, 5324,-32768, -30, 538, + 974, 265, 872,-32768, 784,-32768, 1691,-32768,-32768, 789, +-32768,-32768,-32768, 1827,-32768,-32768, 797,-32768,-32768,-32768, +-32768, 1827,-32768, 1827,-32768,-32768, 5375, 802,-32768,-32768, +-32768,-32768,-32768, 427,-32768, 737, 806, 866, 902, 916, +-32768,-32768,-32768,-32768, 891, 642,-32768, 592, 660,-32768, + 189,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 409,-32768, 666, 964, 793, 793, 428,-32768,-32768,-32768, +-32768,-32768, 777, 1121, 66,-32768,-32768, 622, 432, 5092, + 3127, 729,-32768, -28, 3192,-32768, 435,-32768,-32768, 3243, + 3308, 3359, 3424, 3475, 3540, 3591, 3656, 3707, 3772, 3823, + 3888, 864, 3939, 4004, 4055, 4120, 4171, 4236, 4287, 2032, +-32768,-32768, 4352,-32768, 605,-32768,-32768,-32768, 810,-32768, +-32768,-32768, 1691,-32768,-32768,-32768,-32768, 4403,-32768, 95, +-32768,-32768, 126,-32768,-32768, 174,-32768, 4468,-32768, 4519, +-32768, 785,-32768, 4933,-32768,-32768, 182, 269, 815, 2083, + 604,-32768,-32768, -30, 2148,-32768,-32768,-32768,-32768,-32768, + 1158,-32768,-32768, 823,-32768, 861, 1018, 728,-32768,-32768, +-32768, 86, 2199,-32768, 4584,-32768, 891,-32768,-32768,-32768, +-32768,-32768,-32768, 565, 836,-32768,-32768,-32768, 2264, 793, +-32768, 590, 793, 590,-32768, 2315, 4635, 223, -43, 2380, + 191,-32768, 894,-32768, 1967,-32768,-32768,-32768, 649,-32768, +-32768, 237,-32768,-32768,-32768,-32768,-32768, 839,-32768, 239, +-32768, 5143,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 899, +-32768, 899,-32768, 921,-32768, 921,-32768, 921,-32768, 1006, +-32768, 1006,-32768, 1006,-32768, 1006,-32768, 258,-32768,-32768, + 838,-32768, 838,-32768, 920,-32768, 654,-32768, 814,-32768, + 820,-32768, 847,-32768, 933, 857,-32768,-32768,-32768,-32768, + 1254,-32768, 1691, 859, 856, 1691,-32768, 314,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 348,-32768, 870, 461, 229, + 785,-32768, 535,-32768,-32768,-32768,-32768,-32768, 467, 815, +-32768, 967, 14, 444,-32768, 878,-32768, 5067,-32768, 4958, + 876, 887, 892,-32768,-32768, 5208,-32768,-32768, 241,-32768, + 895, 299,-32768, 895,-32768,-32768, 406, 17,-32768,-32768, +-32768, 4700, 487,-32768,-32768,-32768,-32768,-32768, 4751,-32768, +-32768, 5259,-32768,-32768, 406, 704,-32768, 4816, 662,-32768, + 1691, 2431,-32768,-32768,-32768, 1893,-32768,-32768, 343,-32768, + 835,-32768,-32768,-32768,-32768,-32768,-32768, 2496,-32768,-32768, + 999, 91, 4867,-32768, 674,-32768, 1467,-32768, 5324,-32768, +-32768,-32768, 928, 923, 5000,-32768, 410,-32768, 723,-32768, +-32768,-32768,-32768,-32768,-32768, 406,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 731,-32768, 406,-32768,-32768, 477,-32768, + 243, 108, 485,-32768, 978, 979, 1893,-32768,-32768, 1893, +-32768,-32768, 942,-32768, 948, 950,-32768, 1053, 128,-32768, +-32768,-32768,-32768,-32768, 328,-32768,-32768, 1540,-32768, 1608, +-32768, 961, 1827,-32768, 970,-32768,-32768,-32768,-32768,-32768, +-32768, 2547,-32768, 262, 4403, 1827,-32768,-32768, 2612,-32768, +-32768,-32768,-32768, 1071,-32768,-32768,-32768, 980,-32768, 1827, + 296, 202,-32768, 358,-32768, 4958, 983,-32768,-32768,-32768, +-32768, 302, 1893, 990, 5000,-32768, 1021, 1893, 992, 1893, +-32768, 1893,-32768,-32768, 1087, 1089,-32768 }; static const short yypgoto[] = {-32768, --32768, -25, -53, 666, -34, -121, 645,-32768, -3, 597, --32768, 134,-32768, 1040, 806,-32768, 449,-32768,-32768, 689, - 17, 610,-32768,-32768, 999, 981,-32768, -131,-32768, 904, --32768, -57, -117, 924, -163, -192,-32768,-32768, 305, -65, - 805, -321, -98,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 909,-32768,-32768, 664, -41,-32768,-32768,-32768,-32768, 1016, - 429,-32768, 983,-32768,-32768, 393,-32768, -106, 818, -401, - -165, -283,-32768, 774, -280, -36, -585,-32768, -492,-32768, --32768,-32768, -302,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 432, 434, -615, -447,-32768,-32768,-32768,-32768,-32768, --32768,-32768, -433,-32768, -630, 785,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 524,-32768, 532,-32768,-32768, -63, --32768, -316,-32768, 747, 103, -261, 1023, 223, 1044, 254, - 380, 442, -111, 531, 620, -468,-32768, 600, 636, 681, - 596, 715, 722, 734, 724, 736,-32768, 495, 720, 750, --32768,-32768, 65,-32768 +-32768, -57, -60, 711, -16, -123, 568,-32768, -3, 552, +-32768, 130,-32768, 1085, 791,-32768, 22,-32768,-32768, 778, + 12, 154,-32768,-32768, 1044, 1030,-32768, -128,-32768, 945, +-32768, 382, -106, 973, -165, -193,-32768,-32768, 469, -58, + 865, -327, -40,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 957,-32768, 142,-32768, 718, -10,-32768,-32768,-32768,-32768, + 1072, 584,-32768, 1031,-32768,-32768, 372,-32768, -122, 867, + 843, -166, -279,-32768, 819, -234, 197, -551,-32768, -529, +-32768,-32768,-32768, -301,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 476, 486, -619, -496,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, -436,-32768, -603, 832,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 569,-32768, 573,-32768,-32768, + 119,-32768, -386,-32768, 799, 362, -326, 858, 163, 1120, + 320, 437, 438, -112, 560, 636, -470,-32768, 632, 724, + 651, 625, 761, 765, 760, 764, 776,-32768, 526, 771, + 717,-32768,-32768, 29,-32768 }; -#define YYLAST 5593 +#define YYLAST 5484 static const short yytable[] = { 21, - 176, 554, 29, 438, 450, 152, 459, 59, 84, 287, - 357, 67, 184, 442, 613, 325, 16, 117, 143, 38, - 93, 445, 174, 446, 20, 16, 16, 16, 342, 59, - 493, 462, 723, 48, 59, 84, 83, 76, 61, 719, - 84, 120, 61, 144, 62, 50, 16, 342, 694, 16, - 16, 249, 93, 124, 251, 174, 150, 153, 88, 558, - 61, 19, 260, 123, 327, 61, 363, 16, 83, 586, - 328, 165, 64, 262, 560, 84, 347, 146, 89, 84, - 334, 336, 338, 340, 474, 88, 482, 173, 349, 351, - 88, 479, 481, 59, 648, 186, 494, 463, 50, 67, - 719, 495, 673, 83, 165, 496, 84, 179, 84, 694, - 89, 316, 694, 246, -320, 20, 648, 39, 582, 40, - 173, 280, 137, 762, 61, 88, 84, 562, 343, 88, - 61, 49, 767, 50, 123, 77, 83, 25, 27, -155, - 145, 695, 741, 678, 345, 160, 20, 343, 353, 180, - 629, 125, 399, 632, 326, 396, 88, 559, 88, 607, - 41, 429, 457, 346, -94, -94, 422, -292, 587, 52, - 54, 281, 561, 57, 147, 694, 88, 741, 160, 483, - 694, 69, 694, 57, 694, 625, 698, 649, 331, 331, - 331, 331, 187, 618, 61, 674, 331, 331, 354, 84, - 701, 618, 695, 258, 245, 695, -320, 461, 600, 732, - 247, 603, 110, -97, 133, 618, 113, 575, -97, -97, - -97, -97, 42, 316, 610, 563, 129, 179, 688, 84, - 316, 650, 421, 280, 619, 742, 650, 555, 316, 647, - 316, 618, 708, 316, -30, 1, 651, 698, 622, 88, - 698, 651, 118, 280, -156, 110, 113, 434, 504, 506, - 508, 701, 668, 411, 701, 670, 355, 245, 695, 180, - 760, 438, 189, 695, 84, 695, 618, 695, 667, 88, - 652, 549, 389, 281, 659, 714, 450, 328, 2, 740, - 441, 756, 616, 119, 67, 482, 45, -104, 441, 3, - 441, -104, 179, 447, 682, 4, 407, 425, 282, 640, - 26, 5, 189, 698, 690, 576, 579, 704, 698, 432, - 698, 597, 698, 448, 88, 61, 157, 701, 528, 707, - 410, 620, 701, 416, 701, 128, 701, 731, 71, 316, - 751, 428, 101, 7, 180, 623, 438, -65, 20, 280, - 137, 367, 633, 692, 390, 709, 74, 148, 46, 669, - 450, 412, 671, -25, -25, 609, 331, 331, 331, 331, + 459, 84, 29, 176, 83, 450, 174, 438, 287, 357, + 184, 16, 614, 325, 650, 19, 152, 675, 26, 474, + 16, 16, 16, 38, 117, 59, 479, 481, 84, 67, + 31, 123, 342, 84, 134, 342, 83, 721, 61, 174, + 76, 16, 61, 497, 16, 16, 260, 59, 583, 48, + 612, 93, 59, 602, 31, 20, 363, 20, 88, 442, + 61, 725, 16, 150, 153, 61, 482, 445, 84, 446, + 62, 83, 84, 89, 347, 179, 143, 124, 135, 334, + 336, 338, 340, 93, 696, 88, 587, 349, 351, 608, + 88, 711, 55, 404, 405, 559, 56, 406, 721, 84, + 20, 84, 123, 20, 83, 89, 697, 651, 650, 249, + 676, 59, 251, 619, 280, 626, 619, 67, 173, 84, + 144, 39, 326, 40, 61, 88, 561, -157, 743, 88, + 61, 262, 343, 25, 27, 343, 399, 345, 77, 700, + 160, 353, 680, 601, 180, 696, 604, 49, 696, 50, + 422, 173, 764, 17, -94, -94, 88, 137, 88, 483, + 457, 769, 17, 17, 17, 52, 54, 697, 245, 57, + 697, 281, 429, 160, 563, 125, 88, 20, 712, 57, + 258, 346, 576, 17, -294, 588, 17, 17, 331, 331, + 331, 331, 84, 560, 61, 179, 331, 331, 354, 703, + 700, 734, 743, 700, 17, 461, 64, 619, 110, 669, + 146, 696, 113, 396, 186, 90, 696, 145, 696, 246, + 696, 744, 84, 611, 562, 434, 280, 619, 421, 642, + 355, 245, 411, 697, 425, 684, 556, 620, 697, 623, + 697, 670, 697, 649, 28, 692, 280, 90, -97, 88, + -97, 110, 113, -97, -97, -97, -97, 504, 506, 508, + 703, 709, 710, 703, 180, 432, 700, 84, 189, 482, + 179, 700, 564, 700, -104, 700, 438, 389, -104, 88, + 577, 360, 161, 281, 613, 361, 661, 602, 450, 362, + 441, 617, 50, 316, 410, 762, 742, 416, 441, 672, + 441, 619, 758, 447, 282, 428, -322, 147, 189, -25, + -25, 187, 67, 706, 635, 161, 247, 20, 448, 20, + 598, 528, 157, 157, 88, 61, 703, 580, 745, 20, + 412, 703, 426, 703, 621, 703, 624, 317, 671, 180, + 45, 733, 280, 704, 74, 752, 69, 367, 637, 390, + -25, 438, 433, 407, 118, -25, -25, -25, 635, 41, + 753, -25, 578, 450, 610, -25, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 88, 331, - 331, 331, 331, 331, 331, 331, 630, 759, 577, 764, - -65, 417, 20, -66, 84, 20, 702, 317, 408, 551, - 42, 413, 724, 157, -25, 426, 433, -65, 427, -25, - -25, -25, 189, 750, 442, -25, 419, 445, 46, -25, - 282, 177, 434, 423, 743, 492, 454, 282, 318, 500, - 475, 134, -158, 167, 438, 282, -66, 282, 635, 633, - 747, -97, 710, -97, 88, 634, -97, -97, -97, -97, - -65, 450, 611, 753, 546, 601, 28, 31, 501, 189, - 450, 638, 641, 133, 2, 644, 167, 758, 486, 645, - 78, 645, 557, 331, 672, 135, 465, 407, 248, 331, - 692, 31, 565, 418, 567, 747, 53, 753, 316, 758, - -254, 316, 683, 100, 492, 57, 157, 498, 280, 676, - 106, 280, 80, 55, 58, 81, 20, 56, 420, 317, - 66, 744, -31, 1, 178, 424, 317, 590, 455, 592, - 98, 102, 476, 316, 317, 316, 317, -495, -495, 317, - 109, 636, 761, 598, 487, 131, 282, -28, 1, 112, - 318, 20, 727, 612, 492, 497, 601, 318, 281, 245, - 502, 281, 729, 639, 319, 318, 2, 318, 725, 20, - 318, 646, 149, 730, 57, 151, 316, 189, 154, 733, - 316, 20, 599, 4, 183, 599, 280, -29, 1, 5, - 188, 2, 324, 366, 203, 84, 601, 593, 20, 20, - 456, 316, 3, 460, 594, 20, 404, 405, 4, 316, - 406, 280, -34, 1, 5, 20, 20, 331, 331, 17, - 35, 7, 6, 179, 252, 20, 320, -139, 17, 17, - 17, 2, 464, 331, 20, 317, 281, 36, -33, 1, - 441, 316, 3, 37, 316, 88, 7, 360, 4, 17, - 253, 361, 17, 17, 5, 362, 2, 20, 138, 139, - 20, 281, 316, 20, 316, 180, 318, 316, 735, 20, - 17, 736, 280, 4, 280, 20, 319, 20, 20, 5, - 316, 90, 2, 319, 257, 20, 7, 134, 20, -32, - 1, 319, 680, 319, 316, 282, 319, 329, 282, 4, - 316, 441, -35, 1, 441, 5, 157, 316, 32, 316, - 344, 7, 316, 90, 316, 321, 316, 20, 99, 341, - 617, 458, 281, 103, 281, 712, 618, 441, 32, 527, - 684, 720, 32, 2, 765, 159, 618, 7, 320, 769, - 441, 771, 359, 772, 3, 320, 2, 703, 161, 32, - 4, 726, 364, 320, 441, 320, 5, 618, 320, 78, - -339, -339, 365, 4, 2, 385, 159, 441, 159, 5, - 78, 57, 441, 282, 441, 157, 441, 282, 78, 397, - 387, 161, 155, 386, 317, 493, 477, 317, 7, 478, - 2, 80, 319, 359, 81, 20, 78, 121, 282, 484, - 388, 7, 80, 485, 322, 81, 20, 752, 401, 493, - 80, 755, -339, 81, 20, 318, -339, 140, 318, 317, - 400, 317, 141, 142, 30, -154, 34, 321, 80, 728, - 435, 81, 20, 439, 321, 618, -341, -341, 282, 118, - 35, 282, 321, 359, 321, 469, 78, 321, 51, 578, - 318, 494, 318, 139, 320, 122, 495, 36, 583, 282, - 496, 282, 317, 37, 282, 568, 317, 250, 139, 569, - 20, -496, -496, 687, 602, 494, 604, 282, 80, 585, - 495, 81, 20, 2, 496, 368, 369, 317, -341, 78, - 626, 282, -341, 318, 20, 317, 443, 318, 79, 453, - 4, 370, 371, 372, 282, 550, 5, 373, 374, 282, - 595, 282, 621, 282, 383, 384, 322, 627, 318, 391, - 392, 80, 156, 322, 81, 20, 318, 317, 78, 631, - 317, 322, 637, 322, 323, 82, 322, 79, 647, 4, - 657, 319, 663, 321, 319, 5, -405, -405, 317, 2, - 317, -406, -406, 317, 664, 78, 141, 142, 318, 665, - 80, 318, 708, 81, 20, 601, 317, 375, 376, 377, - 721, 35, 587, 157, 158, 734, 319, 78, 319, 318, - 317, 318, 510, 512, 318, -205, 317, 80, 531, 533, - 81, 20, 737, 317, 37, 317, 738, 318, 317, 394, - 317, 35, 317, 320, 739, 740, 320, 78, 746, 80, - 748, 318, 81, 20, 466, 467, 468, 318, 756, 319, - 514, 516, 518, 319, 318, 757, 318, 763, 766, 318, - 768, 318, 322, 318, 378, 379, 380, 381, 320, 80, - 320, 2, 81, 20, 319, 770, 323, 78, 774, -494, - -494, 360, 319, 323, 775, 361, 79, 529, 4, 362, - 33, 323, 75, 323, 5, 108, 323, 395, 520, 522, - 524, 526, 190, 382, 156, 256, 553, 73, 254, 80, - 78, 320, 81, 20, 319, 320, 127, 319, 403, 79, - 449, 4, 321, 126, 715, 321, 716, 5, -494, -494, - 360, 452, 473, 642, 480, 319, 320, 319, 362, 535, - 319, 643, 80, -15, 320, 81, 20, 537, -494, -494, - 360, 541, 548, 319, 430, 157, 255, 321, 431, 321, - 539, 686, 0, -15, 543, 0, 0, 319, -494, -494, - 360, 0, 0, 319, 430, 0, 320, 0, 362, 320, - 319, 0, 319, 0, 0, 319, 0, 319, 0, 319, - 0, 0, 323, 0, 0, 0, 0, 320, 0, 320, - 321, -15, 320, 0, 321, 0, -494, -494, 360, 0, - 0, 322, 430, 0, 322, 320, 628, -494, -494, 360, - 0, 0, 0, 361, 0, 321, 0, 431, 0, 320, - 0, 0, 0, 321, 0, 320, 0, 0, 0, 0, - 0, 0, 320, 0, 320, 0, 322, 320, 322, 320, - 0, 320, 0, 0, 332, 332, 332, 332, 0, 0, - 0, 0, 332, 332, 0, 321, 0, 0, 321, 0, - 0, 0, 0, 0, 0, 333, 333, 333, 333, 0, - 0, 0, 0, 333, 333, 0, 321, 0, 321, 322, - 0, 321, 0, 322, 0, 0, 0, 0, 191, 0, - 192, 193, 0, 0, 321, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 322, 0, 0, 0, 321, 0, - 0, 0, 322, 0, 321, 0, 0, 0, 0, 0, - 0, 321, 0, 321, 0, 0, 321, 0, 321, 0, - 321, 323, 194, 195, 323, 0, 0, 78, 0, 0, - 0, 0, 0, 0, 322, 0, 196, 322, 0, 0, - 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, - 0, 0, 0, 199, 0, 322, 323, 322, 323, 80, - 322, 0, 81, 20, 0, 0, 200, 201, 0, 0, - 202, 0, 203, 322, 0, 0, 0, 0, 0, 204, - 205, 206, 207, 0, 0, 208, 209, 322, 0, 0, - 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, - 322, 0, 322, 323, 0, 322, 0, 322, 677, 322, - 0, 0, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 323, 332, 332, 332, 332, 332, - 332, 332, 323, 333, 333, 333, 333, 333, 333, 333, - 333, 333, 333, 333, 333, 0, 333, 333, 333, 333, - 333, 333, 333, 0, 0, 0, 0, 78, 0, 0, - 0, 0, 0, 0, 323, 0, 196, 323, 0, 0, - 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, - 0, 0, 0, 199, 0, 323, 0, 323, 0, 80, - 323, 0, 81, 20, 0, 0, 200, 201, 0, 0, - 202, 0, 0, 323, 263, 0, 0, 0, 0, 204, - 205, 206, 207, 0, 0, 208, 209, 323, 0, 332, - 0, 0, 0, 323, 0, 332, 0, 0, 0, 0, - 323, 0, 323, 0, 0, 323, 0, 323, 0, 323, - 333, 0, 0, 0, 0, 0, 333, 264, 194, 195, - 650, 265, 266, 78, 267, 0, 0, 268, 0, 0, - 0, 269, 196, 0, 0, 651, 0, 0, 270, 271, - 5, 272, 0, 273, 274, 198, 275, 0, 78, 276, - 0, 0, 0, 0, 0, 80, 0, 196, 81, 20, - 0, 0, 0, 197, 0, 0, 277, 0, 157, 717, - 198, 0, 278, 0, 199, 204, 205, 206, 207, 0, - 80, 208, 209, 81, 20, 0, 0, 200, 201, 0, - 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, - 204, 205, 206, 207, 263, 0, 208, 209, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 332, 332, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, - 0, 0, 0, 0, 333, 333, 0, 264, 194, 195, - 650, 265, 266, 78, 267, 0, 0, 268, 0, 0, - 333, 269, 196, 0, 0, 651, 0, 0, 270, 271, - 5, 272, 263, 273, 274, 198, 275, 0, 0, 276, - 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, - 0, 0, 0, 0, 0, 0, 277, 0, 157, 745, - 0, 0, 278, 0, 0, 204, 205, 206, 207, 0, - 0, 208, 209, 0, 0, 264, 194, 195, -264, 265, - 266, 78, 267, 0, 0, 268, 0, 0, 0, 269, - 196, 0, 0, -264, 0, 0, 270, 271, 5, 272, - 263, 273, 274, 198, 275, 0, 0, 276, 0, 0, - 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, - 0, 0, 0, 0, 277, 0, 157, -264, 0, 0, - 278, 0, 0, 204, 205, 206, 207, 0, 0, 208, - 209, 0, 0, 264, 194, 195, 0, 265, 266, 78, - 267, 0, 0, 268, 0, 0, 0, 269, 196, 0, - 0, 0, 0, 0, 270, 271, 5, 272, 263, 273, + 331, 331, 331, 331, 331, 331, 631, 84, 101, 492, + 434, -65, 417, 500, 761, -65, 673, 413, -322, 551, + 766, 694, 46, 119, 427, 316, 46, 636, 189, 462, + 726, 128, 316, -30, 1, 746, 282, 53, 546, 419, + 316, 42, 316, 282, 423, 316, 137, 454, 475, 138, + 139, 282, 486, 282, -65, 501, 558, -256, -65, -66, + 438, 638, -31, 1, 88, 408, 566, 643, 568, 317, + 646, 763, 71, -158, 450, 189, 317, 2, 492, 250, + 139, 640, 442, 450, 317, 445, 317, 647, 3, 317, + 327, 133, 465, 331, 4, 463, 328, 647, 674, 331, + 5, 591, -66, 593, 418, 407, 2, 679, 749, 58, + 652, 57, 280, 498, 318, 280, 685, 599, 487, 678, + 129, 755, 20, 4, 157, 653, -28, 1, 492, 5, + 165, 420, 7, 245, 42, 760, 424, -97, 133, 455, + 476, 316, -97, -97, -97, -97, 148, 502, 694, 66, + 98, 248, 282, 749, 102, 755, 78, 760, 120, 654, + 109, 7, 50, 165, 727, 196, -160, 729, 112, 281, + 2, 197, 281, 641, -139, -29, 1, 731, 198, 648, + 57, 3, 199, 189, 149, 317, 252, 4, 80, 732, + 280, 81, 20, 5, 20, 200, 201, 735, 157, 202, + 84, 6, 397, 179, -32, 1, 253, 151, 204, 205, + 206, 207, 458, 154, 208, 209, 280, 167, 257, 2, + -34, 1, -33, 1, 493, 7, 318, 177, 331, 331, + 3, 319, 320, 318, 20, 20, 4, 183, 188, 20, + 324, 318, 5, 318, 331, 20, 318, 281, 2, 157, + 167, 99, 441, 20, 118, 2, 103, 88, 359, 3, + 366, 78, 456, 134, 2, 4, 2, 682, 100, 20, + 2, 5, 180, 281, 7, 106, 78, 280, 594, 280, + 460, 4, 493, 4, 385, 595, 464, 5, 579, 5, + 494, 316, 20, 80, 316, 495, 81, 20, 20, 496, + 159, 714, 282, 7, 203, 282, 602, 722, 80, 20, + 131, 81, 20, 441, 630, 155, 441, 634, 549, 7, + 178, 7, 20, 20, 328, 20, 316, 344, 316, -35, + 1, 159, 329, 159, 281, 317, 281, 484, 317, 441, + 652, 485, 318, 319, 320, 20, 689, 20, 494, 493, + 319, 320, 441, 495, 321, 653, 121, 496, 319, 320, + 319, 320, 618, 319, 320, 20, 441, 20, 619, 316, + 317, 20, 317, 2, 316, 341, 78, 35, 57, 441, + 282, -497, -497, 754, 441, 282, 441, 757, 441, 716, + 4, 35, 690, 359, 36, 316, 5, 78, 364, 35, + 37, -341, -341, 316, 140, 78, 282, 32, 80, 141, + 142, 81, 20, 317, 122, 494, 36, 686, 317, 30, + 495, 34, 37, 619, 496, -498, -498, 32, 7, 80, + 322, 32, 81, 20, 20, 316, 728, 80, 316, 317, + 81, 20, 619, 51, 730, 386, 282, 317, 32, 282, + 619, 600, 387, -341, 600, 705, 316, -341, 316, 319, + 320, 316, 365, 603, 569, 605, 321, 282, 570, 282, + -343, -343, 282, 321, 316, 378, 379, 380, 381, 317, + 388, 321, 317, 321, 527, 282, 321, 400, 316, 401, + 477, -156, 318, 478, 316, 318, 435, 359, 2, 282, + 317, 316, 317, 316, 78, 317, 316, 439, 316, 469, + 316, 323, 282, 737, 382, 443, 738, 282, 317, 282, + 453, 282, -343, 370, 371, 372, -343, 318, 550, 318, + 368, 369, 317, 78, 139, 35, 80, 584, 317, 81, + 20, 78, 322, 373, 374, 317, 586, 317, 596, 322, + 317, 622, 317, 627, 317, 383, 384, 322, 37, 322, + 391, 392, 322, 78, 628, 80, -407, -407, 81, 20, + 318, 632, 196, 80, 633, 318, 81, 20, 197, 767, + -408, -408, 321, 639, 771, 198, 773, 649, 774, 199, + 659, -496, -496, 360, 665, 80, 318, 361, 81, 20, + 666, 362, 200, 201, 318, 667, 202, 141, 142, 319, + 320, 602, 319, 320, 156, 204, 205, 206, 207, 710, + 78, 208, 209, 323, 510, 512, 2, 531, 533, 79, + 323, 4, 78, 375, 376, 377, 318, 5, 323, 318, + 323, 723, 588, 323, 319, 320, 319, 320, 520, 522, + 524, 526, 80, 736, -207, 81, 20, 318, 322, 318, + 739, 740, 318, 741, 80, 157, 158, 81, 20, 332, + 332, 332, 332, 742, 748, 318, 394, 332, 332, -15, + 466, 467, 468, 750, -496, -496, 360, 319, 320, 318, + 430, 758, 319, 320, 431, 318, 770, 191, 759, 192, + 193, 765, 318, 768, 318, 772, 776, 318, 777, 318, + 2, 318, 529, 319, 320, 33, 78, 75, 514, 516, + 518, 319, 320, -15, 108, 79, 256, 4, -496, -496, + 360, 190, 321, 5, 430, 321, 254, 395, 362, 323, + 554, 194, 195, 73, 127, 449, 78, 403, 80, 437, + 717, 81, 20, 319, 320, 196, 319, 320, 452, 644, + 718, 197, 82, 645, 473, 535, 539, 321, 198, 321, + 537, 541, 199, 688, 319, 320, 319, 320, 80, 319, + 320, 81, 20, 548, 543, 200, 201, 0, 0, 202, + 0, 203, 319, 320, 0, 0, 0, 0, 204, 205, + 206, 207, 0, 0, 208, 209, 319, 320, 322, 0, + 321, 322, 319, 320, 0, 321, 0, 0, 0, 319, + 320, 319, 320, 0, 319, 320, 319, 320, 319, 320, + 0, -496, -496, 360, 0, 0, 321, 480, 0, 0, + 0, 362, 0, 322, 321, 322, 0, 332, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, 332, 0, + 332, 332, 332, 332, 332, 332, 332, 156, -496, -496, + 360, 0, 0, 78, 361, 0, 321, 0, 431, 321, + 0, 0, 79, 0, 4, 0, 322, 0, 0, 323, + 5, 322, 323, 0, 0, 0, 0, 321, 0, 321, + 0, 0, 321, 0, 0, 80, 0, 0, 81, 20, + 0, 0, 322, 0, 0, 321, 0, 0, 157, 255, + 322, 0, 0, 0, 323, 0, 323, 0, 0, 321, + 0, 333, 333, 333, 333, 321, 0, 0, 0, 333, + 333, 0, 321, 0, 321, 0, 0, 321, 0, 321, + 0, 321, 322, 0, 332, 322, 0, 0, 0, -15, + 332, 0, 0, 0, -496, -496, 360, 323, 0, 0, + 430, 0, 323, 322, 629, 322, 0, 414, 322, 192, + 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 322, 0, 323, 0, 0, 0, 0, 0, 0, + 0, 323, 0, 0, 0, 322, 0, 0, 0, 0, + 0, 322, 0, 0, 0, 0, 0, 0, 322, 0, + 322, 194, 195, 322, 0, 322, 78, 322, 0, 0, + 0, 0, 0, 323, 0, 196, 323, 0, 0, 0, + 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, + 0, 0, 199, 0, 323, 0, 323, 0, 80, 323, + 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, + 0, 0, 323, 0, 0, 415, 0, 0, 204, 205, + 206, 207, 0, 0, 208, 209, 323, 263, 0, 332, + 332, 0, 323, 0, 0, 0, 0, 0, 0, 323, + 0, 323, 0, 0, 323, 332, 323, 0, 323, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, + 333, 0, 333, 333, 333, 333, 333, 333, 333, 0, + 264, 194, 195, 652, 265, 266, 78, 267, 0, 0, + 268, 0, 0, 0, 269, 196, 0, 0, 653, 0, + 0, 270, 271, 5, 272, 0, 273, 274, 198, 275, + 263, 0, 276, 0, 0, 0, 0, 0, 80, 0, + 0, 81, 20, 0, 0, 0, 0, 0, 0, 277, + 0, 157, 719, 0, 0, 278, 0, 0, 204, 205, + 206, 207, 0, 0, 208, 209, 0, 0, 0, 0, + 0, 0, 0, 264, 194, 195, 652, 265, 266, 78, + 267, 0, 0, 268, 0, 0, 333, 269, 196, 0, + 0, 653, 333, 0, 270, 271, 5, 272, 263, 273, 274, 198, 275, 0, 0, 276, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 0, 0, - 0, 0, 277, 0, 157, 436, 0, 0, 278, 0, + 0, 0, 277, 0, 157, 747, 0, 0, 278, 0, 0, 204, 205, 206, 207, 0, 0, 208, 209, 0, - 0, 264, 194, 195, 0, 265, 266, 78, 267, 0, - 0, 268, 0, 0, 0, 269, 196, 0, 0, 0, - 0, 0, 270, 271, 5, 272, 263, 273, 274, 198, - 275, 0, 0, 276, 0, 0, 0, 0, 0, 80, + 0, 264, 194, 195, -266, 265, 266, 78, 267, 0, + 0, 268, 0, 0, 0, 269, 196, 0, 0, -266, + 0, 0, 270, 271, 5, 272, 0, 273, 274, 198, + 275, 2, 0, 276, 0, 0, 0, 78, 0, 80, + 0, 263, 81, 20, 0, 0, 79, 0, 4, 0, + 277, 0, 157, -266, 5, 0, 278, 0, 0, 204, + 205, 206, 207, 0, 0, 208, 209, 0, 0, 80, 0, 0, 81, 20, 0, 0, 0, 0, 0, 0, - 277, 0, 157, 0, 0, 0, 278, 0, 0, 204, - 205, 206, 207, 0, 0, 208, 209, 0, 0, 440, - 194, 195, 0, 265, 266, 78, 267, 0, 0, 268, - 0, 0, 0, 269, 196, 0, 0, 0, 0, 0, - 270, 271, 263, 272, 0, 273, 274, 198, 275, 0, - 0, 276, 0, 0, 0, 0, 0, 80, 0, 0, - 81, 20, 0, 0, 0, 0, 0, 0, 277, 0, - 157, 0, 0, 0, 278, 0, 0, 204, 205, 206, - 207, 0, 0, 208, 209, 440, 194, 195, 0, 691, - 266, 78, 267, 0, 0, 268, 0, 0, 0, 269, - 196, 0, 0, 0, 0, 0, 270, 271, 0, 272, - 0, 273, 274, 198, 275, 0, 614, 276, 192, 193, - 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, - 0, 0, 0, 0, 277, 0, 157, 0, 0, 0, - 278, 0, 0, 204, 205, 206, 207, 0, 0, 208, - 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 194, 195, 0, 0, 0, 78, 0, 0, 0, 0, - 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, - 197, 414, 0, 192, 193, 0, 0, 198, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, - 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, - 203, 615, 0, 0, 0, 0, 0, 204, 205, 206, - 207, 0, 0, 208, 209, 194, 195, 0, 0, 0, - 78, 0, 544, 0, 192, 193, 0, 0, 0, 196, - 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, - 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, - 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, - 201, 0, 0, 202, 0, 0, 194, 195, 0, 415, - 0, 78, 204, 205, 206, 207, 0, 0, 208, 209, - 196, 0, 0, 0, 0, 0, 197, 491, 0, 192, - 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 80, 0, 0, 81, 20, 0, 545, - 200, 201, 0, 0, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 204, 205, 206, 207, 0, 0, 208, - 209, 194, 195, 0, 0, 0, 78, 0, 580, 0, - 192, 193, 0, 0, 0, 196, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, + 0, 333, 333, 126, 264, 194, 195, 0, 265, 266, + 78, 267, 0, 0, 268, 0, 0, 333, 269, 196, + 0, 0, 0, 0, 0, 270, 271, 5, 272, 263, + 273, 274, 198, 275, 0, 0, 276, 0, 0, 0, + 0, 0, 80, 0, 0, 81, 20, 0, 0, 0, + 0, 0, 0, 277, 0, 157, 436, 0, 0, 278, + 0, 0, 204, 205, 206, 207, 0, 0, 208, 209, + 0, 0, 264, 194, 195, 0, 265, 266, 78, 267, + 0, 0, 268, 0, 0, 0, 269, 196, 0, 0, + 0, 0, 0, 270, 271, 5, 272, 263, 273, 274, + 198, 275, 0, 0, 276, 0, 0, 0, 0, 0, + 80, 0, 0, 81, 20, 0, 0, 0, 0, 0, + 0, 277, 0, 157, 0, 0, 0, 278, 0, 0, + 204, 205, 206, 207, 0, 0, 208, 209, 0, 0, + 440, 194, 195, 0, 265, 266, 78, 267, 0, 0, + 268, 0, 0, 0, 269, 196, 0, 0, 0, 0, + 0, 270, 271, 263, 272, 0, 273, 274, 198, 275, + 0, 0, 276, 0, 0, 0, 0, 0, 80, 0, + 0, 81, 20, 0, 0, 0, 0, 0, 0, 277, + 0, 157, 0, 0, 0, 278, 0, 0, 204, 205, + 206, 207, 0, 0, 208, 209, 440, 194, 195, 0, + 693, 266, 78, 267, 0, 0, 268, 0, 0, 0, + 269, 196, 0, 0, 0, 0, 0, 270, 271, 0, + 272, 0, 273, 274, 198, 275, 0, 615, 276, 192, + 193, 0, 0, 0, 80, 0, 0, 81, 20, 0, + 0, 0, 0, 0, 0, 277, 0, 157, 0, 0, + 0, 278, 0, 0, 204, 205, 206, 207, 0, 0, + 208, 209, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 194, 195, 0, 0, 0, 78, 0, 0, 0, + 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, + 0, 197, 544, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, - 0, 0, 194, 195, 148, 0, 0, 78, 204, 205, - 206, 207, 0, 0, 208, 209, 196, 0, 0, 0, - 0, 0, 197, 588, 0, 192, 193, 0, 0, 198, + 0, 203, 616, 0, 0, 0, 0, 0, 204, 205, + 206, 207, 0, 0, 208, 209, 194, 195, 0, 0, + 0, 78, 0, 491, 0, 192, 193, 0, 0, 0, + 196, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 80, 0, 0, 81, 20, 0, 545, + 200, 201, 0, 0, 202, 0, 0, 194, 195, 0, + 0, 0, 78, 204, 205, 206, 207, 0, 0, 208, + 209, 196, 0, 0, 0, 0, 0, 197, 581, 0, + 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, + 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, + 0, 200, 201, 0, 0, 202, 0, 0, 0, 0, + 148, 0, 0, 0, 204, 205, 206, 207, 0, 0, + 208, 209, 194, 195, 0, 0, 0, 78, 0, 589, + 0, 192, 193, 0, 0, 0, 196, 0, 0, 0, + 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, - 202, 581, 0, 0, 0, 0, 0, 0, 0, 204, - 205, 206, 207, 0, 0, 208, 209, 194, 195, 0, - 0, 0, 78, 0, 596, 0, 192, 193, 0, 0, - 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, - 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, - 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, - 0, 200, 201, 0, 0, 202, 0, 0, 194, 195, - 0, 589, 0, 78, 204, 205, 206, 207, 0, 0, - 208, 209, 196, 0, 0, 0, 0, 0, 197, 605, - 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, - 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, - 0, 0, 200, 201, 0, 0, 202, 0, 0, 0, - 0, 597, 0, 0, 0, 204, 205, 206, 207, 0, - 0, 208, 209, 194, 195, 0, 0, 0, 78, 0, - 491, 0, 192, 193, 0, 0, 0, 196, 0, 0, - 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, + 202, 582, 0, 194, 195, 0, 0, 0, 78, 204, + 205, 206, 207, 0, 0, 208, 209, 196, 0, 0, + 0, 0, 0, 197, 597, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, - 0, 202, 606, 0, 194, 195, 0, 0, 0, 78, - 204, 205, 206, 207, 0, 0, 208, 209, 196, 0, - 0, 0, 0, 0, 197, 580, 0, 192, 193, 0, + 0, 202, 0, 0, 0, 0, 0, 590, 0, 0, + 204, 205, 206, 207, 0, 0, 208, 209, 194, 195, + 0, 0, 0, 78, 0, 606, 0, 192, 193, 0, + 0, 0, 196, 0, 0, 0, 0, 0, 197, 0, + 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, + 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, + 0, 0, 200, 201, 0, 0, 202, 0, 0, 194, + 195, 598, 0, 0, 78, 204, 205, 206, 207, 0, + 0, 208, 209, 196, 0, 0, 0, 0, 0, 197, + 491, 0, 192, 193, 0, 0, 198, 0, 0, 0, + 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, + 20, 0, 0, 200, 201, 0, 0, 202, 607, 0, + 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, + 0, 0, 208, 209, 194, 195, 0, 0, 0, 78, + 0, 581, 0, 192, 193, 0, 0, 0, 196, 0, + 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, - 0, 0, 202, 0, 0, 0, 0, 597, 0, 0, - 0, 204, 205, 206, 207, 0, 0, 208, 209, 194, - 195, 0, 0, 0, 78, 0, 705, 0, 192, 193, - 0, 0, 0, 196, 0, 0, 0, 0, 0, 197, - 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, - 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, - 20, 0, 0, 200, 201, 0, 0, 202, 689, 0, - 194, 195, 0, 0, 0, 78, 204, 205, 206, 207, - 0, 0, 208, 209, 196, 0, 0, 0, 0, 0, - 197, 705, 0, 192, 193, 0, 0, 198, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, - 81, 20, 0, 0, 200, 201, 0, 0, 202, 706, - 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, - 207, 0, 0, 208, 209, 194, 195, 0, 0, 0, - 78, 0, 588, 0, 192, 193, 0, 0, 0, 196, - 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, + 0, 0, 202, 0, 0, 194, 195, 598, 0, 0, + 78, 204, 205, 206, 207, 0, 0, 208, 209, 196, + 0, 0, 0, 0, 0, 197, 707, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, - 201, 0, 0, 202, 749, 0, 194, 195, 0, 0, - 0, 78, 204, 205, 206, 207, 0, 0, 208, 209, - 196, 0, 0, 0, 0, 0, 197, 330, 0, 192, - 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, - 200, 201, 0, 0, 202, 0, 0, 0, 0, 0, - 754, 0, 0, 204, 205, 206, 207, 0, 0, 208, - 209, 194, 195, 0, 0, 0, 78, 0, 335, 0, - 192, 193, 0, 0, 0, 196, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, + 201, 0, 0, 202, 691, 0, 0, 0, 0, 0, + 0, 0, 204, 205, 206, 207, 0, 0, 208, 209, + 194, 195, 0, 0, 0, 78, 0, 707, 0, 192, + 193, 0, 0, 0, 196, 0, 0, 0, 0, 0, + 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, + 81, 20, 0, 0, 200, 201, 0, 0, 202, 708, + 0, 194, 195, 0, 0, 0, 78, 204, 205, 206, + 207, 0, 0, 208, 209, 196, 0, 0, 0, 0, + 0, 197, 589, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, - 0, 0, 194, 195, 0, 0, 0, 78, 204, 205, - 206, 207, 0, 0, 208, 209, 196, 0, 0, 0, - 0, 0, 197, 337, 0, 192, 193, 0, 0, 198, + 751, 0, 0, 0, 0, 0, 0, 0, 204, 205, + 206, 207, 0, 0, 208, 209, 194, 195, 0, 0, + 0, 78, 0, 330, 0, 192, 193, 0, 0, 0, + 196, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, + 200, 201, 0, 0, 202, 0, 0, 194, 195, 0, + 756, 0, 78, 204, 205, 206, 207, 0, 0, 208, + 209, 196, 0, 0, 0, 0, 0, 197, 335, 0, + 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, + 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, + 0, 200, 201, 0, 0, 202, 0, 0, 0, 0, + 0, 0, 0, 0, 204, 205, 206, 207, 0, 0, + 208, 209, 194, 195, 0, 0, 0, 78, 0, 337, + 0, 192, 193, 0, 0, 0, 196, 0, 0, 0, + 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 204, - 205, 206, 207, 0, 0, 208, 209, 194, 195, 0, - 0, 0, 78, 0, 339, 0, 192, 193, 0, 0, - 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, - 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, - 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, - 0, 200, 201, 0, 0, 202, 0, 0, 194, 195, - 0, 0, 0, 78, 204, 205, 206, 207, 0, 0, - 208, 209, 196, 0, 0, 0, 0, 0, 197, 348, - 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, - 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, - 0, 0, 200, 201, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 204, 205, 206, 207, 0, - 0, 208, 209, 194, 195, 0, 0, 0, 78, 0, - 350, 0, 192, 193, 0, 0, 0, 196, 0, 0, - 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, + 202, 0, 0, 194, 195, 0, 0, 0, 78, 204, + 205, 206, 207, 0, 0, 208, 209, 196, 0, 0, + 0, 0, 0, 197, 339, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, - 0, 202, 0, 0, 194, 195, 0, 0, 0, 78, - 204, 205, 206, 207, 0, 0, 208, 209, 196, 0, - 0, 0, 0, 0, 197, 352, 0, 192, 193, 0, - 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, - 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, - 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, - 0, 204, 205, 206, 207, 0, 0, 208, 209, 194, - 195, 0, 0, 0, 78, 0, 409, 0, 192, 193, - 0, 0, 0, 196, 0, 0, 0, 0, 0, 197, - 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, + 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, + 204, 205, 206, 207, 0, 0, 208, 209, 194, 195, + 0, 0, 0, 78, 0, 348, 0, 192, 193, 0, + 0, 0, 196, 0, 0, 0, 0, 0, 197, 0, + 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, + 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, + 0, 0, 200, 201, 0, 0, 202, 0, 0, 194, + 195, 0, 0, 0, 78, 204, 205, 206, 207, 0, + 0, 208, 209, 196, 0, 0, 0, 0, 0, 197, + 350, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, 0, - 194, 195, 0, 0, 0, 78, 204, 205, 206, 207, - 0, 0, 208, 209, 196, 0, 0, 0, 0, 0, - 197, 491, 0, 192, 193, 0, 0, 198, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, - 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, - 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, - 207, 0, 0, 208, 209, 194, 195, 0, 0, 0, - 78, 0, 499, 0, 192, 193, 0, 0, 0, 196, - 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, + 0, 0, 208, 209, 194, 195, 0, 0, 0, 78, + 0, 352, 0, 192, 193, 0, 0, 0, 196, 0, + 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, + 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, + 0, 0, 202, 0, 0, 194, 195, 0, 0, 0, + 78, 204, 205, 206, 207, 0, 0, 208, 209, 196, + 0, 0, 0, 0, 0, 197, 409, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, - 201, 0, 0, 202, 0, 0, 194, 195, 0, 0, - 0, 78, 204, 205, 206, 207, 0, 0, 208, 209, - 196, 0, 0, 0, 0, 0, 197, 503, 0, 192, - 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, - 200, 201, 0, 0, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 204, 205, 206, 207, 0, 0, 208, - 209, 194, 195, 0, 0, 0, 78, 0, 505, 0, - 192, 193, 0, 0, 0, 196, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, + 201, 0, 0, 202, 0, 0, 0, 0, 0, 0, + 0, 0, 204, 205, 206, 207, 0, 0, 208, 209, + 194, 195, 0, 0, 0, 78, 0, 491, 0, 192, + 193, 0, 0, 0, 196, 0, 0, 0, 0, 0, + 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, + 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, + 0, 194, 195, 0, 0, 0, 78, 204, 205, 206, + 207, 0, 0, 208, 209, 196, 0, 0, 0, 0, + 0, 197, 499, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, - 0, 0, 194, 195, 0, 0, 0, 78, 204, 205, - 206, 207, 0, 0, 208, 209, 196, 0, 0, 0, - 0, 0, 197, 507, 0, 192, 193, 0, 0, 198, + 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, + 206, 207, 0, 0, 208, 209, 194, 195, 0, 0, + 0, 78, 0, 503, 0, 192, 193, 0, 0, 0, + 196, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, + 200, 201, 0, 0, 202, 0, 0, 194, 195, 0, + 0, 0, 78, 204, 205, 206, 207, 0, 0, 208, + 209, 196, 0, 0, 0, 0, 0, 197, 505, 0, + 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, + 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, + 0, 200, 201, 0, 0, 202, 0, 0, 0, 0, + 0, 0, 0, 0, 204, 205, 206, 207, 0, 0, + 208, 209, 194, 195, 0, 0, 0, 78, 0, 507, + 0, 192, 193, 0, 0, 0, 196, 0, 0, 0, + 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 204, - 205, 206, 207, 0, 0, 208, 209, 194, 195, 0, - 0, 0, 78, 0, 509, 0, 192, 193, 0, 0, - 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, - 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, - 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, - 0, 200, 201, 0, 0, 202, 0, 0, 194, 195, - 0, 0, 0, 78, 204, 205, 206, 207, 0, 0, - 208, 209, 196, 0, 0, 0, 0, 0, 197, 511, - 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, - 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, - 0, 0, 200, 201, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 204, 205, 206, 207, 0, - 0, 208, 209, 194, 195, 0, 0, 0, 78, 0, - 513, 0, 192, 193, 0, 0, 0, 196, 0, 0, - 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, + 202, 0, 0, 194, 195, 0, 0, 0, 78, 204, + 205, 206, 207, 0, 0, 208, 209, 196, 0, 0, + 0, 0, 0, 197, 509, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, - 0, 202, 0, 0, 194, 195, 0, 0, 0, 78, - 204, 205, 206, 207, 0, 0, 208, 209, 196, 0, - 0, 0, 0, 0, 197, 515, 0, 192, 193, 0, - 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, - 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, - 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, - 0, 204, 205, 206, 207, 0, 0, 208, 209, 194, - 195, 0, 0, 0, 78, 0, 517, 0, 192, 193, - 0, 0, 0, 196, 0, 0, 0, 0, 0, 197, - 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, + 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, + 204, 205, 206, 207, 0, 0, 208, 209, 194, 195, + 0, 0, 0, 78, 0, 511, 0, 192, 193, 0, + 0, 0, 196, 0, 0, 0, 0, 0, 197, 0, + 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, + 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, + 0, 0, 200, 201, 0, 0, 202, 0, 0, 194, + 195, 0, 0, 0, 78, 204, 205, 206, 207, 0, + 0, 208, 209, 196, 0, 0, 0, 0, 0, 197, + 513, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, 0, - 194, 195, 0, 0, 0, 78, 204, 205, 206, 207, - 0, 0, 208, 209, 196, 0, 0, 0, 0, 0, - 197, 519, 0, 192, 193, 0, 0, 198, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, - 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, - 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, - 207, 0, 0, 208, 209, 194, 195, 0, 0, 0, - 78, 0, 521, 0, 192, 193, 0, 0, 0, 196, - 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, + 0, 0, 208, 209, 194, 195, 0, 0, 0, 78, + 0, 515, 0, 192, 193, 0, 0, 0, 196, 0, + 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, + 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, + 0, 0, 202, 0, 0, 194, 195, 0, 0, 0, + 78, 204, 205, 206, 207, 0, 0, 208, 209, 196, + 0, 0, 0, 0, 0, 197, 517, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, - 201, 0, 0, 202, 0, 0, 194, 195, 0, 0, - 0, 78, 204, 205, 206, 207, 0, 0, 208, 209, - 196, 0, 0, 0, 0, 0, 197, 523, 0, 192, - 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, - 200, 201, 0, 0, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 204, 205, 206, 207, 0, 0, 208, - 209, 194, 195, 0, 0, 0, 78, 0, 525, 0, - 192, 193, 0, 0, 0, 196, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, + 201, 0, 0, 202, 0, 0, 0, 0, 0, 0, + 0, 0, 204, 205, 206, 207, 0, 0, 208, 209, + 194, 195, 0, 0, 0, 78, 0, 519, 0, 192, + 193, 0, 0, 0, 196, 0, 0, 0, 0, 0, + 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, + 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, + 0, 194, 195, 0, 0, 0, 78, 204, 205, 206, + 207, 0, 0, 208, 209, 196, 0, 0, 0, 0, + 0, 197, 521, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, - 0, 0, 194, 195, 0, 0, 0, 78, 204, 205, - 206, 207, 0, 0, 208, 209, 196, 0, 0, 0, - 0, 0, 197, 530, 0, 192, 193, 0, 0, 198, + 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, + 206, 207, 0, 0, 208, 209, 194, 195, 0, 0, + 0, 78, 0, 523, 0, 192, 193, 0, 0, 0, + 196, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, + 200, 201, 0, 0, 202, 0, 0, 194, 195, 0, + 0, 0, 78, 204, 205, 206, 207, 0, 0, 208, + 209, 196, 0, 0, 0, 0, 0, 197, 525, 0, + 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, + 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, + 0, 200, 201, 0, 0, 202, 0, 0, 0, 0, + 0, 0, 0, 0, 204, 205, 206, 207, 0, 0, + 208, 209, 194, 195, 0, 0, 0, 78, 0, 530, + 0, 192, 193, 0, 0, 0, 196, 0, 0, 0, + 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 204, - 205, 206, 207, 0, 0, 208, 209, 194, 195, 0, - 0, 0, 78, 0, 532, 0, 192, 193, 0, 0, - 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, - 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, - 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, - 0, 200, 201, 0, 0, 202, 0, 0, 194, 195, - 0, 0, 0, 78, 204, 205, 206, 207, 0, 0, - 208, 209, 196, 0, 0, 0, 0, 0, 197, 534, - 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, - 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, - 0, 0, 200, 201, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 204, 205, 206, 207, 0, - 0, 208, 209, 194, 195, 0, 0, 0, 78, 0, - 536, 0, 192, 193, 0, 0, 0, 196, 0, 0, - 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, + 202, 0, 0, 194, 195, 0, 0, 0, 78, 204, + 205, 206, 207, 0, 0, 208, 209, 196, 0, 0, + 0, 0, 0, 197, 532, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, - 0, 202, 0, 0, 194, 195, 0, 0, 0, 78, - 204, 205, 206, 207, 0, 0, 208, 209, 196, 0, - 0, 0, 0, 0, 197, 538, 0, 192, 193, 0, - 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, - 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, - 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, - 0, 204, 205, 206, 207, 0, 0, 208, 209, 194, - 195, 0, 0, 0, 78, 0, 540, 0, 192, 193, - 0, 0, 0, 196, 0, 0, 0, 0, 0, 197, - 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, + 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, + 204, 205, 206, 207, 0, 0, 208, 209, 194, 195, + 0, 0, 0, 78, 0, 534, 0, 192, 193, 0, + 0, 0, 196, 0, 0, 0, 0, 0, 197, 0, + 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, + 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, + 0, 0, 200, 201, 0, 0, 202, 0, 0, 194, + 195, 0, 0, 0, 78, 204, 205, 206, 207, 0, + 0, 208, 209, 196, 0, 0, 0, 0, 0, 197, + 536, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, 0, - 194, 195, 0, 0, 0, 78, 204, 205, 206, 207, - 0, 0, 208, 209, 196, 0, 0, 0, 0, 0, - 197, 542, 0, 192, 193, 0, 0, 198, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, - 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, - 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, - 207, 0, 0, 208, 209, 194, 195, 0, 0, 0, - 78, 0, 547, 0, 192, 193, 0, 0, 0, 196, - 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, + 0, 0, 208, 209, 194, 195, 0, 0, 0, 78, + 0, 538, 0, 192, 193, 0, 0, 0, 196, 0, + 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, + 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, + 0, 0, 202, 0, 0, 194, 195, 0, 0, 0, + 78, 204, 205, 206, 207, 0, 0, 208, 209, 196, + 0, 0, 0, 0, 0, 197, 540, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, - 201, 0, 0, 202, 0, 0, 194, 195, 0, 0, - 0, 78, 204, 205, 206, 207, 0, 0, 208, 209, - 196, 0, 0, 0, 0, 0, 197, 556, 0, 192, - 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, - 200, 201, 0, 0, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 204, 205, 206, 207, 0, 0, 208, - 209, 194, 195, 0, 0, 0, 78, 0, 564, 0, - 192, 193, 0, 0, 0, 196, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, + 201, 0, 0, 202, 0, 0, 0, 0, 0, 0, + 0, 0, 204, 205, 206, 207, 0, 0, 208, 209, + 194, 195, 0, 0, 0, 78, 0, 542, 0, 192, + 193, 0, 0, 0, 196, 0, 0, 0, 0, 0, + 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, + 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, + 0, 194, 195, 0, 0, 0, 78, 204, 205, 206, + 207, 0, 0, 208, 209, 196, 0, 0, 0, 0, + 0, 197, 547, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, - 0, 0, 194, 195, 0, 0, 0, 78, 204, 205, - 206, 207, 0, 0, 208, 209, 196, 0, 0, 0, - 0, 0, 197, 566, 0, 192, 193, 0, 0, 198, + 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, + 206, 207, 0, 0, 208, 209, 194, 195, 0, 0, + 0, 78, 0, 557, 0, 192, 193, 0, 0, 0, + 196, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, + 200, 201, 0, 0, 202, 0, 0, 194, 195, 0, + 0, 0, 78, 204, 205, 206, 207, 0, 0, 208, + 209, 196, 0, 0, 0, 0, 0, 197, 565, 0, + 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, + 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, + 0, 200, 201, 0, 0, 202, 0, 0, 0, 0, + 0, 0, 0, 0, 204, 205, 206, 207, 0, 0, + 208, 209, 194, 195, 0, 0, 0, 78, 0, 567, + 0, 192, 193, 0, 0, 0, 196, 0, 0, 0, + 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 204, - 205, 206, 207, 0, 0, 208, 209, 194, 195, 0, - 0, 0, 78, 0, 591, 0, 192, 193, 0, 0, - 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, - 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, - 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, - 0, 200, 201, 0, 0, 202, 0, 0, 194, 195, - 0, 0, 0, 78, 204, 205, 206, 207, 0, 0, - 208, 209, 196, 0, 0, 0, 0, 0, 197, 608, - 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, - 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, - 0, 0, 200, 201, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 204, 205, 206, 207, 0, - 0, 208, 209, 194, 195, 0, 0, 0, 78, 0, - 675, 0, 192, 193, 0, 0, 0, 196, 0, 0, - 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, + 202, 0, 0, 194, 195, 0, 0, 0, 78, 204, + 205, 206, 207, 0, 0, 208, 209, 196, 0, 0, + 0, 0, 0, 197, 592, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, - 0, 202, 0, 0, 194, 195, 0, 0, 0, 78, - 204, 205, 206, 207, 0, 0, 208, 209, 196, 0, - 0, 0, 0, 0, 197, 679, 0, 192, 193, 0, - 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, - 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, - 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, - 0, 204, 205, 206, 207, 0, 0, 208, 209, 194, - 195, 0, 0, 0, 78, 0, 685, 0, 192, 193, - 0, 0, 0, 196, 0, 0, 0, 0, 0, 197, - 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, + 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, + 204, 205, 206, 207, 0, 0, 208, 209, 194, 195, + 0, 0, 0, 78, 0, 609, 0, 192, 193, 0, + 0, 0, 196, 0, 0, 0, 0, 0, 197, 0, + 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, + 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, + 0, 0, 200, 201, 0, 0, 202, 0, 0, 194, + 195, 0, 0, 0, 78, 204, 205, 206, 207, 0, + 0, 208, 209, 196, 0, 0, 0, 0, 0, 197, + 677, 0, 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, 0, - 194, 195, 0, 0, 0, 78, 204, 205, 206, 207, - 0, 0, 208, 209, 196, 0, 0, 0, 0, 0, - 197, 711, 0, 192, 193, 0, 0, 198, 0, 0, + 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, + 0, 0, 208, 209, 194, 195, 0, 0, 0, 78, + 0, 681, 0, 192, 193, 0, 0, 0, 196, 0, + 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, + 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, + 0, 0, 202, 0, 0, 194, 195, 0, 0, 0, + 78, 204, 205, 206, 207, 0, 0, 208, 209, 196, + 0, 0, 0, 0, 0, 197, 687, 0, 192, 193, + 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, + 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, + 201, 0, 0, 202, 0, 0, 0, 0, 0, 0, + 0, 0, 204, 205, 206, 207, 0, 0, 208, 209, + 194, 195, 0, 0, 0, 78, 0, 713, 0, 192, + 193, 0, 0, 0, 196, 0, 0, 0, 0, 0, + 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, 0, - 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, - 207, 0, 0, 208, 209, 194, 195, 0, 0, 0, - 78, 0, 574, 0, 0, 0, 0, 0, 0, 196, - 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, - 0, 0, 198, 0, 0, 0, 199, 660, 0, 0, - 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, - 201, 0, 0, 202, 0, -287, -287, -287, 0, 0, - 0, -287, 204, 205, 206, 207, 0, 0, 208, 209, - -287, 0, 0, 0, 0, 0, -287, 0, 0, 722, - 0, 194, 195, -287, 0, 0, 78, -287, 0, 0, - 0, 0, 0, -287, 0, 196, -287, -287, 0, 0, - 0, 197, 0, 0, -287, 0, 192, 193, 198, 0, - -287, 0, 199, -287, -287, -287, -287, 0, 80, -287, - -287, 81, 20, 194, 195, 0, 0, 0, 78, 277, - -295, 0, 0, 0, 0, 0, 0, 196, 204, 205, - 206, 207, 0, 197, 208, 209, 658, 0, 194, 195, - 198, 0, 0, 78, 199, 0, 0, 0, 0, 0, - 80, 0, 196, 81, 20, 0, 0, 0, 197, 0, - 0, 277, -295, 192, 193, 198, 0, 0, 0, 199, - 204, 205, 206, 207, 0, 80, 208, 209, 81, 20, - 194, 195, 200, 201, 0, 78, 202, 0, 203, 356, - 0, 0, 0, 0, 196, 204, 205, 206, 207, 0, - 197, 208, 209, 0, 0, 194, 195, 198, 0, 0, - 78, 199, 0, 0, 192, 193, 0, 80, 0, 196, - 81, 20, 0, 0, 0, 197, 0, 0, 277, 0, - 0, 0, 198, 0, 0, 0, 199, 204, 205, 206, - 207, 0, 80, 208, 209, 81, 20, 0, 0, 200, - 201, 0, 0, 202, 488, 0, 194, 195, 0, 0, - 0, 78, 204, 205, 206, 207, 0, 0, 208, 209, - 196, 0, 0, 0, 0, 0, 197, 0, 0, 192, - 193, 0, 0, 198, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, - 200, 201, 0, 0, 202, 624, 0, 0, 0, 0, - 0, 0, 0, 204, 205, 206, 207, 0, 0, 208, - 209, 194, 195, 0, 0, 0, 78, 0, 0, 0, - 192, 193, 0, 0, 0, 196, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, + 0, 194, 195, 0, 0, 0, 78, 204, 205, 206, + 207, 0, 0, 208, 209, 196, 0, 0, 0, 0, + 0, 197, 0, 575, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, - 0, 81, 20, 0, 0, 200, 201, 0, 0, 202, - 666, 0, 194, 195, 0, 0, 0, 78, 204, 205, - 206, 207, 0, 0, 208, 209, 196, 0, 0, 0, - 0, 0, 197, 0, 0, 192, 193, 0, 0, 198, + 0, 81, 20, 0, 0, 200, 201, 0, 662, 202, + 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, + 206, 207, 0, 0, 208, 209, -289, -289, -289, 0, + 0, 0, -289, 0, 0, 0, 0, 0, 0, 0, + 0, -289, 0, 0, 0, 0, 0, -289, 0, 0, + 724, 0, 194, 195, -289, 0, 0, 78, -289, 0, + 0, 0, 0, 0, -289, 0, 196, -289, -289, 0, + 0, 0, 197, 0, 0, -289, 0, 192, 193, 198, + 0, -289, 0, 199, -289, -289, -289, -289, 0, 80, + -289, -289, 81, 20, 194, 195, 0, 0, 0, 78, + 277, -297, 0, 0, 0, 0, 0, 0, 196, 204, + 205, 206, 207, 0, 197, 208, 209, 660, 0, 194, + 195, 198, 0, 0, 78, 199, 0, 0, 0, 0, + 0, 80, 0, 196, 81, 20, 0, 0, 0, 197, + 0, 0, 277, -297, 192, 193, 198, 0, 0, 0, + 199, 204, 205, 206, 207, 0, 80, 208, 209, 81, + 20, 194, 195, 200, 201, 0, 78, 202, 0, 203, + 356, 0, 0, 0, 0, 196, 204, 205, 206, 207, + 0, 197, 208, 209, 0, 0, 194, 195, 198, 0, + 0, 78, 199, 0, 0, 192, 193, 0, 80, 0, + 196, 81, 20, 0, 0, 0, 197, 0, 0, 277, + 0, 0, 0, 198, 0, 0, 0, 199, 204, 205, + 206, 207, 0, 80, 208, 209, 81, 20, 0, 0, + 200, 201, 0, 0, 202, 488, 0, 194, 195, 0, + 0, 0, 78, 204, 205, 206, 207, 0, 0, 208, + 209, 196, 0, 0, 0, 0, 0, 197, 0, 0, + 192, 193, 0, 0, 198, 0, 0, 0, 199, 0, + 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, + 0, 200, 201, 0, 0, 202, 625, 0, 0, 0, + 0, 0, 0, 0, 204, 205, 206, 207, 0, 0, + 208, 209, 194, 195, 0, 0, 0, 78, 0, 0, + 0, 192, 193, 0, 0, 0, 196, 0, 0, 0, + 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, 0, - 202, 681, 0, 0, 0, 0, 0, 0, 0, 204, - 205, 206, 207, 0, 0, 208, 209, 194, 195, 0, - 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, - 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, - 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, - 0, 0, 0, 0, 80, 0, 0, 81, 20, 0, - 0, 200, 201, 0, 0, 202, 0, 2, 194, 195, - 0, 0, 0, 78, 204, 205, 206, 207, 0, 0, - 208, 209, 196, 0, 0, 0, 0, 0, 197, 0, + 202, 668, 0, 194, 195, 0, 0, 0, 78, 204, + 205, 206, 207, 0, 0, 208, 209, 196, 0, 0, + 0, 0, 0, 197, 0, 0, 192, 193, 0, 0, + 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, + 80, 0, 0, 81, 20, 0, 0, 200, 201, 0, + 0, 202, 683, 0, 0, 0, 0, 0, 0, 0, + 204, 205, 206, 207, 0, 0, 208, 209, 194, 195, + 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, 20, - 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, - 0, 0, 0, 0, 0, 204, 205, 206, 207, 0, - 0, 208, 209 + 0, 0, 200, 201, 0, 0, 202, 0, 2, 194, + 195, 0, 0, 0, 78, 204, 205, 206, 207, 0, + 0, 208, 209, 196, 0, 0, 0, 0, 0, 197, + 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, + 199, 0, 0, 0, 0, 0, 80, 0, 0, 81, + 20, 0, 0, 0, 0, 0, 0, 277, 0, 0, + 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, + 0, 0, 208, 209 }; static const short yycheck[] = { 3, - 132, 403, 6, 287, 307, 123, 328, 42, 62, 175, - 203, 46, 134, 294, 483, 179, 0, 83, 117, 1, - 62, 302, 129, 304, 86, 9, 10, 11, 1, 64, - 1, 1, 663, 1, 69, 89, 62, 1, 42, 655, - 94, 97, 46, 1, 95, 101, 30, 1, 634, 33, - 34, 150, 94, 1, 153, 162, 122, 123, 62, 1, - 64, 1, 169, 89, 94, 69, 1, 51, 94, 1, - 100, 129, 100, 172, 1, 129, 198, 1, 62, 133, - 192, 193, 194, 195, 346, 89, 1, 129, 200, 201, - 94, 353, 354, 128, 1, 1, 67, 67, 101, 134, - 716, 72, 1, 129, 162, 76, 160, 133, 162, 695, - 94, 175, 698, 1, 1, 86, 1, 99, 435, 101, - 162, 175, 1, 754, 128, 129, 180, 1, 101, 133, - 134, 99, 763, 101, 160, 99, 162, 4, 5, 93, - 98, 634, 1, 612, 198, 129, 86, 101, 202, 133, - 552, 99, 259, 555, 180, 254, 160, 99, 162, 476, - 1, 279, 326, 198, 99, 100, 273, 99, 100, 36, - 37, 175, 99, 40, 98, 761, 180, 1, 162, 94, - 766, 52, 768, 50, 770, 502, 634, 94, 192, 193, - 194, 195, 98, 100, 198, 94, 200, 201, 202, 253, - 634, 100, 695, 1, 140, 698, 93, 329, 470, 94, - 98, 473, 79, 92, 93, 100, 83, 1, 97, 98, - 99, 100, 63, 287, 1, 99, 95, 253, 630, 283, - 294, 47, 1, 287, 1, 94, 47, 403, 302, 1, - 304, 100, 1, 307, 0, 1, 62, 695, 1, 253, - 698, 62, 97, 307, 95, 122, 123, 283, 370, 371, - 372, 695, 1, 1, 698, 1, 202, 203, 761, 253, - 94, 555, 139, 766, 328, 768, 100, 770, 595, 283, - 96, 94, 15, 287, 587, 96, 589, 100, 44, 1, - 294, 1, 485, 97, 329, 1, 1, 95, 302, 55, - 304, 99, 328, 307, 621, 61, 1, 1, 175, 1, - 1, 67, 179, 761, 631, 99, 434, 639, 766, 1, - 768, 98, 770, 307, 328, 329, 95, 761, 382, 646, - 266, 98, 766, 269, 768, 100, 770, 99, 1, 403, - 99, 277, 1, 99, 328, 98, 630, 52, 86, 403, - 1, 218, 1, 634, 87, 1, 1, 98, 63, 98, - 663, 99, 98, 45, 46, 477, 370, 371, 372, 373, + 328, 62, 6, 132, 62, 307, 129, 287, 175, 203, + 134, 0, 483, 179, 1, 1, 123, 1, 1, 346, + 9, 10, 11, 1, 83, 42, 353, 354, 89, 46, + 9, 89, 1, 94, 53, 1, 94, 657, 42, 162, + 1, 30, 46, 72, 33, 34, 169, 64, 435, 1, + 94, 62, 69, 97, 33, 86, 1, 86, 62, 294, + 64, 665, 51, 122, 123, 69, 1, 302, 129, 304, + 95, 129, 133, 62, 198, 133, 117, 1, 97, 192, + 193, 194, 195, 94, 636, 89, 1, 200, 201, 476, + 94, 1, 1, 95, 96, 1, 5, 99, 718, 160, + 86, 162, 160, 86, 162, 94, 636, 94, 1, 150, + 94, 128, 153, 100, 175, 502, 100, 134, 129, 180, + 1, 99, 180, 101, 128, 129, 1, 93, 1, 133, + 134, 172, 101, 4, 5, 101, 259, 198, 99, 636, + 129, 202, 613, 470, 133, 697, 473, 99, 700, 101, + 273, 162, 756, 0, 99, 100, 160, 1, 162, 94, + 326, 765, 9, 10, 11, 36, 37, 697, 140, 40, + 700, 175, 279, 162, 1, 99, 180, 86, 88, 50, + 1, 198, 1, 30, 99, 100, 33, 34, 192, 193, + 194, 195, 253, 99, 198, 253, 200, 201, 202, 636, + 697, 94, 1, 700, 51, 329, 100, 100, 79, 596, + 1, 763, 83, 254, 1, 62, 768, 98, 770, 1, + 772, 94, 283, 1, 99, 283, 287, 100, 1, 1, + 202, 203, 1, 763, 1, 622, 403, 1, 768, 1, + 770, 1, 772, 1, 1, 632, 307, 94, 92, 253, + 94, 122, 123, 97, 98, 99, 100, 370, 371, 372, + 697, 648, 1, 700, 253, 1, 763, 328, 139, 1, + 328, 768, 99, 770, 95, 772, 556, 15, 99, 283, + 99, 93, 129, 287, 94, 97, 588, 97, 590, 101, + 294, 485, 101, 175, 266, 94, 1, 269, 302, 1, + 304, 100, 1, 307, 175, 277, 1, 98, 179, 45, + 46, 98, 329, 641, 1, 162, 98, 86, 307, 86, + 98, 382, 95, 95, 328, 329, 763, 434, 1, 86, + 99, 768, 99, 770, 98, 772, 98, 175, 98, 328, + 1, 99, 403, 1, 1, 732, 52, 218, 1, 87, + 86, 631, 88, 1, 97, 91, 92, 93, 1, 1, + 99, 97, 94, 665, 477, 101, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 552, 99, 94, 99, - 95, 1, 86, 52, 448, 86, 1, 175, 93, 403, - 63, 268, 1, 95, 86, 99, 88, 52, 275, 91, - 92, 93, 279, 730, 695, 97, 1, 698, 63, 101, - 287, 1, 448, 1, 1, 361, 1, 294, 175, 365, - 1, 53, 95, 129, 718, 302, 95, 304, 1, 1, - 721, 92, 88, 94, 448, 94, 97, 98, 99, 100, - 95, 754, 94, 734, 390, 97, 1, 9, 1, 326, - 763, 1, 569, 93, 44, 572, 162, 748, 1, 1, - 50, 1, 408, 477, 606, 97, 343, 1, 1, 483, - 761, 33, 418, 93, 420, 766, 1, 768, 552, 770, - 95, 555, 624, 65, 430, 362, 95, 364, 552, 611, - 72, 555, 82, 1, 1, 85, 86, 5, 93, 287, - 1, 88, 0, 1, 94, 93, 294, 453, 93, 455, - 1, 1, 93, 587, 302, 589, 304, 91, 92, 307, - 1, 94, 94, 469, 67, 107, 403, 0, 1, 1, - 287, 86, 674, 94, 480, 72, 97, 294, 552, 485, - 93, 555, 684, 93, 175, 302, 44, 304, 665, 86, - 307, 93, 1, 93, 431, 1, 630, 434, 1, 93, - 634, 86, 470, 61, 1, 473, 630, 0, 1, 67, - 1, 44, 1, 1, 95, 639, 97, 94, 86, 86, - 1, 655, 55, 1, 101, 86, 95, 96, 61, 663, - 99, 655, 0, 1, 67, 86, 86, 611, 612, 0, - 44, 99, 75, 639, 96, 86, 175, 95, 9, 10, - 11, 44, 1, 627, 86, 403, 630, 61, 0, 1, - 634, 695, 55, 67, 698, 639, 99, 93, 61, 30, - 93, 97, 33, 34, 67, 101, 44, 86, 99, 100, - 86, 655, 716, 86, 718, 639, 403, 721, 695, 86, - 51, 698, 716, 61, 718, 86, 287, 86, 86, 67, - 734, 62, 44, 294, 99, 86, 99, 53, 86, 0, - 1, 302, 618, 304, 748, 552, 307, 100, 555, 61, - 754, 695, 0, 1, 698, 67, 95, 761, 10, 763, - 1, 99, 766, 94, 768, 175, 770, 86, 64, 101, - 94, 1, 716, 69, 718, 651, 100, 721, 30, 1, - 94, 657, 34, 44, 761, 129, 100, 99, 287, 766, - 734, 768, 101, 770, 55, 294, 44, 1, 129, 51, - 61, 94, 101, 302, 748, 304, 67, 100, 307, 50, - 45, 46, 97, 61, 44, 11, 160, 761, 162, 67, - 50, 628, 766, 630, 768, 95, 770, 634, 50, 99, - 13, 162, 128, 12, 552, 1, 94, 555, 99, 97, - 44, 82, 403, 101, 85, 86, 50, 1, 655, 96, - 14, 99, 82, 100, 175, 85, 86, 733, 95, 1, - 82, 737, 97, 85, 86, 552, 101, 92, 555, 587, - 99, 589, 97, 98, 9, 93, 11, 287, 82, 94, - 93, 85, 86, 99, 294, 100, 45, 46, 695, 97, - 44, 698, 302, 101, 304, 97, 50, 307, 33, 65, - 587, 67, 589, 100, 403, 59, 72, 61, 95, 716, - 76, 718, 630, 67, 721, 60, 634, 99, 100, 64, - 86, 91, 92, 65, 472, 67, 474, 734, 82, 66, - 72, 85, 86, 44, 76, 45, 46, 655, 97, 50, - 1, 748, 101, 630, 86, 663, 99, 634, 59, 99, - 61, 5, 6, 7, 761, 99, 67, 3, 4, 766, - 93, 768, 93, 770, 16, 17, 287, 88, 655, 91, - 92, 82, 44, 294, 85, 86, 663, 695, 50, 93, - 698, 302, 94, 304, 175, 96, 307, 59, 1, 61, - 93, 552, 99, 403, 555, 67, 45, 46, 716, 44, - 718, 45, 46, 721, 94, 50, 97, 98, 695, 94, - 82, 698, 1, 85, 86, 97, 734, 8, 9, 10, - 94, 44, 100, 95, 96, 56, 587, 50, 589, 716, - 748, 718, 373, 374, 721, 56, 754, 82, 383, 384, - 85, 86, 99, 761, 67, 763, 94, 734, 766, 94, - 768, 44, 770, 552, 94, 1, 555, 50, 94, 82, - 94, 748, 85, 86, 97, 98, 99, 754, 1, 630, - 375, 376, 377, 634, 761, 99, 763, 99, 94, 766, - 56, 768, 403, 770, 18, 19, 20, 21, 587, 82, - 589, 44, 85, 86, 655, 94, 287, 50, 0, 91, - 92, 93, 663, 294, 0, 97, 59, 382, 61, 101, - 11, 302, 54, 304, 67, 75, 307, 253, 378, 379, - 380, 381, 139, 57, 44, 162, 403, 52, 160, 82, - 50, 630, 85, 86, 695, 634, 94, 698, 261, 59, - 307, 61, 552, 96, 653, 555, 653, 67, 91, 92, - 93, 307, 346, 570, 97, 716, 655, 718, 101, 385, - 721, 570, 82, 86, 663, 85, 86, 386, 91, 92, - 93, 388, 393, 734, 97, 95, 96, 587, 101, 589, - 387, 627, -1, 86, 389, -1, -1, 748, 91, 92, - 93, -1, -1, 754, 97, -1, 695, -1, 101, 698, - 761, -1, 763, -1, -1, 766, -1, 768, -1, 770, - -1, -1, 403, -1, -1, -1, -1, 716, -1, 718, - 630, 86, 721, -1, 634, -1, 91, 92, 93, -1, - -1, 552, 97, -1, 555, 734, 101, 91, 92, 93, - -1, -1, -1, 97, -1, 655, -1, 101, -1, 748, - -1, -1, -1, 663, -1, 754, -1, -1, -1, -1, - -1, -1, 761, -1, 763, -1, 587, 766, 589, 768, - -1, 770, -1, -1, 192, 193, 194, 195, -1, -1, - -1, -1, 200, 201, -1, 695, -1, -1, 698, -1, - -1, -1, -1, -1, -1, 192, 193, 194, 195, -1, - -1, -1, -1, 200, 201, -1, 716, -1, 718, 630, - -1, 721, -1, 634, -1, -1, -1, -1, 1, -1, - 3, 4, -1, -1, 734, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 655, -1, -1, -1, 748, -1, - -1, -1, 663, -1, 754, -1, -1, -1, -1, -1, - -1, 761, -1, 763, -1, -1, 766, -1, 768, -1, - 770, 552, 45, 46, 555, -1, -1, 50, -1, -1, - -1, -1, -1, -1, 695, -1, 59, 698, -1, -1, - -1, -1, 65, -1, -1, -1, -1, -1, -1, 72, - -1, -1, -1, 76, -1, 716, 587, 718, 589, 82, - 721, -1, 85, 86, -1, -1, 89, 90, -1, -1, - 93, -1, 95, 734, -1, -1, -1, -1, -1, 102, - 103, 104, 105, -1, -1, 108, 109, 748, -1, -1, - -1, -1, -1, 754, -1, -1, -1, -1, -1, 630, - 761, -1, 763, 634, -1, 766, -1, 768, 1, 770, - -1, -1, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 655, 383, 384, 385, 386, 387, - 388, 389, 663, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, - 387, 388, 389, -1, -1, -1, -1, 50, -1, -1, - -1, -1, -1, -1, 695, -1, 59, 698, -1, -1, - -1, -1, 65, -1, -1, -1, -1, -1, -1, 72, - -1, -1, -1, 76, -1, 716, -1, 718, -1, 82, - 721, -1, 85, 86, -1, -1, 89, 90, -1, -1, - 93, -1, -1, 734, 1, -1, -1, -1, -1, 102, - 103, 104, 105, -1, -1, 108, 109, 748, -1, 477, - -1, -1, -1, 754, -1, 483, -1, -1, -1, -1, - 761, -1, 763, -1, -1, 766, -1, 768, -1, 770, - 477, -1, -1, -1, -1, -1, 483, 44, 45, 46, - 47, 48, 49, 50, 51, -1, -1, 54, -1, -1, - -1, 58, 59, -1, -1, 62, -1, -1, 65, 66, - 67, 68, -1, 70, 71, 72, 73, -1, 50, 76, - -1, -1, -1, -1, -1, 82, -1, 59, 85, 86, - -1, -1, -1, 65, -1, -1, 93, -1, 95, 96, - 72, -1, 99, -1, 76, 102, 103, 104, 105, -1, - 82, 108, 109, 85, 86, -1, -1, 89, 90, -1, - -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, - 102, 103, 104, 105, 1, -1, 108, 109, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 611, 612, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 627, - -1, -1, -1, -1, 611, 612, -1, 44, 45, 46, - 47, 48, 49, 50, 51, -1, -1, 54, -1, -1, - 627, 58, 59, -1, -1, 62, -1, -1, 65, 66, - 67, 68, 1, 70, 71, 72, 73, -1, -1, 76, - -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, - -1, -1, -1, -1, -1, -1, 93, -1, 95, 96, - -1, -1, 99, -1, -1, 102, 103, 104, 105, -1, - -1, 108, 109, -1, -1, 44, 45, 46, 47, 48, - 49, 50, 51, -1, -1, 54, -1, -1, -1, 58, - 59, -1, -1, 62, -1, -1, 65, 66, 67, 68, - 1, 70, 71, 72, 73, -1, -1, 76, -1, -1, - -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, - -1, -1, -1, -1, 93, -1, 95, 96, -1, -1, - 99, -1, -1, 102, 103, 104, 105, -1, -1, 108, - 109, -1, -1, 44, 45, 46, -1, 48, 49, 50, - 51, -1, -1, 54, -1, -1, -1, 58, 59, -1, - -1, -1, -1, -1, 65, 66, 67, 68, 1, 70, + 384, 385, 386, 387, 388, 389, 553, 448, 1, 361, + 448, 52, 1, 365, 99, 52, 98, 268, 93, 403, + 99, 636, 63, 97, 275, 287, 63, 94, 279, 1, + 1, 100, 294, 0, 1, 88, 287, 1, 390, 1, + 302, 63, 304, 294, 1, 307, 1, 1, 1, 99, + 100, 302, 1, 304, 95, 1, 408, 95, 95, 52, + 720, 94, 0, 1, 448, 93, 418, 570, 420, 287, + 573, 94, 1, 95, 756, 326, 294, 44, 430, 99, + 100, 1, 697, 765, 302, 700, 304, 1, 55, 307, + 94, 93, 343, 477, 61, 67, 100, 1, 607, 483, + 67, 453, 95, 455, 93, 1, 44, 1, 723, 1, + 47, 362, 553, 364, 175, 556, 625, 469, 67, 612, + 95, 736, 86, 61, 95, 62, 0, 1, 480, 67, + 129, 93, 99, 485, 63, 750, 93, 92, 93, 93, + 93, 403, 97, 98, 99, 100, 98, 93, 763, 1, + 1, 1, 403, 768, 1, 770, 50, 772, 97, 96, + 1, 99, 101, 162, 667, 59, 95, 676, 1, 553, + 44, 65, 556, 93, 95, 0, 1, 686, 72, 93, + 431, 55, 76, 434, 1, 403, 96, 61, 82, 93, + 631, 85, 86, 67, 86, 89, 90, 93, 95, 93, + 641, 75, 99, 641, 0, 1, 93, 1, 102, 103, + 104, 105, 1, 1, 108, 109, 657, 129, 99, 44, + 0, 1, 0, 1, 1, 99, 287, 1, 612, 613, + 55, 175, 175, 294, 86, 86, 61, 1, 1, 86, + 1, 302, 67, 304, 628, 86, 307, 631, 44, 95, + 162, 64, 636, 86, 97, 44, 69, 641, 101, 55, + 1, 50, 1, 53, 44, 61, 44, 619, 65, 86, + 44, 67, 641, 657, 99, 72, 50, 718, 94, 720, + 1, 61, 1, 61, 11, 101, 1, 67, 65, 67, + 67, 553, 86, 82, 556, 72, 85, 86, 86, 76, + 129, 653, 553, 99, 95, 556, 97, 659, 82, 86, + 107, 85, 86, 697, 553, 128, 700, 556, 94, 99, + 94, 99, 86, 86, 100, 86, 588, 1, 590, 0, + 1, 160, 100, 162, 718, 553, 720, 96, 556, 723, + 47, 100, 403, 287, 287, 86, 65, 86, 67, 1, + 294, 294, 736, 72, 175, 62, 1, 76, 302, 302, + 304, 304, 94, 307, 307, 86, 750, 86, 100, 631, + 588, 86, 590, 44, 636, 101, 50, 44, 629, 763, + 631, 91, 92, 735, 768, 636, 770, 739, 772, 96, + 61, 44, 631, 101, 61, 657, 67, 50, 101, 44, + 67, 45, 46, 665, 92, 50, 657, 10, 82, 97, + 98, 85, 86, 631, 59, 67, 61, 94, 636, 9, + 72, 11, 67, 100, 76, 91, 92, 30, 99, 82, + 175, 34, 85, 86, 86, 697, 94, 82, 700, 657, + 85, 86, 100, 33, 94, 12, 697, 665, 51, 700, + 100, 470, 13, 97, 473, 1, 718, 101, 720, 403, + 403, 723, 97, 472, 60, 474, 287, 718, 64, 720, + 45, 46, 723, 294, 736, 18, 19, 20, 21, 697, + 14, 302, 700, 304, 1, 736, 307, 99, 750, 95, + 94, 93, 553, 97, 756, 556, 93, 101, 44, 750, + 718, 763, 720, 765, 50, 723, 768, 99, 770, 97, + 772, 175, 763, 697, 57, 99, 700, 768, 736, 770, + 99, 772, 97, 5, 6, 7, 101, 588, 99, 590, + 45, 46, 750, 50, 100, 44, 82, 95, 756, 85, + 86, 50, 287, 3, 4, 763, 66, 765, 93, 294, + 768, 93, 770, 1, 772, 16, 17, 302, 67, 304, + 91, 92, 307, 50, 88, 82, 45, 46, 85, 86, + 631, 93, 59, 82, 99, 636, 85, 86, 65, 763, + 45, 46, 403, 94, 768, 72, 770, 1, 772, 76, + 93, 91, 92, 93, 99, 82, 657, 97, 85, 86, + 94, 101, 89, 90, 665, 94, 93, 97, 98, 553, + 553, 97, 556, 556, 44, 102, 103, 104, 105, 1, + 50, 108, 109, 287, 373, 374, 44, 383, 384, 59, + 294, 61, 50, 8, 9, 10, 697, 67, 302, 700, + 304, 94, 100, 307, 588, 588, 590, 590, 378, 379, + 380, 381, 82, 56, 56, 85, 86, 718, 403, 720, + 99, 94, 723, 94, 82, 95, 96, 85, 86, 192, + 193, 194, 195, 1, 94, 736, 94, 200, 201, 86, + 97, 98, 99, 94, 91, 92, 93, 631, 631, 750, + 97, 1, 636, 636, 101, 756, 56, 1, 99, 3, + 4, 99, 763, 94, 765, 94, 0, 768, 0, 770, + 44, 772, 382, 657, 657, 11, 50, 54, 375, 376, + 377, 665, 665, 86, 75, 59, 162, 61, 91, 92, + 93, 139, 553, 67, 97, 556, 160, 253, 101, 403, + 403, 45, 46, 52, 94, 307, 50, 261, 82, 287, + 655, 85, 86, 697, 697, 59, 700, 700, 307, 571, + 655, 65, 96, 571, 346, 385, 387, 588, 72, 590, + 386, 388, 76, 628, 718, 718, 720, 720, 82, 723, + 723, 85, 86, 393, 389, 89, 90, -1, -1, 93, + -1, 95, 736, 736, -1, -1, -1, -1, 102, 103, + 104, 105, -1, -1, 108, 109, 750, 750, 553, -1, + 631, 556, 756, 756, -1, 636, -1, -1, -1, 763, + 763, 765, 765, -1, 768, 768, 770, 770, 772, 772, + -1, 91, 92, 93, -1, -1, 657, 97, -1, -1, + -1, 101, -1, 588, 665, 590, -1, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 44, 91, 92, + 93, -1, -1, 50, 97, -1, 697, -1, 101, 700, + -1, -1, 59, -1, 61, -1, 631, -1, -1, 553, + 67, 636, 556, -1, -1, -1, -1, 718, -1, 720, + -1, -1, 723, -1, -1, 82, -1, -1, 85, 86, + -1, -1, 657, -1, -1, 736, -1, -1, 95, 96, + 665, -1, -1, -1, 588, -1, 590, -1, -1, 750, + -1, 192, 193, 194, 195, 756, -1, -1, -1, 200, + 201, -1, 763, -1, 765, -1, -1, 768, -1, 770, + -1, 772, 697, -1, 477, 700, -1, -1, -1, 86, + 483, -1, -1, -1, 91, 92, 93, 631, -1, -1, + 97, -1, 636, 718, 101, 720, -1, 1, 723, 3, + 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 736, -1, 657, -1, -1, -1, -1, -1, -1, + -1, 665, -1, -1, -1, 750, -1, -1, -1, -1, + -1, 756, -1, -1, -1, -1, -1, -1, 763, -1, + 765, 45, 46, 768, -1, 770, 50, 772, -1, -1, + -1, -1, -1, 697, -1, 59, 700, -1, -1, -1, + -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, + -1, -1, 76, -1, 718, -1, 720, -1, 82, 723, + -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, + -1, -1, 736, -1, -1, 99, -1, -1, 102, 103, + 104, 105, -1, -1, 108, 109, 750, 1, -1, 612, + 613, -1, 756, -1, -1, -1, -1, -1, -1, 763, + -1, 765, -1, -1, 768, 628, 770, -1, 772, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, -1, + 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, + 54, -1, -1, -1, 58, 59, -1, -1, 62, -1, + -1, 65, 66, 67, 68, -1, 70, 71, 72, 73, + 1, -1, 76, -1, -1, -1, -1, -1, 82, -1, + -1, 85, 86, -1, -1, -1, -1, -1, -1, 93, + -1, 95, 96, -1, -1, 99, -1, -1, 102, 103, + 104, 105, -1, -1, 108, 109, -1, -1, -1, -1, + -1, -1, -1, 44, 45, 46, 47, 48, 49, 50, + 51, -1, -1, 54, -1, -1, 477, 58, 59, -1, + -1, 62, 483, -1, 65, 66, 67, 68, 1, 70, 71, 72, 73, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, -1, -1, -1, -1, 93, -1, 95, 96, -1, -1, 99, -1, -1, 102, 103, 104, 105, -1, -1, 108, 109, -1, - -1, 44, 45, 46, -1, 48, 49, 50, 51, -1, - -1, 54, -1, -1, -1, 58, 59, -1, -1, -1, - -1, -1, 65, 66, 67, 68, 1, 70, 71, 72, - 73, -1, -1, 76, -1, -1, -1, -1, -1, 82, + -1, 44, 45, 46, 47, 48, 49, 50, 51, -1, + -1, 54, -1, -1, -1, 58, 59, -1, -1, 62, + -1, -1, 65, 66, 67, 68, -1, 70, 71, 72, + 73, 44, -1, 76, -1, -1, -1, 50, -1, 82, + -1, 1, 85, 86, -1, -1, 59, -1, 61, -1, + 93, -1, 95, 96, 67, -1, 99, -1, -1, 102, + 103, 104, 105, -1, -1, 108, 109, -1, -1, 82, -1, -1, 85, 86, -1, -1, -1, -1, -1, -1, - 93, -1, 95, -1, -1, -1, 99, -1, -1, 102, - 103, 104, 105, -1, -1, 108, 109, -1, -1, 44, - 45, 46, -1, 48, 49, 50, 51, -1, -1, 54, - -1, -1, -1, 58, 59, -1, -1, -1, -1, -1, - 65, 66, 1, 68, -1, 70, 71, 72, 73, -1, - -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, - 85, 86, -1, -1, -1, -1, -1, -1, 93, -1, - 95, -1, -1, -1, 99, -1, -1, 102, 103, 104, - 105, -1, -1, 108, 109, 44, 45, 46, -1, 48, - 49, 50, 51, -1, -1, 54, -1, -1, -1, 58, - 59, -1, -1, -1, -1, -1, 65, 66, -1, 68, - -1, 70, 71, 72, 73, -1, 1, 76, 3, 4, - -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, - -1, -1, -1, -1, 93, -1, 95, -1, -1, -1, - 99, -1, -1, 102, 103, 104, 105, -1, -1, 108, - 109, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 45, 46, -1, -1, -1, 50, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, - 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, - -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, - 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, - 95, 96, -1, -1, -1, -1, -1, 102, 103, 104, - 105, -1, -1, 108, 109, 45, 46, -1, -1, -1, - 50, -1, 1, -1, 3, 4, -1, -1, -1, 59, - -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, - -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, - -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, - 90, -1, -1, 93, -1, -1, 45, 46, -1, 99, - -1, 50, 102, 103, 104, 105, -1, -1, 108, 109, - 59, -1, -1, -1, -1, -1, 65, 1, -1, 3, - 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, - -1, -1, -1, 82, -1, -1, 85, 86, -1, 88, - 89, 90, -1, -1, 93, -1, -1, -1, -1, -1, - -1, -1, -1, 102, 103, 104, 105, -1, -1, 108, - 109, 45, 46, -1, -1, -1, 50, -1, 1, -1, - 3, 4, -1, -1, -1, 59, -1, -1, -1, -1, - -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, + -1, 612, 613, 96, 44, 45, 46, -1, 48, 49, + 50, 51, -1, -1, 54, -1, -1, 628, 58, 59, + -1, -1, -1, -1, -1, 65, 66, 67, 68, 1, + 70, 71, 72, 73, -1, -1, 76, -1, -1, -1, + -1, -1, 82, -1, -1, 85, 86, -1, -1, -1, + -1, -1, -1, 93, -1, 95, 96, -1, -1, 99, + -1, -1, 102, 103, 104, 105, -1, -1, 108, 109, + -1, -1, 44, 45, 46, -1, 48, 49, 50, 51, + -1, -1, 54, -1, -1, -1, 58, 59, -1, -1, + -1, -1, -1, 65, 66, 67, 68, 1, 70, 71, + 72, 73, -1, -1, 76, -1, -1, -1, -1, -1, + 82, -1, -1, 85, 86, -1, -1, -1, -1, -1, + -1, 93, -1, 95, -1, -1, -1, 99, -1, -1, + 102, 103, 104, 105, -1, -1, 108, 109, -1, -1, + 44, 45, 46, -1, 48, 49, 50, 51, -1, -1, + 54, -1, -1, -1, 58, 59, -1, -1, -1, -1, + -1, 65, 66, 1, 68, -1, 70, 71, 72, 73, + -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, + -1, 85, 86, -1, -1, -1, -1, -1, -1, 93, + -1, 95, -1, -1, -1, 99, -1, -1, 102, 103, + 104, 105, -1, -1, 108, 109, 44, 45, 46, -1, + 48, 49, 50, 51, -1, -1, 54, -1, -1, -1, + 58, 59, -1, -1, -1, -1, -1, 65, 66, -1, + 68, -1, 70, 71, 72, 73, -1, 1, 76, 3, + 4, -1, -1, -1, 82, -1, -1, 85, 86, -1, + -1, -1, -1, -1, -1, 93, -1, 95, -1, -1, + -1, 99, -1, -1, 102, 103, 104, 105, -1, -1, + 108, 109, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 45, 46, -1, -1, -1, 50, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, - -1, -1, 45, 46, 98, -1, -1, 50, 102, 103, - 104, 105, -1, -1, 108, 109, 59, -1, -1, -1, - -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, + -1, 95, 96, -1, -1, -1, -1, -1, 102, 103, + 104, 105, -1, -1, 108, 109, 45, 46, -1, -1, + -1, 50, -1, 1, -1, 3, 4, -1, -1, -1, + 59, -1, -1, -1, -1, -1, 65, -1, -1, -1, + -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, + -1, -1, -1, 82, -1, -1, 85, 86, -1, 88, + 89, 90, -1, -1, 93, -1, -1, 45, 46, -1, + -1, -1, 50, 102, 103, 104, 105, -1, -1, 108, + 109, 59, -1, -1, -1, -1, -1, 65, 1, -1, + 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, + -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, + -1, 89, 90, -1, -1, 93, -1, -1, -1, -1, + 98, -1, -1, -1, 102, 103, 104, 105, -1, -1, + 108, 109, 45, 46, -1, -1, -1, 50, -1, 1, + -1, 3, 4, -1, -1, -1, 59, -1, -1, -1, + -1, -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, - 93, 94, -1, -1, -1, -1, -1, -1, -1, 102, - 103, 104, 105, -1, -1, 108, 109, 45, 46, -1, - -1, -1, 50, -1, 1, -1, 3, 4, -1, -1, - -1, 59, -1, -1, -1, -1, -1, 65, -1, -1, - -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, - -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, - -1, 89, 90, -1, -1, 93, -1, -1, 45, 46, - -1, 99, -1, 50, 102, 103, 104, 105, -1, -1, - 108, 109, 59, -1, -1, -1, -1, -1, 65, 1, - -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, - -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, - -1, -1, 89, 90, -1, -1, 93, -1, -1, -1, - -1, 98, -1, -1, -1, 102, 103, 104, 105, -1, - -1, 108, 109, 45, 46, -1, -1, -1, 50, -1, - 1, -1, 3, 4, -1, -1, -1, 59, -1, -1, - -1, -1, -1, 65, -1, -1, -1, -1, -1, -1, + 93, 94, -1, 45, 46, -1, -1, -1, 50, 102, + 103, 104, 105, -1, -1, 108, 109, 59, -1, -1, + -1, -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, - -1, 93, 94, -1, 45, 46, -1, -1, -1, 50, - 102, 103, 104, 105, -1, -1, 108, 109, 59, -1, - -1, -1, -1, -1, 65, 1, -1, 3, 4, -1, - -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, - -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, - -1, -1, 93, -1, -1, -1, -1, 98, -1, -1, - -1, 102, 103, 104, 105, -1, -1, 108, 109, 45, - 46, -1, -1, -1, 50, -1, 1, -1, 3, 4, - -1, -1, -1, 59, -1, -1, -1, -1, -1, 65, - -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, + -1, 93, -1, -1, -1, -1, -1, 99, -1, -1, + 102, 103, 104, 105, -1, -1, 108, 109, 45, 46, + -1, -1, -1, 50, -1, 1, -1, 3, 4, -1, + -1, -1, 59, -1, -1, -1, -1, -1, 65, -1, + -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, + -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, + -1, -1, 89, 90, -1, -1, 93, -1, -1, 45, + 46, 98, -1, -1, 50, 102, 103, 104, 105, -1, + -1, 108, 109, 59, -1, -1, -1, -1, -1, 65, + 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, 94, -1, - 45, 46, -1, -1, -1, 50, 102, 103, 104, 105, - -1, -1, 108, 109, 59, -1, -1, -1, -1, -1, - 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, - -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, - 85, 86, -1, -1, 89, 90, -1, -1, 93, 94, - -1, -1, -1, -1, -1, -1, -1, 102, 103, 104, - 105, -1, -1, 108, 109, 45, 46, -1, -1, -1, - 50, -1, 1, -1, 3, 4, -1, -1, -1, 59, - -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 102, 103, 104, 105, + -1, -1, 108, 109, 45, 46, -1, -1, -1, 50, + -1, 1, -1, 3, 4, -1, -1, -1, 59, -1, + -1, -1, -1, -1, 65, -1, -1, -1, -1, -1, + -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, + -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, + -1, -1, 93, -1, -1, 45, 46, 98, -1, -1, + 50, 102, 103, 104, 105, -1, -1, 108, 109, 59, + -1, -1, -1, -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, - 90, -1, -1, 93, 94, -1, 45, 46, -1, -1, - -1, 50, 102, 103, 104, 105, -1, -1, 108, 109, - 59, -1, -1, -1, -1, -1, 65, 1, -1, 3, - 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, - -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, - 89, 90, -1, -1, 93, -1, -1, -1, -1, -1, - 99, -1, -1, 102, 103, 104, 105, -1, -1, 108, - 109, 45, 46, -1, -1, -1, 50, -1, 1, -1, - 3, 4, -1, -1, -1, 59, -1, -1, -1, -1, - -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, + 90, -1, -1, 93, 94, -1, -1, -1, -1, -1, + -1, -1, 102, 103, 104, 105, -1, -1, 108, 109, + 45, 46, -1, -1, -1, 50, -1, 1, -1, 3, + 4, -1, -1, -1, 59, -1, -1, -1, -1, -1, + 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, + -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, + 85, 86, -1, -1, 89, 90, -1, -1, 93, 94, + -1, 45, 46, -1, -1, -1, 50, 102, 103, 104, + 105, -1, -1, 108, 109, 59, -1, -1, -1, -1, + -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, - -1, -1, 45, 46, -1, -1, -1, 50, 102, 103, - 104, 105, -1, -1, 108, 109, 59, -1, -1, -1, - -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, + 94, -1, -1, -1, -1, -1, -1, -1, 102, 103, + 104, 105, -1, -1, 108, 109, 45, 46, -1, -1, + -1, 50, -1, 1, -1, 3, 4, -1, -1, -1, + 59, -1, -1, -1, -1, -1, 65, -1, -1, -1, + -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, + -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, + 89, 90, -1, -1, 93, -1, -1, 45, 46, -1, + 99, -1, 50, 102, 103, 104, 105, -1, -1, 108, + 109, 59, -1, -1, -1, -1, -1, 65, 1, -1, + 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, + -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, + -1, 89, 90, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 102, 103, 104, 105, -1, -1, + 108, 109, 45, 46, -1, -1, -1, 50, -1, 1, + -1, 3, 4, -1, -1, -1, 59, -1, -1, -1, + -1, -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, - 93, -1, -1, -1, -1, -1, -1, -1, -1, 102, - 103, 104, 105, -1, -1, 108, 109, 45, 46, -1, - -1, -1, 50, -1, 1, -1, 3, 4, -1, -1, - -1, 59, -1, -1, -1, -1, -1, 65, -1, -1, - -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, - -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, - -1, 89, 90, -1, -1, 93, -1, -1, 45, 46, - -1, -1, -1, 50, 102, 103, 104, 105, -1, -1, - 108, 109, 59, -1, -1, -1, -1, -1, 65, 1, - -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, - -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, - -1, -1, 89, 90, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, 102, 103, 104, 105, -1, - -1, 108, 109, 45, 46, -1, -1, -1, 50, -1, - 1, -1, 3, 4, -1, -1, -1, 59, -1, -1, - -1, -1, -1, 65, -1, -1, -1, -1, -1, -1, + 93, -1, -1, 45, 46, -1, -1, -1, 50, 102, + 103, 104, 105, -1, -1, 108, 109, 59, -1, -1, + -1, -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, - -1, 93, -1, -1, 45, 46, -1, -1, -1, 50, - 102, 103, 104, 105, -1, -1, 108, 109, 59, -1, - -1, -1, -1, -1, 65, 1, -1, 3, 4, -1, - -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, - -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, - -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, - -1, 102, 103, 104, 105, -1, -1, 108, 109, 45, - 46, -1, -1, -1, 50, -1, 1, -1, 3, 4, - -1, -1, -1, 59, -1, -1, -1, -1, -1, 65, - -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, + -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, + 102, 103, 104, 105, -1, -1, 108, 109, 45, 46, + -1, -1, -1, 50, -1, 1, -1, 3, 4, -1, + -1, -1, 59, -1, -1, -1, -1, -1, 65, -1, + -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, + -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, + -1, -1, 89, 90, -1, -1, 93, -1, -1, 45, + 46, -1, -1, -1, 50, 102, 103, 104, 105, -1, + -1, 108, 109, 59, -1, -1, -1, -1, -1, 65, + 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, -1, - 45, 46, -1, -1, -1, 50, 102, 103, 104, 105, - -1, -1, 108, 109, 59, -1, -1, -1, -1, -1, - 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, - -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, - 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 102, 103, 104, - 105, -1, -1, 108, 109, 45, 46, -1, -1, -1, - 50, -1, 1, -1, 3, 4, -1, -1, -1, 59, - -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 102, 103, 104, 105, + -1, -1, 108, 109, 45, 46, -1, -1, -1, 50, + -1, 1, -1, 3, 4, -1, -1, -1, 59, -1, + -1, -1, -1, -1, 65, -1, -1, -1, -1, -1, + -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, + -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, + -1, -1, 93, -1, -1, 45, 46, -1, -1, -1, + 50, 102, 103, 104, 105, -1, -1, 108, 109, 59, + -1, -1, -1, -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, - 90, -1, -1, 93, -1, -1, 45, 46, -1, -1, - -1, 50, 102, 103, 104, 105, -1, -1, 108, 109, - 59, -1, -1, -1, -1, -1, 65, 1, -1, 3, - 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, - -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, - 89, 90, -1, -1, 93, -1, -1, -1, -1, -1, - -1, -1, -1, 102, 103, 104, 105, -1, -1, 108, - 109, 45, 46, -1, -1, -1, 50, -1, 1, -1, - 3, 4, -1, -1, -1, 59, -1, -1, -1, -1, - -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, + 90, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, -1, 102, 103, 104, 105, -1, -1, 108, 109, + 45, 46, -1, -1, -1, 50, -1, 1, -1, 3, + 4, -1, -1, -1, 59, -1, -1, -1, -1, -1, + 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, + -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, + 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, + -1, 45, 46, -1, -1, -1, 50, 102, 103, 104, + 105, -1, -1, 108, 109, 59, -1, -1, -1, -1, + -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, - -1, -1, 45, 46, -1, -1, -1, 50, 102, 103, - 104, 105, -1, -1, 108, 109, 59, -1, -1, -1, - -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, + -1, -1, -1, -1, -1, -1, -1, -1, 102, 103, + 104, 105, -1, -1, 108, 109, 45, 46, -1, -1, + -1, 50, -1, 1, -1, 3, 4, -1, -1, -1, + 59, -1, -1, -1, -1, -1, 65, -1, -1, -1, + -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, + -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, + 89, 90, -1, -1, 93, -1, -1, 45, 46, -1, + -1, -1, 50, 102, 103, 104, 105, -1, -1, 108, + 109, 59, -1, -1, -1, -1, -1, 65, 1, -1, + 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, + -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, + -1, 89, 90, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 102, 103, 104, 105, -1, -1, + 108, 109, 45, 46, -1, -1, -1, 50, -1, 1, + -1, 3, 4, -1, -1, -1, 59, -1, -1, -1, + -1, -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, - 93, -1, -1, -1, -1, -1, -1, -1, -1, 102, - 103, 104, 105, -1, -1, 108, 109, 45, 46, -1, - -1, -1, 50, -1, 1, -1, 3, 4, -1, -1, - -1, 59, -1, -1, -1, -1, -1, 65, -1, -1, - -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, - -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, - -1, 89, 90, -1, -1, 93, -1, -1, 45, 46, - -1, -1, -1, 50, 102, 103, 104, 105, -1, -1, - 108, 109, 59, -1, -1, -1, -1, -1, 65, 1, - -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, - -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, - -1, -1, 89, 90, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, 102, 103, 104, 105, -1, - -1, 108, 109, 45, 46, -1, -1, -1, 50, -1, - 1, -1, 3, 4, -1, -1, -1, 59, -1, -1, - -1, -1, -1, 65, -1, -1, -1, -1, -1, -1, + 93, -1, -1, 45, 46, -1, -1, -1, 50, 102, + 103, 104, 105, -1, -1, 108, 109, 59, -1, -1, + -1, -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, - -1, 93, -1, -1, 45, 46, -1, -1, -1, 50, - 102, 103, 104, 105, -1, -1, 108, 109, 59, -1, - -1, -1, -1, -1, 65, 1, -1, 3, 4, -1, - -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, - -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, - -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, - -1, 102, 103, 104, 105, -1, -1, 108, 109, 45, - 46, -1, -1, -1, 50, -1, 1, -1, 3, 4, - -1, -1, -1, 59, -1, -1, -1, -1, -1, 65, - -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, + -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, + 102, 103, 104, 105, -1, -1, 108, 109, 45, 46, + -1, -1, -1, 50, -1, 1, -1, 3, 4, -1, + -1, -1, 59, -1, -1, -1, -1, -1, 65, -1, + -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, + -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, + -1, -1, 89, 90, -1, -1, 93, -1, -1, 45, + 46, -1, -1, -1, 50, 102, 103, 104, 105, -1, + -1, 108, 109, 59, -1, -1, -1, -1, -1, 65, + 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, -1, - 45, 46, -1, -1, -1, 50, 102, 103, 104, 105, - -1, -1, 108, 109, 59, -1, -1, -1, -1, -1, - 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, - -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, - 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 102, 103, 104, - 105, -1, -1, 108, 109, 45, 46, -1, -1, -1, - 50, -1, 1, -1, 3, 4, -1, -1, -1, 59, - -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 102, 103, 104, 105, + -1, -1, 108, 109, 45, 46, -1, -1, -1, 50, + -1, 1, -1, 3, 4, -1, -1, -1, 59, -1, + -1, -1, -1, -1, 65, -1, -1, -1, -1, -1, + -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, + -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, + -1, -1, 93, -1, -1, 45, 46, -1, -1, -1, + 50, 102, 103, 104, 105, -1, -1, 108, 109, 59, + -1, -1, -1, -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, - 90, -1, -1, 93, -1, -1, 45, 46, -1, -1, - -1, 50, 102, 103, 104, 105, -1, -1, 108, 109, - 59, -1, -1, -1, -1, -1, 65, 1, -1, 3, - 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, - -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, - 89, 90, -1, -1, 93, -1, -1, -1, -1, -1, - -1, -1, -1, 102, 103, 104, 105, -1, -1, 108, - 109, 45, 46, -1, -1, -1, 50, -1, 1, -1, - 3, 4, -1, -1, -1, 59, -1, -1, -1, -1, - -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, + 90, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, -1, 102, 103, 104, 105, -1, -1, 108, 109, + 45, 46, -1, -1, -1, 50, -1, 1, -1, 3, + 4, -1, -1, -1, 59, -1, -1, -1, -1, -1, + 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, + -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, + 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, + -1, 45, 46, -1, -1, -1, 50, 102, 103, 104, + 105, -1, -1, 108, 109, 59, -1, -1, -1, -1, + -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, - -1, -1, 45, 46, -1, -1, -1, 50, 102, 103, - 104, 105, -1, -1, 108, 109, 59, -1, -1, -1, - -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, + -1, -1, -1, -1, -1, -1, -1, -1, 102, 103, + 104, 105, -1, -1, 108, 109, 45, 46, -1, -1, + -1, 50, -1, 1, -1, 3, 4, -1, -1, -1, + 59, -1, -1, -1, -1, -1, 65, -1, -1, -1, + -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, + -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, + 89, 90, -1, -1, 93, -1, -1, 45, 46, -1, + -1, -1, 50, 102, 103, 104, 105, -1, -1, 108, + 109, 59, -1, -1, -1, -1, -1, 65, 1, -1, + 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, + -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, + -1, 89, 90, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 102, 103, 104, 105, -1, -1, + 108, 109, 45, 46, -1, -1, -1, 50, -1, 1, + -1, 3, 4, -1, -1, -1, 59, -1, -1, -1, + -1, -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, - 93, -1, -1, -1, -1, -1, -1, -1, -1, 102, - 103, 104, 105, -1, -1, 108, 109, 45, 46, -1, - -1, -1, 50, -1, 1, -1, 3, 4, -1, -1, - -1, 59, -1, -1, -1, -1, -1, 65, -1, -1, - -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, - -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, - -1, 89, 90, -1, -1, 93, -1, -1, 45, 46, - -1, -1, -1, 50, 102, 103, 104, 105, -1, -1, - 108, 109, 59, -1, -1, -1, -1, -1, 65, 1, - -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, - -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, - -1, -1, 89, 90, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, 102, 103, 104, 105, -1, - -1, 108, 109, 45, 46, -1, -1, -1, 50, -1, - 1, -1, 3, 4, -1, -1, -1, 59, -1, -1, - -1, -1, -1, 65, -1, -1, -1, -1, -1, -1, + 93, -1, -1, 45, 46, -1, -1, -1, 50, 102, + 103, 104, 105, -1, -1, 108, 109, 59, -1, -1, + -1, -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, - -1, 93, -1, -1, 45, 46, -1, -1, -1, 50, - 102, 103, 104, 105, -1, -1, 108, 109, 59, -1, - -1, -1, -1, -1, 65, 1, -1, 3, 4, -1, - -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, - -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, - -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, - -1, 102, 103, 104, 105, -1, -1, 108, 109, 45, - 46, -1, -1, -1, 50, -1, 1, -1, 3, 4, - -1, -1, -1, 59, -1, -1, -1, -1, -1, 65, - -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, + -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, + 102, 103, 104, 105, -1, -1, 108, 109, 45, 46, + -1, -1, -1, 50, -1, 1, -1, 3, 4, -1, + -1, -1, 59, -1, -1, -1, -1, -1, 65, -1, + -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, + -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, + -1, -1, 89, 90, -1, -1, 93, -1, -1, 45, + 46, -1, -1, -1, 50, 102, 103, 104, 105, -1, + -1, 108, 109, 59, -1, -1, -1, -1, -1, 65, + 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, -1, - 45, 46, -1, -1, -1, 50, 102, 103, 104, 105, - -1, -1, 108, 109, 59, -1, -1, -1, -1, -1, - 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, - -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, - 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 102, 103, 104, - 105, -1, -1, 108, 109, 45, 46, -1, -1, -1, - 50, -1, 1, -1, 3, 4, -1, -1, -1, 59, - -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 102, 103, 104, 105, + -1, -1, 108, 109, 45, 46, -1, -1, -1, 50, + -1, 1, -1, 3, 4, -1, -1, -1, 59, -1, + -1, -1, -1, -1, 65, -1, -1, -1, -1, -1, + -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, + -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, + -1, -1, 93, -1, -1, 45, 46, -1, -1, -1, + 50, 102, 103, 104, 105, -1, -1, 108, 109, 59, + -1, -1, -1, -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, - 90, -1, -1, 93, -1, -1, 45, 46, -1, -1, - -1, 50, 102, 103, 104, 105, -1, -1, 108, 109, - 59, -1, -1, -1, -1, -1, 65, 1, -1, 3, - 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, - -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, - 89, 90, -1, -1, 93, -1, -1, -1, -1, -1, - -1, -1, -1, 102, 103, 104, 105, -1, -1, 108, - 109, 45, 46, -1, -1, -1, 50, -1, 1, -1, - 3, 4, -1, -1, -1, 59, -1, -1, -1, -1, - -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, + 90, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, -1, 102, 103, 104, 105, -1, -1, 108, 109, + 45, 46, -1, -1, -1, 50, -1, 1, -1, 3, + 4, -1, -1, -1, 59, -1, -1, -1, -1, -1, + 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, + -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, + 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, + -1, 45, 46, -1, -1, -1, 50, 102, 103, 104, + 105, -1, -1, 108, 109, 59, -1, -1, -1, -1, + -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, - -1, -1, 45, 46, -1, -1, -1, 50, 102, 103, - 104, 105, -1, -1, 108, 109, 59, -1, -1, -1, - -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, + -1, -1, -1, -1, -1, -1, -1, -1, 102, 103, + 104, 105, -1, -1, 108, 109, 45, 46, -1, -1, + -1, 50, -1, 1, -1, 3, 4, -1, -1, -1, + 59, -1, -1, -1, -1, -1, 65, -1, -1, -1, + -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, + -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, + 89, 90, -1, -1, 93, -1, -1, 45, 46, -1, + -1, -1, 50, 102, 103, 104, 105, -1, -1, 108, + 109, 59, -1, -1, -1, -1, -1, 65, 1, -1, + 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, + -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, + -1, 89, 90, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 102, 103, 104, 105, -1, -1, + 108, 109, 45, 46, -1, -1, -1, 50, -1, 1, + -1, 3, 4, -1, -1, -1, 59, -1, -1, -1, + -1, -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, - 93, -1, -1, -1, -1, -1, -1, -1, -1, 102, - 103, 104, 105, -1, -1, 108, 109, 45, 46, -1, - -1, -1, 50, -1, 1, -1, 3, 4, -1, -1, - -1, 59, -1, -1, -1, -1, -1, 65, -1, -1, - -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, - -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, - -1, 89, 90, -1, -1, 93, -1, -1, 45, 46, - -1, -1, -1, 50, 102, 103, 104, 105, -1, -1, - 108, 109, 59, -1, -1, -1, -1, -1, 65, 1, - -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, - -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, - -1, -1, 89, 90, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, 102, 103, 104, 105, -1, - -1, 108, 109, 45, 46, -1, -1, -1, 50, -1, - 1, -1, 3, 4, -1, -1, -1, 59, -1, -1, - -1, -1, -1, 65, -1, -1, -1, -1, -1, -1, + 93, -1, -1, 45, 46, -1, -1, -1, 50, 102, + 103, 104, 105, -1, -1, 108, 109, 59, -1, -1, + -1, -1, -1, 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, - -1, 93, -1, -1, 45, 46, -1, -1, -1, 50, - 102, 103, 104, 105, -1, -1, 108, 109, 59, -1, - -1, -1, -1, -1, 65, 1, -1, 3, 4, -1, - -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, - -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, - -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, - -1, 102, 103, 104, 105, -1, -1, 108, 109, 45, - 46, -1, -1, -1, 50, -1, 1, -1, 3, 4, - -1, -1, -1, 59, -1, -1, -1, -1, -1, 65, - -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, + -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, + 102, 103, 104, 105, -1, -1, 108, 109, 45, 46, + -1, -1, -1, 50, -1, 1, -1, 3, 4, -1, + -1, -1, 59, -1, -1, -1, -1, -1, 65, -1, + -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, + -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, + -1, -1, 89, 90, -1, -1, 93, -1, -1, 45, + 46, -1, -1, -1, 50, 102, 103, 104, 105, -1, + -1, 108, 109, 59, -1, -1, -1, -1, -1, 65, + 1, -1, 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, -1, - 45, 46, -1, -1, -1, 50, 102, 103, 104, 105, - -1, -1, 108, 109, 59, -1, -1, -1, -1, -1, - 65, 1, -1, 3, 4, -1, -1, 72, -1, -1, + -1, -1, -1, -1, -1, -1, 102, 103, 104, 105, + -1, -1, 108, 109, 45, 46, -1, -1, -1, 50, + -1, 1, -1, 3, 4, -1, -1, -1, 59, -1, + -1, -1, -1, -1, 65, -1, -1, -1, -1, -1, + -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, + -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, + -1, -1, 93, -1, -1, 45, 46, -1, -1, -1, + 50, 102, 103, 104, 105, -1, -1, 108, 109, 59, + -1, -1, -1, -1, -1, 65, 1, -1, 3, 4, + -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, + -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, + 90, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, -1, 102, 103, 104, 105, -1, -1, 108, 109, + 45, 46, -1, -1, -1, 50, -1, 1, -1, 3, + 4, -1, -1, -1, 59, -1, -1, -1, -1, -1, + 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 102, 103, 104, - 105, -1, -1, 108, 109, 45, 46, -1, -1, -1, - 50, -1, 1, -1, -1, -1, -1, -1, -1, 59, - -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, - -1, -1, 72, -1, -1, -1, 76, 1, -1, -1, - -1, -1, 82, -1, -1, 85, 86, -1, -1, 89, - 90, -1, -1, 93, -1, 44, 45, 46, -1, -1, - -1, 50, 102, 103, 104, 105, -1, -1, 108, 109, - 59, -1, -1, -1, -1, -1, 65, -1, -1, 1, - -1, 45, 46, 72, -1, -1, 50, 76, -1, -1, - -1, -1, -1, 82, -1, 59, 85, 86, -1, -1, - -1, 65, -1, -1, 93, -1, 3, 4, 72, -1, - 99, -1, 76, 102, 103, 104, 105, -1, 82, 108, - 109, 85, 86, 45, 46, -1, -1, -1, 50, 93, - 94, -1, -1, -1, -1, -1, -1, 59, 102, 103, - 104, 105, -1, 65, 108, 109, 1, -1, 45, 46, - 72, -1, -1, 50, 76, -1, -1, -1, -1, -1, - 82, -1, 59, 85, 86, -1, -1, -1, 65, -1, - -1, 93, 94, 3, 4, 72, -1, -1, -1, 76, - 102, 103, 104, 105, -1, 82, 108, 109, 85, 86, - 45, 46, 89, 90, -1, 50, 93, -1, 95, 96, - -1, -1, -1, -1, 59, 102, 103, 104, 105, -1, - 65, 108, 109, -1, -1, 45, 46, 72, -1, -1, - 50, 76, -1, -1, 3, 4, -1, 82, -1, 59, - 85, 86, -1, -1, -1, 65, -1, -1, 93, -1, - -1, -1, 72, -1, -1, -1, 76, 102, 103, 104, - 105, -1, 82, 108, 109, 85, 86, -1, -1, 89, - 90, -1, -1, 93, 94, -1, 45, 46, -1, -1, - -1, 50, 102, 103, 104, 105, -1, -1, 108, 109, - 59, -1, -1, -1, -1, -1, 65, -1, -1, 3, - 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, - -1, -1, -1, 82, -1, -1, 85, 86, -1, -1, - 89, 90, -1, -1, 93, 94, -1, -1, -1, -1, - -1, -1, -1, 102, 103, 104, 105, -1, -1, 108, - 109, 45, 46, -1, -1, -1, 50, -1, -1, -1, - 3, 4, -1, -1, -1, 59, -1, -1, -1, -1, - -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, + -1, 45, 46, -1, -1, -1, 50, 102, 103, 104, + 105, -1, -1, 108, 109, 59, -1, -1, -1, -1, + -1, 65, -1, 1, -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, - -1, 85, 86, -1, -1, 89, 90, -1, -1, 93, - 94, -1, 45, 46, -1, -1, -1, 50, 102, 103, - 104, 105, -1, -1, 108, 109, 59, -1, -1, -1, - -1, -1, 65, -1, -1, 3, 4, -1, -1, 72, - -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, - -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, - 93, 94, -1, -1, -1, -1, -1, -1, -1, 102, - 103, 104, 105, -1, -1, 108, 109, 45, 46, -1, + -1, 85, 86, -1, -1, 89, 90, -1, 1, 93, + -1, -1, -1, -1, -1, -1, -1, -1, 102, 103, + 104, 105, -1, -1, 108, 109, 44, 45, 46, -1, -1, -1, 50, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, 65, -1, -1, - -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, + 1, -1, 45, 46, 72, -1, -1, 50, 76, -1, + -1, -1, -1, -1, 82, -1, 59, 85, 86, -1, + -1, -1, 65, -1, -1, 93, -1, 3, 4, 72, + -1, 99, -1, 76, 102, 103, 104, 105, -1, 82, + 108, 109, 85, 86, 45, 46, -1, -1, -1, 50, + 93, 94, -1, -1, -1, -1, -1, -1, 59, 102, + 103, 104, 105, -1, 65, 108, 109, 1, -1, 45, + 46, 72, -1, -1, 50, 76, -1, -1, -1, -1, + -1, 82, -1, 59, 85, 86, -1, -1, -1, 65, + -1, -1, 93, 94, 3, 4, 72, -1, -1, -1, + 76, 102, 103, 104, 105, -1, 82, 108, 109, 85, + 86, 45, 46, 89, 90, -1, 50, 93, -1, 95, + 96, -1, -1, -1, -1, 59, 102, 103, 104, 105, + -1, 65, 108, 109, -1, -1, 45, 46, 72, -1, + -1, 50, 76, -1, -1, 3, 4, -1, 82, -1, + 59, 85, 86, -1, -1, -1, 65, -1, -1, 93, + -1, -1, -1, 72, -1, -1, -1, 76, 102, 103, + 104, 105, -1, 82, 108, 109, 85, 86, -1, -1, + 89, 90, -1, -1, 93, 94, -1, 45, 46, -1, + -1, -1, 50, 102, 103, 104, 105, -1, -1, 108, + 109, 59, -1, -1, -1, -1, -1, 65, -1, -1, + 3, 4, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, - -1, 89, 90, -1, -1, 93, -1, 44, 45, 46, - -1, -1, -1, 50, 102, 103, 104, 105, -1, -1, - 108, 109, 59, -1, -1, -1, -1, -1, 65, -1, + -1, 89, 90, -1, -1, 93, 94, -1, -1, -1, + -1, -1, -1, -1, 102, 103, 104, 105, -1, -1, + 108, 109, 45, 46, -1, -1, -1, 50, -1, -1, + -1, 3, 4, -1, -1, -1, 59, -1, -1, -1, + -1, -1, 65, -1, -1, -1, -1, -1, -1, 72, + -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, + -1, -1, 85, 86, -1, -1, 89, 90, -1, -1, + 93, 94, -1, 45, 46, -1, -1, -1, 50, 102, + 103, 104, 105, -1, -1, 108, 109, 59, -1, -1, + -1, -1, -1, 65, -1, -1, 3, 4, -1, -1, + 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, + 82, -1, -1, 85, 86, -1, -1, 89, 90, -1, + -1, 93, 94, -1, -1, -1, -1, -1, -1, -1, + 102, 103, 104, 105, -1, -1, 108, 109, 45, 46, + -1, -1, -1, 50, -1, -1, -1, -1, -1, -1, + -1, -1, 59, -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, 86, - -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, 102, 103, 104, 105, -1, - -1, 108, 109 + -1, -1, 89, 90, -1, -1, 93, -1, 44, 45, + 46, -1, -1, -1, 50, 102, 103, 104, 105, -1, + -1, 108, 109, 59, -1, -1, -1, -1, -1, 65, + -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, + 76, -1, -1, -1, -1, -1, 82, -1, -1, 85, + 86, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, -1, -1, -1, -1, 102, 103, 104, 105, + -1, -1, 108, 109 }; #define YYPURE 1 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/lib/bison.simple" +#line 3 "/usr/cygnus/gnupro-98r2/share/bison.simple" /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. @@ -2422,7 +2404,7 @@ __yy_memcpy (char *to, char *from, int count) #endif #endif -#line 196 "/usr/lib/bison.simple" +#line 196 "/usr/cygnus/gnupro-98r2/share/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. @@ -3186,281 +3168,284 @@ case 124: break;} case 125: #line 920 "./parse.y" -{ yyval.node = parse_jdk1_1_error ("final parameters"); ; +{ + parse_jdk1_1_error ("final parameters"); + yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node); + ; break;} case 126: -#line 922 "./parse.y" +#line 925 "./parse.y" {yyerror ("Missing identifier"); RECOVER;; break;} case 127: -#line 924 "./parse.y" +#line 927 "./parse.y" { SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[-2].value)); yyerror ("Missing identifier"); RECOVER; ; break;} case 128: -#line 931 "./parse.y" +#line 934 "./parse.y" { yyval.node = NULL_TREE; ; break;} case 129: -#line 933 "./parse.y" +#line 936 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} case 130: -#line 935 "./parse.y" +#line 938 "./parse.y" {yyerror ("Missing class type term"); RECOVER;; break;} case 131: -#line 940 "./parse.y" +#line 943 "./parse.y" { yyval.node = build_tree_list (yyvsp[0].node, yyvsp[0].node); ; break;} case 132: -#line 942 "./parse.y" +#line 945 "./parse.y" { yyval.node = tree_cons (yyvsp[0].node, yyvsp[0].node, yyvsp[-2].node); ; break;} case 133: -#line 944 "./parse.y" +#line 947 "./parse.y" {yyerror ("Missing class type term"); RECOVER;; break;} case 136: -#line 951 "./parse.y" +#line 954 "./parse.y" { yyval.node = NULL_TREE; ; break;} case 137: -#line 957 "./parse.y" +#line 960 "./parse.y" { TREE_CHAIN (yyvsp[0].node) = ctxp->static_initialized; ctxp->static_initialized = yyvsp[0].node; ; break;} case 138: -#line 962 "./parse.y" +#line 965 "./parse.y" { TREE_CHAIN (yyvsp[-1].node) = ctxp->static_initialized; ctxp->static_initialized = yyvsp[-1].node; ; break;} case 139: -#line 970 "./parse.y" +#line 973 "./parse.y" { SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[0].value)); ; break;} case 140: -#line 978 "./parse.y" +#line 981 "./parse.y" { current_function_decl = yyvsp[0].node; source_start_java_method (current_function_decl); ; break;} case 141: -#line 983 "./parse.y" +#line 986 "./parse.y" { finish_method_declaration (yyvsp[0].node); ; break;} case 142: -#line 988 "./parse.y" +#line 991 "./parse.y" { yyval.node = method_header (0, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ; break;} case 143: -#line 990 "./parse.y" +#line 993 "./parse.y" { yyval.node = method_header (yyvsp[-2].value, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ; break;} case 144: -#line 995 "./parse.y" +#line 998 "./parse.y" { yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE); ; break;} case 145: -#line 997 "./parse.y" +#line 1000 "./parse.y" { yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ; break;} case 146: -#line 1005 "./parse.y" +#line 1008 "./parse.y" { BLOCK_EXPR_BODY (yyvsp[0].node) = empty_stmt_node; yyval.node = yyvsp[0].node; ; break;} case 147: -#line 1010 "./parse.y" +#line 1013 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} case 148: -#line 1012 "./parse.y" +#line 1015 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} case 149: -#line 1014 "./parse.y" +#line 1017 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} -case 150: -#line 1020 "./parse.y" +case 152: +#line 1027 "./parse.y" { yyval.node = build_method_invocation (yyvsp[-3].node, NULL_TREE); yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-3].node), yyval.node); yyval.node = java_method_add_stmt (current_function_decl, yyval.node); ; break;} -case 151: -#line 1026 "./parse.y" +case 153: +#line 1033 "./parse.y" { yyval.node = build_method_invocation (yyvsp[-4].node, yyvsp[-2].node); yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-4].node), yyval.node); yyval.node = java_method_add_stmt (current_function_decl, yyval.node); ; break;} -case 152: -#line 1034 "./parse.y" +case 154: +#line 1041 "./parse.y" {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ; break;} -case 153: -#line 1036 "./parse.y" +case 155: +#line 1043 "./parse.y" {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ; break;} -case 154: -#line 1041 "./parse.y" +case 156: +#line 1048 "./parse.y" { tree wfl = build_wfl_node (this_identifier_node); EXPR_WFL_LINECOL (wfl) = yyvsp[0].operator.location; yyval.node = wfl; ; break;} -case 155: -#line 1047 "./parse.y" +case 157: +#line 1054 "./parse.y" { tree wfl = build_wfl_node (super_identifier_node); EXPR_WFL_LINECOL (wfl) = yyvsp[0].operator.location; yyval.node = wfl; ; break;} -case 156: -#line 1058 "./parse.y" +case 158: +#line 1065 "./parse.y" { create_interface (0, yyvsp[0].node, NULL_TREE); ; break;} -case 157: -#line 1060 "./parse.y" +case 159: +#line 1067 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} -case 158: -#line 1064 "./parse.y" +case 160: +#line 1071 "./parse.y" { create_interface (yyvsp[-2].value, yyvsp[0].node, NULL_TREE); ; break;} -case 159: -#line 1066 "./parse.y" +case 161: +#line 1073 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} -case 160: -#line 1070 "./parse.y" +case 162: +#line 1077 "./parse.y" { create_interface (0, yyvsp[-1].node, yyvsp[0].node); ; break;} -case 161: -#line 1072 "./parse.y" +case 163: +#line 1079 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} -case 162: -#line 1076 "./parse.y" +case 164: +#line 1083 "./parse.y" { create_interface (yyvsp[-3].value, yyvsp[-1].node, yyvsp[0].node); ; break;} -case 163: -#line 1078 "./parse.y" +case 165: +#line 1085 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} -case 164: -#line 1082 "./parse.y" +case 166: +#line 1089 "./parse.y" {yyerror ("'{' expected"); RECOVER;; break;} -case 165: -#line 1084 "./parse.y" +case 167: +#line 1091 "./parse.y" {yyerror ("'{' expected"); RECOVER;; break;} -case 166: -#line 1089 "./parse.y" +case 168: +#line 1096 "./parse.y" { ctxp->interface_number = 1; yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE); ; break;} -case 167: -#line 1094 "./parse.y" +case 169: +#line 1101 "./parse.y" { ctxp->interface_number++; yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE)); ; break;} -case 168: -#line 1099 "./parse.y" +case 170: +#line 1106 "./parse.y" {yyerror ("Invalid interface type"); RECOVER;; break;} -case 169: -#line 1101 "./parse.y" +case 171: +#line 1108 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 170: -#line 1106 "./parse.y" +case 172: +#line 1113 "./parse.y" { yyval.node = NULL_TREE; ; break;} -case 171: -#line 1108 "./parse.y" +case 173: +#line 1115 "./parse.y" { yyval.node = NULL_TREE; ; break;} -case 176: -#line 1120 "./parse.y" +case 178: +#line 1127 "./parse.y" { yyval.node = parse_jdk1_1_error ("inner class declaration"); ; break;} -case 177: -#line 1122 "./parse.y" +case 179: +#line 1129 "./parse.y" { yyval.node = parse_jdk1_1_error ("inner interface declaration"); ; break;} -case 179: -#line 1131 "./parse.y" +case 181: +#line 1138 "./parse.y" { check_abstract_method_header (yyvsp[-1].node); current_function_decl = NULL_TREE; /* FIXME ? */ ; break;} -case 180: -#line 1136 "./parse.y" +case 182: +#line 1143 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} -case 181: -#line 1142 "./parse.y" +case 183: +#line 1149 "./parse.y" { yyval.node = build_new_array_init (yyvsp[-1].operator.location, NULL_TREE); ; break;} -case 182: -#line 1144 "./parse.y" +case 184: +#line 1151 "./parse.y" { yyval.node = build_new_array_init (yyvsp[-2].operator.location, yyvsp[-1].node); ; break;} -case 183: -#line 1146 "./parse.y" +case 185: +#line 1153 "./parse.y" { yyval.node = build_new_array_init (yyvsp[-3].operator.location, yyvsp[-2].node); ; break;} -case 184: -#line 1151 "./parse.y" +case 186: +#line 1158 "./parse.y" { yyval.node = tree_cons (maybe_build_array_element_wfl (yyvsp[0].node), yyvsp[0].node, NULL_TREE); ; break;} -case 185: -#line 1156 "./parse.y" +case 187: +#line 1163 "./parse.y" { yyval.node = tree_cons (maybe_build_array_element_wfl (yyvsp[0].node), yyvsp[0].node, yyvsp[-2].node); ; break;} -case 186: -#line 1160 "./parse.y" +case 188: +#line 1167 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 187: -#line 1166 "./parse.y" +case 189: +#line 1173 "./parse.y" { /* Store the location of the `}' when doing xrefs */ if (current_function_decl && flag_emit_xref) @@ -3469,16 +3454,16 @@ case 187: yyval.node = empty_stmt_node; ; break;} -case 188: -#line 1174 "./parse.y" +case 190: +#line 1181 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} -case 189: -#line 1179 "./parse.y" +case 191: +#line 1186 "./parse.y" { enter_block (); ; break;} -case 190: -#line 1184 "./parse.y" +case 192: +#line 1191 "./parse.y" { maybe_absorb_scoping_blocks (); /* Store the location of the `}' when doing xrefs */ @@ -3488,32 +3473,36 @@ case 190: yyval.node = exit_block (); ; break;} -case 194: -#line 1202 "./parse.y" +case 196: +#line 1209 "./parse.y" { java_method_add_stmt (current_function_decl, yyvsp[0].node); ; break;} -case 195: -#line 1204 "./parse.y" +case 197: +#line 1211 "./parse.y" { parse_jdk1_1_error ("inner class declaration"); ; break;} -case 197: -#line 1213 "./parse.y" +case 199: +#line 1220 "./parse.y" { declare_local_variables (0, yyvsp[-1].node, yyvsp[0].node); ; break;} -case 198: -#line 1215 "./parse.y" +case 200: +#line 1222 "./parse.y" { declare_local_variables (yyvsp[-2].value, yyvsp[-1].node, yyvsp[0].node); ; break;} -case 204: -#line 1225 "./parse.y" +case 206: +#line 1232 "./parse.y" { yyval.node = exit_block (); ; break;} -case 221: -#line 1252 "./parse.y" +case 211: +#line 1241 "./parse.y" +{ yyval.node = exit_block (); ; + break;} +case 223: +#line 1260 "./parse.y" { yyval.node = empty_stmt_node; ; break;} -case 222: -#line 1257 "./parse.y" +case 224: +#line 1265 "./parse.y" { yyval.node = build_labeled_block (EXPR_WFL_LINECOL (yyvsp[-1].node), EXPR_WFL_NODE (yyvsp[-1].node)); @@ -3522,20 +3511,20 @@ case 222: PUSH_LABELED_BLOCK (yyval.node); ; break;} -case 223: -#line 1268 "./parse.y" +case 225: +#line 1276 "./parse.y" { yyval.node = finish_labeled_statement (yyvsp[-1].node, yyvsp[0].node); ; break;} -case 224: -#line 1270 "./parse.y" +case 226: +#line 1278 "./parse.y" {yyerror ("':' expected"); RECOVER;; break;} -case 225: -#line 1275 "./parse.y" +case 227: +#line 1283 "./parse.y" { yyval.node = finish_labeled_statement (yyvsp[-1].node, yyvsp[0].node); ; break;} -case 226: -#line 1282 "./parse.y" +case 228: +#line 1290 "./parse.y" { /* We have a statement. Generate a WFL around it so we can debug it */ @@ -3545,109 +3534,109 @@ case 226: yyval.node = JAVA_MAYBE_GENERATE_DEBUG_INFO (yyval.node); ; break;} -case 227: -#line 1291 "./parse.y" +case 229: +#line 1299 "./parse.y" { if (ctxp->prevent_ese != lineno) yyerror ("Invalid expression statement"); DRECOVER (expr_stmt); ; break;} -case 228: -#line 1297 "./parse.y" +case 230: +#line 1305 "./parse.y" { if (ctxp->prevent_ese != lineno) yyerror ("Invalid expression statement"); DRECOVER (expr_stmt); ; break;} -case 229: -#line 1303 "./parse.y" +case 231: +#line 1311 "./parse.y" { if (ctxp->prevent_ese != lineno) yyerror ("Invalid expression statement"); DRECOVER (expr_stmt); ; break;} -case 230: -#line 1309 "./parse.y" +case 232: +#line 1317 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} -case 231: -#line 1311 "./parse.y" +case 233: +#line 1319 "./parse.y" { yyerror ("Constructor invocation must be first " "thing in a constructor"); RECOVER; ; break;} -case 232: -#line 1317 "./parse.y" +case 234: +#line 1325 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} -case 233: -#line 1319 "./parse.y" +case 235: +#line 1327 "./parse.y" { yyerror ("Constructor invocation must be first " "thing in a constructor"); RECOVER; ; break;} -case 234: -#line 1325 "./parse.y" +case 236: +#line 1333 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} -case 235: -#line 1327 "./parse.y" +case 237: +#line 1335 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} -case 236: -#line 1329 "./parse.y" +case 238: +#line 1337 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} -case 237: -#line 1331 "./parse.y" +case 239: +#line 1339 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} -case 238: -#line 1333 "./parse.y" +case 240: +#line 1341 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} -case 246: -#line 1348 "./parse.y" +case 248: +#line 1356 "./parse.y" { yyval.node = build_if_else_statement (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node, NULL_TREE); ; break;} -case 247: -#line 1353 "./parse.y" +case 249: +#line 1361 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} -case 248: -#line 1355 "./parse.y" +case 250: +#line 1363 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 249: -#line 1357 "./parse.y" +case 251: +#line 1365 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} -case 250: -#line 1362 "./parse.y" +case 252: +#line 1370 "./parse.y" { yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 251: -#line 1367 "./parse.y" +case 253: +#line 1375 "./parse.y" { yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 252: -#line 1372 "./parse.y" +case 254: +#line 1380 "./parse.y" { enter_block (); ; break;} -case 253: -#line 1376 "./parse.y" +case 255: +#line 1384 "./parse.y" { /* Make into "proper list" of COMPOUND_EXPRs. I.e. make the last statment also have its own @@ -3657,113 +3646,113 @@ case 253: yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-2].node), yyvsp[-2].node); ; break;} -case 254: -#line 1388 "./parse.y" +case 256: +#line 1396 "./parse.y" { yyval.node = build (SWITCH_EXPR, NULL_TREE, yyvsp[-1].node, NULL_TREE); EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location; ; break;} -case 255: -#line 1393 "./parse.y" +case 257: +#line 1401 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} -case 256: -#line 1395 "./parse.y" +case 258: +#line 1403 "./parse.y" {yyerror ("Missing term or ')'"); DRECOVER(switch_statement);; break;} -case 257: -#line 1397 "./parse.y" +case 259: +#line 1405 "./parse.y" {yyerror ("'{' expected"); RECOVER;; break;} -case 258: -#line 1405 "./parse.y" +case 260: +#line 1413 "./parse.y" { yyval.node = NULL_TREE; ; break;} -case 259: -#line 1407 "./parse.y" +case 261: +#line 1415 "./parse.y" { yyval.node = NULL_TREE; ; break;} -case 260: -#line 1409 "./parse.y" +case 262: +#line 1417 "./parse.y" { yyval.node = NULL_TREE; ; break;} -case 261: -#line 1411 "./parse.y" +case 263: +#line 1419 "./parse.y" { yyval.node = NULL_TREE; ; break;} -case 267: -#line 1430 "./parse.y" +case 269: +#line 1438 "./parse.y" { tree lab = build1 (CASE_EXPR, NULL_TREE, yyvsp[-1].node); EXPR_WFL_LINECOL (lab) = yyvsp[-2].operator.location; java_method_add_stmt (current_function_decl, lab); ; break;} -case 268: -#line 1436 "./parse.y" +case 270: +#line 1444 "./parse.y" { tree lab = build1 (DEFAULT_EXPR, NULL_TREE, NULL_TREE); EXPR_WFL_LINECOL (lab) = yyvsp[-1].operator.location; java_method_add_stmt (current_function_decl, lab); ; break;} -case 269: -#line 1442 "./parse.y" +case 271: +#line 1450 "./parse.y" {yyerror ("Missing or invalid constant expression"); RECOVER;; break;} -case 270: -#line 1444 "./parse.y" +case 272: +#line 1452 "./parse.y" {yyerror ("':' expected"); RECOVER;; break;} -case 271: -#line 1446 "./parse.y" +case 273: +#line 1454 "./parse.y" {yyerror ("':' expected"); RECOVER;; break;} -case 272: -#line 1451 "./parse.y" +case 274: +#line 1459 "./parse.y" { tree body = build_loop_body (yyvsp[-2].operator.location, yyvsp[-1].node, 0); yyval.node = build_new_loop (body); ; break;} -case 273: -#line 1459 "./parse.y" +case 275: +#line 1467 "./parse.y" { yyval.node = finish_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ; break;} -case 274: -#line 1461 "./parse.y" +case 276: +#line 1469 "./parse.y" {YYERROR_NOW; yyerror ("'(' expected"); RECOVER;; break;} -case 275: -#line 1463 "./parse.y" +case 277: +#line 1471 "./parse.y" {yyerror ("Missing term and ')' expected"); RECOVER;; break;} -case 276: -#line 1465 "./parse.y" +case 278: +#line 1473 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} -case 277: -#line 1470 "./parse.y" +case 279: +#line 1478 "./parse.y" { yyval.node = finish_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ; break;} -case 278: -#line 1475 "./parse.y" +case 280: +#line 1483 "./parse.y" { tree body = build_loop_body (0, NULL_TREE, 1); yyval.node = build_new_loop (body); ; break;} -case 279: -#line 1484 "./parse.y" +case 281: +#line 1492 "./parse.y" { yyval.node = finish_loop_body (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-5].node, 1); ; break;} -case 280: -#line 1489 "./parse.y" +case 282: +#line 1497 "./parse.y" { yyval.node = finish_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 281: -#line 1491 "./parse.y" +case 283: +#line 1499 "./parse.y" { yyval.node = finish_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node); /* We have not condition, so we get rid of the EXIT_EXPR */ @@ -3771,24 +3760,24 @@ case 281: empty_stmt_node; ; break;} -case 282: -#line 1498 "./parse.y" +case 284: +#line 1506 "./parse.y" {yyerror ("Invalid control expression"); RECOVER;; break;} -case 283: -#line 1500 "./parse.y" +case 285: +#line 1508 "./parse.y" {yyerror ("Invalid update expression"); RECOVER;; break;} -case 284: -#line 1502 "./parse.y" +case 286: +#line 1510 "./parse.y" {yyerror ("Invalid update expression"); RECOVER;; break;} -case 285: -#line 1507 "./parse.y" +case 287: +#line 1515 "./parse.y" { yyval.node = finish_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);; break;} -case 286: -#line 1509 "./parse.y" +case 288: +#line 1517 "./parse.y" { yyval.node = finish_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node); /* We have not condition, so we get rid of the EXIT_EXPR */ @@ -3796,24 +3785,24 @@ case 286: empty_stmt_node; ; break;} -case 287: -#line 1519 "./parse.y" +case 289: +#line 1527 "./parse.y" { /* This scope defined for local variable that may be defined within the scope of the for loop */ enter_block (); ; break;} -case 288: -#line 1525 "./parse.y" +case 290: +#line 1533 "./parse.y" {yyerror ("'(' expected"); DRECOVER(for_1);; break;} -case 289: -#line 1527 "./parse.y" +case 291: +#line 1535 "./parse.y" {yyerror ("Invalid init statement"); RECOVER;; break;} -case 290: -#line 1532 "./parse.y" +case 292: +#line 1540 "./parse.y" { /* We now declare the loop body. The loop is declared as a for loop. */ @@ -3825,180 +3814,180 @@ case 290: java_method_add_stmt (current_function_decl, yyval.node); ; break;} -case 291: -#line 1544 "./parse.y" +case 293: +#line 1552 "./parse.y" { yyval.node = empty_stmt_node; ; break;} -case 292: -#line 1546 "./parse.y" +case 294: +#line 1554 "./parse.y" { /* Init statement recorded within the previously defined block scope */ yyval.node = java_method_add_stmt (current_function_decl, yyvsp[0].node); ; break;} -case 293: -#line 1552 "./parse.y" +case 295: +#line 1560 "./parse.y" { /* Local variable are recorded within the previously defined block scope */ yyval.node = NULL_TREE; ; break;} -case 294: -#line 1558 "./parse.y" +case 296: +#line 1566 "./parse.y" {yyerror ("';' expected"); DRECOVER(for_init_1);; break;} -case 295: -#line 1562 "./parse.y" +case 297: +#line 1570 "./parse.y" {yyval.node = empty_stmt_node;; break;} -case 296: -#line 1564 "./parse.y" +case 298: +#line 1572 "./parse.y" { yyval.node = build_debugable_stmt (BUILD_LOCATION (), yyvsp[0].node); ; break;} -case 297: -#line 1569 "./parse.y" +case 299: +#line 1577 "./parse.y" { yyval.node = add_stmt_to_compound (NULL_TREE, NULL_TREE, yyvsp[0].node); ; break;} -case 298: -#line 1571 "./parse.y" +case 300: +#line 1579 "./parse.y" { yyval.node = add_stmt_to_compound (yyvsp[-2].node, NULL_TREE, yyvsp[0].node); ; break;} -case 299: -#line 1573 "./parse.y" +case 301: +#line 1581 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 300: -#line 1578 "./parse.y" +case 302: +#line 1586 "./parse.y" { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 1, NULL_TREE); ; break;} -case 301: -#line 1580 "./parse.y" +case 303: +#line 1588 "./parse.y" { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 1, yyvsp[-1].node); ; break;} -case 302: -#line 1582 "./parse.y" +case 304: +#line 1590 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 303: -#line 1584 "./parse.y" +case 305: +#line 1592 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} -case 304: -#line 1589 "./parse.y" +case 306: +#line 1597 "./parse.y" { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 0, NULL_TREE); ; break;} -case 305: -#line 1591 "./parse.y" +case 307: +#line 1599 "./parse.y" { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 0, yyvsp[-1].node); ; break;} -case 306: -#line 1593 "./parse.y" +case 308: +#line 1601 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 307: -#line 1595 "./parse.y" +case 309: +#line 1603 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} -case 308: -#line 1600 "./parse.y" +case 310: +#line 1608 "./parse.y" { yyval.node = build_return (yyvsp[-1].operator.location, NULL_TREE); ; break;} -case 309: -#line 1602 "./parse.y" +case 311: +#line 1610 "./parse.y" { yyval.node = build_return (yyvsp[-2].operator.location, yyvsp[-1].node); ; break;} -case 310: -#line 1604 "./parse.y" +case 312: +#line 1612 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 311: -#line 1606 "./parse.y" +case 313: +#line 1614 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} -case 312: -#line 1611 "./parse.y" +case 314: +#line 1619 "./parse.y" { yyval.node = build1 (THROW_EXPR, NULL_TREE, yyvsp[-1].node); EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location; ; break;} -case 313: -#line 1616 "./parse.y" +case 315: +#line 1624 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 314: -#line 1618 "./parse.y" +case 316: +#line 1626 "./parse.y" {yyerror ("';' expected"); RECOVER;; break;} -case 315: -#line 1623 "./parse.y" +case 317: +#line 1631 "./parse.y" { yyval.node = build (SYNCHRONIZED_EXPR, NULL_TREE, yyvsp[-2].node, yyvsp[0].node); EXPR_WFL_LINECOL (yyval.node) = EXPR_WFL_LINECOL (MODIFIER_WFL (SYNCHRONIZED_TK)); ; break;} -case 316: -#line 1629 "./parse.y" +case 318: +#line 1637 "./parse.y" {yyerror ("'{' expected"); RECOVER;; break;} -case 317: -#line 1631 "./parse.y" +case 319: +#line 1639 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} -case 318: -#line 1633 "./parse.y" +case 320: +#line 1641 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 319: -#line 1635 "./parse.y" +case 321: +#line 1643 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 320: -#line 1640 "./parse.y" +case 322: +#line 1648 "./parse.y" { if ((1 << yyvsp[0].value) != ACC_SYNCHRONIZED) fatal ("synchronized was '%d' - yyparse", (1 << yyvsp[0].value)); ; break;} -case 321: -#line 1648 "./parse.y" +case 323: +#line 1656 "./parse.y" { yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ; break;} -case 322: -#line 1650 "./parse.y" +case 324: +#line 1658 "./parse.y" { yyval.node = build_try_finally_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ; break;} -case 323: -#line 1652 "./parse.y" +case 325: +#line 1660 "./parse.y" { yyval.node = build_try_finally_statement (yyvsp[-3].operator.location, build_try_statement (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-1].node), yyvsp[0].node); ; break;} -case 324: -#line 1657 "./parse.y" +case 326: +#line 1665 "./parse.y" {yyerror ("'{' expected"); DRECOVER (try_statement);; break;} -case 326: -#line 1663 "./parse.y" +case 328: +#line 1671 "./parse.y" { TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node; yyval.node = yyvsp[0].node; ; break;} -case 327: -#line 1671 "./parse.y" +case 329: +#line 1679 "./parse.y" { java_method_add_stmt (current_function_decl, yyvsp[0].node); exit_block (); yyval.node = yyvsp[-1].node; ; break;} -case 328: -#line 1679 "./parse.y" +case 330: +#line 1687 "./parse.y" { /* We add a block to define a scope for formal_parameter (CCBP). The formal parameter is @@ -4015,185 +4004,185 @@ case 328: EXPR_WFL_LINECOL (yyval.node) = yyvsp[-3].operator.location; ; break;} -case 329: -#line 1695 "./parse.y" +case 331: +#line 1703 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} -case 330: -#line 1697 "./parse.y" +case 332: +#line 1705 "./parse.y" {yyerror ("Missing term or ')' expected"); DRECOVER (2);; break;} -case 331: -#line 1699 "./parse.y" +case 333: +#line 1707 "./parse.y" {yyerror ("')' expected"); DRECOVER (1);; break;} -case 332: -#line 1704 "./parse.y" +case 334: +#line 1712 "./parse.y" { yyval.node = yyvsp[0].node; ; break;} -case 333: -#line 1706 "./parse.y" +case 335: +#line 1714 "./parse.y" {yyerror ("'{' expected"); RECOVER; ; break;} -case 337: -#line 1718 "./parse.y" +case 339: +#line 1726 "./parse.y" { yyval.node = build_this (yyvsp[0].operator.location); ; break;} -case 338: -#line 1720 "./parse.y" +case 340: +#line 1728 "./parse.y" {yyval.node = yyvsp[-1].node;; break;} -case 343: -#line 1729 "./parse.y" +case 345: +#line 1737 "./parse.y" { yyval.node = parse_jdk1_1_error ("named class literals"); ; break;} -case 344: -#line 1731 "./parse.y" +case 346: +#line 1739 "./parse.y" { yyval.node = build_class_ref (yyvsp[-2].node); ; break;} -case 345: -#line 1733 "./parse.y" +case 347: +#line 1741 "./parse.y" { yyval.node = build_class_ref (void_type_node); ; break;} -case 346: -#line 1738 "./parse.y" +case 348: +#line 1746 "./parse.y" { yyval.node = parse_jdk1_1_error ("class literals"); ; break;} -case 347: -#line 1740 "./parse.y" +case 349: +#line 1748 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} -case 348: -#line 1742 "./parse.y" +case 350: +#line 1750 "./parse.y" {yyerror ("'class' or 'this' expected" ); RECOVER;; break;} -case 349: -#line 1744 "./parse.y" +case 351: +#line 1752 "./parse.y" {yyerror ("'class' expected" ); RECOVER;; break;} -case 350: -#line 1746 "./parse.y" +case 352: +#line 1754 "./parse.y" {yyerror ("'class' expected" ); RECOVER;; break;} -case 351: -#line 1751 "./parse.y" +case 353: +#line 1759 "./parse.y" { yyval.node = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node); ; break;} -case 352: -#line 1753 "./parse.y" +case 354: +#line 1761 "./parse.y" { yyval.node = build_new_invocation (yyvsp[-2].node, NULL_TREE); ; break;} -case 353: -#line 1758 "./parse.y" +case 355: +#line 1766 "./parse.y" { yyval.node = parse_jdk1_1_error ("inner class instance creation"); ; break;} -case 354: -#line 1760 "./parse.y" +case 356: +#line 1768 "./parse.y" { yyval.node = parse_jdk1_1_error ("inner class instance creation"); ; break;} -case 359: -#line 1769 "./parse.y" +case 361: +#line 1777 "./parse.y" {yyerror ("'(' expected"); DRECOVER(new_1);; break;} -case 360: -#line 1771 "./parse.y" +case 362: +#line 1779 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} -case 361: -#line 1773 "./parse.y" +case 363: +#line 1781 "./parse.y" {yyerror ("')' or term expected"); RECOVER;; break;} -case 362: -#line 1775 "./parse.y" +case 364: +#line 1783 "./parse.y" {yyerror ("')' expected"); RECOVER;; break;} -case 363: -#line 1777 "./parse.y" +case 365: +#line 1785 "./parse.y" {YYERROR_NOW; yyerror ("Identifier expected"); RECOVER;; break;} -case 364: -#line 1779 "./parse.y" +case 366: +#line 1787 "./parse.y" {yyerror ("'(' expected"); RECOVER;; break;} -case 367: -#line 1789 "./parse.y" +case 369: +#line 1797 "./parse.y" { yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, NULL_TREE); ctxp->formal_parameter_number = 1; ; break;} -case 368: -#line 1794 "./parse.y" +case 370: +#line 1802 "./parse.y" { ctxp->formal_parameter_number += 1; yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyvsp[-2].node); ; break;} -case 369: -#line 1799 "./parse.y" +case 371: +#line 1807 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 370: -#line 1804 "./parse.y" +case 372: +#line 1812 "./parse.y" { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ; break;} -case 371: -#line 1806 "./parse.y" +case 373: +#line 1814 "./parse.y" { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ; break;} -case 372: -#line 1808 "./parse.y" +case 374: +#line 1816 "./parse.y" { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, CURRENT_OSB (ctxp));; break;} -case 373: -#line 1810 "./parse.y" +case 375: +#line 1818 "./parse.y" { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, CURRENT_OSB (ctxp));; break;} -case 374: -#line 1814 "./parse.y" +case 376: +#line 1822 "./parse.y" { yyval.node = parse_jdk1_1_error ("anonymous array"); ; break;} -case 375: -#line 1816 "./parse.y" +case 377: +#line 1824 "./parse.y" { yyval.node = parse_jdk1_1_error ("anonymous array"); ; break;} -case 376: -#line 1818 "./parse.y" +case 378: +#line 1826 "./parse.y" {yyerror ("'[' expected"); DRECOVER ("]");; break;} -case 377: -#line 1820 "./parse.y" +case 379: +#line 1828 "./parse.y" {yyerror ("']' expected"); RECOVER;; break;} -case 378: -#line 1825 "./parse.y" +case 380: +#line 1833 "./parse.y" { yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ; break;} -case 379: -#line 1827 "./parse.y" +case 381: +#line 1835 "./parse.y" { yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyval.node); ; break;} -case 380: -#line 1832 "./parse.y" +case 382: +#line 1840 "./parse.y" { EXPR_WFL_LINECOL (yyvsp[-1].node) = yyvsp[-2].operator.location; yyval.node = yyvsp[-1].node; ; break;} -case 381: -#line 1837 "./parse.y" +case 383: +#line 1845 "./parse.y" {yyerror ("']' expected"); RECOVER;; break;} -case 382: -#line 1839 "./parse.y" +case 384: +#line 1847 "./parse.y" { yyerror ("Missing term"); yyerror ("']' expected"); RECOVER; ; break;} -case 383: -#line 1848 "./parse.y" +case 385: +#line 1856 "./parse.y" { int allocate = 0; /* If not initialized, allocate memory for the osb @@ -4220,20 +4209,20 @@ case 383: CURRENT_OSB (ctxp) = 1; ; break;} -case 384: -#line 1874 "./parse.y" +case 386: +#line 1882 "./parse.y" { CURRENT_OSB (ctxp)++; ; break;} -case 385: -#line 1876 "./parse.y" +case 387: +#line 1884 "./parse.y" { yyerror ("']' expected"); RECOVER;; break;} -case 386: -#line 1881 "./parse.y" +case 388: +#line 1889 "./parse.y" { yyval.node = make_qualified_primary (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ; break;} -case 387: -#line 1885 "./parse.y" +case 389: +#line 1893 "./parse.y" { tree super_wfl = build_wfl_node (super_identifier_node); @@ -4241,20 +4230,20 @@ case 387: yyval.node = make_qualified_name (super_wfl, yyvsp[0].node, yyvsp[-1].operator.location); ; break;} -case 388: -#line 1892 "./parse.y" +case 390: +#line 1900 "./parse.y" {yyerror ("Field expected"); DRECOVER (super_field_acces);; break;} -case 389: -#line 1897 "./parse.y" +case 391: +#line 1905 "./parse.y" { yyval.node = build_method_invocation (yyvsp[-2].node, NULL_TREE); ; break;} -case 390: -#line 1899 "./parse.y" +case 392: +#line 1907 "./parse.y" { yyval.node = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node); ; break;} -case 391: -#line 1901 "./parse.y" +case 393: +#line 1909 "./parse.y" { if (TREE_CODE (yyvsp[-4].node) == THIS_EXPR) yyval.node = build_this_super_qualified_invocation @@ -4266,8 +4255,8 @@ case 391: } ; break;} -case 392: -#line 1912 "./parse.y" +case 394: +#line 1920 "./parse.y" { if (TREE_CODE (yyvsp[-5].node) == THIS_EXPR) yyval.node = build_this_super_qualified_invocation @@ -4279,122 +4268,122 @@ case 392: } ; break;} -case 393: -#line 1923 "./parse.y" +case 395: +#line 1931 "./parse.y" { yyval.node = build_this_super_qualified_invocation (0, yyvsp[-2].node, NULL_TREE, yyvsp[-4].operator.location, yyvsp[-3].operator.location); ; break;} -case 394: -#line 1928 "./parse.y" +case 396: +#line 1936 "./parse.y" { yyval.node = build_this_super_qualified_invocation (0, yyvsp[-3].node, yyvsp[-1].node, yyvsp[-5].operator.location, yyvsp[-4].operator.location); ; break;} -case 395: -#line 1937 "./parse.y" +case 397: +#line 1945 "./parse.y" { yyerror ("'(' expected"); DRECOVER (method_invocation); ; break;} -case 396: -#line 1939 "./parse.y" +case 398: +#line 1947 "./parse.y" { yyerror ("'(' expected"); DRECOVER (method_invocation); ; break;} -case 397: -#line 1944 "./parse.y" +case 399: +#line 1952 "./parse.y" { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ; break;} -case 398: -#line 1946 "./parse.y" +case 400: +#line 1954 "./parse.y" { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ; break;} -case 399: -#line 1948 "./parse.y" +case 401: +#line 1956 "./parse.y" { yyerror ("Missing term and ']' expected"); DRECOVER(array_access); ; break;} -case 400: -#line 1953 "./parse.y" +case 402: +#line 1961 "./parse.y" { yyerror ("']' expected"); DRECOVER(array_access); ; break;} -case 401: -#line 1958 "./parse.y" +case 403: +#line 1966 "./parse.y" { yyerror ("Missing term and ']' expected"); DRECOVER(array_access); ; break;} -case 402: -#line 1963 "./parse.y" +case 404: +#line 1971 "./parse.y" { yyerror ("']' expected"); DRECOVER(array_access); ; break;} -case 407: -#line 1978 "./parse.y" +case 409: +#line 1986 "./parse.y" { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ; break;} -case 408: -#line 1983 "./parse.y" +case 410: +#line 1991 "./parse.y" { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ; break;} -case 411: -#line 1990 "./parse.y" -{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; - break;} -case 412: -#line 1992 "./parse.y" +case 413: +#line 1998 "./parse.y" {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; break;} case 414: -#line 1995 "./parse.y" -{yyerror ("Missing term"); RECOVER; - break;} -case 415: -#line 1997 "./parse.y" -{yyerror ("Missing term"); RECOVER; +#line 2000 "./parse.y" +{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; break;} case 416: -#line 2002 "./parse.y" -{yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ; +#line 2003 "./parse.y" +{yyerror ("Missing term"); RECOVER; break;} case 417: -#line 2004 "./parse.y" +#line 2005 "./parse.y" {yyerror ("Missing term"); RECOVER; break;} case 418: -#line 2009 "./parse.y" +#line 2010 "./parse.y" {yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ; break;} case 419: -#line 2011 "./parse.y" +#line 2012 "./parse.y" {yyerror ("Missing term"); RECOVER; break;} -case 421: +case 420: #line 2017 "./parse.y" -{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; +{yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ; break;} -case 422: +case 421: #line 2019 "./parse.y" +{yyerror ("Missing term"); RECOVER; + break;} +case 423: +#line 2025 "./parse.y" {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; break;} case 424: -#line 2022 "./parse.y" +#line 2027 "./parse.y" +{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ; + break;} +case 426: +#line 2030 "./parse.y" {yyerror ("Missing term"); RECOVER; break;} -case 425: -#line 2024 "./parse.y" +case 427: +#line 2032 "./parse.y" {yyerror ("Missing term"); RECOVER; break;} -case 426: -#line 2029 "./parse.y" +case 428: +#line 2037 "./parse.y" { tree type = yyvsp[-3].node; while (CURRENT_OSB (ctxp)--) @@ -4403,16 +4392,16 @@ case 426: yyval.node = build_cast (yyvsp[-4].operator.location, type, yyvsp[0].node); ; break;} -case 427: -#line 2037 "./parse.y" +case 429: +#line 2045 "./parse.y" { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 428: -#line 2039 "./parse.y" +case 430: +#line 2047 "./parse.y" { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 429: -#line 2041 "./parse.y" +case 431: +#line 2049 "./parse.y" { char *ptr; while (CURRENT_OSB (ctxp)--) @@ -4426,276 +4415,276 @@ case 429: yyval.node = build_cast (yyvsp[-4].operator.location, yyvsp[-3].node, yyvsp[0].node); ; break;} -case 430: -#line 2054 "./parse.y" +case 432: +#line 2062 "./parse.y" {yyerror ("']' expected, invalid type expression");; break;} -case 431: -#line 2056 "./parse.y" +case 433: +#line 2064 "./parse.y" { if (ctxp->prevent_ese != lineno) yyerror ("Invalid type expression"); RECOVER; RECOVER; ; break;} -case 432: -#line 2062 "./parse.y" +case 434: +#line 2070 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 433: -#line 2064 "./parse.y" +case 435: +#line 2072 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 434: -#line 2066 "./parse.y" +case 436: +#line 2074 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 436: -#line 2072 "./parse.y" +case 438: +#line 2080 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 437: -#line 2077 "./parse.y" +case 439: +#line 2085 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 438: -#line 2082 "./parse.y" +case 440: +#line 2090 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 439: -#line 2087 "./parse.y" +case 441: +#line 2095 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 440: -#line 2089 "./parse.y" +case 442: +#line 2097 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 441: -#line 2091 "./parse.y" +case 443: +#line 2099 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 443: -#line 2097 "./parse.y" +case 445: +#line 2105 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 444: -#line 2102 "./parse.y" +case 446: +#line 2110 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 445: -#line 2107 "./parse.y" +case 447: +#line 2115 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 446: -#line 2109 "./parse.y" +case 448: +#line 2117 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 448: -#line 2115 "./parse.y" +case 450: +#line 2123 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 449: -#line 2120 "./parse.y" +case 451: +#line 2128 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 450: -#line 2125 "./parse.y" +case 452: +#line 2133 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 451: -#line 2130 "./parse.y" +case 453: +#line 2138 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 452: -#line 2132 "./parse.y" +case 454: +#line 2140 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 453: -#line 2134 "./parse.y" +case 455: +#line 2142 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 455: -#line 2140 "./parse.y" +case 457: +#line 2148 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 456: -#line 2145 "./parse.y" +case 458: +#line 2153 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 457: -#line 2150 "./parse.y" +case 459: +#line 2158 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 458: -#line 2155 "./parse.y" +case 460: +#line 2163 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 459: -#line 2160 "./parse.y" +case 461: +#line 2168 "./parse.y" { yyval.node = build_binop (INSTANCEOF_EXPR, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 460: -#line 2162 "./parse.y" +case 462: +#line 2170 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 461: -#line 2164 "./parse.y" +case 463: +#line 2172 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 462: -#line 2166 "./parse.y" +case 464: +#line 2174 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 463: -#line 2168 "./parse.y" +case 465: +#line 2176 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 464: -#line 2170 "./parse.y" +case 466: +#line 2178 "./parse.y" {yyerror ("Invalid reference type"); RECOVER;; break;} -case 466: -#line 2176 "./parse.y" +case 468: +#line 2184 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 467: -#line 2181 "./parse.y" +case 469: +#line 2189 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 468: -#line 2186 "./parse.y" +case 470: +#line 2194 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 469: -#line 2188 "./parse.y" +case 471: +#line 2196 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 471: -#line 2194 "./parse.y" +case 473: +#line 2202 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 472: -#line 2199 "./parse.y" +case 474: +#line 2207 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 474: -#line 2205 "./parse.y" +case 476: +#line 2213 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 475: -#line 2210 "./parse.y" +case 477: +#line 2218 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 477: -#line 2216 "./parse.y" +case 479: +#line 2224 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 478: -#line 2221 "./parse.y" +case 480: +#line 2229 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 480: -#line 2227 "./parse.y" +case 482: +#line 2235 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 481: -#line 2232 "./parse.y" +case 483: +#line 2240 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 483: -#line 2238 "./parse.y" +case 485: +#line 2246 "./parse.y" { yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 484: -#line 2243 "./parse.y" +case 486: +#line 2251 "./parse.y" {yyerror ("Missing term"); RECOVER;; break;} -case 486: -#line 2249 "./parse.y" +case 488: +#line 2257 "./parse.y" { yyval.node = build (CONDITIONAL_EXPR, NULL_TREE, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); EXPR_WFL_LINECOL (yyval.node) = yyvsp[-3].operator.location; ; break;} -case 487: -#line 2254 "./parse.y" +case 489: +#line 2262 "./parse.y" { YYERROR_NOW; yyerror ("Missing term"); DRECOVER (1); ; break;} -case 488: -#line 2260 "./parse.y" +case 490: +#line 2268 "./parse.y" {yyerror ("Missing term"); DRECOVER (2);; break;} -case 489: -#line 2262 "./parse.y" +case 491: +#line 2270 "./parse.y" {yyerror ("Missing term"); DRECOVER (3);; break;} -case 492: -#line 2272 "./parse.y" +case 494: +#line 2280 "./parse.y" { yyval.node = build_assignment (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ; break;} -case 493: -#line 2274 "./parse.y" +case 495: +#line 2282 "./parse.y" { if (ctxp->prevent_ese != lineno) yyerror ("Missing term"); @@ -4704,7 +4693,7 @@ case 493: break;} } /* the action file gets copied in in place of this dollarsign */ -#line 498 "/usr/lib/bison.simple" +#line 498 "/usr/cygnus/gnupro-98r2/share/bison.simple" yyvsp -= yylen; yyssp -= yylen; @@ -4900,7 +4889,7 @@ yyerrhandle: yystate = yyn; goto yynewstate; } -#line 2300 "./parse.y" +#line 2308 "./parse.y" @@ -5677,7 +5666,7 @@ lookup_field_wrapper (class, name) java_parser_context_save_global (); decl = lookup_field (&type, name); java_parser_context_restore_global (); - return decl; + return decl == error_mark_node ? NULL : decl; } /* Find duplicate field within the same class declarations and report @@ -5864,7 +5853,6 @@ static void maybe_generate_clinit () { tree mdecl, c; - int has_non_primitive_fields = 0; if (!ctxp->static_initialized || java_error_count) return; @@ -6116,6 +6104,29 @@ static void finish_method_declaration (method_body) tree method_body; { + int flags = get_access_flags_from_decl (current_function_decl); + + /* 8.4.5 Method Body */ + if ((flags & ACC_ABSTRACT || flags & ACC_NATIVE) && method_body) + { + tree wfl = DECL_NAME (current_function_decl); + parse_error_context (wfl, + "%s method `%s' can't have a body defined", + (METHOD_NATIVE (current_function_decl) ? + "Native" : "Abstract"), + IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl))); + method_body = NULL_TREE; + } + else if (!(flags & ACC_ABSTRACT) && !(flags & ACC_NATIVE) && !method_body) + { + tree wfl = DECL_NAME (current_function_decl); + parse_error_context (wfl, + "Non native and non abstract method `%s' must " + "have a body defined", + IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl))); + method_body = NULL_TREE; + } + BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (current_function_decl)) = method_body; maybe_absorb_scoping_blocks (); /* Exit function's body */ @@ -7749,9 +7760,9 @@ static int find_in_imports_on_demand (class_type) tree class_type; { - tree node, import, node_to_use; + tree node, import, node_to_use = NULL_TREE; int seen_once = -1; - tree cl; + tree cl = NULL_TREE; for (import = ctxp->import_demand_list; import; import = TREE_CHAIN (import)) { @@ -10179,9 +10190,15 @@ qualify_ambiguous_name (id) || TREE_CODE (qual_wfl) == STRING_CST || TREE_CODE (qual_wfl) == CONVERT_EXPR) { - qual = TREE_CHAIN (qual); - qual_wfl = QUAL_WFL (qual); - again = 1; + if (TREE_CODE (qual_wfl) == CONVERT_EXPR + && TREE_CODE (TREE_TYPE (qual_wfl)) == EXPR_WITH_FILE_LOCATION) + name = EXPR_WFL_NODE (TREE_TYPE (qual_wfl)); + else + { + qual = TREE_CHAIN (qual); + qual_wfl = QUAL_WFL (qual); + again = 1; + } } } while (again); @@ -10476,7 +10493,10 @@ java_complete_lhs (node) POP_LABELED_BLOCK (); if (LABELED_BLOCK_BODY (node) == empty_stmt_node) - LABELED_BLOCK_BODY (node) = NULL_TREE; + { + LABELED_BLOCK_BODY (node) = NULL_TREE; + CAN_COMPLETE_NORMALLY (node) = 1; + } else if (CAN_COMPLETE_NORMALLY (LABELED_BLOCK_BODY (node))) CAN_COMPLETE_NORMALLY (node) = 1; return node; @@ -11418,6 +11438,7 @@ patch_assignment (node, wfl_op1, wfl_op2) } /* Build the invocation of _Jv_CheckArrayStore */ + new_rhs = save_expr (new_rhs); check = build (CALL_EXPR, void_type_node, build_address_of (soft_checkarraystore_node), tree_cons (NULL_TREE, base, @@ -11661,7 +11682,8 @@ valid_ref_assignconv_cast_p (source, dest, cast) return source == dest || interface_of_p (dest, source); } else /* Array */ - return 0; + return (cast ? + (DECL_NAME (TYPE_NAME (source)) == java_lang_cloneable) : 0); } if (TYPE_ARRAY_P (source)) { @@ -11822,7 +11844,7 @@ patch_binop (node, wfl_op1, wfl_op2) tree op2 = TREE_OPERAND (node, 1); tree op1_type = TREE_TYPE (op1); tree op2_type = TREE_TYPE (op2); - tree prom_type; + tree prom_type = NULL_TREE; int code = TREE_CODE (node); /* If 1, tell the routine that we have to return error_mark_node @@ -12448,7 +12470,7 @@ patch_unaryop (node, wfl_op) { tree op = TREE_OPERAND (node, 0); tree op_type = TREE_TYPE (op); - tree prom_type, value, decl; + tree prom_type = NULL_TREE, value, decl; int code = TREE_CODE (node); int error_found = 0; @@ -14028,7 +14050,7 @@ patch_conditional_expr (node, wfl_cond, wfl_op1) /* Otherwise, binary numeric promotion is applied and the resulting type is the promoted type of operand 1 and 2 */ else - resulting_type = binary_numeric_promotion (t2, t2, + resulting_type = binary_numeric_promotion (t1, t2, &TREE_OPERAND (node, 1), &TREE_OPERAND (node, 2)); } @@ -14085,8 +14107,11 @@ fold_constant_for_init (node, context) tree op0, op1, val; enum tree_code code = TREE_CODE (node); - if (code == INTEGER_CST || code == REAL_CST || code == STRING_CST) + if (code == STRING_CST) return node; + + if (code == INTEGER_CST || code == REAL_CST) + return convert (TREE_TYPE (context), node); if (TREE_TYPE (node) != NULL_TREE && code != VAR_DECL) return NULL_TREE; @@ -14181,13 +14206,11 @@ fold_constant_for_init (node, context) } else { -#if 0 /* Wait until the USE_COMPONENT_REF re-write. FIXME. */ qualify_ambiguous_name (node); if (resolve_field_access (node, &decl, NULL) && decl != NULL_TREE) return fold_constant_for_init (decl, decl); -#endif return NULL_TREE; } } diff --git a/gnu/egcs/gcc/java/parse.y b/gnu/egcs/gcc/java/parse.y index 64f7e182c14..5a5c6744bd1 100644 --- a/gnu/egcs/gcc/java/parse.y +++ b/gnu/egcs/gcc/java/parse.y @@ -396,7 +396,7 @@ static tree current_static_block = NULL_TREE; variable_initializers constructor_body array_initializer -%type <node> class_body block_end +%type <node> class_body block_end constructor_block_end %type <node> statement statement_without_trailing_substatement labeled_statement if_then_statement label_decl if_then_else_statement while_statement for_statement @@ -917,7 +917,10 @@ formal_parameter: $$ = build_tree_list ($2, $1); } | modifiers type variable_declarator_id /* Added, JDK1.1 final parms */ - { $$ = parse_jdk1_1_error ("final parameters"); } + { + parse_jdk1_1_error ("final parameters"); + $$ = build_tree_list ($3, $2); + } | type error {yyerror ("Missing identifier"); RECOVER;} | modifiers type error @@ -1001,19 +1004,23 @@ constructor_body: /* Unlike regular method, we always need a complete (empty) body so we can safely perform all the required code addition (super invocation and field initialization) */ - block_begin block_end + block_begin constructor_block_end { BLOCK_EXPR_BODY ($2) = empty_stmt_node; $$ = $2; } -| block_begin explicit_constructor_invocation block_end +| block_begin explicit_constructor_invocation constructor_block_end { $$ = $3; } -| block_begin block_statements block_end +| block_begin block_statements constructor_block_end { $$ = $3; } -| block_begin explicit_constructor_invocation block_statements block_end +| block_begin explicit_constructor_invocation block_statements constructor_block_end { $$ = $4; } ; +constructor_block_end: + block_end +| block_end SC_TK + /* Error recovery for that rule moved down expression_statement: rule. */ explicit_constructor_invocation: this_or_super OP_TK CP_TK SC_TK @@ -1231,6 +1238,7 @@ statement_nsi: | if_then_else_statement_nsi | while_statement_nsi | for_statement_nsi + { $$ = exit_block (); } ; statement_without_trailing_substatement: @@ -3073,7 +3081,7 @@ lookup_field_wrapper (class, name) java_parser_context_save_global (); decl = lookup_field (&type, name); java_parser_context_restore_global (); - return decl; + return decl == error_mark_node ? NULL : decl; } /* Find duplicate field within the same class declarations and report @@ -3260,7 +3268,6 @@ static void maybe_generate_clinit () { tree mdecl, c; - int has_non_primitive_fields = 0; if (!ctxp->static_initialized || java_error_count) return; @@ -3512,6 +3519,29 @@ static void finish_method_declaration (method_body) tree method_body; { + int flags = get_access_flags_from_decl (current_function_decl); + + /* 8.4.5 Method Body */ + if ((flags & ACC_ABSTRACT || flags & ACC_NATIVE) && method_body) + { + tree wfl = DECL_NAME (current_function_decl); + parse_error_context (wfl, + "%s method `%s' can't have a body defined", + (METHOD_NATIVE (current_function_decl) ? + "Native" : "Abstract"), + IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl))); + method_body = NULL_TREE; + } + else if (!(flags & ACC_ABSTRACT) && !(flags & ACC_NATIVE) && !method_body) + { + tree wfl = DECL_NAME (current_function_decl); + parse_error_context (wfl, + "Non native and non abstract method `%s' must " + "have a body defined", + IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl))); + method_body = NULL_TREE; + } + BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (current_function_decl)) = method_body; maybe_absorb_scoping_blocks (); /* Exit function's body */ @@ -5145,9 +5175,9 @@ static int find_in_imports_on_demand (class_type) tree class_type; { - tree node, import, node_to_use; + tree node, import, node_to_use = NULL_TREE; int seen_once = -1; - tree cl; + tree cl = NULL_TREE; for (import = ctxp->import_demand_list; import; import = TREE_CHAIN (import)) { @@ -7575,9 +7605,15 @@ qualify_ambiguous_name (id) || TREE_CODE (qual_wfl) == STRING_CST || TREE_CODE (qual_wfl) == CONVERT_EXPR) { - qual = TREE_CHAIN (qual); - qual_wfl = QUAL_WFL (qual); - again = 1; + if (TREE_CODE (qual_wfl) == CONVERT_EXPR + && TREE_CODE (TREE_TYPE (qual_wfl)) == EXPR_WITH_FILE_LOCATION) + name = EXPR_WFL_NODE (TREE_TYPE (qual_wfl)); + else + { + qual = TREE_CHAIN (qual); + qual_wfl = QUAL_WFL (qual); + again = 1; + } } } while (again); @@ -7872,7 +7908,10 @@ java_complete_lhs (node) POP_LABELED_BLOCK (); if (LABELED_BLOCK_BODY (node) == empty_stmt_node) - LABELED_BLOCK_BODY (node) = NULL_TREE; + { + LABELED_BLOCK_BODY (node) = NULL_TREE; + CAN_COMPLETE_NORMALLY (node) = 1; + } else if (CAN_COMPLETE_NORMALLY (LABELED_BLOCK_BODY (node))) CAN_COMPLETE_NORMALLY (node) = 1; return node; @@ -8814,6 +8853,7 @@ patch_assignment (node, wfl_op1, wfl_op2) } /* Build the invocation of _Jv_CheckArrayStore */ + new_rhs = save_expr (new_rhs); check = build (CALL_EXPR, void_type_node, build_address_of (soft_checkarraystore_node), tree_cons (NULL_TREE, base, @@ -9057,7 +9097,8 @@ valid_ref_assignconv_cast_p (source, dest, cast) return source == dest || interface_of_p (dest, source); } else /* Array */ - return 0; + return (cast ? + (DECL_NAME (TYPE_NAME (source)) == java_lang_cloneable) : 0); } if (TYPE_ARRAY_P (source)) { @@ -9218,7 +9259,7 @@ patch_binop (node, wfl_op1, wfl_op2) tree op2 = TREE_OPERAND (node, 1); tree op1_type = TREE_TYPE (op1); tree op2_type = TREE_TYPE (op2); - tree prom_type; + tree prom_type = NULL_TREE; int code = TREE_CODE (node); /* If 1, tell the routine that we have to return error_mark_node @@ -9844,7 +9885,7 @@ patch_unaryop (node, wfl_op) { tree op = TREE_OPERAND (node, 0); tree op_type = TREE_TYPE (op); - tree prom_type, value, decl; + tree prom_type = NULL_TREE, value, decl; int code = TREE_CODE (node); int error_found = 0; @@ -11424,7 +11465,7 @@ patch_conditional_expr (node, wfl_cond, wfl_op1) /* Otherwise, binary numeric promotion is applied and the resulting type is the promoted type of operand 1 and 2 */ else - resulting_type = binary_numeric_promotion (t2, t2, + resulting_type = binary_numeric_promotion (t1, t2, &TREE_OPERAND (node, 1), &TREE_OPERAND (node, 2)); } @@ -11481,8 +11522,11 @@ fold_constant_for_init (node, context) tree op0, op1, val; enum tree_code code = TREE_CODE (node); - if (code == INTEGER_CST || code == REAL_CST || code == STRING_CST) + if (code == STRING_CST) return node; + + if (code == INTEGER_CST || code == REAL_CST) + return convert (TREE_TYPE (context), node); if (TREE_TYPE (node) != NULL_TREE && code != VAR_DECL) return NULL_TREE; @@ -11577,13 +11621,11 @@ fold_constant_for_init (node, context) } else { -#if 0 /* Wait until the USE_COMPONENT_REF re-write. FIXME. */ qualify_ambiguous_name (node); if (resolve_field_access (node, &decl, NULL) && decl != NULL_TREE) return fold_constant_for_init (decl, decl); -#endif return NULL_TREE; } } diff --git a/gnu/egcs/gcc/java/xref.c b/gnu/egcs/gcc/java/xref.c index 8835e8dfcac..8fd51804819 100644 --- a/gnu/egcs/gcc/java/xref.c +++ b/gnu/egcs/gcc/java/xref.c @@ -35,7 +35,7 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */ static xref_flag_table xref_table [] = { - {NULL, NULL, NULL}, + {NULL, NULL, NULL, NULL}, }; /* Decode an xref flag value. Return 0 if the flag wasn't found. */ diff --git a/gnu/egcs/gcc/output.h b/gnu/egcs/gcc/output.h index e1cf6d82950..85310850737 100644 --- a/gnu/egcs/gcc/output.h +++ b/gnu/egcs/gcc/output.h @@ -505,3 +505,11 @@ extern FILE *rtl_dump_file; /* User label prefix in effect for this compilation. */ extern const char *user_label_prefix; + +/* This macro gets just the user-specified name + out of the string in a SYMBOL_REF. On most machines, + we discard the * if any and that's all. */ +#ifndef STRIP_NAME_ENCODING +#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ + (VAR) = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*')) +#endif diff --git a/gnu/egcs/gcc/reload.c b/gnu/egcs/gcc/reload.c index a68f2efa661..011f89955c6 100644 --- a/gnu/egcs/gcc/reload.c +++ b/gnu/egcs/gcc/reload.c @@ -1360,8 +1360,18 @@ push_reload (in, out, inloc, outloc, class, are identical in content, there might be duplicate address reloads. Remove the extra set now, so that if we later find that we can inherit this reload, we can get rid of the - address reloads altogether. */ - if (reload_in[i] != in && rtx_equal_p (in, reload_in[i])) + address reloads altogether. + + Do not do this if both reloads are optional since the result + would be an optional reload which could potentially leave + unresolved address replacements. + + It is not sufficient to call transfer_replacements since + choose_reload_regs will remove the replacements for address + reloads of inherited reloads which results in the same + problem. */ + if (reload_in[i] != in && rtx_equal_p (in, reload_in[i]) + && ! (reload_optional[i] && optional)) { /* We must keep the address reload with the lower operand number alive. */ diff --git a/gnu/egcs/gcc/sched.c b/gnu/egcs/gcc/sched.c index f4e893987a2..e8cd070e45c 100644 --- a/gnu/egcs/gcc/sched.c +++ b/gnu/egcs/gcc/sched.c @@ -2309,12 +2309,15 @@ attach_deaths (x, insn, set_p) if (regno >= FIRST_PSEUDO_REGISTER || ! global_regs[regno]) { - /* Never add REG_DEAD notes for the FRAME_POINTER_REGNUM or the - STACK_POINTER_REGNUM, since these are always considered to be - live. Similarly for ARG_POINTER_REGNUM if it is fixed. */ - if (regno != FRAME_POINTER_REGNUM + /* Never add REG_DEAD notes for STACK_POINTER_REGNUM + since it's always considered to be live. Similarly + for FRAME_POINTER_REGNUM if a frame pointer is needed + and for ARG_POINTER_REGNUM if it is fixed. */ + if (! (regno == FRAME_POINTER_REGNUM + && (! reload_completed || frame_pointer_needed)) #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM - && ! (regno == HARD_FRAME_POINTER_REGNUM) + && ! (regno == HARD_FRAME_POINTER_REGNUM + && (! reload_completed || frame_pointer_needed)) #endif #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno]) diff --git a/gnu/egcs/gcc/tree.def b/gnu/egcs/gcc/tree.def index 64fe0e4c89b..2056c629fbb 100644 --- a/gnu/egcs/gcc/tree.def +++ b/gnu/egcs/gcc/tree.def @@ -98,8 +98,14 @@ DEFTREECODE (BLOCK, "block", 'b', 0) points to the start of the chain. The TYPE_NONCOPIED_PARTS field is a list specifying which parts of an object of this type should *not* be copied by assignment. - The TREE_PURPOSE of each element is the offset of the part - and the TREE_VALUE is the size in bits of the part. + The TREE_VALUE of each is a FIELD_DECL that should not be + copied. The TREE_PURPOSE is an initial value for that field when + an object of this type is initialized via an INIT_EXPR. It may + be NULL if no special value is required. Even the things in this + list are copied if the right-hand side of an assignment is known + to be a complete object (rather than being, perhaps, a subobject + of some other object.) The determination of what constitutes a + complete object is done by fixed_type_p. The TYPE_NAME field contains info on the name used in the program for this type (for GDB symbol table output). It is either a TYPE_DECL node, for types that are typedefs, or an IDENTIFIER_NODE diff --git a/gnu/egcs/gcc/varasm.c b/gnu/egcs/gcc/varasm.c index e4eef2d9b49..76f40587943 100644 --- a/gnu/egcs/gcc/varasm.c +++ b/gnu/egcs/gcc/varasm.c @@ -72,14 +72,6 @@ Boston, MA 02111-1307, USA. */ #endif #define CHKR_PREFIX_SIZE (sizeof (CHKR_PREFIX) - 1) -/* This macro gets just the user-specified name - out of the string in a SYMBOL_REF. On most machines, - we discard the * if any and that's all. */ -#ifndef STRIP_NAME_ENCODING -#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ - (VAR) = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*')) -#endif - /* File in which assembler code is being written. */ extern FILE *asm_out_file; @@ -149,6 +141,7 @@ static void mark_constants PROTO((rtx)); static int output_addressed_constants PROTO((tree)); static void output_after_function_constants PROTO((void)); static void output_constructor PROTO((tree, int)); +static void remove_from_pending_weak_list PROTO ((char *)); #ifdef ASM_OUTPUT_BSS static void asm_output_bss PROTO((FILE *, tree, char *, int, int)); #endif @@ -1020,7 +1013,13 @@ assemble_start_function (decl, fnname) #ifdef ASM_WEAKEN_LABEL if (DECL_WEAK (decl)) - ASM_WEAKEN_LABEL (asm_out_file, fnname); + { + ASM_WEAKEN_LABEL (asm_out_file, fnname); + /* Remove this function from the pending weak list so that + we do not emit multiple .weak directives for it. */ + remove_from_pending_weak_list + (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); + } else #endif ASM_GLOBALIZE_LABEL (asm_out_file, fnname); @@ -1453,8 +1452,14 @@ assemble_variable (decl, top_level, at_end, dont_output_data) if (TREE_PUBLIC (decl) && DECL_NAME (decl)) { #ifdef ASM_WEAKEN_LABEL - if (DECL_WEAK (decl)) - ASM_WEAKEN_LABEL (asm_out_file, name); + if (DECL_WEAK (decl)) + { + ASM_WEAKEN_LABEL (asm_out_file, name); + /* Remove this variable from the pending weak list so that + we do not emit multiple .weak directives for it. */ + remove_from_pending_weak_list + (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); + } else #endif ASM_GLOBALIZE_LABEL (asm_out_file, name); @@ -3897,6 +3902,13 @@ output_constant (exp, size) { register enum tree_code code = TREE_CODE (TREE_TYPE (exp)); + /* Some front-ends use constants other than the standard + language-indepdent varieties, but which may still be output + directly. Give the front-end a chance to convert EXP to a + language-independent representation. */ + if (lang_expand_constant) + exp = (*lang_expand_constant) (exp); + if (size == 0 || flag_syntax_only) return; @@ -4352,9 +4364,32 @@ weak_finish () struct weak_syms *t; for (t = weak_decls; t; t = t->next) { - ASM_WEAKEN_LABEL (asm_out_file, t->name); - if (t->value) - ASM_OUTPUT_DEF (asm_out_file, t->name, t->value); + if (t->name) + { + ASM_WEAKEN_LABEL (asm_out_file, t->name); + if (t->value) + ASM_OUTPUT_DEF (asm_out_file, t->name, t->value); + } + } + } +#endif +} + +/* Remove NAME from the pending list of weak symbols. This prevents + the compiler from emitting multiple .weak directives which confuses + some assemblers. */ +static void +remove_from_pending_weak_list (name) + char *name; +{ +#ifdef HANDLE_PRAGMA_WEAK + if (HANDLE_PRAGMA_WEAK) + { + struct weak_syms *t; + for (t = weak_decls; t; t = t->next) + { + if (strcmp (name, t->name) == 0) + t->name = NULL; } } #endif @@ -4376,7 +4411,13 @@ assemble_alias (decl, target) { #ifdef ASM_WEAKEN_LABEL if (DECL_WEAK (decl)) - ASM_WEAKEN_LABEL (asm_out_file, name); + { + ASM_WEAKEN_LABEL (asm_out_file, name); + /* Remove this function from the pending weak list so that + we do not emit multiple .weak directives for it. */ + remove_from_pending_weak_list + (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); + } else #endif ASM_GLOBALIZE_LABEL (asm_out_file, name); |