Front page | perl.cvs.parrot |
Postings from December 2008
[svn:parrot] r33498 - trunk/compilers/pirc/new
From:
kjs
Date:
December 4, 2008 16:05
Subject:
[svn:parrot] r33498 - trunk/compilers/pirc/new
Message ID:
20081205000455.8E50DCB9AF@x12.develooper.com
Author: kjs
Date: Thu Dec 4 16:04:54 2008
New Revision: 33498
Modified:
trunk/compilers/pirc/new/bcgen.c
trunk/compilers/pirc/new/bcgen.h
trunk/compilers/pirc/new/pir.y
trunk/compilers/pirc/new/pircompiler.h
trunk/compilers/pirc/new/pircompunit.c
trunk/compilers/pirc/new/pircompunit.h
trunk/compilers/pirc/new/piremit.c
trunk/compilers/pirc/new/pirparser.c
Log:
[pirc] Bytecode: Now we're getting somewhere.
+ fix the parser, couldn't do i = i + 1; fixed now.
+ offsets are calculated for subs now.
+ lots of TODOs.
+ simple programs, with a single sub should work properly.
+ string and num args don't work yet.
Modified: trunk/compilers/pirc/new/bcgen.c
==============================================================================
--- trunk/compilers/pirc/new/bcgen.c (original)
+++ trunk/compilers/pirc/new/bcgen.c Thu Dec 4 16:04:54 2008
@@ -69,12 +69,12 @@
Add a PMC constant to the constants list.
*/
-bc_const *
+int
add_pmc_const(bytecode * const bc, PMC * pmc) {
bc_const *bcc = new_const(bc);
bcc->value->type = PFC_PMC;
bcc->value->u.key = pmc;
- return bcc;
+ return bcc->index;
}
/*
@@ -82,12 +82,12 @@
Add a String constant to the constants list.
*/
-bc_const *
+int
add_string_const(bytecode * const bc, char const * const str) {
bc_const *bcc = new_const(bc);
bcc->value->type = PFC_STRING;
bcc->value->u.string = string_make(bc->interp, str, strlen(str), "ascii", PObj_constant_FLAG);
- return bcc;
+ return bcc->index;
}
/*
@@ -95,12 +95,14 @@
Add a number constant to the constants list.
*/
-bc_const *
-add_num_const(bytecode * const bc, FLOATVAL f) {
+int
+add_num_const(bytecode * const bc, double f) {
+ /* STRING * const str = string_from_cstring(interp, number_cstring, 0); */
bc_const *bcc = new_const(bc);
bcc->value->type = PFC_NUMBER;
+ /* bcc->value->u.number = string_to_num(interp, str); */
bcc->value->u.number = f;
- return bcc;
+ return bcc->index;
}
/*
@@ -108,12 +110,29 @@
Add a key constant to the constants list.
*/
-bc_const *
+int
add_key_const(bytecode * const bc, PMC *key) {
bc_const *bcc = new_const(bc);
bcc->value->type = PFC_KEY;
bcc->value->u.key = key;
- return bcc;
+ return bcc->index;
+}
+
+/*
+
+Get the PackFile_Constant on index C<key>.
+XXX not efficient.
+
+*/
+PackFile_Constant *
+get_const(bytecode * const bc, int key) {
+ bc_const *iter = bc->constants;
+ while (iter) {
+ if (iter->index == key)
+ return iter->value;
+ iter = iter->next;
+ }
+ return NULL;
}
/*
@@ -200,11 +219,13 @@
*/
static STRING *
add_string_const_from_cstring(bytecode * const bc, char const * const str) {
- bc_const *strconst = add_string_const(bc, str);
- return strconst->value->u.string;
+ int index = add_string_const(bc, str);
+ return get_const(bc, index)->u.string;
}
+
+
/*
Add a sub PMC to the constant table. This function initializes the sub PMC.
@@ -218,22 +239,22 @@
int vtable_index, /* vtable entry index */
unsigned regs_used[], /* register usage */
int startoffset,
- int endoffset
- )
+ int endoffset)
{
Interp *interp = bc->interp;
PMC *sub_pmc = pmc_new(bc->interp, enum_class_Sub);
Parrot_sub *sub = PMC_sub(sub_pmc);
- bc_const *subconst;
- bc_const *subname_const;
+ int subconst_index;
+ int subname_index;
int i;
+ PackFile_Constant *subname_const;
- subname_const = add_string_const(bc, subname);
-
+ subname_index = add_string_const(bc, subname);
+ subname_const = get_const(bc, subname_index);
sub->start_offs = startoffset;
sub->end_offs = endoffset;
@@ -245,10 +266,11 @@
sub->vtable_index = vtable_index;
sub->multi_signature = NULL;
+ /* store register usage of this sub. */
for (i = 0; i < 4; ++i)
sub->n_regs_used[i] = regs_used[i];
- sub->name = subname_const->value->u.string;
+ sub->name = subname_const->u.string;
/* If there was a :nsentry, add it to the constants table, and set
* the ns_entry_name attribute to that STRING. Default value is the sub's name.
@@ -256,7 +278,7 @@
if (nsentry)
sub->ns_entry_name = add_string_const_from_cstring(bc, nsentry);
else
- sub->ns_entry_name = subname_const->value->u.string;
+ sub->ns_entry_name = subname_const->u.string;
/* if there was a :subid, add it to the constants table, and set the subid
* attribute to that STRING. Default value is the sub's name.
@@ -264,14 +286,14 @@
if (subid)
sub->subid = add_string_const_from_cstring(bc, subid);
else
- sub->subid = subname_const->value->u.string;
+ sub->subid = subname_const->u.string;
Parrot_store_sub_in_namespace(bc->interp, sub_pmc);
- subconst = add_pmc_const(bc, sub_pmc);
+ subconst_index = add_pmc_const(bc, sub_pmc);
- fprintf(stderr, "subconst index: %d\n", subconst->index);
+ fprintf(stderr, "subconst index: %d\n", subconst_index);
/* doesn't work?? */
@@ -287,6 +309,12 @@
/*
Walk the list of constants and store them in the constants segment of the packfile.
+Instead of updating the constants table one by one, it's neater to add them in one go.
+This prevents memory re-allocations, which are generally not the cheapest operations.
+
+XXX check out if we can count the number of needed constants during the parse; that
+would prevent the linked list thing. OTOH, that makes this API less flexible; client-code
+doesn't want to be so inflexible.
*/
static void
Modified: trunk/compilers/pirc/new/bcgen.h
==============================================================================
--- trunk/compilers/pirc/new/bcgen.h (original)
+++ trunk/compilers/pirc/new/bcgen.h Thu Dec 4 16:04:54 2008
@@ -14,9 +14,6 @@
typedef struct bytecode bytecode;
-struct bc_const;
-
-
bytecode *new_bytecode(Interp *interp, char const * const filename, int bytes, int codesize);
/* call this to write the PBC file */
@@ -43,10 +40,10 @@
void emit_string_arg(bytecode * const bc, int string_const_index);
*/
-struct bc_const * add_key_const(bytecode * const bc, PMC *key);
-struct bc_const * add_num_const(bytecode * const bc, FLOATVAL f);
-struct bc_const * add_string_const(bytecode * const bc, char const * const str);
-struct bc_const * add_pmc_const(bytecode * const bc, PMC * pmc) ;
+int add_key_const(bytecode * const bc, PMC *key);
+int add_num_const(bytecode * const bc, double f);
+int add_string_const(bytecode * const bc, char const * const str);
+int add_pmc_const(bytecode * const bc, PMC * pmc) ;
/* for adding constants */
Modified: trunk/compilers/pirc/new/pir.y
==============================================================================
--- trunk/compilers/pirc/new/pir.y (original)
+++ trunk/compilers/pirc/new/pir.y Thu Dec 4 16:04:54 2008
@@ -1275,12 +1275,15 @@
set_instrf(lexer, $3, "%T%E", $1, $4);
get_opinfo(yyscanner);
}
- | target '=' target binop target
+ | target '=' target binop expression
{
if (targets_equal($1, $3)) /* $P0 = $P0 + $P1 ==> $P0 += $P1 */
- set_instrf(lexer, opnames[$4], "%T%T", $1, $5);
+ set_instrf(lexer, opnames[$4], "%T%E", $1, $5);
else
- set_instrf(lexer, opnames[$4], "%T%T%T", $1, $3, $5);
+ set_instrf(lexer, opnames[$4], "%T%T%E", $1, $3, $5);
+
+ /* XXX this do_strength_reduction() doesn't work properly yet. */
+ do_strength_reduction(yyscanner);
get_opinfo(yyscanner);
}
Modified: trunk/compilers/pirc/new/pircompiler.h
==============================================================================
--- trunk/compilers/pirc/new/pircompiler.h (original)
+++ trunk/compilers/pirc/new/pircompiler.h Thu Dec 4 16:04:54 2008
@@ -143,7 +143,8 @@
lsr_allocator *lsr;
/* bytecode generation */
- struct bytecode *bc;
+ struct bytecode *bc;
+ unsigned codesize;
} lexer_state;
Modified: trunk/compilers/pirc/new/pircompunit.c
==============================================================================
--- trunk/compilers/pirc/new/pircompunit.c (original)
+++ trunk/compilers/pirc/new/pircompunit.c Thu Dec 4 16:04:54 2008
@@ -56,6 +56,7 @@
#include "parrot/string_funcs.h"
#include "parrot/dynext.h"
+#include <assert.h>
static unsigned const prime_numbers[] = {113 /* XXX think of more primes */ };
@@ -146,7 +147,7 @@
/*
=item C<void
-set_sub_vtable(lexer_state * const lexer, char *vtablename)>
+set_sub_vtable(lexer_state * const lexer, char const *vtablename)>
Set the :vtable() flag argument to the current subroutine. If C<vtablename>
is NULL, the name of the current sub is taken to be the vtable method name.
@@ -157,7 +158,7 @@
*/
void
-set_sub_vtable(lexer_state * const lexer, char const *vtablename) {
+set_sub_vtable(lexer_state * const lexer, char const * vtablename) {
int vtable_index;
if (vtablename == NULL) /* the sub's name I<is> the vtablename */
@@ -172,10 +173,10 @@
if (vtable_index == -1)
yypirerror(lexer->yyscanner, lexer,
"'%s' is not a vtable method but was used with :vtable flag", vtablename);
-
-
- CURRENT_SUB(lexer)->vtable_method = vtablename;
- SET_FLAG(lexer->subs->flags, SUB_FLAG_VTABLE);
+ else {
+ CURRENT_SUB(lexer)->vtable_index = vtable_index;
+ SET_FLAG(lexer->subs->flags, SUB_FLAG_VTABLE);
+ }
}
/*
@@ -183,7 +184,7 @@
=item C<void
set_sub_subid(lexer_state * const lexer, char * const subid)>
-Set the lexical identifier on the current sub.
+Set the name specified in the :subid flag on the sub.
=cut
@@ -207,9 +208,9 @@
*/
void
set_sub_methodname(lexer_state * const lexer, char const * const methodname) {
- if (methodname)
+ if (methodname) /* :method("foo") */
CURRENT_SUB(lexer)->methodname = methodname;
- else
+ else /* :method without a value defaults to the subname. */
CURRENT_SUB(lexer)->methodname = CURRENT_SUB(lexer)->sub_name;
SET_FLAG(lexer->subs->flags, SUB_FLAG_METHOD);
@@ -281,21 +282,23 @@
*/
void
new_subr(lexer_state * const lexer, char const * const subname) {
- subroutine *newsub = pir_mem_allocate_zeroed_typed(lexer, subroutine);
+ subroutine *newsub = pir_mem_allocate_zeroed_typed(lexer, subroutine);
int index;
/* set the sub fields */
- newsub->sub_name = subname;
+ newsub->sub_name = subname;
/* set default lexid */
- newsub->subid = subname;
+ newsub->subid = subname;
/* take namespace of this sub of the lexer, which keeps track of that */
- newsub->name_space = lexer->current_ns;
+ newsub->name_space = lexer->current_ns;
- newsub->parameters = NULL;
- newsub->statements = NULL;
- newsub->flags = 0;
+ newsub->parameters = NULL;
+ newsub->statements = NULL;
+ newsub->flags = 0;
+ newsub->codesize = 0;
+ newsub->startoffset = lexer->codesize; /* start offset in bytecode */
init_hashtable(lexer, &newsub->symbols, HASHTABLE_SIZE_INIT);
init_hashtable(lexer, &newsub->labels, HASHTABLE_SIZE_INIT);
@@ -377,7 +380,7 @@
new_statement(lexer_state * const lexer, char const * const opname) {
instruction *instr = new_instruction(lexer, opname);
- /* within a subroutine, each instruction has a sequence number to be able to
+ /* Each instruction has a sequence number to be able to
* calculate offsets for label branches.
*/
instr->offset = lexer->instr_counter++;
@@ -493,10 +496,8 @@
target *
new_target(lexer_state * const lexer) {
target *t = pir_mem_allocate_zeroed_typed(lexer, target);
-
t->key = NULL;
t->next = t; /* circly linked list */
-
return t;
}
@@ -504,7 +505,11 @@
=item C<void
set_target_key(target * const t, key * const k)>
-Set the key C<k> on target C<t>.
+Set the key C<k> on target C<t>. For instance:
+
+ $P0[$P1]
+
+[$P1] is the key of $P0.
=cut
@@ -543,7 +548,7 @@
Add a new target to the list pointed to by C<list>. C<list> points to
the last element, C<<last->next>> points to the first. The list is
-circular linked.
+circular linked. The newly added target C<t> is returned.
=cut
@@ -604,11 +609,10 @@
*/
assign_vanilla_register(lexer, sym);
+ /* set a pointer from the target to the symbol object */
targ->s.sym = sym;
-
return targ;
-
}
/*
@@ -656,10 +660,13 @@
* Therefore it's safe to reference param->s.sym, without checking for not
* being a register.
*/
+
+ /* :slurpy can only be set on a PMC parameter */
if (TEST_FLAG(flag, TARGET_FLAG_SLURPY) && param->s.sym->type != PMC_TYPE)
yypirerror(lexer->yyscanner, lexer,
"cannot set :slurpy flag on non-pmc %s", param->s.sym->name);
+ /* :opt_flag can only be set on a int parameter */
if (TEST_FLAG(flag, TARGET_FLAG_OPT_FLAG) && param->s.sym->type != INT_TYPE)
yypirerror(lexer->yyscanner, lexer,
"cannot set :opt_flag flag on non-int %s", param->s.sym->name);
@@ -1924,6 +1931,9 @@
new_statement(lexer, opname);
CURRENT_INSTRUCTION(lexer)->opinfo = &lexer->interp->op_info_table[opcode];
CURRENT_INSTRUCTION(lexer)->opcode = opcode;
+
+ /* count number of ints needed to store this instruction in bytecode */
+ lexer->codesize += CURRENT_INSTRUCTION(lexer)->opinfo->op_count;
}
/*
@@ -1939,9 +1949,24 @@
*/
void
update_op(NOTNULL(lexer_state * const lexer), NOTNULL(instruction * const instr), int newop) {
+ /* Deduct number of ints needed for the old instruction, if there is one.
+ * This is necessary during strength reduction and other optimizations, once
+ * the opinfo is retrieved, we also update the codesize field in the lexer.
+ */
+ if (instr->opinfo)
+ lexer->codesize -= instr->opinfo->op_count;
+ /*
+ else
+ fprintf(stderr, "instr (%s)had no opinfo yet...\n", instr->opname);
+ */
+
+ /* now get the */
instr->opinfo = &lexer->interp->op_info_table[newop];
instr->opname = instr->opinfo->full_name;
instr->opcode = newop;
+
+ /* add codesize needed for the new instruction. */
+ lexer->codesize += instr->opinfo->op_count;
}
@@ -2276,6 +2301,9 @@
/* fix up all local branch labels */
fixup_local_labels(lexer);
+
+ /* store end offset in bytecode of this subroutine */
+ CURRENT_SUB(lexer)->endoffset = lexer->codesize;
}
Modified: trunk/compilers/pirc/new/pircompunit.h
==============================================================================
--- trunk/compilers/pirc/new/pircompunit.h (original)
+++ trunk/compilers/pirc/new/pircompunit.h Thu Dec 4 16:04:54 2008
@@ -304,11 +304,16 @@
char const *sub_name; /* this sub's name */
char const *outer_sub; /* this sub's outer subroutine, if any */
char const *subid; /* this sub's subid, if any */
- char const *vtable_method; /* name of vtable method that this sub's overriding if any */
+ int vtable_index; /* index of vtable method this sub's overriding, if any */
char const *instanceof; /* XXX document this XXX */
char const *nsentry; /* name by which the sub is stored in the namespace */
char const *methodname; /* name of this sub by which it's stored as a method */
int flags; /* this sub's flags */
+ unsigned codesize; /* total number of integers to store for this sub:
+ 1 for each op and 1 for each operand.
+ */
+ int startoffset; /* start offset in bytecode where this sub starts */
+ int endoffset; /* end offset in bytecode where this sub ends */
/* XXX the whole multi stuff must be implemented */
char **multi_types; /* data types of parameters if this is a multi sub */
Modified: trunk/compilers/pirc/new/piremit.c
==============================================================================
--- trunk/compilers/pirc/new/piremit.c (original)
+++ trunk/compilers/pirc/new/piremit.c Thu Dec 4 16:04:54 2008
@@ -3,15 +3,12 @@
* Copyright (C) 2008, The Perl Foundation.
*/
+#include <stdio.h>
#include "piremit.h"
#include "pircompunit.h"
#include "pircompiler.h"
-
-#include <stdio.h>
-
#include "bcgen.h"
-
/*
=head1 FUNCTIONS
@@ -25,10 +22,6 @@
*/
-/*
-#define out lexer->outfile
-*/
-
#define out stdout
/* the order of these letters match with the pir_type enumeration.
@@ -111,6 +104,7 @@
}
/*
+
=item C<void
print_constant(constant *c)>
@@ -360,6 +354,65 @@
}
}
+/*
+
+Emit a constant argument into the bytecode. An integer is emitted
+inline in the bytecode; other types are stored in the constant table,
+and their index in the constant table is emitted into the bytecode.
+
+XXX doesn't work yet for strings and numbers. (pmc prob. neither)
+
+*/
+static void
+emit_pbc_const_arg(lexer_state * const lexer, constant * const c) {
+ switch (c->type) {
+ case INT_TYPE:
+ emit_int_arg(lexer->bc, c->val.ival);
+ break;
+ case NUM_TYPE: {
+ int index = add_num_const(lexer->bc, c->val.nval);
+ emit_int_arg(lexer->bc, index);
+ break;
+ }
+ case STRING_TYPE: {
+ int index = add_string_const(lexer->bc, c->val.sval);
+ fprintf(stderr, "index of string const: %d\n", index);
+ emit_int_arg(lexer->bc, index);
+ break;
+ }
+ case PMC_TYPE:
+ default:
+ break;
+ }
+}
+
+/*
+
+Emit the assigned register of target C<t>. The assigned register is
+stored in the C<color> field, of either the C<pir_reg> or C<symbol>
+structure, depending on whether C<t> is a register or a symbol,
+respectively.
+
+*/
+static void
+emit_pbc_target_arg(lexer_state * const lexer, target * const t) {
+ if (TEST_FLAG(t->flags, TARGET_FLAG_IS_REG))
+ emit_int_arg(lexer->bc, t->s.reg->color);
+ else
+ emit_int_arg(lexer->bc, t->s.sym->color);
+}
+
+/*
+
+XXX TODO: label offsets must be bytecode offsets, so also count arguments.
+
+*/
+static void
+emit_pbc_label_arg(lexer_state * const lexer, label * const l) {
+ emit_int_arg(lexer->bc, l->offset);
+ /* fprintf(stderr, "labeloffset: %d\n", l->offset); */
+}
+
static void
emit_pbc_instr(lexer_state * const lexer, instruction * const instr) {
int i;
@@ -384,13 +437,13 @@
switch (operand->type) {
case EXPR_CONSTANT:
- switch (operand->expr.c->type) {
- case INT_TYPE:
- emit_int_arg(lexer->bc, operand->expr.c->val.ival);
- break;
- default:
- break;
- }
+ emit_pbc_const_arg(lexer, operand->expr.c);
+ break;
+ case EXPR_TARGET:
+ emit_pbc_target_arg(lexer, operand->expr.t);
+ break;
+ case EXPR_LABEL:
+ emit_pbc_label_arg(lexer, operand->expr.l);
break;
default:
break;
@@ -441,8 +494,7 @@
emit_pbc(lexer_state * const lexer)>
Generate Parrot Byte Code from the abstract syntax tree. This is the top-level
-function; it initializes the data structures (code segment), and then starts
-emitting byte code (by means of helper functions).
+function.
=cut
@@ -455,23 +507,25 @@
return;
- /* TEMP HACK */ ++lexer->instr_counter; /* HACK ALERT */
-
-
- /* XXX fix the numbers here */
lexer->bc = new_bytecode(lexer->interp, lexer->filename,
- lexer->instr_counter * 4, lexer->instr_counter);
-
- fprintf(stderr, "lexer->instr_counter = %d\n", lexer->instr_counter);
+ lexer->codesize * 4, lexer->codesize);
subiter = lexer->subs->next;
- /* initialize data structures in which PBC is going to be emitted. */
-
-
/* iterate over all instructions and emit them */
do {
- add_sub_pmc(lexer->bc, subiter->sub_name, NULL, NULL, -1, subiter->regs_used, 0, 3);
+ fprintf(stderr, "%d integers needed for storing this sub\n", subiter->codesize);
+ fprintf(stderr, "start offset of sub '%s' is: %d\tend offest: %d\n",
+ subiter->sub_name, subiter->startoffset, subiter->endoffset);
+
+ add_sub_pmc(lexer->bc,
+ subiter->sub_name,
+ subiter->nsentry,
+ subiter->subid,
+ subiter->vtable_index,
+ subiter->regs_used,
+ subiter->startoffset,
+ subiter->endoffset);
emit_pbc_instructions(lexer, subiter);
subiter = subiter->next;
Modified: trunk/compilers/pirc/new/pirparser.c
==============================================================================
--- trunk/compilers/pirc/new/pirparser.c (original)
+++ trunk/compilers/pirc/new/pirparser.c Thu Dec 4 16:04:54 2008
@@ -812,7 +812,7 @@
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 10
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 996
+#define YYLAST 981
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 138
@@ -972,7 +972,7 @@
-1, 283, 71, 48, -1, 283, 72, 47, -1, 283,
72, 48, -1, 283, 71, 283, -1, 283, 72, 283,
-1, 283, 121, 288, 279, -1, 283, 121, 283, 289,
- 283, -1, 287, 208, 121, 279, -1, 49, 208, 121,
+ 279, -1, 287, 208, 121, 279, -1, 49, 208, 121,
279, -1, 47, 289, 283, -1, 48, 289, 283, -1,
46, 289, 283, -1, 46, 289, 46, -1, 47, 289,
47, -1, 48, 289, 48, -1, 47, 289, 48, -1,
@@ -1056,41 +1056,41 @@
652, 657, 661, 665, 670, 671, 675, 677, 681, 685,
691, 695, 699, 700, 703, 704, 707, 709, 711, 713,
715, 717, 719, 721, 723, 725, 727, 729, 731, 733,
- 737, 738, 739, 742, 762, 763, 767, 771, 776, 777,
- 781, 782, 783, 786, 793, 799, 800, 810, 812, 815,
- 816, 817, 818, 819, 820, 821, 822, 823, 824, 825,
- 826, 827, 828, 829, 835, 838, 843, 844, 849, 850,
- 853, 855, 863, 871, 872, 874, 877, 883, 884, 893,
- 894, 895, 896, 904, 908, 912, 921, 928, 935, 938,
- 939, 942, 951, 958, 961, 962, 965, 966, 969, 1005,
- 1007, 1014, 1016, 1021, 1023, 1027, 1050, 1054, 1056, 1065,
- 1076, 1088, 1098, 1101, 1110, 1119, 1124, 1129, 1150, 1190,
- 1208, 1215, 1220, 1231, 1242, 1253, 1264, 1269, 1274, 1279,
- 1288, 1307, 1341, 1343, 1345, 1347, 1349, 1351, 1353, 1355,
- 1360, 1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1385,
- 1387, 1399, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1418,
- 1420, 1422, 1424, 1426, 1428, 1459, 1485, 1493, 1502, 1511,
- 1513, 1515, 1517, 1519, 1523, 1528, 1530, 1535, 1536, 1539,
- 1540, 1543, 1544, 1547, 1555, 1559, 1561, 1565, 1569, 1570,
- 1573, 1588, 1592, 1593, 1596, 1609, 1610, 1614, 1616, 1620,
- 1624, 1626, 1628, 1634, 1635, 1640, 1641, 1645, 1647, 1656,
- 1658, 1662, 1666, 1670, 1674, 1680, 1681, 1684, 1712, 1719,
- 1721, 1730, 1747, 1749, 1751, 1755, 1764, 1769, 1774, 1775,
- 1779, 1781, 1785, 1790, 1791, 1795, 1797, 1799, 1801, 1811,
- 1815, 1816, 1817, 1818, 1821, 1826, 1837, 1844, 1849, 1850,
- 1854, 1856, 1860, 1861, 1864, 1868, 1872, 1876, 1885, 1895,
- 1896, 1901, 1903, 1908, 1913, 1914, 1918, 1920, 1924, 1930,
- 1931, 1935, 1937, 1945, 1946, 1950, 1954, 1957, 1958, 1961,
- 1965, 1969, 1971, 1973, 1975, 1983, 1984, 1988, 1989, 1990,
- 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002, 2003, 2004,
- 2012, 2015, 2016, 2029, 2030, 2031, 2032, 2036, 2037, 2040,
- 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2050, 2051, 2052,
- 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064,
- 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074,
- 2075, 2076, 2077, 2083, 2084, 2085, 2086, 2087, 2088, 2089,
- 2090, 2091, 2092, 2093, 2094, 2106, 2114, 2118, 2119, 2122,
- 2123, 2124, 2125, 2126, 2127, 2130, 2132, 2133, 2136, 2137,
- 2140, 2144, 2149
+ 737, 738, 739, 742, 761, 762, 766, 770, 775, 776,
+ 780, 781, 782, 785, 792, 798, 799, 809, 811, 814,
+ 815, 816, 817, 818, 819, 820, 821, 822, 823, 824,
+ 825, 826, 827, 828, 834, 837, 842, 843, 848, 849,
+ 852, 854, 862, 870, 871, 873, 876, 882, 883, 892,
+ 893, 894, 895, 903, 907, 911, 920, 927, 934, 937,
+ 938, 941, 950, 957, 960, 961, 964, 965, 968, 1004,
+ 1006, 1013, 1015, 1020, 1022, 1026, 1049, 1053, 1055, 1064,
+ 1075, 1087, 1097, 1100, 1109, 1118, 1123, 1128, 1149, 1189,
+ 1207, 1214, 1219, 1230, 1241, 1252, 1263, 1268, 1273, 1278,
+ 1290, 1309, 1343, 1345, 1347, 1349, 1351, 1353, 1355, 1357,
+ 1362, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1385, 1387,
+ 1389, 1401, 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420,
+ 1422, 1424, 1426, 1428, 1430, 1461, 1487, 1495, 1504, 1513,
+ 1515, 1517, 1519, 1521, 1525, 1530, 1532, 1537, 1538, 1541,
+ 1542, 1545, 1546, 1549, 1557, 1561, 1563, 1567, 1571, 1572,
+ 1575, 1590, 1594, 1595, 1598, 1611, 1612, 1616, 1618, 1622,
+ 1626, 1628, 1630, 1636, 1637, 1642, 1643, 1647, 1649, 1658,
+ 1660, 1664, 1668, 1672, 1676, 1682, 1683, 1686, 1714, 1721,
+ 1723, 1732, 1749, 1751, 1753, 1757, 1766, 1771, 1776, 1777,
+ 1781, 1783, 1787, 1792, 1793, 1797, 1799, 1801, 1803, 1813,
+ 1817, 1818, 1819, 1820, 1823, 1828, 1839, 1846, 1851, 1852,
+ 1856, 1858, 1862, 1863, 1866, 1870, 1874, 1878, 1887, 1897,
+ 1898, 1903, 1905, 1910, 1915, 1916, 1920, 1922, 1926, 1932,
+ 1933, 1937, 1939, 1947, 1948, 1952, 1956, 1959, 1960, 1963,
+ 1967, 1971, 1973, 1975, 1977, 1985, 1986, 1990, 1991, 1992,
+ 1995, 1996, 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2006,
+ 2014, 2017, 2018, 2031, 2032, 2033, 2034, 2038, 2039, 2042,
+ 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2052, 2053, 2054,
+ 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066,
+ 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076,
+ 2077, 2078, 2079, 2085, 2086, 2087, 2088, 2089, 2090, 2091,
+ 2092, 2093, 2094, 2095, 2096, 2108, 2116, 2120, 2121, 2124,
+ 2125, 2126, 2127, 2128, 2129, 2132, 2134, 2135, 2138, 2139,
+ 2142, 2146, 2151
};
#endif
@@ -1382,96 +1382,96 @@
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -578
+#define YYPACT_NINF -569
static const yytype_int16 yypact[] =
{
- -38, 4, 4, 43, -578, -578, -578, 15, -578, 69,
- -578, 17, 36, 25, -33, 73, -578, 212, 57, -5,
- -578, 80, -578, -578, 29, 91, 107, -578, 529, -578,
- 15, -578, -578, 73, -578, -578, 103, 119, 122, 603,
- 68, 125, 138, -578, -578, -578, -578, -578, -578, -578,
- -578, -578, -578, -578, 54, -578, -578, 134, -578, -578,
- -578, -578, -578, -578, -578, -578, -578, -578, -578, -578,
- -578, -578, -578, 89, -44, 146, -578, 212, -578, -578,
- -578, -578, -578, 82, -578, -578, -578, 727, 177, 93,
- -578, -578, -578, -578, 92, -578, -578, 95, -578, -578,
- 655, -578, 97, -578, -578, -578, -578, 212, 212, 212,
- 212, -578, 99, 69, -578, 584, 947, -578, 100, 96,
- -578, -578, -5, -578, -578, -578, 105, 102, -578, -578,
- -578, 110, 112, -578, -578, -578, 28, -578, -578, -578,
- -578, -578, -578, -578, 529, -578, -578, -578, -578, -578,
- -578, 115, 121, 115, -578, -578, -578, -578, 115, 115,
- 115, -578, 169, 116, 124, 126, 139, 184, -578, -578,
- -578, 208, -578, -578, 134, -578, -14, -578, -44, 224,
- 212, -578, 727, -578, 216, -578, -578, 603, -578, -578,
- -578, -578, -578, 217, 215, 219, 131, -578, -578, 258,
- -578, -578, -578, -5, -578, -578, -578, -578, -578, 53,
- -578, -578, 149, 161, -578, -578, -578, -578, 260, 94,
- -578, -578, 94, 173, 179, 53, -578, 250, -578, -578,
- -578, -578, 254, -578, 94, 68, 172, 172, 256, 272,
- 273, 204, 934, 507, 415, 743, 759, 437, 212, -578,
- -78, 437, 288, -578, -578, -578, -578, -578, -578, -578,
- -578, -578, -578, -578, 289, 529, -578, -578, 292, -578,
- 294, 775, -578, -578, -578, -578, -578, -578, -578, 302,
- -578, -578, -578, 172, 223, 230, -578, -578, -578, -578,
- -578, -578, -578, 317, -578, -578, 642, -85, 92, -578,
- -578, -578, -578, -578, 212, 244, -578, -578, -578, -578,
- -578, 212, -578, 791, 319, 321, 337, 338, 328, 325,
- 326, -578, 327, 333, 242, 255, 249, -578, -578, -578,
- -578, -578, -578, -578, 252, -578, -578, -18, -18, -18,
- -18, -18, -18, -18, 276, -15, 277, 277, 277, 330,
- -18, 277, -18, -578, -578, 919, 934, -578, -578, -578,
- -578, 855, 871, -578, -578, -578, -578, -578, -578, -578,
- -578, -578, 145, 727, 261, 109, -578, -578, -20, -578,
- 281, 331, 262, 259, -578, -578, -578, -578, -578, -578,
- -578, 727, 360, 337, -578, 727, 364, 338, -578, 727,
- 32, 328, -578, -578, -578, -578, -578, 727, -578, 437,
- -13, 727, -578, -578, 212, 212, 212, 212, 212, 212,
- 212, 340, 346, 348, 349, 350, 359, 361, 362, 714,
- -18, 212, 212, 212, -578, -578, -578, -578, -578, -578,
- 807, 823, 839, 212, 212, 727, 212, -578, -578, -578,
- 172, -578, -578, -578, -578, -578, -578, -578, -578, 572,
- 598, 598, -78, -578, -578, -578, 529, -578, -578, 598,
- 92, 727, -578, 727, -578, -578, 115, -578, -578, -578,
- 287, -578, -578, -578, -578, -578, 212, -578, -578, 727,
- -578, 791, 46, 373, 374, -578, 375, 376, -578, 378,
- 947, 947, 947, 382, -578, -578, -578, -578, -578, -578,
- -578, -578, -578, -578, -578, -578, 212, 212, 212, 212,
- 212, 212, 212, 212, 212, -578, 212, -578, -578, -578,
- -578, -578, -578, -578, -578, -578, -578, -578, -578, -578,
- -578, -578, -578, -578, -578, -578, -578, -578, -578, -578,
- -578, -578, -578, -578, -578, -578, -578, -578, -578, -578,
- -578, -578, -578, -578, -578, -578, -578, -578, -578, -578,
- -578, 643, 887, 903, -578, 298, 299, 437, -578, -578,
- -578, -578, 303, -578, -578, -578, 115, -578, -578, -578,
- -578, -578, -578, -578, 385, 304, -578, 24, -578, -578,
- -578, -578, -578, -578, -578, -578, -578, -578, -578, -578,
- -578, -578, -578, -578, -578, -578, 529, 529, -578, -578,
- 309, -578, -578, -578, 407, 947, -578, 437, -578, 396,
- 24, -578, 93, 93, -578, 919, -578, 395, 397, -578,
- -578, -578, -578
+ 37, 4, 4, 50, -569, -569, -569, 15, -569, 69,
+ -569, 17, 31, 38, -28, -1, -569, 212, 70, -13,
+ -569, 74, -569, -569, -6, 85, 89, -569, 529, -569,
+ 15, -569, -569, -1, -569, -569, 80, 95, 102, 603,
+ 104, 119, 133, -569, -569, -569, -569, -569, -569, -569,
+ -569, -569, -569, -569, 51, -569, -569, 135, -569, -569,
+ -569, -569, -569, -569, -569, -569, -569, -569, -569, -569,
+ -569, -569, -569, 87, -42, 167, -569, 212, -569, -569,
+ -569, -569, -569, 82, -569, -569, -569, 727, 184, 100,
+ -569, -569, -569, -569, 101, -569, -569, 106, -569, -569,
+ 655, -569, 108, -569, -569, -569, -569, 212, 212, 212,
+ 212, -569, 110, 69, -569, 584, 932, -569, 99, 113,
+ -569, -569, -13, -569, -569, -569, 114, 112, -569, -569,
+ -569, 120, 121, -569, -569, -569, -36, -569, -569, -569,
+ -569, -569, -569, -569, 529, -569, -569, -569, -569, -569,
+ -569, 127, 129, 127, -569, -569, -569, -569, 127, 127,
+ 127, -569, 213, 141, 142, 143, 144, 214, -569, -569,
+ -569, 231, -569, -569, 135, -569, -15, -569, -42, 233,
+ 212, -569, 727, -569, 234, -569, -569, 603, -569, -569,
+ -569, -569, -569, 236, 237, 235, 68, -569, -569, 281,
+ -569, -569, -569, -13, -569, -569, -569, -569, -569, 93,
+ -569, -569, 171, 173, -569, -569, -569, -569, 260, 139,
+ -569, -569, 139, 199, 204, 93, -569, 278, -569, -569,
+ -569, -569, 289, -569, 139, 104, 209, 209, 296, 297,
+ 298, 216, 919, 507, 415, 743, 759, 437, 212, -569,
+ -51, 437, 300, -569, -569, -569, -569, -569, -569, -569,
+ -569, -569, -569, -569, 301, 529, -569, -569, 302, -569,
+ 315, 775, -569, -569, -569, -569, -569, -569, -569, 316,
+ -569, -569, -569, 209, 225, 232, -569, -569, -569, -569,
+ -569, -569, -569, 319, -569, -569, 642, -74, 101, -569,
+ -569, -569, -569, -569, 212, 247, -569, -569, -569, -569,
+ -569, 212, -569, 791, 322, 323, 339, 340, 330, 327,
+ 329, -569, 333, 334, 250, 254, 255, -569, -569, -569,
+ -569, -569, -569, -569, 253, -569, -569, -31, -31, -31,
+ -31, -31, -31, -31, 393, -22, 158, 158, 158, 332,
+ -31, 158, -31, -569, -569, 277, 919, -569, -569, -569,
+ -569, 855, 871, -569, -569, -569, -569, -569, -569, -569,
+ -569, -569, 145, 727, 258, 109, -569, -569, -14, -569,
+ 285, 331, 263, 265, -569, -569, -569, -569, -569, -569,
+ -569, 727, 360, 339, -569, 727, 365, 340, -569, 727,
+ 32, 330, -569, -569, -569, -569, -569, 727, -569, 437,
+ 61, 727, -569, -569, 212, 212, 212, 212, 212, 212,
+ 212, 347, 348, 349, 350, 351, 359, 361, 362, 714,
+ -31, 212, 212, 212, -569, -569, -569, -569, -569, -569,
+ 807, 823, 839, 212, 212, 727, 212, -569, -569, -569,
+ 209, -569, -569, -569, -569, -569, -569, -569, -569, 572,
+ 598, 598, -51, -569, -569, -569, 529, -569, -569, 598,
+ 101, 727, -569, 727, -569, -569, 127, -569, -569, -569,
+ 287, -569, -569, -569, -569, -569, 212, -569, -569, 727,
+ -569, 791, -57, 373, 374, -569, 375, 376, -569, 378,
+ 932, 932, 932, 382, -569, -569, -569, -569, -569, -569,
+ -569, -569, -569, -569, -569, -569, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, -569, 212, -569, -569, -569,
+ -569, -569, -569, -569, -569, -569, -569, -569, -569, -569,
+ -569, -569, -569, -569, -569, -569, -569, -569, -569, -569,
+ -569, -569, -569, -569, -569, -569, -569, -569, -569, -569,
+ -569, -569, -569, -569, -569, -569, -569, -569, -569, -569,
+ -569, 643, 887, 903, -569, 299, 304, 727, -569, -569,
+ -569, -569, 303, -569, -569, -569, 127, -569, -569, -569,
+ -569, -569, -569, -569, 383, 308, -569, 18, -569, -569,
+ -569, -569, -569, -569, -569, -569, -569, -569, -569, -569,
+ -569, -569, -569, -569, -569, -569, 529, 529, -569, -569,
+ 324, -569, -569, -569, 405, 932, -569, 437, -569, 395,
+ 18, -569, 100, 100, -569, 277, -569, 388, 409, -569,
+ -569, -569, -569
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -578, -578, -578, 16, -578, 318, 8, -578, -578, -578,
- -578, -578, 253, -578, -578, 209, -578, -578, -578, -578,
- -2, -578, -578, -578, 10, -578, -578, 263, -578, -578,
- -578, 248, 384, -578, -578, -578, -578, -578, -578, -578,
- -578, -578, -578, -578, -578, 197, -578, -195, -108, -578,
- -578, 264, -578, -578, -578, -187, -578, -578, -578, -578,
- -578, -578, -208, -578, 178, -455, -578, 300, -21, -578,
- -90, -578, -578, -578, -578, -578, -578, -578, -578, -578,
- -578, -202, -578, -577, -578, -40, -578, -186, -578, -578,
- -578, -578, -578, 47, -578, -578, -578, -578, -183, -578,
- -578, -226, -578, -578, -578, -167, -114, 210, -578, -578,
- -400, -578, 60, -578, -578, -578, -578, -229, -578, -578,
- -19, -578, -275, -16, -578, -578, -578, -578, 78, -578,
- -578, 98, -578, -578, -148, 40, -578, -578, -184, -578,
- 275, -81, -27, -194, -172, -206, -578, -25, -17, -205,
- -578, -391, -578, -578, -578, -578, 460, -578, 458, -578,
- -578, 14
+ -569, -569, -569, 13, -569, 335, 8, -569, -569, -569,
+ -569, -569, 266, -569, -569, 220, -569, -569, -569, -569,
+ 0, -569, -569, -569, 10, -569, -569, 273, -569, -569,
+ -569, 264, 416, -569, -569, -569, -569, -569, -569, -569,
+ -569, -569, -569, -569, -569, 227, -569, -200, -95, -569,
+ -569, 293, -569, -569, -569, -187, -569, -569, -569, -569,
+ -569, -569, -208, -569, 207, -443, -569, 346, 7, -569,
+ -90, -569, -569, -569, -569, -569, -569, -569, -569, -569,
+ -569, -203, -569, -568, -569, 5, -569, -186, -569, -569,
+ -569, -569, -569, 92, -569, -569, -569, -569, -136, -569,
+ -569, -226, -569, -569, -569, -139, -114, 256, -569, -569,
+ -403, -569, 88, -569, -569, -569, -569, -229, -569, -569,
+ 19, -569, -314, 23, -569, -569, -569, -569, 122, -569,
+ -569, 117, -569, -569, -146, -26, -569, -569, -185, -569,
+ 286, -82, -27, -194, -175, -206, -569, -25, -17, -205,
+ -569, -359, -569, -569, -569, -569, 490, -569, 489, -569,
+ -569, 33
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@@ -1481,59 +1481,59 @@
#define YYTABLE_NINF -267
static const yytype_int16 yytable[] =
{
- 71, 95, 171, 96, 145, 188, 137, 46, 315, 506,
- 265, 97, 296, 298, 175, 485, 320, 44, 9, 50,
- 628, 202, 106, 257, 11, 12, 13, 412, 14, 61,
- 432, 258, 274, -265, 294, 265, 234, 296, 298, 4,
- -266, 322, -265, 10, 87, 328, 500, 61, 257, -266,
- 305, 15, 16, 628, 354, 627, 258, 274, 114, 294,
- 134, 501, 311, 54, 502, 351, 122, 123, 124, 572,
- 573, 56, 36, 37, 38, 39, 1, 2, 577, 12,
- 13, 125, 14, 55, 476, 477, 40, 478, 479, 57,
- 163, 164, 165, 166, 73, 221, 203, 204, 205, 172,
- 486, 211, 413, 41, 284, 433, 107, 108, 58, 109,
- 16, 46, 206, 74, 110, 76, 493, 95, 17, 96,
- 496, 44, 18, 50, 499, 19, 78, 97, 284, 284,
- 452, 20, 299, 300, 301, 302, 415, 416, 417, 418,
- 419, 420, 79, 586, 474, 587, 468, 77, 444, 101,
- 446, 181, 182, 441, 442, 455, 458, 445, 222, 223,
- 324, 632, 633, 134, 466, 102, 469, 470, 103, 217,
- 106, 112, 17, 113, 116, 334, 18, 80, 81, 82,
- 117, 130, 244, 63, 64, 65, 66, 67, 68, 69,
- 70, 459, 460, 461, 462, 84, 85, 86, 189, 190,
- 191, 297, 121, 328, -266, 475, 476, 477, 374, 478,
- 479, 480, 143, 144, 87, 192, 252, -265, 162, 167,
- 174, 547, 178, 173, 177, 172, 297, 637, 526, 179,
- 197, 323, 180, 184, 534, 538, 542, 193, 95, 187,
- 96, 252, 284, 200, 350, 194, 352, 195, 97, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 284, 209,
- 196, 232, 212, 215, 214, 216, 219, 233, 230, 11,
+ 71, 95, 171, 96, 145, 137, 506, 188, 315, 46,
+ 265, 97, 296, 298, 412, 9, 320, 44, 257, 50,
+ 202, 485, 106, 432, 11, 12, 13, 175, 14, 628,
+ 234, 258, 274, 294, 58, 265, 16, 296, 298, 4,
+ 586, 322, 587, 257, -265, 328, 500, 305, 61, 627,
+ 10, 15, 16, -265, 354, 114, 258, 274, 294, 311,
+ 134, 501, 628, 54, 502, 351, 61, -266, 122, 123,
+ 124, 87, 36, 37, 38, 39, -266, 493, 55, 12,
+ 13, 496, 14, 125, 56, 499, 40, 181, 182, 413,
+ 163, 164, 165, 166, 57, 203, 204, 205, 433, 172,
+ 211, 572, 573, 41, 284, 74, 486, 73, 221, 76,
+ 577, 206, 77, 46, 80, 81, 82, 95, 17, 96,
+ 78, 44, 18, 50, 79, 19, 101, 97, 284, 284,
+ 452, 20, 189, 190, 191, 415, 416, 417, 418, 419,
+ 420, 102, 107, 108, 474, 109, 468, 444, 103, 446,
+ 110, 1, 2, 441, 442, 455, 458, 445, 476, 477,
+ 324, 478, 479, 134, 466, 112, 469, 470, 113, 217,
+ 106, 116, 17, 632, 633, 334, 18, 299, 300, 301,
+ 302, 117, 244, 63, 64, 65, 66, 67, 68, 69,
+ 70, 459, 460, 461, 462, 84, 85, 86, 222, 223,
+ 121, 297, 130, 328, -266, 475, 476, 477, 374, 478,
+ 479, 480, 434, 435, 436, 437, 438, 439, 252, 143,
+ 144, 547, 173, 87, 637, 172, 297, 526, -265, 162,
+ 167, 323, 178, 177, 534, 538, 542, 174, 95, 179,
+ 96, 180, 284, 252, 350, 184, 352, 187, 97, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 284, 192,
+ 197, 232, 193, 194, 195, 196, 200, 233, 209, 11,
12, 13, 234, 463, 464, 465, 235, 40, 236, 237,
- 231, 306, 238, 307, 239, 309, 240, 376, 241, 310,
- 313, 316, 472, 242, 380, 58, 243, 244, 63, 64,
- 65, 66, 245, 246, 247, 248, 249, 317, 318, 250,
- 84, 85, 86, 421, 422, 423, 424, 425, 426, 427,
- 428, 429, 251, 329, 330, 430, 505, 335, 581, 336,
- 508, 434, 435, 436, 437, 438, 439, 353, 451, 172,
+ 212, 216, 238, 214, 239, 215, 240, 376, 241, 219,
+ 230, 472, 231, 242, 380, 58, 243, 244, 63, 64,
+ 65, 66, 245, 246, 247, 248, 249, 306, 307, 250,
+ 84, 85, 86, 309, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 447, 310, 505, 448, 313, 449, 508,
+ 581, 316, 317, 318, 251, 329, 330, 335, 451, 172,
62, 63, 64, 65, 66, 67, 68, 69, 70, 619,
- 355, 356, 357, 377, 389, 297, 390, 391, 399, 395,
- 403, 404, 405, 407, 545, 609, 612, 615, 406, 409,
- 19, 618, 574, 411, 408, 443, 576, 487, 251, 491,
- 578, 490, 473, 494, 489, 516, 594, 595, 596, 497,
- 579, 517, 580, 518, 519, 520, 431, 509, 510, 511,
+ 336, 353, 355, 356, 357, 297, 377, 389, 390, 391,
+ 399, 395, 403, 545, 404, 609, 612, 615, 405, 406,
+ 19, 407, 574, 408, 411, 409, 576, 443, 251, 473,
+ 578, 487, 490, 494, 489, 491, 594, 595, 596, 579,
+ 497, 580, 516, 517, 518, 519, 520, 509, 510, 511,
512, 513, 514, 515, 521, 582, 522, 523, 589, 590,
- 591, 592, 525, 593, 527, 528, 529, 597, 616, 617,
- 624, 328, 635, 638, 625, 87, 543, 544, 634, 546,
- 641, 168, 642, 210, 308, 213, 115, 201, 623, 95,
- 321, 96, 208, 332, 183, 575, 583, 639, 504, 97,
- -131, 319, -131, -131, -131, -131, -131, -131, -131, -131,
- -131, -131, -131, -131, -131, -131, -131, -131, 640, 380,
- 507, 495, 585, 584, 62, 63, 64, 65, 66, 67,
+ 591, 592, 525, 593, 527, 528, 529, 597, 624, 616,
+ 635, 328, 638, 641, 617, 87, 543, 544, 625, 546,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 95,
+ 623, 96, 430, 634, 642, 308, 210, 201, 168, 97,
+ -131, 213, -131, -131, -131, -131, -131, -131, -131, -131,
+ -131, -131, -131, -131, -131, -131, -131, -131, 115, 380,
+ 321, 208, 332, 575, 62, 63, 64, 65, 66, 67,
68, 69, 70, 172, 172, 172, 135, 84, 85, 86,
- 98, 99, 621, 0, 0, 498, 0, 0, 0, 598,
+ 183, 583, 621, 504, 639, 618, 640, 319, 507, 598,
599, 600, 601, 602, 603, 604, 605, 606, 232, 607,
- 312, 636, 0, 0, 0, 0, 11, 12, 13, 234,
- 0, 0, 0, 235, 40, 236, 237, 0, 0, 238,
+ 585, 636, 584, 431, 498, 495, 11, 12, 13, 234,
+ 98, 312, 99, 235, 40, 236, 237, 0, 0, 238,
0, 239, 0, 240, 0, 241, 0, -131, 0, 0,
242, 0, 58, 0, 244, 63, 64, 65, 66, 245,
246, 247, 248, 249, 0, 0, 250, 84, 85, 86,
@@ -1577,67 +1577,66 @@
68, 69, 70, 0, 610, 611, 135, 84, 85, 86,
62, 63, 64, 65, 66, 67, 68, 69, 70, 0,
613, 614, 135, 84, 85, 86, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 447, 0, 0, 448, 0,
- 449, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 249, 0, 0, 170, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 0, 0, 0, 170
+ 66, 67, 68, 69, 70, 249, 0, 0, 170, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 0, 0,
+ 0, 170
};
static const yytype_int16 yycheck[] =
{
- 17, 28, 116, 28, 94, 153, 87, 9, 237, 409,
- 218, 28, 218, 218, 122, 35, 242, 9, 2, 9,
- 597, 35, 39, 218, 9, 10, 11, 45, 13, 15,
- 45, 218, 218, 118, 218, 243, 12, 243, 243, 35,
- 118, 247, 127, 0, 122, 251, 14, 33, 243, 127,
- 222, 36, 37, 630, 283, 31, 243, 243, 42, 243,
- 77, 29, 234, 46, 32, 271, 110, 111, 112, 460,
- 461, 46, 3, 4, 5, 6, 114, 115, 469, 10,
- 11, 125, 13, 47, 97, 98, 17, 100, 101, 122,
- 107, 108, 109, 110, 37, 203, 110, 111, 112, 116,
- 120, 182, 120, 34, 218, 120, 38, 39, 35, 41,
- 37, 113, 126, 118, 46, 35, 391, 144, 103, 144,
- 395, 113, 107, 113, 399, 110, 35, 144, 242, 243,
- 356, 116, 38, 39, 40, 41, 338, 339, 340, 341,
- 342, 343, 35, 97, 35, 99, 372, 118, 350, 46,
- 352, 123, 124, 347, 348, 361, 362, 351, 105, 106,
- 250, 616, 617, 180, 372, 46, 372, 372, 46, 196,
- 187, 46, 103, 35, 120, 265, 107, 46, 47, 48,
- 46, 35, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 158, 159,
- 160, 218, 113, 409, 122, 96, 97, 98, 298, 100,
- 101, 102, 35, 120, 122, 46, 218, 122, 121, 120,
- 124, 450, 120, 123, 119, 242, 243, 627, 430, 119,
- 46, 248, 120, 118, 440, 441, 442, 121, 265, 118,
- 265, 243, 356, 35, 271, 121, 271, 121, 265, 37,
- 38, 39, 40, 41, 42, 43, 44, 45, 372, 35,
- 121, 1, 46, 48, 47, 46, 8, 7, 119, 9,
+ 17, 28, 116, 28, 94, 87, 409, 153, 237, 9,
+ 218, 28, 218, 218, 45, 2, 242, 9, 218, 9,
+ 35, 35, 39, 45, 9, 10, 11, 122, 13, 597,
+ 12, 218, 218, 218, 35, 243, 37, 243, 243, 35,
+ 97, 247, 99, 243, 118, 251, 14, 222, 15, 31,
+ 0, 36, 37, 127, 283, 42, 243, 243, 243, 234,
+ 77, 29, 630, 46, 32, 271, 33, 118, 110, 111,
+ 112, 122, 3, 4, 5, 6, 127, 391, 47, 10,
+ 11, 395, 13, 125, 46, 399, 17, 123, 124, 120,
+ 107, 108, 109, 110, 122, 110, 111, 112, 120, 116,
+ 182, 460, 461, 34, 218, 118, 120, 37, 203, 35,
+ 469, 126, 118, 113, 46, 47, 48, 144, 103, 144,
+ 35, 113, 107, 113, 35, 110, 46, 144, 242, 243,
+ 356, 116, 158, 159, 160, 338, 339, 340, 341, 342,
+ 343, 46, 38, 39, 35, 41, 372, 350, 46, 352,
+ 46, 114, 115, 347, 348, 361, 362, 351, 97, 98,
+ 250, 100, 101, 180, 372, 46, 372, 372, 35, 196,
+ 187, 120, 103, 616, 617, 265, 107, 38, 39, 40,
+ 41, 46, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 105, 106,
+ 113, 218, 35, 409, 122, 96, 97, 98, 298, 100,
+ 101, 102, 54, 55, 56, 57, 58, 59, 218, 35,
+ 120, 450, 123, 122, 627, 242, 243, 430, 122, 121,
+ 120, 248, 120, 119, 440, 441, 442, 124, 265, 119,
+ 265, 120, 356, 243, 271, 118, 271, 118, 265, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 372, 46,
+ 46, 1, 121, 121, 121, 121, 35, 7, 35, 9,
10, 11, 12, 128, 129, 130, 16, 17, 18, 19,
- 119, 108, 22, 104, 24, 35, 26, 304, 28, 35,
- 118, 35, 373, 33, 311, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 35, 35, 49,
- 50, 51, 52, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 118, 35, 35, 49, 407, 35, 476, 35,
- 411, 54, 55, 56, 57, 58, 59, 35, 355, 356,
+ 46, 46, 22, 47, 24, 48, 26, 304, 28, 8,
+ 119, 373, 119, 33, 311, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 108, 104, 49,
+ 50, 51, 52, 35, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 35, 407, 49, 118, 51, 411,
+ 476, 35, 35, 35, 118, 35, 35, 35, 355, 356,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 127, 121, 35, 109, 35, 372, 35, 20, 30, 21,
- 35, 35, 35, 121, 445, 571, 572, 573, 35, 120,
- 110, 577, 462, 121, 119, 45, 466, 96, 118, 120,
- 470, 119, 121, 23, 53, 45, 500, 501, 502, 25,
- 471, 45, 473, 45, 45, 45, 120, 414, 415, 416,
+ 35, 35, 127, 121, 35, 372, 109, 35, 35, 20,
+ 30, 21, 35, 445, 35, 571, 572, 573, 35, 35,
+ 110, 121, 462, 119, 121, 120, 466, 45, 118, 121,
+ 470, 96, 119, 23, 53, 120, 500, 501, 502, 471,
+ 25, 473, 45, 45, 45, 45, 45, 414, 415, 416,
417, 418, 419, 420, 45, 118, 45, 45, 35, 35,
- 35, 35, 429, 35, 431, 432, 433, 35, 120, 120,
- 35, 627, 15, 27, 120, 122, 443, 444, 119, 446,
- 35, 113, 35, 180, 225, 187, 52, 174, 586, 466,
- 243, 466, 178, 265, 144, 466, 486, 630, 401, 466,
- 35, 241, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 635, 486,
- 410, 393, 491, 489, 37, 38, 39, 40, 41, 42,
+ 35, 35, 429, 35, 431, 432, 433, 35, 35, 120,
+ 15, 627, 27, 35, 120, 122, 443, 444, 120, 446,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 466,
+ 586, 466, 49, 119, 35, 225, 180, 174, 113, 466,
+ 35, 187, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 52, 486,
+ 243, 178, 265, 466, 37, 38, 39, 40, 41, 42,
43, 44, 45, 500, 501, 502, 49, 50, 51, 52,
- 30, 33, 582, -1, -1, 397, -1, -1, -1, 516,
+ 144, 486, 582, 401, 630, 577, 635, 241, 410, 516,
517, 518, 519, 520, 521, 522, 523, 524, 1, 526,
- 235, 625, -1, -1, -1, -1, 9, 10, 11, 12,
- -1, -1, -1, 16, 17, 18, 19, -1, -1, 22,
+ 491, 625, 489, 120, 397, 393, 9, 10, 11, 12,
+ 30, 235, 33, 16, 17, 18, 19, -1, -1, 22,
-1, 24, -1, 26, -1, 28, -1, 122, -1, -1,
33, -1, 35, -1, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, -1, -1, 49, 50, 51, 52,
@@ -1681,10 +1680,9 @@
43, 44, 45, -1, 47, 48, 49, 50, 51, 52,
37, 38, 39, 40, 41, 42, 43, 44, 45, -1,
47, 48, 49, 50, 51, 52, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, -1, -1, 49, -1,
- 51, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, -1, -1, 49, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, -1, -1, -1, 49
+ 41, 42, 43, 44, 45, 46, -1, -1, 49, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, -1, -1,
+ -1, 49
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1752,7 +1750,7 @@
279, 272, 118, 223, 261, 258, 97, 99, 271, 35,
35, 35, 35, 35, 244, 244, 244, 35, 286, 286,
286, 286, 286, 286, 286, 286, 286, 286, 46, 283,
- 47, 48, 283, 47, 48, 283, 120, 120, 283, 46,
+ 47, 48, 283, 47, 48, 283, 120, 120, 279, 46,
172, 208, 286, 272, 35, 120, 233, 31, 221, 234,
235, 236, 203, 203, 119, 15, 244, 248, 27, 236,
243, 35, 35
@@ -2764,7 +2762,6 @@
/* if there are parameters, then emit a get_params instruction. */
if ((yyvsp[(1) - (1)].ival) > 0) {
- /* generate_get_params(lexer); */
set_instr(lexer, "get_params");
/* don't infer the signatured opname from arguments,
* it's always same: get_params_pc
@@ -2779,37 +2776,37 @@
break;
case 74:
-#line 762 "pir.y"
+#line 761 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 75:
-#line 764 "pir.y"
+#line 763 "pir.y"
{ ++(yyval.ival); /* count number of parameters */ ;}
break;
case 76:
-#line 768 "pir.y"
+#line 767 "pir.y"
{ set_param_flag(lexer, (yyvsp[(2) - (4)].targ), (yyvsp[(3) - (4)].ival)); ;}
break;
case 77:
-#line 772 "pir.y"
+#line 771 "pir.y"
{ (yyval.targ) = add_param(lexer, (yyvsp[(1) - (2)].ival), (yyvsp[(2) - (2)].sval)); ;}
break;
case 78:
-#line 776 "pir.y"
+#line 775 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 79:
-#line 778 "pir.y"
+#line 777 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 83:
-#line 787 "pir.y"
+#line 786 "pir.y"
{ (yyval.ival) = TARGET_FLAG_INVOCANT;
/* XXX handle multi_type */
@@ -2817,12 +2814,12 @@
break;
case 84:
-#line 794 "pir.y"
+#line 793 "pir.y"
{ (yyval.ival) = TARGET_FLAG_UNIQUE_REG; ;}
break;
case 86:
-#line 801 "pir.y"
+#line 800 "pir.y"
{
++lexer->stmt_counter;
/* increment the logical statement counter; a statement can be
@@ -2833,37 +2830,37 @@
break;
case 87:
-#line 811 "pir.y"
+#line 810 "pir.y"
{ set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
break;
case 105:
-#line 839 "pir.y"
+#line 838 "pir.y"
{ (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (3)].mval), (yyvsp[(2) - (3)].pval)); ;}
break;
case 106:
-#line 843 "pir.y"
+#line 842 "pir.y"
{ (yyval.pval) = NULL; ;}
break;
case 107:
-#line 845 "pir.y"
+#line 844 "pir.y"
{ (yyval.pval) = (yyvsp[(2) - (3)].pval); ;}
break;
case 108:
-#line 849 "pir.y"
+#line 848 "pir.y"
{ (yyval.pval) = NULL; ;}
break;
case 110:
-#line 854 "pir.y"
+#line 853 "pir.y"
{ (yyval.pval) = new_macro_param((yyvsp[(1) - (1)].sval)); ;}
break;
case 111:
-#line 856 "pir.y"
+#line 855 "pir.y"
{
macro_param *param = new_macro_param((yyvsp[(3) - (3)].sval));
param->next = (yyvsp[(1) - (3)].pval);
@@ -2872,7 +2869,7 @@
break;
case 112:
-#line 864 "pir.y"
+#line 863 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
if (sym == NULL) {
@@ -2883,22 +2880,22 @@
break;
case 114:
-#line 873 "pir.y"
+#line 872 "pir.y"
{ (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
break;
case 116:
-#line 878 "pir.y"
+#line 877 "pir.y"
{ (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
break;
case 117:
-#line 883 "pir.y"
+#line 882 "pir.y"
{ (yyval.sval) = ""; ;}
break;
case 118:
-#line 885 "pir.y"
+#line 884 "pir.y"
{ /* XXX cleanup memory stuff */
char *newbuff = (char *)mem_sys_allocate((strlen((yyvsp[(1) - (2)].sval)) + strlen((yyvsp[(2) - (2)].sval)) + 2)
* sizeof (char));
@@ -2908,17 +2905,17 @@
break;
case 122:
-#line 897 "pir.y"
+#line 896 "pir.y"
{ (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
break;
case 123:
-#line 905 "pir.y"
+#line 904 "pir.y"
{ set_instr(lexer, NULL); ;}
break;
case 125:
-#line 913 "pir.y"
+#line 912 "pir.y"
{
if (lexer->parse_errors > MAX_NUM_ERRORS)
panic(lexer, "Too many errors. Compilation aborted.\n");
@@ -2928,7 +2925,7 @@
break;
case 126:
-#line 922 "pir.y"
+#line 921 "pir.y"
{
set_instrf(lexer, "null", "%T", (yyvsp[(2) - (3)].targ));
get_opinfo(yyscanner);
@@ -2936,7 +2933,7 @@
break;
case 127:
-#line 929 "pir.y"
+#line 928 "pir.y"
{
set_instrf(lexer, "get_results", "%T", (yyvsp[(2) - (3)].targ));
get_opinfo(yyscanner);
@@ -2944,7 +2941,7 @@
break;
case 131:
-#line 943 "pir.y"
+#line 942 "pir.y"
{ /* at this point, TK_IDENT may in fact be a symbol identifier,
* not an op, so don't do any checks like is_parrot_op() just yet.
*/
@@ -2954,7 +2951,7 @@
break;
case 132:
-#line 952 "pir.y"
+#line 951 "pir.y"
{ /* when this rule is activated, the initial identifier must
* be a parrot op.
*/
@@ -2964,7 +2961,7 @@
break;
case 138:
-#line 970 "pir.y"
+#line 969 "pir.y"
{
/* the "instruction" that was set now appears to be
* an identifier; get the name, and check its type.
@@ -3001,22 +2998,22 @@
break;
case 139:
-#line 1006 "pir.y"
+#line 1005 "pir.y"
{ push_operand(lexer, (yyvsp[(1) - (1)].expr)); ;}
break;
case 140:
-#line 1011 "pir.y"
+#line 1010 "pir.y"
{ push_operand(lexer, expr_from_key(lexer, (yyvsp[(1) - (1)].key))); ;}
break;
case 141:
-#line 1015 "pir.y"
+#line 1014 "pir.y"
{ (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
break;
case 142:
-#line 1017 "pir.y"
+#line 1016 "pir.y"
{ /* this is either a LABEL or a symbol; in the latter case, the type
* will be filled in later. */
(yyval.expr) = expr_from_ident(lexer, (yyvsp[(1) - (1)].sval));
@@ -3024,17 +3021,17 @@
break;
case 143:
-#line 1022 "pir.y"
+#line 1021 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 144:
-#line 1024 "pir.y"
+#line 1023 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 145:
-#line 1028 "pir.y"
+#line 1027 "pir.y"
{
/* if $1 is a register, just return that */
if (TEST_FLAG((yyvsp[(1) - (2)].targ)->flags, TARGET_FLAG_IS_REG))
@@ -3058,22 +3055,22 @@
break;
case 146:
-#line 1051 "pir.y"
+#line 1050 "pir.y"
{ (yyval.key) = (yyvsp[(2) - (3)].key); ;}
break;
case 147:
-#line 1055 "pir.y"
+#line 1054 "pir.y"
{ (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
break;
case 148:
-#line 1057 "pir.y"
+#line 1056 "pir.y"
{ (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
break;
case 149:
-#line 1066 "pir.y"
+#line 1065 "pir.y"
{
/* the instruction is already set in parrot_op rule */
unshift_operand(lexer, (yyvsp[(4) - (6)].expr));
@@ -3087,7 +3084,7 @@
break;
case 150:
-#line 1077 "pir.y"
+#line 1076 "pir.y"
{
/* the instruction is already set in parrot_op rule */
unshift_operand(lexer, (yyvsp[(4) - (4)].expr));
@@ -3102,7 +3099,7 @@
break;
case 151:
-#line 1089 "pir.y"
+#line 1088 "pir.y"
{ /* XXX create a PMC const for $4 */
unshift_operand(lexer, expr_from_key(lexer, (yyvsp[(4) - (6)].key)));
unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (6)].targ)));
@@ -3113,7 +3110,7 @@
break;
case 153:
-#line 1102 "pir.y"
+#line 1101 "pir.y"
{
if ((yyvsp[(3) - (3)].ival) == 0)
set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3125,7 +3122,7 @@
break;
case 154:
-#line 1111 "pir.y"
+#line 1110 "pir.y"
{
if ((yyvsp[(3) - (3)].dval) == 0.0)
set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3137,7 +3134,7 @@
break;
case 155:
-#line 1120 "pir.y"
+#line 1119 "pir.y"
{
set_instrf(lexer, "set", "%T%s", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].sval));
get_opinfo(yyscanner);
@@ -3145,7 +3142,7 @@
break;
case 156:
-#line 1125 "pir.y"
+#line 1124 "pir.y"
{
unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (3)].targ)));
get_opinfo(yyscanner);
@@ -3153,7 +3150,7 @@
break;
case 157:
-#line 1130 "pir.y"
+#line 1129 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(3) - (3)].sval));
if (sym == NULL) {
@@ -3177,7 +3174,7 @@
break;
case 158:
-#line 1151 "pir.y"
+#line 1150 "pir.y"
{
/* $P0 = foo ["bar"]
*
@@ -3220,7 +3217,7 @@
break;
case 159:
-#line 1191 "pir.y"
+#line 1190 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(3) - (4)].sval));
target *t;
@@ -3241,7 +3238,7 @@
break;
case 160:
-#line 1209 "pir.y"
+#line 1208 "pir.y"
{
target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (4)].ival));
set_target_key(preg, (yyvsp[(4) - (4)].key));
@@ -3251,7 +3248,7 @@
break;
case 161:
-#line 1216 "pir.y"
+#line 1215 "pir.y"
{
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%E", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].expr));
get_opinfo(yyscanner);
@@ -3259,7 +3256,7 @@
break;
case 162:
-#line 1221 "pir.y"
+#line 1220 "pir.y"
{
if ((yyvsp[(3) - (3)].ival) == 1)
set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3273,7 +3270,7 @@
break;
case 163:
-#line 1232 "pir.y"
+#line 1231 "pir.y"
{
if ((yyvsp[(3) - (3)].dval) == 1.0)
set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3287,7 +3284,7 @@
break;
case 164:
-#line 1243 "pir.y"
+#line 1242 "pir.y"
{
if ((yyvsp[(3) - (3)].ival) == 1)
set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3301,7 +3298,7 @@
break;
case 165:
-#line 1254 "pir.y"
+#line 1253 "pir.y"
{
if ((yyvsp[(3) - (3)].dval) == 1.0)
set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3315,7 +3312,7 @@
break;
case 166:
-#line 1265 "pir.y"
+#line 1264 "pir.y"
{
set_instrf(lexer, "add", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
get_opinfo(yyscanner);
@@ -3323,7 +3320,7 @@
break;
case 167:
-#line 1270 "pir.y"
+#line 1269 "pir.y"
{
set_instrf(lexer, "sub", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
get_opinfo(yyscanner);
@@ -3331,7 +3328,7 @@
break;
case 168:
-#line 1275 "pir.y"
+#line 1274 "pir.y"
{
set_instrf(lexer, (yyvsp[(3) - (4)].sval), "%T%E", (yyvsp[(1) - (4)].targ), (yyvsp[(4) - (4)].expr));
get_opinfo(yyscanner);
@@ -3339,19 +3336,22 @@
break;
case 169:
-#line 1280 "pir.y"
+#line 1279 "pir.y"
{
if (targets_equal((yyvsp[(1) - (5)].targ), (yyvsp[(3) - (5)].targ))) /* $P0 = $P0 + $P1 ==> $P0 += $P1 */
- set_instrf(lexer, opnames[(yyvsp[(4) - (5)].ival)], "%T%T", (yyvsp[(1) - (5)].targ), (yyvsp[(5) - (5)].targ));
+ set_instrf(lexer, opnames[(yyvsp[(4) - (5)].ival)], "%T%E", (yyvsp[(1) - (5)].targ), (yyvsp[(5) - (5)].expr));
else
- set_instrf(lexer, opnames[(yyvsp[(4) - (5)].ival)], "%T%T%T", (yyvsp[(1) - (5)].targ), (yyvsp[(3) - (5)].targ), (yyvsp[(5) - (5)].targ));
+ set_instrf(lexer, opnames[(yyvsp[(4) - (5)].ival)], "%T%T%E", (yyvsp[(1) - (5)].targ), (yyvsp[(3) - (5)].targ), (yyvsp[(5) - (5)].expr));
+
+ /* XXX this do_strength_reduction() doesn't work properly yet. */
+ do_strength_reduction(yyscanner);
get_opinfo(yyscanner);
;}
break;
case 170:
-#line 1289 "pir.y"
+#line 1291 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (4)].sval));
target *t;
@@ -3373,7 +3373,7 @@
break;
case 171:
-#line 1308 "pir.y"
+#line 1310 "pir.y"
{
target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (4)].ival));
set_target_key(preg, (yyvsp[(2) - (4)].key));
@@ -3383,97 +3383,97 @@
break;
case 172:
-#line 1342 "pir.y"
+#line 1344 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%i%T", (yyvsp[(1) - (3)].ival), (yyvsp[(3) - (3)].targ)); ;}
break;
case 173:
-#line 1344 "pir.y"
+#line 1346 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%n%T", (yyvsp[(1) - (3)].dval), (yyvsp[(3) - (3)].targ)); ;}
break;
case 174:
-#line 1346 "pir.y"
+#line 1348 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%s%T", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].targ)); ;}
break;
case 175:
-#line 1348 "pir.y"
+#line 1350 "pir.y"
{ set_instrf(lexer, "set", "%C", fold_s_s(yyscanner, (yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval))); ;}
break;
case 176:
-#line 1350 "pir.y"
+#line 1352 "pir.y"
{ set_instrf(lexer, "set", "%C", fold_i_i(yyscanner, (yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival))); ;}
break;
case 177:
-#line 1352 "pir.y"
+#line 1354 "pir.y"
{ set_instrf(lexer, "set", "%C", fold_n_n(yyscanner, (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval))); ;}
break;
case 178:
-#line 1354 "pir.y"
+#line 1356 "pir.y"
{ set_instrf(lexer, "set", "%C", fold_i_n(yyscanner, (yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval))); ;}
break;
case 179:
-#line 1356 "pir.y"
+#line 1358 "pir.y"
{ set_instrf(lexer, "set", "%C", fold_n_i(yyscanner, (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival))); ;}
break;
case 180:
-#line 1361 "pir.y"
+#line 1363 "pir.y"
{ get_opinfo(yyscanner); ;}
break;
case 181:
-#line 1370 "pir.y"
+#line 1372 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, (yyvsp[(3) - (5)].sval), (yyvsp[(5) - (5)].sval)); ;}
break;
case 182:
-#line 1372 "pir.y"
+#line 1374 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "int", (yyvsp[(5) - (5)].sval)); ;}
break;
case 183:
-#line 1374 "pir.y"
+#line 1376 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "num", (yyvsp[(5) - (5)].sval)); ;}
break;
case 184:
-#line 1376 "pir.y"
+#line 1378 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "pmc", (yyvsp[(5) - (5)].sval)); ;}
break;
case 185:
-#line 1378 "pir.y"
+#line 1380 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "string", (yyvsp[(5) - (5)].sval)); ;}
break;
case 186:
-#line 1380 "pir.y"
+#line 1382 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "if", (yyvsp[(5) - (5)].sval)); ;}
break;
case 187:
-#line 1382 "pir.y"
+#line 1384 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "unless", (yyvsp[(5) - (5)].sval)); ;}
break;
case 188:
-#line 1384 "pir.y"
+#line 1386 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "goto", (yyvsp[(5) - (5)].sval)); ;}
break;
case 189:
-#line 1386 "pir.y"
+#line 1388 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "null", (yyvsp[(5) - (5)].sval)); ;}
break;
case 190:
-#line 1388 "pir.y"
+#line 1390 "pir.y"
{
int istrue = evaluate_c(lexer, (yyvsp[(2) - (4)].cval));
/* if "unless", invert the true-ness */
@@ -3488,7 +3488,7 @@
break;
case 191:
-#line 1400 "pir.y"
+#line 1402 "pir.y"
{
set_instrf(lexer, (yyvsp[(1) - (5)].ival) ? "unless_null" : "if_null", "%T%I",
new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (5)].ival)), (yyvsp[(5) - (5)].sval));
@@ -3496,67 +3496,67 @@
break;
case 192:
-#line 1405 "pir.y"
+#line 1407 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
break;
case 193:
-#line 1407 "pir.y"
+#line 1409 "pir.y"
{ set_instrf(lexer, (yyvsp[(1) - (4)].ival) ? "unless" : "if", "%T%I", (yyvsp[(2) - (4)].targ), (yyvsp[(4) - (4)].sval)); ;}
break;
case 194:
-#line 1409 "pir.y"
+#line 1411 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "int", (yyvsp[(4) - (4)].sval)); ;}
break;
case 195:
-#line 1411 "pir.y"
+#line 1413 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "num", (yyvsp[(4) - (4)].sval)); ;}
break;
case 196:
-#line 1413 "pir.y"
+#line 1415 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "pmc", (yyvsp[(4) - (4)].sval)); ;}
break;
case 197:
-#line 1415 "pir.y"
+#line 1417 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "string", (yyvsp[(4) - (4)].sval)); ;}
break;
case 198:
-#line 1417 "pir.y"
+#line 1419 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "if", (yyvsp[(4) - (4)].sval)); ;}
break;
case 199:
-#line 1419 "pir.y"
+#line 1421 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "unless", (yyvsp[(4) - (4)].sval)); ;}
break;
case 200:
-#line 1421 "pir.y"
+#line 1423 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
break;
case 201:
-#line 1423 "pir.y"
+#line 1425 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
break;
case 202:
-#line 1425 "pir.y"
+#line 1427 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
break;
case 203:
-#line 1427 "pir.y"
+#line 1429 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
break;
case 204:
-#line 1429 "pir.y"
+#line 1431 "pir.y"
{
if ((yyvsp[(2) - (4)].ival) == COMPUTE_DURING_RUNTIME) {
if ((yyvsp[(1) - (4)].ival) == NEED_INVERT_OPNAME) /* "unless" */
@@ -3584,7 +3584,7 @@
break;
case 205:
-#line 1460 "pir.y"
+#line 1462 "pir.y"
{
/* the instructions "gt" and "ge" are converted to "lt" and "le".
* if so, then the arguments must be reversed as well. "lt" and
@@ -3613,7 +3613,7 @@
break;
case 206:
-#line 1486 "pir.y"
+#line 1488 "pir.y"
{
if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival) + 1], "%T%i", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].ival));
@@ -3624,7 +3624,7 @@
break;
case 207:
-#line 1494 "pir.y"
+#line 1496 "pir.y"
{
if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival) + 1], "%T%n", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].dval));
@@ -3636,7 +3636,7 @@
break;
case 208:
-#line 1503 "pir.y"
+#line 1505 "pir.y"
{
if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%s", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].sval));
@@ -3648,32 +3648,32 @@
break;
case 209:
-#line 1512 "pir.y"
+#line 1514 "pir.y"
{ (yyval.ival) = evaluate_i_i((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
break;
case 210:
-#line 1514 "pir.y"
+#line 1516 "pir.y"
{ (yyval.ival) = evaluate_i_n((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
break;
case 211:
-#line 1516 "pir.y"
+#line 1518 "pir.y"
{ (yyval.ival) = evaluate_n_i((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
break;
case 212:
-#line 1518 "pir.y"
+#line 1520 "pir.y"
{ (yyval.ival) = evaluate_n_n((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
break;
case 213:
-#line 1520 "pir.y"
+#line 1522 "pir.y"
{ (yyval.ival) = evaluate_s_s((yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval)); ;}
break;
case 214:
-#line 1524 "pir.y"
+#line 1526 "pir.y"
{
yypirerror(yyscanner, lexer, "cannot compare string to %s",
(yyvsp[(3) - (3)].ival) == INT_TYPE ? "integer" : "number");
@@ -3681,37 +3681,37 @@
break;
case 215:
-#line 1529 "pir.y"
+#line 1531 "pir.y"
{ yypirerror(yyscanner, lexer, "cannot compare integer to string"); ;}
break;
case 216:
-#line 1531 "pir.y"
+#line 1533 "pir.y"
{ yypirerror(yyscanner, lexer, "cannot compare number to string"); ;}
break;
case 217:
-#line 1535 "pir.y"
+#line 1537 "pir.y"
{ (yyval.ival) = INT_TYPE; ;}
break;
case 218:
-#line 1536 "pir.y"
+#line 1538 "pir.y"
{ (yyval.ival) = NUM_TYPE; ;}
break;
case 219:
-#line 1539 "pir.y"
+#line 1541 "pir.y"
{ (yyval.ival) = DONT_INVERT_OPNAME; /* no need to invert */ ;}
break;
case 220:
-#line 1540 "pir.y"
+#line 1542 "pir.y"
{ (yyval.ival) = NEED_INVERT_OPNAME; /* yes, invert opname */ ;}
break;
case 223:
-#line 1548 "pir.y"
+#line 1550 "pir.y"
{
set_instrf(lexer, "branch", "%I", (yyvsp[(2) - (3)].sval));
set_op_labelflag(lexer, BIT(0)); /* bit 0 means: "1 << 0" */
@@ -3720,37 +3720,37 @@
break;
case 224:
-#line 1556 "pir.y"
+#line 1558 "pir.y"
{ declare_local(lexer, (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].symb)); ;}
break;
case 225:
-#line 1560 "pir.y"
+#line 1562 "pir.y"
{ (yyval.symb) = (yyvsp[(1) - (1)].symb); ;}
break;
case 226:
-#line 1562 "pir.y"
+#line 1564 "pir.y"
{ (yyval.symb) = add_local((yyvsp[(1) - (3)].symb), (yyvsp[(3) - (3)].symb)); ;}
break;
case 227:
-#line 1566 "pir.y"
+#line 1568 "pir.y"
{ (yyval.symb) = new_local(lexer, (yyvsp[(1) - (2)].sval), (yyvsp[(2) - (2)].ival)); ;}
break;
case 228:
-#line 1569 "pir.y"
+#line 1571 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 229:
-#line 1570 "pir.y"
+#line 1572 "pir.y"
{ (yyval.ival) = 1; ;}
break;
case 230:
-#line 1574 "pir.y"
+#line 1576 "pir.y"
{ /* if $4 is not a register, it must be a declared symbol */
if (!TEST_FLAG((yyvsp[(4) - (5)].targ)->flags, TARGET_FLAG_IS_REG)) {
@@ -3763,12 +3763,12 @@
break;
case 231:
-#line 1589 "pir.y"
+#line 1591 "pir.y"
{ convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
break;
case 234:
-#line 1601 "pir.y"
+#line 1603 "pir.y"
{ /* $4 contains an invocation object */
set_invocation_args((yyvsp[(4) - (8)].invo), (yyvsp[(3) - (8)].argm));
set_invocation_results((yyvsp[(4) - (8)].invo), (yyvsp[(6) - (8)].targ));
@@ -3777,72 +3777,72 @@
break;
case 235:
-#line 1609 "pir.y"
+#line 1611 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 236:
-#line 1611 "pir.y"
+#line 1613 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 237:
-#line 1615 "pir.y"
+#line 1617 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 238:
-#line 1617 "pir.y"
+#line 1619 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
break;
case 239:
-#line 1621 "pir.y"
+#line 1623 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 240:
-#line 1625 "pir.y"
+#line 1627 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(2) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
break;
case 241:
-#line 1627 "pir.y"
+#line 1629 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_NCI, (yyvsp[(2) - (2)].targ)); ;}
break;
case 242:
-#line 1630 "pir.y"
+#line 1632 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_METHOD, (yyvsp[(2) - (5)].targ), (yyvsp[(5) - (5)].expr)); ;}
break;
case 243:
-#line 1634 "pir.y"
+#line 1636 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 244:
-#line 1636 "pir.y"
+#line 1638 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (2)].targ); ;}
break;
case 245:
-#line 1640 "pir.y"
+#line 1642 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 246:
-#line 1642 "pir.y"
+#line 1644 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 247:
-#line 1646 "pir.y"
+#line 1648 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 248:
-#line 1648 "pir.y"
+#line 1650 "pir.y"
{
if ((yyvsp[(2) - (2)].targ))
(yyval.targ) = add_target(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].targ));
@@ -3852,38 +3852,38 @@
break;
case 249:
-#line 1657 "pir.y"
+#line 1659 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
break;
case 250:
-#line 1659 "pir.y"
+#line 1661 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 252:
-#line 1667 "pir.y"
+#line 1669 "pir.y"
{ set_invocation_results((yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ));
(yyval.invo) = (yyvsp[(3) - (3)].invo);
;}
break;
case 253:
-#line 1671 "pir.y"
+#line 1673 "pir.y"
{ set_invocation_results((yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ));
(yyval.invo) = (yyvsp[(3) - (3)].invo);
;}
break;
case 254:
-#line 1675 "pir.y"
+#line 1677 "pir.y"
{ set_invocation_results((yyvsp[(1) - (1)].invo), NULL);
(yyval.invo) = (yyvsp[(1) - (1)].invo);
;}
break;
case 257:
-#line 1685 "pir.y"
+#line 1687 "pir.y"
{
target *invocant;
@@ -3912,7 +3912,7 @@
break;
case 258:
-#line 1713 "pir.y"
+#line 1715 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(1) - (2)].targ), NULL);
set_invocation_args((yyval.invo), (yyvsp[(2) - (2)].argm));
@@ -3920,12 +3920,12 @@
break;
case 259:
-#line 1720 "pir.y"
+#line 1722 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 260:
-#line 1722 "pir.y"
+#line 1724 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
if (sym == NULL)
@@ -3935,7 +3935,7 @@
break;
case 261:
-#line 1731 "pir.y"
+#line 1733 "pir.y"
{ /* check that this identifier was declared */
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
@@ -3955,22 +3955,22 @@
break;
case 262:
-#line 1748 "pir.y"
+#line 1750 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival))); ;}
break;
case 263:
-#line 1750 "pir.y"
+#line 1752 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival))); ;}
break;
case 264:
-#line 1752 "pir.y"
+#line 1754 "pir.y"
{ (yyval.expr) = expr_from_const(lexer, new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval))); ;}
break;
case 265:
-#line 1756 "pir.y"
+#line 1758 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
if (sym == NULL)
@@ -3982,67 +3982,67 @@
break;
case 266:
-#line 1765 "pir.y"
+#line 1767 "pir.y"
{ (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 267:
-#line 1770 "pir.y"
+#line 1772 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
break;
case 268:
-#line 1774 "pir.y"
+#line 1776 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 269:
-#line 1776 "pir.y"
+#line 1778 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 270:
-#line 1780 "pir.y"
+#line 1782 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 271:
-#line 1782 "pir.y"
+#line 1784 "pir.y"
{ (yyval.targ) = add_target(lexer, (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
break;
case 272:
-#line 1786 "pir.y"
+#line 1788 "pir.y"
{ (yyval.targ) = set_param_flag(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].ival)); ;}
break;
case 273:
-#line 1790 "pir.y"
+#line 1792 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 274:
-#line 1792 "pir.y"
+#line 1794 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 275:
-#line 1796 "pir.y"
+#line 1798 "pir.y"
{ (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
break;
case 276:
-#line 1798 "pir.y"
+#line 1800 "pir.y"
{ (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
break;
case 277:
-#line 1800 "pir.y"
+#line 1802 "pir.y"
{ (yyval.ival) = TARGET_FLAG_SLURPY; ;}
break;
case 278:
-#line 1802 "pir.y"
+#line 1804 "pir.y"
{
(yyval.ival) = TARGET_FLAG_NAMED;
set_param_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -4050,12 +4050,12 @@
break;
case 279:
-#line 1812 "pir.y"
+#line 1814 "pir.y"
{ convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
break;
case 284:
-#line 1822 "pir.y"
+#line 1824 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_RETURN);
set_invocation_args((yyval.invo), (yyvsp[(2) - (3)].argm));
@@ -4063,7 +4063,7 @@
break;
case 285:
-#line 1827 "pir.y"
+#line 1829 "pir.y"
{ /* was the invocation a method call? then it becomes a method tail
* call, otherwise it's just a normal (sub) tail call.
*/
@@ -4075,7 +4075,7 @@
break;
case 286:
-#line 1838 "pir.y"
+#line 1840 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_YIELD);
set_invocation_args((yyval.invo), (yyvsp[(2) - (3)].argm));
@@ -4083,47 +4083,47 @@
break;
case 287:
-#line 1845 "pir.y"
+#line 1847 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 288:
-#line 1849 "pir.y"
+#line 1851 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 289:
-#line 1851 "pir.y"
+#line 1853 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 290:
-#line 1855 "pir.y"
+#line 1857 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 291:
-#line 1857 "pir.y"
+#line 1859 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) - (3)].argm)); ;}
break;
case 294:
-#line 1865 "pir.y"
+#line 1867 "pir.y"
{ (yyval.argm) = set_arg_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
break;
case 295:
-#line 1869 "pir.y"
+#line 1871 "pir.y"
{ (yyval.argm) = set_arg_flag((yyval.argm), (yyvsp[(2) - (2)].ival)); ;}
break;
case 296:
-#line 1873 "pir.y"
+#line 1875 "pir.y"
{ (yyval.argm) = set_curarg(lexer, new_argument(lexer, (yyvsp[(1) - (1)].expr))); ;}
break;
case 297:
-#line 1879 "pir.y"
+#line 1881 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_RETURN);
set_invocation_args((yyval.invo), (yyvsp[(3) - (5)].argm));
@@ -4131,7 +4131,7 @@
break;
case 298:
-#line 1888 "pir.y"
+#line 1890 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_YIELD);
set_invocation_args((yyval.invo), (yyvsp[(3) - (5)].argm));
@@ -4139,72 +4139,72 @@
break;
case 299:
-#line 1895 "pir.y"
+#line 1897 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 300:
-#line 1897 "pir.y"
+#line 1899 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 301:
-#line 1902 "pir.y"
+#line 1904 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 302:
-#line 1904 "pir.y"
+#line 1906 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
break;
case 303:
-#line 1909 "pir.y"
+#line 1911 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 304:
-#line 1913 "pir.y"
+#line 1915 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 305:
-#line 1915 "pir.y"
+#line 1917 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 306:
-#line 1919 "pir.y"
+#line 1921 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 307:
-#line 1921 "pir.y"
+#line 1923 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
break;
case 308:
-#line 1925 "pir.y"
+#line 1927 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 309:
-#line 1930 "pir.y"
+#line 1932 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 310:
-#line 1932 "pir.y"
+#line 1934 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 311:
-#line 1936 "pir.y"
+#line 1938 "pir.y"
{ (yyval.ival) = ARG_FLAG_FLAT; ;}
break;
case 312:
-#line 1938 "pir.y"
+#line 1940 "pir.y"
{
(yyval.ival) = ARG_FLAG_NAMED;
set_arg_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -4212,132 +4212,132 @@
break;
case 313:
-#line 1945 "pir.y"
+#line 1947 "pir.y"
{ (yyval.sval) = NULL; ;}
break;
case 314:
-#line 1947 "pir.y"
+#line 1949 "pir.y"
{ (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
break;
case 315:
-#line 1951 "pir.y"
+#line 1953 "pir.y"
{ (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
break;
case 319:
-#line 1962 "pir.y"
+#line 1964 "pir.y"
{ store_global_constant(lexer, (yyvsp[(2) - (2)].cval)); ;}
break;
case 320:
-#line 1966 "pir.y"
+#line 1968 "pir.y"
{ /* XXX is .globalconst to be kept? */ ;}
break;
case 321:
-#line 1970 "pir.y"
+#line 1972 "pir.y"
{ (yyval.cval) = new_named_const(lexer, INT_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
break;
case 322:
-#line 1972 "pir.y"
+#line 1974 "pir.y"
{ (yyval.cval) = new_named_const(lexer, NUM_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
break;
case 323:
-#line 1974 "pir.y"
+#line 1976 "pir.y"
{ (yyval.cval) = new_named_const(lexer, STRING_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
break;
case 324:
-#line 1976 "pir.y"
+#line 1978 "pir.y"
{ (yyval.cval) = new_pmc_const((yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
break;
case 325:
-#line 1983 "pir.y"
+#line 1985 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 326:
-#line 1984 "pir.y"
+#line 1986 "pir.y"
{ (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
break;
case 327:
-#line 1988 "pir.y"
+#line 1990 "pir.y"
{ (yyval.cval) = new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval)); ;}
break;
case 328:
-#line 1989 "pir.y"
+#line 1991 "pir.y"
{ (yyval.cval) = new_const(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 329:
-#line 1990 "pir.y"
+#line 1992 "pir.y"
{ (yyval.cval) = new_const(lexer, NUM_TYPE, (yyvsp[(1) - (1)].dval)); ;}
break;
case 330:
-#line 1993 "pir.y"
+#line 1995 "pir.y"
{ (yyval.ival) = OP_NE; ;}
break;
case 331:
-#line 1994 "pir.y"
+#line 1996 "pir.y"
{ (yyval.ival) = OP_EQ; ;}
break;
case 332:
-#line 1995 "pir.y"
+#line 1997 "pir.y"
{ (yyval.ival) = OP_LT; ;}
break;
case 333:
-#line 1996 "pir.y"
+#line 1998 "pir.y"
{ (yyval.ival) = OP_LE; ;}
break;
case 334:
-#line 1997 "pir.y"
+#line 1999 "pir.y"
{ (yyval.ival) = OP_GE; ;}
break;
case 335:
-#line 1998 "pir.y"
+#line 2000 "pir.y"
{ (yyval.ival) = OP_GT; ;}
break;
case 336:
-#line 2001 "pir.y"
+#line 2003 "pir.y"
{ (yyval.ival) = INT_TYPE; ;}
break;
case 337:
-#line 2002 "pir.y"
+#line 2004 "pir.y"
{ (yyval.ival) = NUM_TYPE; ;}
break;
case 338:
-#line 2003 "pir.y"
+#line 2005 "pir.y"
{ (yyval.ival) = PMC_TYPE; ;}
break;
case 339:
-#line 2004 "pir.y"
+#line 2006 "pir.y"
{ (yyval.ival) = STRING_TYPE; ;}
break;
case 340:
-#line 2012 "pir.y"
+#line 2014 "pir.y"
{ set_curtarget(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 342:
-#line 2016 "pir.y"
+#line 2018 "pir.y"
{ /* a symbol must have been declared; check that at this point. */
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
if (sym == NULL) {
@@ -4352,277 +4352,277 @@
break;
case 343:
-#line 2029 "pir.y"
+#line 2031 "pir.y"
{ (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 344:
-#line 2030 "pir.y"
+#line 2032 "pir.y"
{ (yyval.targ) = new_reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 345:
-#line 2031 "pir.y"
+#line 2033 "pir.y"
{ (yyval.targ) = new_reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 346:
-#line 2032 "pir.y"
+#line 2034 "pir.y"
{ (yyval.targ) = new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 349:
-#line 2040 "pir.y"
+#line 2042 "pir.y"
{ (yyval.sval) = "if"; ;}
break;
case 350:
-#line 2041 "pir.y"
+#line 2043 "pir.y"
{ (yyval.sval) = "unless"; ;}
break;
case 351:
-#line 2042 "pir.y"
+#line 2044 "pir.y"
{ (yyval.sval) = "goto"; ;}
break;
case 352:
-#line 2043 "pir.y"
+#line 2045 "pir.y"
{ (yyval.sval) = "int"; ;}
break;
case 353:
-#line 2044 "pir.y"
+#line 2046 "pir.y"
{ (yyval.sval) = "num"; ;}
break;
case 354:
-#line 2045 "pir.y"
+#line 2047 "pir.y"
{ (yyval.sval) = "string"; ;}
break;
case 355:
-#line 2046 "pir.y"
+#line 2048 "pir.y"
{ (yyval.sval) = "pmc"; ;}
break;
case 356:
-#line 2047 "pir.y"
+#line 2049 "pir.y"
{ (yyval.sval) = "null"; ;}
break;
case 357:
-#line 2050 "pir.y"
+#line 2052 "pir.y"
{ (yyval.sval) = "neg"; ;}
break;
case 358:
-#line 2051 "pir.y"
+#line 2053 "pir.y"
{ (yyval.sval) = "not"; ;}
break;
case 359:
-#line 2052 "pir.y"
+#line 2054 "pir.y"
{ (yyval.sval) = "bnot"; ;}
break;
case 360:
-#line 2055 "pir.y"
+#line 2057 "pir.y"
{ (yyval.ival) = OP_ADD; ;}
break;
case 361:
-#line 2056 "pir.y"
+#line 2058 "pir.y"
{ (yyval.ival) = OP_SUB; ;}
break;
case 362:
-#line 2057 "pir.y"
+#line 2059 "pir.y"
{ (yyval.ival) = OP_DIV; ;}
break;
case 363:
-#line 2058 "pir.y"
+#line 2060 "pir.y"
{ (yyval.ival) = OP_MUL; ;}
break;
case 364:
-#line 2059 "pir.y"
+#line 2061 "pir.y"
{ (yyval.ival) = OP_MOD; ;}
break;
case 365:
-#line 2060 "pir.y"
+#line 2062 "pir.y"
{ (yyval.ival) = OP_BOR; ;}
break;
case 366:
-#line 2061 "pir.y"
+#line 2063 "pir.y"
{ (yyval.ival) = OP_BAND; ;}
break;
case 367:
-#line 2062 "pir.y"
+#line 2064 "pir.y"
{ (yyval.ival) = OP_BXOR; ;}
break;
case 368:
-#line 2063 "pir.y"
+#line 2065 "pir.y"
{ (yyval.ival) = OP_POW; ;}
break;
case 369:
-#line 2064 "pir.y"
+#line 2066 "pir.y"
{ (yyval.ival) = OP_CONCAT; ;}
break;
case 370:
-#line 2065 "pir.y"
+#line 2067 "pir.y"
{ (yyval.ival) = OP_LSR; ;}
break;
case 371:
-#line 2066 "pir.y"
+#line 2068 "pir.y"
{ (yyval.ival) = OP_SHR; ;}
break;
case 372:
-#line 2067 "pir.y"
+#line 2069 "pir.y"
{ (yyval.ival) = OP_SHL; ;}
break;
case 373:
-#line 2068 "pir.y"
+#line 2070 "pir.y"
{ (yyval.ival) = OP_OR; ;}
break;
case 374:
-#line 2069 "pir.y"
+#line 2071 "pir.y"
{ (yyval.ival) = OP_AND; ;}
break;
case 375:
-#line 2070 "pir.y"
+#line 2072 "pir.y"
{ (yyval.ival) = OP_FDIV; ;}
break;
case 376:
-#line 2071 "pir.y"
+#line 2073 "pir.y"
{ (yyval.ival) = OP_XOR; ;}
break;
case 377:
-#line 2072 "pir.y"
+#line 2074 "pir.y"
{ (yyval.ival) = OP_ISEQ; ;}
break;
case 378:
-#line 2073 "pir.y"
+#line 2075 "pir.y"
{ (yyval.ival) = OP_ISLE; ;}
break;
case 379:
-#line 2074 "pir.y"
+#line 2076 "pir.y"
{ (yyval.ival) = OP_ISLT; ;}
break;
case 380:
-#line 2075 "pir.y"
+#line 2077 "pir.y"
{ (yyval.ival) = OP_ISGE; ;}
break;
case 381:
-#line 2076 "pir.y"
+#line 2078 "pir.y"
{ (yyval.ival) = OP_ISGT; ;}
break;
case 382:
-#line 2077 "pir.y"
+#line 2079 "pir.y"
{ (yyval.ival) = OP_ISNE; ;}
break;
case 383:
-#line 2083 "pir.y"
+#line 2085 "pir.y"
{ (yyval.ival) = OP_MUL; ;}
break;
case 384:
-#line 2084 "pir.y"
+#line 2086 "pir.y"
{ (yyval.ival) = OP_MOD; ;}
break;
case 385:
-#line 2085 "pir.y"
+#line 2087 "pir.y"
{ (yyval.ival) = OP_POW; ;}
break;
case 386:
-#line 2086 "pir.y"
+#line 2088 "pir.y"
{ (yyval.ival) = OP_DIV; ;}
break;
case 387:
-#line 2087 "pir.y"
+#line 2089 "pir.y"
{ (yyval.ival) = OP_FDIV; ;}
break;
case 388:
-#line 2088 "pir.y"
+#line 2090 "pir.y"
{ (yyval.ival) = OP_BOR; ;}
break;
case 389:
-#line 2089 "pir.y"
+#line 2091 "pir.y"
{ (yyval.ival) = OP_BAND; ;}
break;
case 390:
-#line 2090 "pir.y"
+#line 2092 "pir.y"
{ (yyval.ival) = OP_BXOR; ;}
break;
case 391:
-#line 2091 "pir.y"
+#line 2093 "pir.y"
{ (yyval.ival) = OP_CONCAT; ;}
break;
case 392:
-#line 2092 "pir.y"
+#line 2094 "pir.y"
{ (yyval.ival) = OP_SHR; ;}
break;
case 393:
-#line 2093 "pir.y"
+#line 2095 "pir.y"
{ (yyval.ival) = OP_SHL; ;}
break;
case 394:
-#line 2094 "pir.y"
+#line 2096 "pir.y"
{ (yyval.ival) = OP_LSR; ;}
break;
case 396:
-#line 2115 "pir.y"
+#line 2117 "pir.y"
{ new_subr(lexer, "@start"); ;}
break;
case 405:
-#line 2131 "pir.y"
+#line 2133 "pir.y"
{ set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
break;
case 410:
-#line 2141 "pir.y"
+#line 2143 "pir.y"
{ set_sub_name(lexer, (yyvsp[(3) - (3)].sval)); ;}
break;
case 411:
-#line 2145 "pir.y"
+#line 2147 "pir.y"
{ new_subr(lexer, NULL); ;}
break;
case 412:
-#line 2150 "pir.y"
+#line 2152 "pir.y"
{
if (is_parrot_op(lexer, (yyvsp[(1) - (3)].sval)))
get_opinfo(yyscanner);
@@ -4848,7 +4848,7 @@
}
-#line 2161 "pir.y"
+#line 2163 "pir.y"
-
[svn:parrot] r33498 - trunk/compilers/pirc/new
by kjs