2
/* A Bison parser, made by GNU Bison 2.4. */
4
/* Skeleton implementation for Bison's Yacc-like parsers in C
6
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
7
Free Software Foundation, Inc.
9
This program is free software: you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation, either version 3 of the License, or
12
(at your option) any later version.
14
This program is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
GNU General Public License for more details.
19
You should have received a copy of the GNU General Public License
20
along with this program. If not, see <http://www.gnu.org/licenses/>. */
22
/* As a special exception, you may create a larger work that contains
23
part or all of the Bison parser skeleton and distribute that work
24
under terms of your choice, so long as that work isn't itself a
25
parser generator using the skeleton or a modified version thereof
26
as a parser skeleton. Alternatively, if you modify or redistribute
27
the parser skeleton itself, you may (at your option) remove this
28
special exception, which will cause the skeleton and the resulting
29
Bison output files to be licensed under the GNU General Public
30
License without this special exception.
32
This special exception was added by the Free Software Foundation in
33
version 2.2 of Bison. */
35
/* C LALR(1) parser skeleton written by Richard Stallman, by
36
simplifying the original so-called "semantic" parser. */
38
/* All symbols defined below should begin with yy or YY, to avoid
39
infringing on user name space. This should be done even for local
40
variables, as they might otherwise be expanded by user macros.
41
There are some unavoidable exceptions within include files to
42
define necessary library symbols; they are noted "INFRINGES ON
43
USER NAME SPACE" below. */
45
/* Identify Bison output. */
49
#define YYBISON_VERSION "2.4"
52
#define YYSKELETON_NAME "./skeleton.m4"
63
/* Using locations. */
64
#define YYLSP_NEEDED 0
66
/* Substitute the variable and function names. */
67
#define yyparse a3_parse
69
#define yyerror a3_error
70
#define yylval a3_lval
71
#define yychar a3_char
72
#define yydebug a3_debug
73
#define yynerrs a3_nerrs
76
/* Copy the first part of user declarations. */
78
/* Line 198 of skeleton.m4 */
88
#include "tokenizer.h"
100
/* Line 198 of skeleton.m4 */
101
#line 102 "parser.tab.c"
103
/* Enabling traces. */
108
/* Enabling verbose error messages. */
109
#ifdef YYERROR_VERBOSE
110
# undef YYERROR_VERBOSE
111
# define YYERROR_VERBOSE 1
113
# define YYERROR_VERBOSE 1
116
/* Enabling the token table. */
117
#ifndef YYTOKEN_TABLE
118
# define YYTOKEN_TABLE 0
125
/* Put the tokens into the symbol table, so that GDB and other debuggers
188
KW_DEFAULT_XML = 318,
225
below_semicolon = 355,
226
below_assignment = 356,
229
minusminus_prefix = 359,
230
plusplus_prefix = 360,
233
above_identifier = 363,
241
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
243
/* Line 223 of skeleton.m4 */
248
/* Line 223 of skeleton.m4 */
251
enum yytokentype token;
253
classinfo_t*classinfo;
254
classinfo_list_t*classinfo_list;
256
slotinfo_list_t*slotinfo_list;
259
unsigned int number_uint;
263
//typedcode_list_t*value_list;
264
codeandnumber_t value_list;
270
for_start_t for_start;
271
abc_exception_t *exception;
274
namespace_decl_t* namespace_decl;
277
abc_exception_list_t *l;
283
/* Line 223 of skeleton.m4 */
284
#line 285 "parser.tab.c"
286
# define YYSTYPE_IS_TRIVIAL 1
287
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
288
# define YYSTYPE_IS_DECLARED 1
292
/* Copy the second part of user declarations. */
294
/* Line 273 of skeleton.m4 */
298
static int a3_error(char*s)
300
syntaxerror("%s", s);
301
return 0; //make gcc happy
304
static void parsererror(const char*file, int line, const char*f)
306
syntaxerror("internal error in %s, %s:%d", f, file, line);
309
#define parserassert(b) {if(!(b)) parsererror(__FILE__, __LINE__,__func__);}
312
static char* concat2(const char* t1, const char* t2)
316
char*text = malloc(l1+l2+1);
317
memcpy(text , t1, l1);
318
memcpy(text+l1, t2, l2);
322
static char* concat3(const char* t1, const char* t2, const char* t3)
327
char*text = malloc(l1+l2+l3+1);
328
memcpy(text , t1, l1);
329
memcpy(text+l1, t2, l2);
330
memcpy(text+l1+l2, t3, l3);
335
typedef struct _import {
338
DECLARE_LIST(import);
340
DECLARE(methodstate);
341
DECLARE_LIST(methodstate);
343
typedef struct _classstate {
349
methodstate_t*static_init;
351
//code_t*static_init;
352
parsedclass_t*dependencies;
354
char has_constructor;
357
struct _methodstate {
368
dict_t*unresolved_variables;
371
char uses_parent_function;
372
char no_variable_scoping;
380
int var_index; // for inner methods
381
int slot_index; // for inner methods
382
char is_a_slot; // for inner methods
387
abc_exception_list_t*exceptions;
389
methodstate_list_t*innerfunctions;
392
typedef struct _state {
397
import_list_t*wildcard_imports;
398
dict_t*import_toplevel_packages;
401
namespace_list_t*active_namespace_urls;
403
char has_own_imports;
404
char new_vars; // e.g. transition between two functions
405
char xmlfilter; // are we inside a xmlobj..() filter?
408
methodstate_t*method;
415
dict_t*allvars; // also contains variables from sublevels
418
typedef struct _global {
421
parsedclass_list_t*classes;
422
abc_script_t*classinit;
424
abc_script_t*init; //package-level code
427
dict_t*file2token2info;
430
static global_t*global = 0;
431
static state_t* state = 0;
435
/* protected handling here is a big hack: we just assume the protectedns
436
is package:class. the correct approach would be to add the proper
437
namespace to all protected members in the registry, even though that
438
would slow down searching */
439
#define MEMBER_MULTINAME(m,f,n) \
443
m##_ns.access = ((slotinfo_t*)(f))->access; \
444
if(m##_ns.access == ACCESS_NAMESPACE) \
445
m##_ns.name = ((slotinfo_t*)(f))->package; \
446
else if(m##_ns.access == ACCESS_PROTECTED && (f)->parent) \
447
m##_ns.name = concat3((f)->parent->package,":",(f)->parent->name); \
452
m.namespace_set = 0; \
453
m.name = ((slotinfo_t*)(f))->name; \
455
m.type = MULTINAME; \
457
m.namespace_set = &nopackage_namespace_set; \
461
/* warning: list length of namespace set is undefined */
462
#define MULTINAME_LATE(m, access, package) \
463
namespace_t m##_ns = {access, package}; \
464
namespace_set_t m##_nsset; \
465
namespace_list_t m##_l;m##_l.next = 0; \
466
m##_nsset.namespaces = &m##_l; \
467
m##_nsset = m##_nsset; \
468
m##_l.namespace = &m##_ns; \
469
multiname_t m = {MULTINAMEL, 0, &m##_nsset, 0};
471
static namespace_t ns1 = {ACCESS_PRIVATE, ""};
472
static namespace_t ns2 = {ACCESS_PROTECTED, ""};
473
static namespace_t ns3 = {ACCESS_PACKAGEINTERNAL, ""};
474
static namespace_t stdns = {ACCESS_PACKAGE, ""};
475
static namespace_list_t nl4 = {&stdns,0};
476
static namespace_list_t nl3 = {&ns3,&nl4};
477
static namespace_list_t nl2 = {&ns2,&nl3};
478
static namespace_list_t nl1 = {&ns1,&nl2};
479
static namespace_set_t nopackage_namespace_set = {&nl1};
481
static dict_t*definitions=0;
482
void as3_set_define(const char*c)
485
definitions = dict_new();
486
if(!dict_contains(definitions,c))
487
dict_put(definitions,c,0);
490
static void new_state()
493
state_t*oldstate = state;
495
memcpy(s, state, sizeof(state_t)); //shallow copy
497
s->imports = dict_new();
499
if(!s->import_toplevel_packages) {
500
s->import_toplevel_packages = dict_new();
504
state->has_own_imports = 0;
505
state->vars = dict_new();
506
state->old = oldstate;
509
trie_remember(active_namespaces);
512
state->active_namespace_urls = list_clone(oldstate->active_namespace_urls);
515
static void state_destroy(state_t*state)
517
if(state->has_own_imports) {
518
list_free(state->wildcard_imports);
519
dict_destroy(state->imports);state->imports=0;
521
if(state->imports && (!state->old || state->old->imports!=state->imports)) {
522
dict_destroy(state->imports);state->imports=0;
525
dict_destroy(state->vars);state->vars=0;
527
if(state->new_vars && state->allvars) {
528
parserassert(!state->old || state->old->allvars != state->allvars);
529
DICT_ITERATE_DATA(state->allvars, void*, data) {
532
dict_destroy(state->allvars);
535
list_free(state->active_namespace_urls)
536
state->active_namespace_urls = 0;
541
static void old_state()
543
trie_rollback(active_namespaces);
545
if(!state || !state->old)
546
syntaxerror("invalid nesting");
547
state_t*leaving = state;
551
if(as3_pass>1 && leaving->method && leaving->method != state->method && !leaving->method->inner) {
552
free(leaving->method);
555
if(as3_pass>1 && leaving->cls && leaving->cls != state->cls) {
560
state_destroy(leaving);
563
static code_t* method_header(methodstate_t*m);
564
static code_t* wrap_function(code_t*c,code_t*header, code_t*body);
565
static void function_initvars(methodstate_t*m, char has_params, params_t*params, int flags, char var0);
568
static char* internal_filename_package = 0;
569
void initialize_file(char*filename)
572
syntaxerror("invalid call to initialize_file during parsing of another file");
575
active_namespaces = trie_new();
578
state->package = internal_filename_package = strdup(filename);
579
state->allvars = dict_new();
581
global->token2info = dict_lookup(global->file2token2info,
582
current_filename // use long version
584
if(!global->token2info) {
585
global->token2info = dict_new2(&ptr_type);
586
dict_put(global->file2token2info, current_filename, global->token2info);
590
state->method = rfx_calloc(sizeof(methodstate_t));
591
dict_put(global->token2info, (void*)(ptroff_t)as3_tokencount, state->method);
592
state->method->late_binding = 1; // init scripts use getglobalscope, so we need a getlocal0/pushscope
594
state->method = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount);
595
state->method->variable_count = 0;
597
syntaxerror("internal error: skewed tokencount");
598
function_initvars(state->method, 0, 0, 0, 1);
605
if(!state || state->level!=1) {
606
syntaxerror("unexpected end of file in pass %d", as3_pass);
610
dict_del(global->file2token2info, current_filename);
611
code_t*header = method_header(state->method);
612
//if(global->init->method->body->code || global->init->traits) {
614
code_t*c = wrap_function(header, 0, global->init->method->body->code);
615
global->init->method->body->code = abc_returnvoid(c);
616
free(state->method);state->method=0;
620
//free(state->package);state->package=0; // used in registry
621
state_destroy(state);state=0;
624
void initialize_parser()
626
global = rfx_calloc(sizeof(global_t));
627
global->file = abc_file_new();
628
global->file->flags &= ~ABCFILE_LAZY;
629
global->file2token2info = dict_new();
630
global->token2info = 0;
631
global->classinit = abc_initscript(global->file);
634
void* finish_parser()
636
dict_free_all(global->file2token2info, 1, (void*)dict_destroy);
637
global->token2info=0;
639
initcode_add_classlist(global->classinit, global->classes);
644
typedef struct _variable {
650
methodstate_t*is_inner_method;
653
static variable_t* find_variable(state_t*s, char*name)
655
if(s->method->no_variable_scoping) {
656
return dict_lookup(s->allvars, name);
661
v = dict_lookup(s->vars, name);
663
if(s->new_vars) break;
669
static variable_t* find_slot(state_t*s, const char*name)
671
if(s->method && s->method->slots)
672
return dict_lookup(s->method->slots, name);
676
static variable_t* find_variable_safe(state_t*s, char*name)
678
variable_t* v = find_variable(s, name);
680
syntaxerror("undefined variable: %s", name);
684
static char variable_exists(char*name)
686
return dict_contains(state->vars, name);
689
static code_t*defaultvalue(code_t*c, classinfo_t*type)
691
if(TYPE_IS_INT(type)) {
692
c = abc_pushbyte(c, 0);
693
} else if(TYPE_IS_UINT(type)) {
694
c = abc_pushuint(c, 0);
695
} else if(TYPE_IS_FLOAT(type)) {
697
} else if(TYPE_IS_BOOLEAN(type)) {
698
c = abc_pushfalse(c);
699
} else if(TYPE_IS_STRING(type)) {
703
//c = abc_pushundefined(c);
704
syntaxerror("internal error: can't generate default value for * type");
708
c = abc_coerce2(c, &m);
713
static int alloc_local()
715
return state->method->variable_count++;
718
static variable_t* new_variable2(const char*name, classinfo_t*type, char init, char maybeslot)
721
variable_t*v = find_slot(state, name);
729
v->index = alloc_local();
731
v->init = v->kill = init;
734
if(!state->method->no_variable_scoping)
736
if(dict_contains(state->vars, name))
737
syntaxerror("variable %s already defined", name);
738
dict_put(state->vars, name, v);
740
if(state->method->no_variable_scoping &&
742
dict_contains(state->allvars, name))
744
variable_t*v = dict_lookup(state->allvars, name);
746
syntaxerror("variable %s already defined.", name);
749
dict_put(state->allvars, name, v);
754
static int new_variable(const char*name, classinfo_t*type, char init, char maybeslot)
756
return new_variable2(name, type, init, maybeslot)->index;
759
#define TEMPVARNAME "__as3_temp__"
762
variable_t*v = find_variable(state, TEMPVARNAME);
767
i = new_variable(TEMPVARNAME, 0, 0, 0);
772
static code_t* var_block(code_t*body, dict_t*vars)
777
DICT_ITERATE_DATA(vars, variable_t*, v) {
778
if(v->type && v->init) {
779
c = defaultvalue(c, v->type);
780
c = abc_setlocal(c, v->index);
782
if(v->type && v->kill) {
783
k = abc_kill(k, v->index);
790
if(x->opcode== OPCODE___BREAK__ ||
791
x->opcode== OPCODE___CONTINUE__) {
792
/* link kill code before break/continue */
793
code_t*e = code_dup(k);
794
code_t*s = code_start(e);
806
c = code_append(c, body);
807
c = code_append(c, k);
811
static void unknown_variable(char*name)
813
if(!state->method->unresolved_variables)
814
state->method->unresolved_variables = dict_new();
815
if(!dict_contains(state->method->unresolved_variables, name))
816
dict_put(state->method->unresolved_variables, name, 0);
819
static code_t* add_scope_code(code_t*c, methodstate_t*m, char init)
821
if(m->uses_slots || (m->late_binding && !m->inner)) { //???? especially inner functions need the pushscope
822
c = abc_getlocal_0(c);
823
c = abc_pushscope(c);
826
/* FIXME: this alloc_local() causes variable indexes to be
827
different in pass2 than in pass1 */
828
if(!m->activation_var) {
829
m->activation_var = alloc_local();
832
c = abc_newactivation(c);
834
c = abc_pushscope(c);
835
c = abc_setlocal(c, m->activation_var);
837
c = abc_getlocal(c, m->activation_var);
838
c = abc_pushscope(c);
844
static code_t* method_header(methodstate_t*m)
848
c = add_scope_code(c, m, 1);
850
methodstate_list_t*l = m->innerfunctions;
852
parserassert(l->methodstate->abc);
853
if(m->uses_slots && l->methodstate->is_a_slot) {
854
c = abc_getscopeobject(c, 1);
855
c = abc_newfunction(c, l->methodstate->abc);
857
c = abc_setlocal(c, l->methodstate->var_index);
858
c = abc_setslot(c, l->methodstate->slot_index);
860
c = abc_newfunction(c, l->methodstate->abc);
861
c = abc_setlocal(c, l->methodstate->var_index);
863
free(l->methodstate);l->methodstate=0;
867
c = code_append(c, m->header);
870
if(m->is_constructor && !m->has_super) {
871
// call default constructor
872
c = abc_getlocal_0(c);
873
c = abc_constructsuper(c, 0);
877
/* all parameters that are used by inner functions
878
need to be copied from local to slot */
879
parserassert(m->activation_var);
880
DICT_ITERATE_ITEMS(m->slots,char*,name,variable_t*,v) {
881
if(v->is_parameter) {
882
c = abc_getlocal(c, m->activation_var);
883
c = abc_getlocal(c, v->index);
884
c = abc_setslot(c, v->index);
888
list_free(m->innerfunctions);
889
m->innerfunctions = 0;
894
static code_t* wrap_function(code_t*c,code_t*header, code_t*body)
896
c = code_append(c, header);
897
c = code_append(c, var_block(body, state->method->no_variable_scoping?state->allvars:state->vars));
898
/* append return if necessary */
899
if(!c || (c->opcode != OPCODE_RETURNVOID &&
900
c->opcode != OPCODE_RETURNVALUE)) {
901
c = abc_returnvoid(c);
906
static void startpackage(char*name)
909
state->package = strdup(name);
911
static void endpackage()
913
//used e.g. in classinfo_register:
914
//free(state->package);state->package=0;
918
#define FLAG_PUBLIC 256
919
#define FLAG_PROTECTED 512
920
#define FLAG_PRIVATE 1024
921
#define FLAG_PACKAGEINTERNAL 2048
922
#define FLAG_NAMESPACE 4096
924
static namespace_t modifiers2access(modifiers_t*mod)
929
if(mod->flags&FLAG_NAMESPACE) {
930
if(mod->flags&(FLAG_PRIVATE|FLAG_PROTECTED|FLAG_PACKAGEINTERNAL))
931
syntaxerror("invalid combination of access levels and namespaces");
932
ns.access = ACCESS_NAMESPACE;
934
const char*url = (const char*)trie_lookup(active_namespaces, mod->ns);
936
/* shouldn't happen- the tokenizer only reports something as a namespace
937
if it was already registered */
938
trie_dump(active_namespaces);
939
syntaxerror("unknown namespace: %s", mod->ns);
942
} else if(mod->flags&FLAG_PUBLIC) {
943
if(mod->flags&(FLAG_PRIVATE|FLAG_PROTECTED|FLAG_PACKAGEINTERNAL))
944
syntaxerror("invalid combination of access levels");
945
ns.access = ACCESS_PACKAGE;
946
} else if(mod->flags&FLAG_PRIVATE) {
947
if(mod->flags&(FLAG_PUBLIC|FLAG_PROTECTED|FLAG_PACKAGEINTERNAL))
948
syntaxerror("invalid combination of access levels");
949
ns.access = ACCESS_PRIVATE;
950
} else if(mod->flags&FLAG_PROTECTED) {
951
if(mod->flags&(FLAG_PUBLIC|FLAG_PRIVATE|FLAG_PACKAGEINTERNAL))
952
syntaxerror("invalid combination of access levels");
953
ns.access = ACCESS_PROTECTED;
955
ns.access = ACCESS_PACKAGEINTERNAL;
959
static slotinfo_t* find_class(const char*name);
961
static memberinfo_t* findmember_nsset(classinfo_t*cls, const char*name, char recurse)
963
return registry_findmember_nsset(cls, state->active_namespace_urls, name, recurse);
966
static void innerfunctions2vars(methodstate_t*m)
968
methodstate_list_t*l = m->innerfunctions;
970
methodstate_t*m = l->methodstate;
972
variable_t* v = new_variable2(m->info->name, TYPE_FUNCTION(m->info), 0, 0);
973
m->var_index = v->index;
975
m->slot_index = m->is_a_slot;
976
v->is_inner_method = m;
981
static void function_initvars(methodstate_t*m, char has_params, params_t*params, int flags, char var0)
986
index = new_variable("this", 0, 0, 0);
987
else if(!m->is_global)
988
index = new_variable((flags&FLAG_STATIC)?"class":"this", state->cls?state->cls->info:0, 0, 0);
990
index = new_variable("globalscope", 0, 0, 0);
991
parserassert(!index);
996
for(p=params->list;p;p=p->next) {
997
variable_t*v = new_variable2(p->param->name, p->param->type, 0, 1);
1000
if(as3_pass==2 && m->need_arguments) {
1001
/* arguments can never be used by an innerfunction (the inner functions
1002
have their own arguments var), so it's ok to not initialize this until
1003
pass 2. (We don't know whether we need it before, anyway) */
1004
variable_t*v = new_variable2("arguments", TYPE_ARRAY, 0, 0);
1005
m->need_arguments = v->index;
1009
innerfunctions2vars(m);
1012
m->scope_code = add_scope_code(m->scope_code, m, 0);
1014
/* exchange unresolved identifiers with the actual objects */
1015
DICT_ITERATE_ITEMS(m->slots, char*, name, variable_t*, v) {
1016
if(v->type && v->type->kind == INFOTYPE_UNRESOLVED) {
1017
classinfo_t*type = (classinfo_t*)registry_resolve((slotinfo_t*)v->type);
1018
if(!type || type->kind != INFOTYPE_CLASS) {
1019
syntaxerror("Couldn't find class %s::%s (%s)", v->type->package, v->type->name, name);
1029
char*as3_globalclass=0;
1030
static void startclass(modifiers_t* mod, char*classname, classinfo_t*extends, classinfo_list_t*implements)
1033
syntaxerror("inner classes now allowed");
1038
classinfo_list_t*mlist=0;
1040
if(mod->flags&~(FLAG_PACKAGEINTERNAL|FLAG_PUBLIC|FLAG_FINAL|FLAG_DYNAMIC|FLAG_INTERFACE))
1041
syntaxerror("invalid modifier(s)");
1043
if((mod->flags&(FLAG_PUBLIC|FLAG_PACKAGEINTERNAL)) == (FLAG_PUBLIC|FLAG_PACKAGEINTERNAL))
1044
syntaxerror("public and internal not supported at the same time.");
1046
if((mod->flags&(FLAG_PROTECTED|FLAG_STATIC)) == (FLAG_PROTECTED|FLAG_STATIC))
1047
syntaxerror("protected and static not supported at the same time.");
1049
//if(!(mod->flags&FLAG_INTERFACE) && !extends) {
1050
if(!(mod->flags&FLAG_INTERFACE) && !extends) {
1051
// all classes extend object
1052
extends = registry_getobjectclass();
1055
/* create the class name, together with the proper attributes */
1059
if(!(mod->flags&FLAG_PUBLIC) && state->package==internal_filename_package) {
1060
access = ACCESS_PRIVATE; package = internal_filename_package;
1061
} else if(!(mod->flags&FLAG_PUBLIC) && state->package!=internal_filename_package) {
1062
access = ACCESS_PACKAGEINTERNAL; package = state->package;
1063
} else if(state->package!=internal_filename_package) {
1064
access = ACCESS_PACKAGE; package = state->package;
1066
syntaxerror("public classes only allowed inside a package");
1070
state->cls = rfx_calloc(sizeof(classstate_t));
1071
state->cls->init = rfx_calloc(sizeof(methodstate_t));
1072
state->cls->static_init = rfx_calloc(sizeof(methodstate_t));
1073
state->cls->static_init->is_static=FLAG_STATIC;
1074
state->cls->static_init->variable_count=1;
1075
/* notice: we make no effort to initialize the top variable (local0) here,
1076
even though it has special meaning. We just rely on the fact
1077
that pass 1 won't do anything with variables */
1079
dict_put(global->token2info, (void*)(ptroff_t)as3_tokencount, state->cls);
1081
/* set current method to constructor- all code within the class-level (except
1082
static variable initializations) will be executed during construction time */
1083
state->method = state->cls->init;
1085
if(registry_find(package, classname)) {
1086
syntaxerror("Package \"%s\" already contains a class called \"%s\"", package, classname);
1088
/* build info struct */
1089
int num_interfaces = (list_length(implements));
1090
state->cls->info = classinfo_register(access, package, classname, num_interfaces);
1091
state->cls->info->flags |= mod->flags & (FLAG_DYNAMIC|FLAG_INTERFACE|FLAG_FINAL);
1092
state->cls->info->superclass = extends;
1095
classinfo_list_t*l = implements;
1096
for(l=implements;l;l=l->next) {
1097
state->cls->info->interfaces[pos++] = l->classinfo;
1102
state->cls = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount);
1104
state->method = state->cls->init;
1105
parserassert(state->cls && state->cls->info);
1107
function_initvars(state->cls->init, 0, 0, 0, 1);
1108
function_initvars(state->cls->static_init, 0, 0, 0, 0);
1110
if(extends && (extends->flags & FLAG_FINAL))
1111
syntaxerror("Can't extend final class '%s'", extends->name);
1114
while(state->cls->info->interfaces[pos]) {
1115
if(!(state->cls->info->interfaces[pos]->flags & FLAG_INTERFACE))
1116
syntaxerror("'%s' is not an interface",
1117
state->cls->info->interfaces[pos]->name);
1121
/* generate the abc code for this class */
1122
MULTINAME(classname2,state->cls->info);
1123
multiname_t*extends2 = sig2mname(extends);
1125
/* don't add the class to the class index just yet- that will be done later
1127
state->cls->abc = abc_class_new(0, &classname2, extends2);
1128
state->cls->abc->file = global->file;
1130
multiname_destroy(extends2);
1131
if(state->cls->info->flags&FLAG_FINAL) abc_class_final(state->cls->abc);
1132
if(!(state->cls->info->flags&FLAG_DYNAMIC)) abc_class_sealed(state->cls->abc);
1133
if(state->cls->info->flags&FLAG_INTERFACE) {
1134
abc_class_interface(state->cls->abc);
1137
for(mlist=implements;mlist;mlist=mlist->next) {
1138
MULTINAME(m, mlist->classinfo);
1139
abc_class_add_interface(state->cls->abc, &m);
1142
state->cls->dependencies = parsedclass_new(state->cls->info, state->cls->abc);
1143
list_append(global->classes, state->cls->dependencies);
1145
/* flash.display.MovieClip handling */
1146
if(!as3_globalclass && (mod->flags&FLAG_PUBLIC) && slotinfo_equals((slotinfo_t*)registry_getMovieClip(),(slotinfo_t*)extends)) {
1147
if(state->package && state->package[0]) {
1148
as3_globalclass = concat3(state->package, ".", classname);
1150
as3_globalclass = strdup(classname);
1156
static void endclass()
1159
if(!state->cls->has_constructor && !(state->cls->info->flags&FLAG_INTERFACE)) {
1161
c = abc_getlocal_0(c);
1162
c = abc_constructsuper(c, 0);
1163
state->cls->init->header = code_append(state->cls->init->header, c);
1164
state->cls->has_constructor=1;
1166
if(state->cls->init) {
1167
if(state->cls->info->flags&FLAG_INTERFACE) {
1168
if(state->cls->init->header)
1169
syntaxerror("interface can not have class-level code");
1171
abc_method_t*m = abc_class_getconstructor(state->cls->abc, 0);
1172
code_t*c = method_header(state->cls->init);
1173
m->body->code = wrap_function(c, 0, m->body->code);
1176
if(state->cls->static_init) {
1177
abc_method_t*m = abc_class_getstaticconstructor(state->cls->abc, 0);
1178
code_t*c = method_header(state->cls->static_init);
1179
m->body->code = wrap_function(c, 0, m->body->code);
1182
trait_list_t*trait = state->cls->abc->traits;
1183
/* switch all protected members to the protected ns of this class */
1185
trait_t*t = trait->trait;
1186
if(t->name->ns->access == ACCESS_PROTECTED) {
1187
if(!state->cls->abc->protectedNS) {
1188
char*n = concat3(state->cls->info->package, ":", state->cls->info->name);
1189
state->cls->abc->protectedNS = namespace_new_protected(n);
1190
state->cls->abc->flags |= CLASS_PROTECTED_NS;
1192
t->name->ns->name = strdup(state->cls->abc->protectedNS->name);
1194
trait = trait->next;
1201
void check_code_for_break(code_t*c)
1204
if(c->opcode == OPCODE___BREAK__) {
1205
char*name = string_cstr(c->data[0]);
1206
syntaxerror("Unresolved \"break %s\"", name);
1208
if(c->opcode == OPCODE___CONTINUE__) {
1209
char*name = string_cstr(c->data[0]);
1210
syntaxerror("Unresolved \"continue %s\"", name);
1212
if(c->opcode == OPCODE___RETHROW__) {
1213
syntaxerror("Unresolved \"rethrow\"");
1215
if(c->opcode == OPCODE___FALLTHROUGH__) {
1216
syntaxerror("Unresolved \"fallthrough\"");
1218
if(c->opcode == OPCODE___PUSHPACKAGE__) {
1219
char*name = string_cstr(c->data[0]);
1220
syntaxerror("Can't reference a package (%s) as such", name);
1226
static void check_constant_against_type(classinfo_t*t, constant_t*c)
1228
#define xassert(b) if(!(b)) syntaxerror("Invalid default value %s for type '%s'", constant_tostring(c), t->name)
1229
if(TYPE_IS_NUMBER(t)) {
1230
xassert(c->type == CONSTANT_FLOAT
1231
|| c->type == CONSTANT_INT
1232
|| c->type == CONSTANT_UINT);
1233
} else if(TYPE_IS_UINT(t)) {
1234
xassert(c->type == CONSTANT_UINT ||
1235
(c->type == CONSTANT_INT && c->i>=0));
1236
} else if(TYPE_IS_INT(t)) {
1237
xassert(c->type == CONSTANT_INT);
1238
} else if(TYPE_IS_BOOLEAN(t)) {
1239
xassert(c->type == CONSTANT_TRUE
1240
|| c->type == CONSTANT_FALSE);
1244
static void check_override(memberinfo_t*m, int flags)
1248
if(m->parent == state->cls->info)
1249
syntaxerror("class '%s' already contains a method/slot '%s'", m->parent->name, m->name);
1251
syntaxerror("internal error: overriding method %s, which doesn't have parent", m->name);
1252
if(m->access==ACCESS_PRIVATE)
1254
if(m->flags & FLAG_FINAL)
1255
syntaxerror("can't override final member %s", m->name);
1257
/* allow this. it's no issue.
1258
if((m->flags & FLAG_STATIC) && !(flags&FLAG_STATIC))
1259
syntaxerror("can't override static member %s", m->name);*/
1261
if(!(m->flags & FLAG_STATIC) && (flags&FLAG_STATIC))
1262
syntaxerror("can't override non-static member %s with static declaration", m->name);
1264
if(!(flags&FLAG_OVERRIDE) && !(flags&FLAG_STATIC) && !(m->flags&FLAG_STATIC)) {
1265
if(m->parent && !(m->parent->flags&FLAG_INTERFACE)) {
1266
if(m->kind == INFOTYPE_METHOD)
1267
syntaxerror("can't override without explicit 'override' declaration");
1269
syntaxerror("can't override '%s'", m->name);
1274
static methodinfo_t*registerfunction(enum yytokentype getset, modifiers_t*mod, char*name, params_t*params, classinfo_t*return_type, int slot)
1276
methodinfo_t*minfo = 0;
1277
namespace_t ns = modifiers2access(mod);
1280
minfo = methodinfo_register_global(ns.access, state->package, name);
1281
minfo->return_type = return_type;
1282
} else if(getset != KW_GET && getset != KW_SET) {
1284
memberinfo_t* m = registry_findmember(state->cls->info, ns.name, name, 0);
1286
syntaxerror("class already contains a %s '%s'", infotypename((slotinfo_t*)m), m->name);
1288
minfo = methodinfo_register_onclass(state->cls->info, ns.access, ns.name, name);
1289
minfo->return_type = return_type;
1290
// getslot on a member slot only returns "undefined", so no need
1291
// to actually store these
1292
//state->minfo->slot = state->method->abc->method->trait->slot_id;
1294
//class getter/setter
1295
int gs = getset==KW_GET?SUBTYPE_GET:SUBTYPE_SET;
1297
if(getset == KW_GET) {
1299
} else if(params->list && params->list->param && !params->list->next) {
1300
type = params->list->param->type;
1302
syntaxerror("setter function needs to take exactly one argument");
1303
// not sure wether to look into superclasses here, too
1304
minfo = (methodinfo_t*)registry_findmember(state->cls->info, ns.name, name, 1);
1306
if(minfo->kind!=INFOTYPE_VAR)
1307
syntaxerror("class already contains a method called '%s'", name);
1308
if(!(minfo->subtype & (SUBTYPE_GETSET)))
1309
syntaxerror("class already contains a field called '%s'", name);
1310
if(minfo->subtype & gs)
1311
syntaxerror("getter/setter for '%s' already defined", name);
1312
/* make a setter or getter into a getset */
1313
minfo->subtype |= gs;
1316
FIXME: this check needs to be done in pass 2
1318
if((!minfo->return_type != !type) ||
1319
(minfo->return_type && type &&
1320
!strcmp(minfo->return_type->name, type->name))) {
1321
syntaxerror("different type in getter and setter: %s and %s",
1322
minfo->return_type?minfo->return_type->name:"*",
1323
type?type->name:"*");
1326
minfo = methodinfo_register_onclass(state->cls->info, ns.access, ns.name, name);
1327
minfo->kind = INFOTYPE_VAR; //hack
1328
minfo->subtype = gs;
1329
minfo->return_type = type;
1332
/* can't assign a slot as getter and setter might have different slots */
1333
//minfo->slot = slot;
1335
if(mod->flags&FLAG_FINAL) minfo->flags |= FLAG_FINAL;
1336
if(mod->flags&FLAG_STATIC) minfo->flags |= FLAG_STATIC;
1337
if(mod->flags&FLAG_OVERRIDE) minfo->flags |= FLAG_OVERRIDE;
1342
static void innerfunction(char*name, params_t*params, classinfo_t*return_type)
1344
//parserassert(state->method && state->method->info);
1346
methodstate_t*parent_method = state->method;
1349
return_type = 0; // not valid in pass 1
1353
state->new_vars = 1;
1354
state->allvars = dict_new();
1357
state->method = rfx_calloc(sizeof(methodstate_t));
1358
state->method->inner = 1;
1359
state->method->is_static = parent_method->is_static;
1360
state->method->variable_count = 0;
1361
state->method->abc = rfx_calloc(sizeof(abc_method_t));
1363
NEW(methodinfo_t,minfo);
1364
minfo->kind = INFOTYPE_METHOD;
1365
minfo->access = ACCESS_PACKAGEINTERNAL;
1367
state->method->info = minfo;
1370
list_append(parent_method->innerfunctions, state->method);
1372
dict_put(global->token2info, (void*)(ptroff_t)as3_tokencount, state->method);
1374
function_initvars(state->method, 1, params, 0, 1);
1378
state->method = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount);
1379
state->method->variable_count = 0;
1380
parserassert(state->method);
1382
state->method->info->return_type = return_type;
1383
function_initvars(state->method, 1, params, 0, 1);
1387
static void startfunction(modifiers_t*mod, enum yytokentype getset, char*name,
1388
params_t*params, classinfo_t*return_type)
1390
if(state->method && state->method->info) {
1391
syntaxerror("not able to start another method scope");
1394
state->new_vars = 1;
1395
state->allvars = dict_new();
1398
state->method = rfx_calloc(sizeof(methodstate_t));
1399
state->method->has_super = 0;
1400
state->method->is_static = mod->flags&FLAG_STATIC;
1403
state->method->is_constructor = !strcmp(state->cls->info->name,name);
1405
state->method->is_global = 1;
1406
state->method->late_binding = 1; // for global methods, always push local_0 on the scope stack
1408
if(state->method->is_constructor)
1409
name = "__as3_constructor__";
1411
state->method->info = registerfunction(getset, mod, name, params, return_type, 0);
1413
function_initvars(state->method, 1, params, mod->flags, 1);
1415
dict_put(global->token2info, (void*)(ptroff_t)as3_tokencount, state->method);
1419
state->method = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount);
1420
state->method->variable_count = 0;
1421
parserassert(state->method);
1424
memberinfo_t*m = registry_findmember(state->cls->info, mod->ns, name, 2);
1425
check_override(m, mod->flags);
1429
state->cls->has_constructor |= state->method->is_constructor;
1432
function_initvars(state->method, 1, params, mod->flags, 1);
1436
static abc_method_t* endfunction(modifiers_t*mod, enum yytokentype getset, char*name,
1437
params_t*params, classinfo_t*return_type, code_t*body)
1440
innerfunctions2vars(state->method);
1442
methodstate_list_t*ml = state->method->innerfunctions;
1444
dict_t*xvars = dict_new();
1446
if(state->method->unresolved_variables) {
1447
DICT_ITERATE_KEY(state->method->unresolved_variables, char*, vname) {
1448
if(dict_contains(state->allvars, vname)) {
1449
state->method->no_variable_scoping = 1;
1450
as3_warning("function %s uses forward or outer block variable references (%s): switching into compatiblity mode", name, vname);
1457
methodstate_t*m = ml->methodstate;
1458
parserassert(m->inner);
1459
if(m->unresolved_variables) {
1460
dict_t*d = m->unresolved_variables;
1462
DICT_ITERATE_KEY(d, char*, id) {
1463
/* check parent method's variables */
1465
if((v=find_variable(state, id))) {
1466
m->uses_parent_function = 1;
1467
state->method->uses_slots = 1;
1468
dict_put(xvars, id, 0);
1471
dict_destroy(m->unresolved_variables);
1472
m->unresolved_variables = 0;
1477
if(state->method->uses_slots) {
1478
state->method->slots = dict_new();
1480
DICT_ITERATE_ITEMS(state->vars, char*, name, variable_t*, v) {
1481
if(!name) syntaxerror("internal error");
1482
if(v->index && dict_contains(xvars, name)) {
1483
v->init = v->kill = 0;
1485
if(v->is_inner_method) {
1486
v->is_inner_method->is_a_slot = i;
1489
dict_put(state->method->slots, name, v);
1492
state->method->uses_slots = i;
1493
dict_destroy(state->vars);state->vars = 0;
1494
parserassert(state->new_vars);
1495
dict_destroy(state->allvars);state->allvars = 0;
1502
/*if(state->method->uses_parent_function){
1503
syntaxerror("accessing variables of parent function from inner functions not supported yet");
1508
multiname_t*type2 = sig2mname(return_type);
1510
if(state->method->inner) {
1511
f = state->method->abc;
1512
abc_method_init(f, global->file, type2, 1);
1513
} else if(state->method->is_constructor) {
1514
f = abc_class_getconstructor(state->cls->abc, type2);
1515
} else if(!state->method->is_global) {
1516
namespace_t ns = modifiers2access(mod);
1517
multiname_t mname = {QNAME, &ns, 0, name};
1518
if(mod->flags&FLAG_STATIC)
1519
f = abc_class_staticmethod(state->cls->abc, type2, &mname);
1521
f = abc_class_method(state->cls->abc, type2, &mname);
1522
slot = f->trait->slot_id;
1524
namespace_t mname_ns = {state->method->info->access, state->package};
1525
multiname_t mname = {QNAME, &mname_ns, 0, name};
1527
f = abc_method_new(global->file, type2, 1);
1528
if(!global->init) global->init = abc_initscript(global->file);
1529
trait_t*t = trait_new_method(&global->init->traits, multiname_clone(&mname), f);
1530
//abc_code_t*c = global->init->method->body->code;
1532
//flash doesn't seem to allow us to access function slots
1533
//state->method->info->slot = slot;
1535
if(mod && mod->flags&FLAG_OVERRIDE) f->trait->attributes |= TRAIT_ATTR_OVERRIDE;
1536
if(getset == KW_GET) f->trait->kind = TRAIT_GETTER;
1537
if(getset == KW_SET) f->trait->kind = TRAIT_SETTER;
1538
if(params->varargs) f->flags |= METHOD_NEED_REST;
1539
if(state->method->need_arguments) f->flags |= METHOD_NEED_ARGUMENTS;
1543
for(p=params->list;p;p=p->next) {
1544
if(params->varargs && !p->next) {
1545
break; //varargs: omit last parameter in function signature
1547
multiname_t*m = sig2mname(p->param->type);
1548
list_append(f->parameters, m);
1549
if(p->param->value) {
1550
check_constant_against_type(p->param->type, p->param->value);
1551
opt=1;list_append(f->optional_parameters, p->param->value);
1553
syntaxerror("function %s: non-optional parameter not allowed after optional parameters", name);
1556
if(state->method->slots) {
1557
DICT_ITERATE_ITEMS(state->method->slots, char*, name, variable_t*, v) {
1559
multiname_t*mname = multiname_new(namespace_new(ACCESS_PACKAGE, ""), name);
1560
multiname_t*type = sig2mname(v->type);
1561
trait_t*t = trait_new_member(&f->body->traits, type, mname, 0);
1562
t->slot_id = v->index;
1567
check_code_for_break(body);
1569
/* Seems this works now.
1570
if(state->method->exceptions && state->method->uses_slots) {
1571
as3_warning("try/catch and activation not supported yet within the same method");
1575
f->body->code = body;
1576
f->body->exceptions = state->method->exceptions;
1577
} else { //interface
1579
syntaxerror("interface methods can't have a method body");
1589
void breakjumpsto(code_t*c, char*name, code_t*jump)
1592
if(c->opcode == OPCODE___BREAK__) {
1593
string_t*name2 = c->data[0];
1594
if(!name2->len || !strncmp(name2->str, name, name2->len)) {
1595
c->opcode = OPCODE_JUMP;
1602
void continuejumpsto(code_t*c, char*name, code_t*jump)
1605
if(c->opcode == OPCODE___CONTINUE__) {
1606
string_t*name2 = c->data[0];
1607
if(!name2->len || !strncmp(name2->str, name, name2->len)) {
1608
c->opcode = OPCODE_JUMP;
1616
code_t*converttype(code_t*c, classinfo_t*from, classinfo_t*to)
1621
return abc_coerce_a(c);
1625
// cast an "any" type to a specific type. subject to
1626
// runtime exceptions
1627
return abc_coerce2(c, &m);
1630
if((TYPE_IS_NUMBER(from) || TYPE_IS_UINT(from) || TYPE_IS_INT(from)) &&
1631
(TYPE_IS_NUMBER(to) || TYPE_IS_UINT(to) || TYPE_IS_INT(to))) {
1632
// allow conversion between number types
1633
if(TYPE_IS_UINT(to))
1634
return abc_convert_u(c);
1635
else if(TYPE_IS_INT(to))
1636
return abc_convert_i(c);
1637
else if(TYPE_IS_NUMBER(to))
1638
return abc_convert_d(c);
1639
return abc_coerce2(c, &m);
1642
if(TYPE_IS_XMLLIST(to) && TYPE_IS_XML(from))
1645
if(TYPE_IS_BOOLEAN(to))
1646
return abc_convert_b(c);
1647
if(TYPE_IS_STRING(to))
1648
return abc_convert_s(c);
1649
if(TYPE_IS_OBJECT(to))
1650
return abc_coerce2(c, &m);
1651
if(TYPE_IS_OBJECT(from) && TYPE_IS_XMLLIST(to))
1652
return abc_coerce2(c, &m);
1653
if(TYPE_IS_OBJECT(from) && TYPE_IS_ARRAY(to))
1654
return abc_coerce2(c, &m);
1656
classinfo_t*supertype = from;
1658
if(supertype == to) {
1659
/* target type is one of from's superclasses.
1660
(not sure we need this coerce - as far as the verifier
1661
is concerned, object==object (i think) */
1662
return abc_coerce2(c, &m);
1665
while(supertype->interfaces[t]) {
1666
if(supertype->interfaces[t]==to) {
1667
// target type is one of from's interfaces
1668
return abc_coerce2(c, &m);
1672
supertype = supertype->superclass;
1674
if(TYPE_IS_FUNCTION(from) && TYPE_IS_FUNCTION(to))
1676
if(TYPE_IS_CLASS(from) && TYPE_IS_CLASS(to))
1678
if(TYPE_IS_NULL(from) && !IS_NUMBER_OR_INT(to))
1681
as3_error("can't convert type %s%s%s to %s%s%s",
1682
from->package, from->package[0]?".":"", from->name,
1683
to->package, to->package[0]?".":"", to->name);
1687
code_t* coerce_to_type(code_t*c, classinfo_t*t)
1690
return abc_coerce_a(c);
1691
} else if(TYPE_IS_STRING(t)) {
1692
return abc_coerce_s(c);
1695
return abc_coerce2(c, &m);
1699
char is_pushundefined(code_t*c)
1701
return (c && !c->prev && !c->next && c->opcode == OPCODE_PUSHUNDEFINED);
1704
static const char* get_package_from_name(const char*name)
1706
/* try explicit imports */
1707
dictentry_t* e = dict_get_slot(state->imports, name);
1709
if(!strcmp(e->key, name)) {
1710
slotinfo_t*c = (slotinfo_t*)e->data;
1711
if(c) return c->package;
1717
static namespace_list_t*get_current_imports()
1719
namespace_list_t*searchlist = 0;
1721
list_append(searchlist, namespace_new_package(state->package));
1723
import_list_t*l = state->wildcard_imports;
1725
namespace_t*ns = namespace_new_package(l->import->package);
1726
list_append(searchlist, ns);
1729
list_append(searchlist, namespace_new_package(""));
1730
list_append(searchlist, namespace_new_package(internal_filename_package));
1734
static slotinfo_t* find_class(const char*name)
1738
c = registry_find(state->package, name);
1741
/* try explicit imports */
1742
dictentry_t* e = dict_get_slot(state->imports, name);
1745
if(!strcmp(e->key, name)) {
1746
c = (slotinfo_t*)e->data;
1752
/* try package.* imports */
1753
import_list_t*l = state->wildcard_imports;
1755
//printf("does package %s contain a class %s?\n", l->import->package, name);
1756
c = registry_find(l->import->package, name);
1761
/* try global package */
1762
c = registry_find("", name);
1765
/* try local "filename" package */
1766
c = registry_find(internal_filename_package, name);
1771
typedcode_t push_class(slotinfo_t*a)
1776
if(a->access == ACCESS_PACKAGEINTERNAL &&
1777
strcmp(a->package, state->package) &&
1778
strcmp(a->package, internal_filename_package)
1780
syntaxerror("Can't access internal %s %s in package '%s' from package '%s'",
1781
infotypename(a), a->name, a->package, state->package);
1785
if(a->kind != INFOTYPE_CLASS) {
1787
x.c = abc_findpropstrict2(x.c, &m);
1788
x.c = abc_getproperty2(x.c, &m);
1789
if(a->kind == INFOTYPE_METHOD) {
1790
methodinfo_t*f = (methodinfo_t*)a;
1791
x.t = TYPE_FUNCTION(f);
1793
varinfo_t*v = (varinfo_t*)a;
1798
if(state->cls && state->method == state->cls->static_init) {
1799
/* we're in the static initializer.
1800
record the fact that we're using this class here */
1801
parsedclass_add_dependency(state->cls->dependencies, (classinfo_t*)a);
1803
classinfo_t*c = (classinfo_t*)a;
1805
if(0) { //Error #1026: Slot 1 exceeds slotCount=0 of global
1806
x.c = abc_getglobalscope(x.c);
1807
x.c = abc_getslot(x.c, c->slot);
1810
x.c = abc_getlex2(x.c, &m);
1812
x.t = TYPE_CLASS(c);
1818
char is_break_or_jump(code_t*c)
1822
if(c->opcode == OPCODE_JUMP ||
1823
c->opcode == OPCODE___BREAK__ ||
1824
c->opcode == OPCODE___CONTINUE__ ||
1825
c->opcode == OPCODE_THROW ||
1826
c->opcode == OPCODE_RETURNVOID ||
1827
c->opcode == OPCODE_RETURNVALUE) {
1833
#define IS_FINALLY_TARGET(op) \
1834
((op) == OPCODE___CONTINUE__ || \
1835
(op) == OPCODE___BREAK__ || \
1836
(op) == OPCODE_RETURNVOID || \
1837
(op) == OPCODE_RETURNVALUE || \
1838
(op) == OPCODE___RETHROW__)
1840
static code_t* insert_finally_lookup(code_t*c, code_t*finally, int tempvar)
1842
#define NEED_EXTRA_STACK_ARG
1843
code_t*finally_label = abc_nop(0);
1844
NEW(lookupswitch_t, l);
1850
code_t*prev = i->prev;
1851
if(IS_FINALLY_TARGET(i->opcode)) {
1854
if(i->opcode == OPCODE___RETHROW__ ||
1855
i->opcode == OPCODE_RETURNVALUE) {
1856
if(i->opcode == OPCODE___RETHROW__)
1857
i->opcode = OPCODE_THROW;
1859
p = abc_coerce_a(p);
1860
p = abc_setlocal(p, tempvar);
1862
p = abc_pushbyte(p, count++);
1863
p = abc_jump(p, finally_label);
1864
code_t*target = p = abc_label(p);
1865
#ifdef NEED_EXTRA_STACK_ARG
1869
p = abc_getlocal(p, tempvar);
1872
p->next = i;i->prev = p;
1873
list_append(l->targets, target);
1879
c = abc_pushbyte(c, -1);
1880
c = code_append(c, finally_label);
1881
c = code_append(c, finally);
1883
#ifdef NEED_EXTRA_STACK_ARG
1886
c = abc_lookupswitch(c, l);
1887
c = l->def = abc_label(c);
1888
#ifdef NEED_EXTRA_STACK_ARG
1895
static code_t* insert_finally_simple(code_t*c, code_t*finally, int tempvar)
1899
code_t*prev = i->prev;
1900
if(IS_FINALLY_TARGET(i->opcode)) {
1901
if(i->opcode == OPCODE___RETHROW__)
1902
i->opcode = OPCODE_THROW;
1903
code_t*end = code_dup(finally);
1904
code_t*start = code_start(end);
1905
if(prev) prev->next = start;
1912
return code_append(c, finally);
1915
code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
1921
int num_insertion_points=0;
1923
if(IS_FINALLY_TARGET(i->opcode))
1924
num_insertion_points++;
1931
if(i->branch || i->opcode == OPCODE_LOOKUPSWITCH) {
1936
int simple_version_cost = (1+num_insertion_points)*code_size;
1937
int lookup_version_cost = 4*num_insertion_points + 5;
1939
if(cantdup || simple_version_cost > lookup_version_cost) {
1940
//printf("(use lookup) simple=%d > lookup=%d\n", simple_version_cost, lookup_version_cost);
1941
return insert_finally_lookup(c, finally, tempvar);
1943
//printf("(use simple) simple=%d < lookup=%d\n", simple_version_cost, lookup_version_cost);
1944
return insert_finally_simple(c, finally, tempvar);
1948
#define PASS1 }} if(as3_pass == 1) {{
1949
#define PASS1END }} if(as3_pass == 2) {{
1950
#define PASS2 }} if(as3_pass == 2) {{
1951
#define PASS12 }} if(as3_pass == 1 || as3_pass == 2) {{
1952
#define PASS12END }} if(as3_pass == 2) {{
1953
#define PASS_ALWAYS }} {{
1957
/* Line 273 of skeleton.m4 */
1958
#line 1959 "parser.tab.c"
1959
/* Unqualified %code blocks. */
1961
/* Line 274 of skeleton.m4 */
1962
#line 2050 "parser.y"
1964
char is_subtype_of(classinfo_t*type, classinfo_t*supertype)
1968
char do_init_variable(char*name)
1970
if(!state->method->no_variable_scoping)
1972
if(!state->new_vars)
1978
/* Line 274 of skeleton.m4 */
1979
#line 2500 "parser.y"
1981
static void state_has_imports()
1983
state->wildcard_imports = list_clone(state->wildcard_imports);
1984
state->imports = dict_clone(state->imports);
1985
state->has_own_imports = 1;
1987
static void import_toplevel(const char*package)
1989
char* s = strdup(package);
1991
dict_put(state->import_toplevel_packages, s, 0);
1992
char*x = strrchr(s, '.');
2001
/* Line 274 of skeleton.m4 */
2002
#line 2639 "parser.y"
2004
static int slotstate_varconst = 0;
2005
static modifiers_t*slotstate_flags = 0;
2006
static void setslotstate(modifiers_t* flags, int varconst)
2008
slotstate_varconst = varconst;
2009
slotstate_flags = flags;
2012
if(flags->flags&FLAG_STATIC) {
2013
state->method = state->cls->static_init;
2015
state->method = state->cls->init;
2018
// reset to "default" state (all in class code is static by default) */
2019
state->method = state->cls->static_init;
2022
parserassert(state->method);
2025
static trait_t* add_abc_slot(modifiers_t* modifiers, const char*name, multiname_t*m, code_t***c)
2027
int flags = modifiers->flags;
2028
namespace_t ns = modifiers2access(modifiers);
2031
multiname_t mname = {QNAME, &ns, 0, name};
2033
trait_list_t**traits;
2037
if(!global->init) global->init = abc_initscript(global->file);
2038
ns.name = state->package;
2039
traits = &global->init->traits;
2040
code = &global->init->method->body->code;
2041
} else if(flags&FLAG_STATIC) {
2043
traits = &state->cls->abc->static_traits;
2044
code = &state->cls->static_init->header;
2046
// instance variable
2047
traits = &state->cls->abc->traits;
2048
code = &state->cls->init->header;
2050
if(ns.access == ACCESS_PROTECTED) {
2051
ns.name = concat3(state->cls->info->package,":",state->cls->info->name);
2057
*m = *multiname_clone(&mname);
2059
return trait_new_member(traits, 0, multiname_clone(&mname), 0);
2063
/* Line 274 of skeleton.m4 */
2064
#line 2819 "parser.y"
2066
static int xml_level = 0;
2069
/* Line 274 of skeleton.m4 */
2070
#line 3624 "parser.y"
2072
node_t* resolve_identifier(char*name)
2082
/* look at variables */
2083
if((v = find_variable(state, name))) {
2084
// name is a local variable
2085
o.c = abc_getlocal(o.c, v->index);
2087
return mkcodenode(o);
2089
if((v = find_slot(state, name))) {
2090
o.c = abc_getscopeobject(o.c, 1);
2091
o.c = abc_getslot(o.c, v->index);
2093
return mkcodenode(o);
2096
int i_am_static = state->method->is_static;
2098
/* look at current class' members */
2099
if(!state->method->inner &&
2100
!state->xmlfilter &&
2102
(f = findmember_nsset(state->cls->info, name, 1)))
2104
// name is a member or attribute in this class
2105
int var_is_static = (f->flags&FLAG_STATIC);
2107
if(f->kind == INFOTYPE_VAR && (f->flags&FLAG_CONST)) {
2108
/* if the variable is a constant (and we know what is evaluates to), we
2109
can just use the value itself */
2110
varinfo_t*v = (varinfo_t*)f;
2112
return mkconstnode(v->value);
2116
if(var_is_static >= i_am_static) {
2117
if(f->kind == INFOTYPE_METHOD) {
2118
o.t = TYPE_FUNCTION(f);
2123
if(var_is_static && !i_am_static) {
2124
/* access to a static member from a non-static location.
2125
do this via findpropstrict:
2126
there doesn't seem to be any non-lookup way to access
2127
static properties of a class */
2128
state->method->late_binding = 1;
2130
namespace_t ns = {f->access, f->package};
2131
multiname_t m = {QNAME, &ns, 0, name};
2132
o.c = abc_findpropstrict2(o.c, &m);
2133
o.c = abc_getproperty2(o.c, &m);
2134
return mkcodenode(o);
2135
} else if(f->slot>0) {
2136
o.c = abc_getlocal_0(o.c);
2137
o.c = abc_getslot(o.c, f->slot);
2138
return mkcodenode(o);
2140
MEMBER_MULTINAME(m, f, name);
2141
o.c = abc_getlocal_0(o.c);
2142
o.c = abc_getproperty2(o.c, &m);
2143
return mkcodenode(o);
2148
/* look at actual classes, in the current package and imported */
2149
if(!state->xmlfilter && (a = find_class(name))) {
2150
if(state->cls && state->cls->info == (classinfo_t*)a && i_am_static) {
2151
o.c = abc_getlocal_0(0);
2152
o.t = TYPE_CLASS((classinfo_t*)a);
2156
return mkcodenode(o);
2159
/* look through package prefixes */
2160
if(!state->xmlfilter &&
2161
(dict_contains(state->import_toplevel_packages, name) ||
2162
registry_ispackage(name))) {
2163
o.c = abc___pushpackage__(o.c, name);
2165
return mkcodenode(o); //?
2168
/* unknown object, let the avm2 resolve it */
2170
if(!state->method->inner && !state->xmlfilter) {
2171
/* we really should make inner functions aware of the class context */
2172
as3_warning("Couldn't resolve '%s', doing late binding", name);
2174
state->method->late_binding = 1;
2176
multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, name};
2179
o.c = abc_findpropstrict2(o.c, &m);
2180
o.c = abc_getproperty2(o.c, &m);
2181
return mkcodenode(o);
2186
/* Line 274 of skeleton.m4 */
2187
#line 3764 "parser.y"
2189
void add_active_url(const char*url)
2193
list_append(state->active_namespace_urls, n);
2198
/* Line 274 of skeleton.m4 */
2199
#line 2200 "parser.tab.c"
2206
typedef YYTYPE_UINT8 yytype_uint8;
2208
typedef unsigned char yytype_uint8;
2212
typedef YYTYPE_INT8 yytype_int8;
2213
#elif (defined __STDC__ || defined __C99__FUNC__ \
2214
|| defined __cplusplus || defined _MSC_VER)
2215
typedef signed char yytype_int8;
2217
typedef short int yytype_int8;
2220
#ifdef YYTYPE_UINT16
2221
typedef YYTYPE_UINT16 yytype_uint16;
2223
typedef unsigned short int yytype_uint16;
2227
typedef YYTYPE_INT16 yytype_int16;
2229
typedef short int yytype_int16;
2233
# ifdef __SIZE_TYPE__
2234
# define YYSIZE_T __SIZE_TYPE__
2235
# elif defined size_t
2236
# define YYSIZE_T size_t
2237
# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
2238
|| defined __cplusplus || defined _MSC_VER)
2239
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
2240
# define YYSIZE_T size_t
2242
# define YYSIZE_T unsigned int
2246
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
2251
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
2252
# define YY_(msgid) dgettext ("bison-runtime", msgid)
2256
# define YY_(msgid) msgid
2260
/* Suppress unused-variable warnings by "using" E. */
2261
#if ! defined lint || defined __GNUC__
2262
# define YYUSE(e) ((void) (e))
2264
# define YYUSE(e) /* empty */
2267
/* Identity function, used to suppress warnings about constant conditions. */
2269
# define YYID(n) (n)
2271
#if (defined __STDC__ || defined __C99__FUNC__ \
2272
|| defined __cplusplus || defined _MSC_VER)
2285
#if ! defined yyoverflow || YYERROR_VERBOSE
2287
/* The parser invokes alloca or malloc; define the necessary symbols. */
2289
# ifdef YYSTACK_USE_ALLOCA
2290
# if YYSTACK_USE_ALLOCA
2292
# define YYSTACK_ALLOC __builtin_alloca
2293
# elif defined __BUILTIN_VA_ARG_INCR
2294
# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
2296
# define YYSTACK_ALLOC __alloca
2297
# elif defined _MSC_VER
2298
# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
2299
# define alloca _alloca
2301
# define YYSTACK_ALLOC alloca
2302
# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
2303
|| defined __cplusplus || defined _MSC_VER)
2304
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
2306
# define _STDLIB_H 1
2313
# ifdef YYSTACK_ALLOC
2314
/* Pacify GCC's `empty if-body' warning. */
2315
# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
2316
# ifndef YYSTACK_ALLOC_MAXIMUM
2317
/* The OS might guarantee only one guard page at the bottom of the stack,
2318
and a page size can be as small as 4096 bytes. So we cannot safely
2319
invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
2320
to allow for a few compiler-allocated temporary stack slots. */
2321
# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
2324
# define YYSTACK_ALLOC YYMALLOC
2325
# define YYSTACK_FREE YYFREE
2326
# ifndef YYSTACK_ALLOC_MAXIMUM
2327
# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
2329
# if (defined __cplusplus && ! defined _STDLIB_H \
2330
&& ! ((defined YYMALLOC || defined malloc) \
2331
&& (defined YYFREE || defined free)))
2332
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
2334
# define _STDLIB_H 1
2338
# define YYMALLOC malloc
2339
# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
2340
|| defined __cplusplus || defined _MSC_VER)
2341
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
2345
# define YYFREE free
2346
# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
2347
|| defined __cplusplus || defined _MSC_VER)
2348
void free (void *); /* INFRINGES ON USER NAME SPACE */
2352
#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
2355
#if (! defined yyoverflow \
2356
&& (! defined __cplusplus \
2357
|| (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
2359
/* A type that is properly aligned for any stack member. */
2362
yytype_int16 yyss_alloc;
2366
/* The size of the maximum gap between one aligned stack and the next. */
2367
# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
2369
/* The size of an array large to enough to hold all stacks, each with
2371
# define YYSTACK_BYTES(N) \
2372
((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
2373
+ YYSTACK_GAP_MAXIMUM)
2375
/* Copy COUNT objects from FROM to TO. The source and destination do
2378
# if defined __GNUC__ && 1 < __GNUC__
2379
# define YYCOPY(To, From, Count) \
2380
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
2382
# define YYCOPY(To, From, Count) \
2386
for (yyi = 0; yyi < (Count); yyi++) \
2387
(To)[yyi] = (From)[yyi]; \
2393
/* Relocate STACK from its old location to the new one. The
2394
local variables YYSIZE and YYSTACKSIZE give the old and new number of
2395
elements in the stack, and YYPTR gives the new location of the
2396
stack. Advance YYPTR to a properly aligned location for the next
2398
# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
2401
YYSIZE_T yynewbytes; \
2402
YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
2403
Stack = &yyptr->Stack_alloc; \
2404
yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
2405
yyptr += yynewbytes / sizeof (*yyptr); \
2411
/* YYFINAL -- State number of the termination state. */
2413
/* YYLAST -- Last index in YYTABLE. */
2416
/* YYNTOKENS -- Number of terminals. */
2417
#define YYNTOKENS 136
2418
/* YYNNTS -- Number of nonterminals. */
2420
/* YYNRULES -- Number of rules. */
2421
#define YYNRULES 354
2422
/* YYNRULES -- Number of states. */
2423
#define YYNSTATES 601
2425
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
2426
#define YYUNDEFTOK 2
2427
#define YYMAXUTOK 365
2429
#define YYTRANSLATE(YYX) \
2430
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
2432
/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
2433
static const yytype_uint8 yytranslate[] =
2435
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2436
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2437
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2438
2, 2, 2, 120, 2, 2, 2, 118, 109, 2,
2439
124, 135, 117, 115, 102, 114, 129, 116, 2, 2,
2440
2, 2, 2, 2, 2, 2, 2, 2, 106, 101,
2441
111, 104, 112, 105, 130, 2, 2, 2, 2, 2,
2442
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2443
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2444
2, 126, 2, 127, 108, 2, 2, 2, 2, 2,
2445
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2446
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2447
2, 2, 2, 128, 107, 134, 119, 2, 2, 2,
2448
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2449
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2450
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2451
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2452
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2453
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2454
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2455
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2456
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2457
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2458
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2459
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2460
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
2461
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
2462
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
2463
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
2464
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
2465
45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
2466
55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
2467
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
2468
75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
2469
85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
2470
95, 96, 97, 98, 99, 100, 103, 110, 113, 121,
2471
122, 123, 125, 131, 132, 133
2475
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
2477
static const yytype_uint16 yyprhs[] =
2479
0, 0, 3, 5, 6, 8, 10, 13, 15, 17,
2480
19, 21, 23, 25, 30, 32, 33, 35, 37, 40,
2481
42, 44, 46, 48, 50, 55, 60, 62, 64, 65,
2482
68, 70, 72, 74, 76, 78, 80, 82, 84, 86,
2483
88, 90, 92, 94, 96, 100, 103, 105, 107, 109,
2484
111, 113, 115, 117, 122, 125, 127, 129, 130, 134,
2485
137, 138, 141, 144, 146, 150, 154, 155, 158, 159,
2486
162, 169, 170, 172, 174, 178, 180, 183, 187, 196,
2487
203, 209, 216, 218, 221, 223, 226, 227, 229, 231,
2488
234, 236, 239, 244, 248, 249, 258, 259, 269, 270,
2489
276, 278, 281, 283, 286, 288, 289, 296, 299, 301,
2490
306, 309, 311, 313, 315, 317, 319, 323, 325, 326,
2491
333, 334, 340, 343, 346, 351, 352, 354, 356, 359,
2492
361, 363, 365, 367, 369, 371, 373, 375, 377, 379,
2493
380, 383, 384, 387, 388, 391, 392, 402, 403, 412,
2494
413, 415, 417, 420, 422, 427, 429, 431, 433, 434,
2495
436, 438, 441, 443, 446, 455, 457, 459, 460, 465,
2496
467, 471, 475, 476, 479, 481, 483, 485, 487, 489,
2497
491, 493, 495, 497, 499, 501, 503, 504, 505, 510,
2498
511, 516, 517, 520, 523, 526, 529, 533, 535, 537,
2499
538, 540, 547, 558, 570, 572, 575, 577, 581, 585,
2500
589, 593, 594, 596, 599, 604, 608, 610, 615, 618,
2501
620, 622, 623, 624, 637, 639, 640, 641, 652, 654,
2502
658, 660, 662, 664, 668, 670, 672, 674, 677, 678,
2503
679, 683, 684, 686, 688, 690, 693, 696, 697, 702,
2504
707, 712, 715, 717, 720, 722, 724, 726, 730, 732,
2505
736, 737, 739, 741, 743, 745, 747, 749, 753, 759,
2506
761, 763, 765, 767, 769, 771, 773, 775, 777, 779,
2507
783, 787, 791, 795, 799, 803, 807, 811, 815, 819,
2508
823, 827, 830, 833, 837, 841, 845, 849, 853, 857,
2509
861, 865, 869, 873, 877, 881, 885, 889, 893, 896,
2510
899, 901, 905, 908, 913, 917, 921, 925, 929, 933,
2511
937, 941, 945, 949, 953, 957, 961, 967, 970, 973,
2512
976, 979, 983, 986, 987, 994, 996, 998, 1000, 1002,
2513
1004, 1010, 1014, 1020, 1025, 1030, 1037, 1044, 1048, 1050,
2514
1053, 1058, 1063, 1066, 1071
2517
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
2518
static const yytype_int16 yyrhs[] =
2520
137, 0, -1, 138, -1, -1, 139, -1, 140, -1,
2521
139, 140, -1, 188, -1, 200, -1, 198, -1, 234,
2522
-1, 209, -1, 149, -1, 151, 128, 138, 134, -1,
2523
101, -1, -1, 142, -1, 143, -1, 142, 143, -1,
2524
200, -1, 198, -1, 234, -1, 209, -1, 149, -1,
2525
151, 128, 141, 134, -1, 126, 150, 261, 127, -1,
2526
101, -1, 145, -1, -1, 145, 147, -1, 147, -1,
2527
269, -1, 191, -1, 163, -1, 164, -1, 165, -1,
2528
166, -1, 173, -1, 159, -1, 185, -1, 181, -1,
2529
257, -1, 270, -1, 268, -1, 128, 145, 134, -1,
2530
128, 134, -1, 101, -1, 146, -1, 153, -1, 167,
2531
-1, 168, -1, 253, -1, 183, -1, 151, 128, 145,
2532
134, -1, 147, 101, -1, 147, -1, 146, -1, -1,
2533
3, 91, 3, -1, 104, 261, -1, -1, 46, 154,
2534
-1, 32, 154, -1, 155, -1, 154, 102, 155, -1,
2535
3, 244, 152, -1, -1, 157, 148, -1, -1, 66,
2536
156, -1, 65, 124, 255, 135, 156, 158, -1, -1,
2537
153, -1, 257, -1, 46, 3, 244, -1, 3, -1,
2538
11, 124, -1, 11, 50, 124, -1, 162, 160, 101,
2539
255, 101, 257, 135, 156, -1, 162, 161, 69, 255,
2540
135, 156, -1, 12, 124, 255, 135, 156, -1, 13,
2541
156, 12, 124, 255, 135, -1, 67, -1, 67, 3,
2542
-1, 30, -1, 30, 3, -1, -1, 170, -1, 172,
2543
-1, 170, 172, -1, 171, -1, 170, 171, -1, 34,
2544
261, 106, 144, -1, 62, 106, 144, -1, -1, 14,
2545
124, 174, 261, 135, 128, 169, 134, -1, -1, 33,
2546
124, 3, 244, 135, 176, 128, 144, 134, -1, -1,
2547
27, 128, 178, 144, 134, -1, 175, -1, 179, 175,
2548
-1, 179, -1, 179, 177, -1, 177, -1, -1, 52,
2549
128, 182, 144, 134, 180, -1, 37, 255, -1, 37,
2550
-1, 39, 124, 255, 135, -1, 184, 148, -1, 3,
2551
-1, 17, -1, 16, -1, 29, -1, 4, -1, 187,
2552
129, 186, -1, 186, -1, -1, 17, 187, 128, 189,
2553
141, 134, -1, -1, 17, 128, 190, 141, 134, -1,
2554
41, 3, -1, 41, 240, -1, 41, 187, 129, 117,
2555
-1, -1, 193, -1, 194, -1, 193, 194, -1, 20,
2556
-1, 21, -1, 18, -1, 38, -1, 47, -1, 49,
2557
-1, 48, -1, 25, -1, 23, -1, 4, -1, -1,
2558
54, 241, -1, -1, 54, 242, -1, -1, 15, 242,
2559
-1, -1, 192, 31, 3, 195, 197, 128, 199, 202,
2560
134, -1, -1, 192, 44, 3, 196, 128, 201, 205,
2561
134, -1, -1, 203, -1, 204, -1, 203, 204, -1,
2562
101, -1, 151, 128, 202, 134, -1, 209, -1, 234,
2563
-1, 146, -1, -1, 206, -1, 207, -1, 206, 207,
2564
-1, 101, -1, 46, 3, -1, 192, 26, 233, 3,
2565
124, 230, 135, 244, -1, 46, -1, 32, -1, -1,
2566
192, 208, 210, 211, -1, 212, -1, 211, 102, 212,
2567
-1, 3, 244, 152, -1, -1, 104, 261, -1, 8,
2568
-1, 9, -1, 10, -1, 5, -1, 56, -1, 55,
2569
-1, 45, -1, 28, -1, 29, -1, 227, -1, 111,
2570
-1, 112, -1, -1, -1, 128, 261, 220, 134, -1,
2571
-1, 128, 261, 222, 134, -1, -1, 223, 219, -1,
2572
223, 5, -1, 223, 112, -1, 227, 223, -1, 224,
2573
227, 223, -1, 3, -1, 221, -1, -1, 228, -1,
2574
216, 225, 226, 116, 218, 112, -1, 216, 225, 226,
2575
217, 223, 111, 116, 225, 218, 112, -1, 216, 225,
2576
226, 217, 223, 224, 111, 116, 225, 218, 112, -1,
2577
229, -1, 228, 229, -1, 221, -1, 221, 104, 5,
2578
-1, 221, 104, 221, -1, 3, 104, 221, -1, 3,
2579
104, 5, -1, -1, 231, -1, 95, 232, -1, 231,
2580
102, 95, 232, -1, 231, 102, 232, -1, 232, -1,
2581
3, 106, 243, 213, -1, 3, 213, -1, 51, -1,
2582
35, -1, -1, -1, 192, 26, 233, 3, 124, 230,
2583
135, 244, 128, 235, 144, 134, -1, 3, -1, -1,
2584
-1, 26, 236, 124, 230, 135, 244, 128, 238, 144,
2585
134, -1, 186, -1, 187, 129, 186, -1, 240, -1,
2586
239, -1, 241, -1, 242, 102, 241, -1, 241, -1,
2587
117, -1, 36, -1, 106, 243, -1, -1, -1, 124,
2588
246, 135, -1, -1, 247, -1, 248, -1, 254, -1,
2589
247, 102, -1, 248, 254, -1, -1, 24, 261, 249,
2590
245, -1, 261, 124, 246, 135, -1, 53, 124, 246,
2591
135, -1, 64, 261, -1, 42, -1, 42, 255, -1,
2592
261, -1, 256, -1, 261, -1, 256, 102, 261, -1,
2593
261, -1, 257, 102, 261, -1, -1, 260, -1, 3,
2594
-1, 5, -1, 8, -1, 9, -1, 10, -1, 259,
2595
106, 254, -1, 260, 102, 259, 106, 254, -1, 237,
2596
-1, 265, -1, 250, -1, 252, -1, 251, -1, 266,
2597
-1, 214, -1, 215, -1, 6, -1, 19, -1, 126,
2598
246, 127, -1, 71, 258, 134, -1, 261, 111, 261,
2599
-1, 261, 112, 261, -1, 261, 76, 261, -1, 261,
2600
77, 261, -1, 261, 72, 261, -1, 261, 73, 261,
2601
-1, 261, 75, 261, -1, 261, 74, 261, -1, 261,
2602
89, 261, -1, 261, 90, 261, -1, 120, 261, -1,
2603
119, 261, -1, 261, 109, 261, -1, 261, 108, 261,
2604
-1, 261, 107, 261, -1, 261, 98, 261, -1, 261,
2605
97, 261, -1, 261, 96, 261, -1, 261, 116, 261,
2606
-1, 261, 118, 261, -1, 261, 115, 261, -1, 261,
2607
114, 261, -1, 261, 117, 261, -1, 261, 69, 261,
2608
-1, 261, 70, 261, -1, 261, 40, 261, -1, 261,
2609
68, 261, -1, 43, 261, -1, 36, 261, -1, 36,
2610
-1, 124, 256, 135, -1, 114, 261, -1, 261, 126,
2611
261, 127, -1, 261, 81, 261, -1, 261, 80, 261,
2612
-1, 261, 87, 261, -1, 261, 86, 261, -1, 261,
2613
88, 261, -1, 261, 79, 261, -1, 261, 78, 261,
2614
-1, 261, 85, 261, -1, 261, 82, 261, -1, 261,
2615
83, 261, -1, 261, 84, 261, -1, 261, 104, 261,
2616
-1, 261, 105, 261, 106, 261, -1, 261, 93, -1,
2617
261, 92, -1, 93, 261, -1, 92, 261, -1, 53,
2618
129, 3, -1, 130, 3, -1, -1, 261, 129, 124,
2619
262, 261, 135, -1, 3, -1, 117, -1, 4, -1,
2620
186, -1, 117, -1, 261, 129, 263, 91, 264, -1,
2621
261, 94, 264, -1, 261, 129, 126, 261, 127, -1,
2622
261, 129, 130, 264, -1, 261, 94, 130, 264, -1,
2623
261, 129, 130, 126, 261, 127, -1, 261, 94, 130,
2624
126, 261, 127, -1, 261, 129, 264, -1, 3, -1,
2625
16, 3, -1, 16, 3, 104, 3, -1, 16, 3,
2626
104, 5, -1, 192, 267, -1, 63, 16, 104, 261,
2630
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
2631
static const yytype_uint16 yyrline[] =
2633
0, 1941, 1941, 1943, 1943, 1944, 1945, 1947, 1948, 1949,
2634
1950, 1951, 1952, 1953, 1954, 1956, 1956, 1957, 1958, 1960,
2635
1961, 1962, 1963, 1964, 1965, 1966, 1967, 1969, 1970, 1972,
2636
1975, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986,
2637
1987, 1988, 1989, 1990, 1991, 1992, 1995, 1996, 1997, 1998,
2638
1999, 2000, 2001, 2002, 2014, 2015, 2019, 2030, 2038, 2065,
2639
2066, 2068, 2069, 2071, 2072, 2074, 2135, 2135, 2139, 2140,
2640
2143, 2159, 2160, 2161, 2166, 2170, 2175, 2176, 2178, 2198,
2641
2241, 2257, 2269, 2272, 2275, 2278, 2282, 2283, 2284, 2285,
2642
2286, 2287, 2289, 2300, 2303, 2303, 2334, 2334, 2359, 2359,
2643
2375, 2376, 2377, 2378, 2386, 2395, 2395, 2444, 2448, 2459,
2644
2469, 2486, 2487, 2488, 2489, 2490, 2492, 2493, 2495, 2495,
2645
2497, 2497, 2521, 2529, 2540, 2556, 2557, 2558, 2559, 2566,
2646
2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2579,
2647
2580, 2582, 2583, 2585, 2586, 2590, 2588, 2596, 2594, 2603,
2648
2604, 2605, 2606, 2607, 2608, 2609, 2610, 2612, 2618, 2619,
2649
2620, 2621, 2622, 2623, 2626, 2699, 2699, 2701, 2701, 2703,
2650
2704, 2706, 2790, 2791, 2800, 2801, 2804, 2805, 2806, 2807,
2651
2808, 2809, 2810, 2823, 2834, 2835, 2836, 2838, 2838, 2841,
2652
2841, 2844, 2845, 2848, 2853, 2856, 2859, 2862, 2865, 2869,
2653
2872, 2876, 2880, 2885, 2891, 2894, 2897, 2900, 2905, 2908,
2654
2911, 2921, 2925, 2931, 2937, 2945, 2950, 2956, 2964, 2972,
2655
2973, 2974, 2977, 2976, 2993, 2994, 2996, 2995, 3019, 3038,
2656
3052, 3053, 3055, 3056, 3058, 3059, 3060, 3069, 3070, 3074,
2657
3075, 3077, 3078, 3079, 3081, 3085, 3086, 3091, 3092, 3136,
2658
3186, 3207, 3229, 3232, 3239, 3242, 3245, 3248, 3251, 3254,
2659
3259, 3260, 3262, 3263, 3264, 3265, 3266, 3268, 3274, 3283,
2660
3284, 3285, 3286, 3287, 3288, 3290, 3294, 3299, 3317, 3328,
2661
3338, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355,
2662
3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365,
2663
3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375,
2664
3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385,
2665
3386, 3387, 3388, 3389, 3390, 3391, 3392, 3394, 3395, 3396,
2666
3397, 3399, 3414, 3422, 3422, 3476, 3477, 3478, 3479, 3480,
2667
3488, 3506, 3513, 3524, 3531, 3538, 3548, 3559, 3739, 3773,
2668
3780, 3787, 3794, 3816, 3822
2672
#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
2673
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
2674
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
2675
static const char *const yytname[] =
2677
"$end", "error", "$undefined", "T_IDENTIFIER", "T_NAMESPACE",
2678
"T_STRING", "T_REGEXP", "T_EMPTY", "T_INT", "T_UINT", "T_FLOAT",
2679
"\"for\"", "\"while\"", "\"do\"", "\"switch\"", "\"implements\"",
2680
"\"namespace\"", "\"package\"", "\"protected\"", "\"arguments\"",
2681
"\"public\"", "\"private\"", "\"use\"", "\"internal\"", "\"new\"",
2682
"\"native\"", "\"function\"", "\"finally\"", "\"undefined\"", "\"NaN\"",
2683
"\"continue\"", "\"class\"", "\"const\"", "\"catch\"", "\"case\"",
2684
"\"set\"", "\"void\"", "\"throw\"", "\"static\"", "\"with\"",
2685
"\"instanceof\"", "\"import\"", "\"return\"", "\"typeof\"",
2686
"\"interface\"", "\"null\"", "\"var\"", "\"dynamic\"", "\"override\"",
2687
"\"final\"", "\"each\"", "\"get\"", "\"try\"", "\"super\"",
2688
"\"extends\"", "\"false\"", "\"true\"", "\"Boolean\"", "\"uint\"",
2689
"\"int\"", "\"Number\"", "\"String\"", "\"default\"", "\"default xml\"",
2690
"\"delete\"", "\"if\"", "\"else\"", "\"break\"", "\"is\"", "\"in\"",
2691
"\"as\"", "\"{ (dictionary)\"", "\"==\"", "\"===\"", "\"!=\"", "\"!==\"",
2692
"\"<=\"", "\">=\"", "\"|=\"", "\"/=\"", "\"%=\"", "\"*=\"", "\"&=\"",
2693
"\"+=\"", "\"-=\"", "\"^=\"", "\">>=\"", "\"<<=\"", "\">>>=\"", "\"||\"",
2694
"\"&&\"", "\"::\"", "\"--\"", "\"++\"", "\"..\"", "\"...\"", "\"<<\"",
2695
"\">>>\"", "\">>\"", "prec_none", "below_semicolon", "';'", "','",
2696
"below_assignment", "'='", "'?'", "':'", "'|'", "'^'", "'&'", "below_lt",
2697
"'<'", "'>'", "below_minus", "'-'", "'+'", "'/'", "'*'", "'%'", "'~'",
2698
"'!'", "minusminus_prefix", "plusplus_prefix", "below_curly", "'('",
2699
"new2", "'['", "']'", "'{'", "'.'", "'@'", "above_identifier",
2700
"below_else", "above_function", "'}'", "')'", "$accept", "PROGRAM",
2701
"MAYBE_PROGRAM_CODE_LIST", "PROGRAM_CODE_LIST", "PROGRAM_CODE",
2702
"MAYBE_INPACKAGE_CODE_LIST", "INPACKAGE_CODE_LIST", "INPACKAGE_CODE",
2703
"MAYBECODE", "CODE", "CODE_STATEMENT", "CODEPIECE", "CODEBLOCK",
2704
"PACKAGE_INITCODE", "EMBED_START", "CONDITIONAL_COMPILATION",
2705
"MAYBEEXPRESSION", "VARIABLE_DECLARATION", "VARIABLE_LIST",
2706
"ONE_VARIABLE", "IF_CODEBLOCK", "$@1", "MAYBEELSE", "IF", "FOR_INIT",
2707
"FOR_IN_INIT", "FOR_START", "FOR", "FOR_IN", "WHILE", "DO_WHILE",
2708
"BREAK", "CONTINUE", "MAYBE_CASE_LIST", "CASE_LIST", "CASE", "DEFAULT",
2709
"SWITCH", "$@2", "CATCH", "$@3", "FINALLY", "$@4", "CATCH_LIST",
2710
"CATCH_FINALLY_LIST", "TRY", "$@5", "THROW", "WITH_HEAD", "WITH",
2711
"X_IDENTIFIER", "PACKAGE", "PACKAGE_DECLARATION", "$@6", "$@7", "IMPORT",
2712
"MAYBE_MODIFIERS", "MODIFIER_LIST", "MODIFIER", "EXTENDS",
2713
"EXTENDS_LIST", "IMPLEMENTS_LIST", "CLASS_DECLARATION", "$@8",
2714
"INTERFACE_DECLARATION", "$@9", "MAYBE_CLASS_BODY", "CLASS_BODY",
2715
"CLASS_BODY_ITEM", "MAYBE_INTERFACE_BODY", "INTERFACE_BODY",
2716
"IDECLARATION", "VARCONST", "SLOT_DECLARATION", "$@10", "SLOT_LIST",
2717
"ONE_SLOT", "MAYBECONSTANT", "CONSTANT", "XML", "OPEN", "CLOSE",
2718
"CLOSE2", "XMLEXPR1", "$@11", "XMLEXPR2", "$@12", "XMLTEXT", "XML2",
2719
"XML_ID_OR_EXPR", "MAYBE_XMLATTRIBUTES", "XMLNODE", "XMLATTRIBUTES",
2720
"XMLATTRIBUTE", "MAYBE_PARAM_LIST", "PARAM_LIST", "PARAM", "GETSET",
2721
"FUNCTION_DECLARATION", "$@13", "MAYBE_IDENTIFIER", "INNERFUNCTION",
2722
"$@14", "CLASS", "PACKAGEANDCLASS", "CLASS_SPEC", "CLASS_SPEC_LIST",
2723
"TYPE", "MAYBETYPE", "MAYBE_PARAM_VALUES", "MAYBE_EXPRESSION_LIST",
2724
"EXPRESSION_LIST", "EXPRESSION_LIST_AND_COMMA", "XX", "NEW",
2725
"FUNCTIONCALL", "DELETE", "RETURN", "NONCOMMAEXPRESSION", "EXPRESSION",
2726
"COMMA_EXPRESSION", "VOIDEXPRESSION", "MAYBE_DICT_EXPRPAIR_LIST",
2727
"DICTLH", "DICT_EXPRPAIR_LIST", "E", "$@15", "ID_OR_NS", "SUBNODE",
2728
"MEMBER", "VAR_READ", "NAMESPACE_ID", "NAMESPACE_DECLARATION",
2729
"DEFAULT_NAMESPACE", "USE_NAMESPACE", 0
2734
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
2736
static const yytype_uint16 yytoknum[] =
2738
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
2739
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
2740
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
2741
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
2742
295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
2743
305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
2744
315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
2745
325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
2746
335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
2747
345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
2748
355, 59, 44, 356, 61, 63, 58, 124, 94, 38,
2749
357, 60, 62, 358, 45, 43, 47, 42, 37, 126,
2750
33, 359, 360, 361, 40, 362, 91, 93, 123, 46,
2751
64, 363, 364, 365, 125, 41
2755
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
2756
static const yytype_uint16 yyr1[] =
2758
0, 136, 137, 138, 138, 139, 139, 140, 140, 140,
2759
140, 140, 140, 140, 140, 141, 141, 142, 142, 143,
2760
143, 143, 143, 143, 143, 143, 143, 144, 144, 145,
2761
145, 146, 146, 146, 146, 146, 146, 146, 146, 146,
2762
146, 146, 146, 146, 146, 146, 147, 147, 147, 147,
2763
147, 147, 147, 147, 148, 148, 149, 150, 151, 152,
2764
152, 153, 153, 154, 154, 155, 157, 156, 158, 158,
2765
159, 160, 160, 160, 161, 161, 162, 162, 163, 164,
2766
165, 166, 167, 167, 168, 168, 169, 169, 169, 169,
2767
170, 170, 171, 172, 174, 173, 176, 175, 178, 177,
2768
179, 179, 180, 180, 180, 182, 181, 183, 183, 184,
2769
185, 186, 186, 186, 186, 186, 187, 187, 189, 188,
2770
190, 188, 191, 191, 191, 192, 192, 193, 193, 194,
2771
194, 194, 194, 194, 194, 194, 194, 194, 194, 195,
2772
195, 196, 196, 197, 197, 199, 198, 201, 200, 202,
2773
202, 203, 203, 204, 204, 204, 204, 204, 205, 205,
2774
206, 206, 207, 207, 207, 208, 208, 210, 209, 211,
2775
211, 212, 213, 213, 214, 214, 214, 214, 214, 214,
2776
214, 214, 214, 215, 216, 217, 218, 220, 219, 222,
2777
221, 223, 223, 223, 223, 224, 224, 225, 225, 226,
2778
226, 227, 227, 227, 228, 228, 229, 229, 229, 229,
2779
229, 230, 230, 230, 230, 231, 231, 232, 232, 233,
2780
233, 233, 235, 234, 236, 236, 238, 237, 239, 240,
2781
241, 241, 242, 242, 243, 243, 243, 244, 244, 245,
2782
245, 246, 246, 246, 247, 248, 247, 249, 250, 251,
2783
251, 252, 253, 253, 254, 255, 256, 256, 257, 257,
2784
258, 258, 259, 259, 259, 259, 259, 260, 260, 261,
2785
261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
2786
261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
2787
261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
2788
261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
2789
261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
2790
261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
2791
261, 261, 261, 262, 261, 263, 263, 263, 264, 264,
2792
261, 261, 261, 261, 261, 261, 261, 265, 266, 267,
2793
267, 267, 268, 269, 270
2796
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
2797
static const yytype_uint8 yyr2[] =
2799
0, 2, 1, 0, 1, 1, 2, 1, 1, 1,
2800
1, 1, 1, 4, 1, 0, 1, 1, 2, 1,
2801
1, 1, 1, 1, 4, 4, 1, 1, 0, 2,
2802
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2803
1, 1, 1, 1, 3, 2, 1, 1, 1, 1,
2804
1, 1, 1, 4, 2, 1, 1, 0, 3, 2,
2805
0, 2, 2, 1, 3, 3, 0, 2, 0, 2,
2806
6, 0, 1, 1, 3, 1, 2, 3, 8, 6,
2807
5, 6, 1, 2, 1, 2, 0, 1, 1, 2,
2808
1, 2, 4, 3, 0, 8, 0, 9, 0, 5,
2809
1, 2, 1, 2, 1, 0, 6, 2, 1, 4,
2810
2, 1, 1, 1, 1, 1, 3, 1, 0, 6,
2811
0, 5, 2, 2, 4, 0, 1, 1, 2, 1,
2812
1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
2813
2, 0, 2, 0, 2, 0, 9, 0, 8, 0,
2814
1, 1, 2, 1, 4, 1, 1, 1, 0, 1,
2815
1, 2, 1, 2, 8, 1, 1, 0, 4, 1,
2816
3, 3, 0, 2, 1, 1, 1, 1, 1, 1,
2817
1, 1, 1, 1, 1, 1, 0, 0, 4, 0,
2818
4, 0, 2, 2, 2, 2, 3, 1, 1, 0,
2819
1, 6, 10, 11, 1, 2, 1, 3, 3, 3,
2820
3, 0, 1, 2, 4, 3, 1, 4, 2, 1,
2821
1, 0, 0, 12, 1, 0, 0, 10, 1, 3,
2822
1, 1, 1, 3, 1, 1, 1, 2, 0, 0,
2823
3, 0, 1, 1, 1, 2, 2, 0, 4, 4,
2824
4, 2, 1, 2, 1, 1, 1, 3, 1, 3,
2825
0, 1, 1, 1, 1, 1, 1, 3, 5, 1,
2826
1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
2827
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
2828
3, 2, 2, 3, 3, 3, 3, 3, 3, 3,
2829
3, 3, 3, 3, 3, 3, 3, 3, 2, 2,
2830
1, 3, 2, 4, 3, 3, 3, 3, 3, 3,
2831
3, 3, 3, 3, 3, 3, 5, 2, 2, 2,
2832
2, 3, 2, 0, 6, 1, 1, 1, 1, 1,
2833
5, 3, 5, 4, 4, 6, 6, 3, 1, 2,
2837
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
2838
STATE-NUM when YYTABLE doesn't specify something else to do. Zero
2839
means the default is an error. */
2840
static const yytype_uint16 yydefact[] =
2842
125, 348, 138, 177, 277, 174, 175, 176, 0, 0,
2843
66, 0, 0, 131, 278, 129, 130, 0, 137, 0,
2844
136, 225, 181, 182, 310, 132, 0, 0, 0, 180,
2845
133, 135, 134, 0, 0, 179, 178, 0, 0, 0,
2846
260, 0, 0, 14, 184, 0, 0, 0, 0, 241,
2847
125, 0, 0, 2, 125, 5, 56, 12, 0, 38,
2848
71, 33, 34, 35, 36, 37, 40, 125, 39, 7,
2849
32, 0, 126, 127, 9, 8, 11, 275, 276, 0,
2850
183, 10, 269, 271, 273, 272, 41, 258, 270, 274,
2851
43, 31, 42, 0, 0, 76, 0, 0, 125, 94,
2852
111, 115, 113, 112, 114, 120, 117, 0, 0, 348,
2853
247, 224, 0, 309, 0, 122, 0, 123, 308, 105,
2854
241, 0, 0, 251, 0, 262, 263, 264, 265, 266,
2855
0, 0, 261, 330, 329, 312, 292, 291, 0, 256,
2856
0, 242, 243, 244, 254, 84, 0, 108, 252, 0,
2857
82, 46, 45, 125, 47, 30, 0, 48, 49, 50,
2858
52, 0, 51, 332, 1, 6, 125, 348, 0, 72,
2859
0, 0, 73, 55, 110, 0, 221, 0, 166, 0,
2860
165, 167, 352, 128, 197, 0, 198, 199, 0, 0,
2861
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2862
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2863
0, 0, 328, 327, 0, 0, 0, 0, 0, 0,
2864
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2865
241, 0, 0, 58, 77, 0, 255, 0, 67, 0,
2866
125, 118, 0, 228, 0, 231, 230, 354, 239, 211,
2867
0, 0, 28, 0, 331, 0, 0, 280, 0, 0,
2868
0, 311, 279, 245, 246, 85, 238, 62, 63, 107,
2869
253, 61, 83, 44, 29, 125, 0, 238, 0, 0,
2870
54, 349, 220, 219, 0, 139, 141, 0, 189, 0,
2871
206, 0, 200, 204, 259, 306, 307, 304, 305, 285,
2872
286, 288, 287, 283, 284, 320, 319, 315, 314, 322,
2873
323, 324, 321, 317, 316, 318, 289, 290, 339, 0,
2874
338, 341, 298, 297, 296, 325, 0, 295, 294, 293,
2875
281, 282, 302, 301, 299, 303, 300, 0, 0, 111,
2876
115, 339, 333, 0, 0, 0, 347, 66, 0, 0,
2877
26, 57, 0, 125, 17, 23, 0, 20, 19, 22,
2878
21, 125, 116, 0, 241, 248, 172, 0, 0, 212,
2879
216, 109, 124, 229, 0, 27, 250, 353, 66, 267,
2880
0, 257, 0, 60, 0, 125, 13, 60, 0, 0,
2881
0, 0, 0, 143, 0, 0, 238, 168, 169, 0,
2882
0, 0, 185, 186, 191, 205, 0, 344, 0, 249,
2883
313, 0, 0, 0, 343, 0, 80, 0, 0, 0,
2884
121, 18, 125, 0, 0, 0, 0, 218, 213, 238,
2885
0, 0, 68, 0, 236, 235, 234, 237, 0, 65,
2886
64, 53, 0, 66, 350, 351, 211, 140, 0, 0,
2887
232, 142, 147, 60, 0, 190, 210, 209, 207, 208,
2888
0, 0, 0, 326, 0, 342, 0, 340, 81, 86,
2889
0, 0, 119, 240, 173, 172, 0, 0, 215, 0,
2890
0, 100, 104, 102, 106, 66, 70, 268, 59, 0,
2891
79, 0, 144, 145, 0, 125, 171, 170, 201, 193,
2892
184, 194, 0, 192, 0, 191, 346, 334, 345, 0,
2893
0, 0, 87, 90, 88, 25, 24, 217, 226, 214,
2894
98, 0, 101, 103, 69, 66, 238, 125, 233, 0,
2895
162, 0, 0, 125, 160, 0, 187, 184, 191, 195,
2896
0, 28, 95, 91, 89, 28, 28, 238, 78, 0,
2897
153, 157, 0, 0, 0, 125, 151, 155, 156, 163,
2898
221, 148, 161, 186, 0, 0, 196, 28, 93, 0,
2899
0, 0, 222, 125, 146, 152, 0, 0, 188, 186,
2900
92, 227, 99, 96, 28, 0, 0, 202, 0, 0,
2901
0, 154, 211, 203, 28, 223, 0, 0, 238, 97,
2905
/* YYDEFGOTO[NTERM-NUM]. */
2906
static const yytype_int16 yydefgoto[] =
2908
-1, 52, 53, 54, 55, 352, 353, 354, 374, 375,
2909
154, 155, 174, 355, 419, 156, 439, 157, 271, 268,
2910
97, 98, 486, 59, 170, 171, 60, 61, 62, 63,
2911
64, 158, 159, 511, 512, 513, 514, 65, 239, 481,
2912
589, 482, 546, 483, 484, 66, 252, 160, 67, 68,
2913
243, 244, 69, 361, 240, 70, 161, 72, 73, 393,
2914
395, 449, 357, 527, 358, 495, 554, 555, 556, 532,
2915
533, 534, 181, 359, 287, 397, 398, 427, 77, 78,
2916
79, 404, 460, 503, 564, 186, 399, 461, 504, 187,
2917
291, 80, 292, 293, 368, 369, 370, 284, 360, 584,
2918
112, 82, 545, 245, 246, 436, 451, 437, 383, 365,
2919
140, 141, 142, 248, 83, 84, 85, 162, 143, 235,
2920
236, 86, 130, 131, 132, 87, 411, 345, 321, 88,
2924
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2926
#define YYPACT_NINF -515
2927
static const yytype_int16 yypact[] =
2929
1766, 12, -515, -515, -515, -515, -515, -515, -28, -6,
2930
-515, 16, 94, -515, -515, -515, -515, 108, -515, 2220,
2931
-515, 122, -515, -515, 2277, -515, 17, 363, 2220, -515,
2932
-515, -515, -515, 24, 27, -515, -515, 112, 2220, 29,
2933
332, 2220, 2220, -515, -515, 2220, 2220, 2220, 2220, 2220,
2934
710, 158, 165, -515, 578, -515, -515, -515, 44, -515,
2935
2148, -515, -515, -515, -515, -515, -515, 2022, -515, -515,
2936
-515, 288, 766, -515, -515, -515, -515, -515, -515, 11,
2937
-515, -515, -515, -515, -515, -515, 118, 2972, -515, -515,
2938
-515, -515, -515, 218, 101, -515, 2220, 221, 2022, -515,
2939
-515, -515, -515, -515, -515, -515, -515, -83, 373, -515,
2940
-50, -515, 111, -51, 2220, 110, 124, -515, -51, -515,
2941
2220, 253, 155, -51, 2220, -515, -515, -515, -515, -515,
2942
127, 159, 162, -51, -51, 702, -51, -51, -52, 2910,
2943
141, 168, 2220, -515, 2910, 268, 272, 2220, 2220, 272,
2944
273, -515, -515, 842, -515, -515, 149, -515, -515, -515,
2945
-515, 266, -515, -515, -515, -515, 1106, 214, 282, -515,
2946
191, 225, 118, 202, -515, 302, 54, 304, -515, 305,
2947
-515, -515, -515, -515, -515, 2220, -515, 20, 2220, 2220,
2948
2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220,
2949
2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220,
2950
2220, 2220, -515, -515, 130, 2220, 2220, 2220, 2220, 2220,
2951
2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220,
2952
2220, 2220, 128, -515, -515, 174, 209, 188, -515, 2220,
2953
1238, -515, 373, 184, 187, -515, -515, -515, 194, 21,
2954
186, 84, 1894, 193, -515, 2220, 198, -515, 2220, 332,
2955
2220, -515, -515, -515, -515, -515, 216, 236, -515, -515,
2956
-515, 236, -515, -515, -515, 2022, 226, 216, 2220, 2220,
2957
-515, 239, -515, -515, 345, 311, 314, 366, 2910, 278,
2958
280, -49, 20, -515, 2910, 408, 570, 570, 570, 3282,
2959
3282, 3282, 3282, 408, 408, 2910, 2910, 2910, 2910, 2910,
2960
2910, 2910, 2910, 2910, 2910, 2910, 365, 3034, -515, 146,
2961
-515, -515, 424, 424, 424, 2910, 2476, 3096, 3158, 3220,
2962
408, 408, 702, 702, -51, -51, -51, 250, 2538, 295,
2963
306, 307, -515, 2220, 233, 312, -515, -515, 2220, 2336,
2964
-515, 279, 259, 1370, -515, -515, 267, -515, -515, -515,
2965
-515, 1238, -515, 373, 2220, -515, 126, 401, 274, 308,
2966
-515, -515, -515, 283, 281, 1894, -515, 2910, -515, -515,
2967
310, 2910, 270, 313, 272, 974, -515, -30, 317, 284,
2968
104, 290, 373, 393, 373, 292, 216, 323, -515, 294,
2969
14, 15, -515, -515, -515, -515, 2220, -515, 2220, -515,
2970
-515, 2220, 2600, 2220, -515, 354, -515, 296, 301, 2220,
2971
-515, -515, 1238, 298, 309, 2220, 270, -515, -515, 216,
2972
22, 39, 364, 2220, -515, -515, -515, -515, 2220, -515,
2973
-515, -515, 2220, -515, -515, -515, 21, -515, 373, 315,
2974
-515, 334, -515, 313, 366, -515, -515, -515, -515, -515,
2975
333, 43, 2662, 2910, 2406, -515, 2724, -515, -515, 28,
2976
2786, 316, -515, -515, 2910, 342, 319, 401, -515, 321,
2977
327, -515, -515, 39, -515, -515, -515, -515, 2910, -41,
2978
-515, 318, 334, -515, 373, 277, -515, -515, -515, -515,
2979
338, -515, 2220, -515, 353, -515, -515, -515, -515, 2220,
2980
350, 331, 28, -515, -515, -515, -515, -515, -515, -515,
2981
-515, 463, -515, -515, -515, -515, 216, 1502, -515, 464,
2982
-515, 442, 335, 326, -515, 11, 2910, 359, -515, 46,
2983
2848, 1894, -515, -515, -515, 1894, 1894, 216, -515, 358,
2984
-515, -515, 360, 264, 336, 1634, -515, -515, -515, -515,
2985
54, -515, -515, -515, 344, 11, 46, 1894, -515, 362,
2986
369, 352, -515, 1502, -515, -515, 489, 381, -515, -515,
2987
-515, -515, -515, -515, 1894, 374, 375, -515, 386, 379,
2988
376, -515, 21, -515, 1894, -515, 377, 380, 216, -515,
2992
/* YYPGOTO[NTERM-NUM]. */
2993
static const yytype_int16 yypgoto[] =
2995
-515, -515, 343, -515, 457, -340, -515, 160, -514, -37,
2996
1, -58, 417, 60, -515, 2, 82, 461, 390, 161,
2997
-241, -515, -515, -515, -515, -515, -515, -515, -515, -515,
2998
-515, -515, -515, -515, -515, 31, 32, -515, -515, 63,
2999
-515, 64, -515, -515, -515, -515, -515, -515, -515, -515,
3000
37, 59, -515, -515, -515, -515, 0, -515, 477, -515,
3001
-515, -515, 65, -515, 68, -515, -22, -515, -3, -515,
3002
-515, 30, -515, 3, -515, -515, 100, 85, -515, -515,
3003
-515, -515, -464, -515, -515, -172, -515, -453, -515, -488,
3004
-515, -423, -515, 269, -428, -515, -339, 5, 4, -515,
3005
-515, -515, -515, -515, 535, -103, 116, 140, -269, -515,
3006
-109, -515, -515, -515, -515, -515, -515, -515, -132, -55,
3007
519, -54, -515, 320, -515, -12, -515, -515, -215, -515,
3008
-515, -515, -515, -515, -515
3011
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
3012
positive, shift that token. If negative, reduce the rule which
3013
number is the opposite. If zero, do what YYDEFACT says.
3014
If YYTABLE_NINF, syntax error. */
3015
#define YYTABLE_NINF -338
3016
static const yytype_int16 yytable[] =
3018
71, 56, 58, 76, 81, 247, 172, 110, 387, 173,
3019
264, 253, 113, 153, 184, 290, 118, 346, 491, 456,
3020
458, 423, 94, 289, 366, 366, 123, 568, 428, 133,
3021
134, 569, 570, 135, 136, 137, 139, 144, 505, -74,
3022
173, 212, 213, 214, 214, 241, 242, 563, 499, 106,
3023
260, 499, 539, 580, 71, 56, 58, 76, 81, 250,
3024
57, 188, 509, 402, 106, 74, 479, 403, 75, 256,
3025
590, 107, 480, 230, 438, 231, 231, 579, 232, 232,
3026
597, 538, 471, 261, 139, 566, 116, 100, 101, 282,
3027
510, 478, 269, 270, 525, 274, 95, 100, 101, 577,
3028
102, 103, 139, 93, 407, 283, 416, 444, 144, 445,
3029
102, 103, 139, 104, 57, 588, 367, 477, 96, 74,
3030
290, 337, 75, 104, 108, 111, 379, 453, 122, 414,
3031
144, 339, 340, 100, 101, 139, 139, 432, 519, 185,
3032
99, 114, 185, 185, 102, 103, 102, 103, 185, 100,
3033
101, 120, 119, 124, 500, 501, 121, 104, 501, 104,
3034
476, 163, 102, 103, 596, 164, 71, 56, 58, 76,
3035
81, 502, 166, 288, 502, 104, 294, 295, 296, 297,
3036
298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
3037
308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
3038
467, 372, 490, 322, 323, 324, 325, 326, 327, 328,
3039
329, 330, 331, 332, 333, 334, 335, 336, 144, 338,
3040
188, 233, 105, 388, 389, 234, 57, 349, 457, 459,
3041
425, 74, 426, 237, 75, 249, 100, 101, 385, -111,
3042
71, 56, 356, 377, 524, 341, 144, 318, 381, 102,
3043
103, 320, 342, 251, 343, 424, 254, 549, 344, 255,
3044
319, 257, 104, 318, 259, 258, 139, 139, 262, 320,
3045
263, 265, 406, 100, 101, 266, 272, 275, 571, 362,
3046
175, 2, 175, -75, 548, 277, 102, 103, 373, 447,
3047
176, 450, 278, 417, 279, 13, 178, 15, 16, 104,
3048
18, 487, 20, 280, 175, 281, 434, 285, 286, 347,
3049
180, 260, 348, -117, 176, 25, 363, 274, 364, 177,
3050
178, 371, 382, 529, 30, 31, 32, 274, 376, 600,
3051
2, 412, 179, 378, 180, 125, 139, 126, 384, 144,
3052
127, 128, 129, 390, 13, 450, 15, 16, 391, 18,
3053
318, 20, 144, 71, 56, 356, 320, 100, 101, 413,
3054
386, 71, 56, 356, 25, 392, 115, 101, 394, 396,
3055
102, 103, 529, 30, 31, 32, 100, 101, 530, 102,
3056
103, 320, 400, 104, 401, 409, -335, 435, 489, 102,
3057
103, 528, 104, 420, 462, 422, 463, -337, -336, 464,
3058
373, 466, 104, 415, 366, 189, -241, 470, 448, 429,
3059
430, -158, -116, 474, 446, 431, 433, 438, 442, 443,
3060
452, 144, 71, 56, 356, 454, 488, 530, 455, 469,
3061
485, 468, 472, 190, 191, 192, 494, 193, 194, 195,
3062
196, 197, 198, 493, 473, 498, 425, 518, -338, 520,
3063
516, 521, 320, 526, 535, 211, 541, 212, 213, 214,
3064
-159, 215, 216, 217, 537, 542, 547, 559, 560, 561,
3065
574, 318, 220, 221, 222, 565, 223, 224, 578, 225,
3066
226, 227, 228, 229, -338, -338, 572, 583, 573, 230,
3067
536, 231, 586, 587, 232, 531, 581, 540, 593, 592,
3068
212, 213, 214, 582, 215, 216, 217, 594, 591, 276,
3069
595, 165, 598, 421, 599, 238, 212, 213, 214, -338,
3070
-338, 169, 225, 226, 227, 228, 229, 553, 551, 552,
3071
557, 558, 230, 531, 231, 496, 267, 232, 225, 226,
3072
227, 228, 229, 543, 544, 440, 522, 523, 230, 183,
3073
231, 585, 575, 232, 497, 553, 551, 552, 557, 558,
3074
517, 405, 117, 562, 492, 576, 475, 138, 0, 0,
3075
0, 0, 0, 553, 551, 552, 557, 558, -4, 380,
3076
0, 1, 2, 3, 4, 0, 5, 6, 7, 8,
3077
9, 10, 11, 0, 0, 12, 13, 14, 15, 16,
3078
17, 18, 19, 20, 0, 0, 22, 23, 0, 0,
3079
189, 0, 0, 0, 24, 0, 25, 26, 0, 27,
3080
0, 28, 0, 29, 0, 30, 31, 32, 0, 0,
3081
33, 34, 0, 35, 36, 0, 0, 0, -338, -338,
3082
-338, 37, 38, 39, 0, 0, 197, 198, 0, 40,
3083
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3084
0, 0, 212, 213, 214, 0, 215, 216, 217, 0,
3085
41, 42, 0, 0, 0, 0, 0, 0, 0, 43,
3086
0, 223, 224, 0, 225, 226, 227, 228, 229, 44,
3087
0, 0, 45, 0, 230, 0, 231, 46, 47, 232,
3088
0, 0, 48, 0, 49, 0, 50, 0, 51, 0,
3089
0, 0, -4, 1, 2, 3, 4, 0, 5, 6,
3090
7, 8, 9, 10, 11, 0, 0, 0, 13, 14,
3091
15, 16, 17, 18, 19, 20, 21, 0, 22, 23,
3092
145, 0, 146, 0, 0, 0, 24, 147, 25, 26,
3093
0, 27, 148, 28, 0, 29, 149, 30, 31, 32,
3094
0, 0, 33, 34, 0, 35, 36, 0, 0, 0,
3095
2, 0, 0, 37, 38, 39, 0, 150, 0, 0,
3096
0, 40, 0, 0, 13, 0, 15, 16, 0, 18,
3097
0, 20, 0, 0, 212, 213, 214, 0, 0, 0,
3098
0, 0, 41, 42, 25, 0, 0, 0, 0, 0,
3099
0, 151, 0, 30, 31, 32, 0, 0, 227, 228,
3100
229, 44, 0, 0, 45, 0, 230, 0, 231, 46,
3101
47, 232, 0, 0, 48, 0, 49, 0, 50, 0,
3102
51, 0, 0, 0, 152, 1, 2, 3, 4, 0,
3103
5, 6, 7, 8, 9, 10, 11, 0, 0, 0,
3104
13, 14, 15, 16, 17, 18, 19, 20, 21, 0,
3105
22, 23, 145, 0, 146, 0, 0, 0, 24, 147,
3106
25, 26, 0, 27, 148, 28, 0, 29, 149, 30,
3107
31, 32, 0, 0, 33, 34, 0, 35, 36, 0,
3108
0, 0, 0, 0, 0, 37, 38, 39, 0, 150,
3109
0, 0, 0, 40, 0, 0, 0, 0, 0, 0,
3110
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3111
0, 0, 0, 0, 41, 42, 0, 0, 0, 0,
3112
0, 0, 0, 151, 0, 0, 0, 0, 0, 0,
3113
0, 0, 0, 44, 0, 0, 45, 0, 0, 0,
3114
0, 46, 47, 0, 0, 0, 48, 0, 49, 0,
3115
50, 0, 51, 0, 0, 0, 273, 1, 2, 3,
3116
4, 0, 5, 6, 7, 8, 9, 10, 11, 0,
3117
0, 0, 13, 14, 15, 16, 17, 18, 19, 20,
3118
21, 0, 22, 23, 145, 0, 146, 0, 0, 0,
3119
24, 147, 25, 26, 0, 27, 148, 28, 0, 29,
3120
149, 30, 31, 32, 0, 0, 33, 34, 0, 35,
3121
36, 0, 0, 0, 0, 0, 0, 37, 38, 39,
3122
0, 150, 0, 0, 0, 40, 0, 0, 0, 0,
3123
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3124
0, 0, 0, 0, 0, 0, 41, 42, 0, 0,
3125
0, 0, 0, 0, 0, 151, 0, 0, 0, 0,
3126
0, 0, 0, 0, 0, 44, 0, 0, 45, 0,
3127
0, 0, 0, 46, 47, 0, 0, 0, 48, 0,
3128
49, 0, 50, 0, 51, 0, 0, 0, 441, 1,
3129
2, 3, 4, 0, 5, 6, 7, 8, 9, 10,
3130
11, 0, 0, 12, 13, 14, 15, 16, 17, 18,
3131
19, 20, 0, 0, 22, 23, 0, 0, 0, 0,
3132
0, 0, 24, 0, 25, 26, 0, 27, 0, 28,
3133
0, 29, 0, 30, 31, 32, 0, 0, 33, 34,
3134
0, 35, 36, 0, 0, 0, 0, 0, 0, 37,
3135
38, 39, 0, 0, 0, 0, 0, 40, 0, 0,
3136
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3137
0, 0, 0, 0, 0, 0, 0, 0, 41, 42,
3138
0, 0, 0, 0, 0, 0, 0, 43, 0, 0,
3139
0, 0, 0, 0, 0, 0, 0, 44, 0, 0,
3140
45, 0, 0, 0, 0, 46, 47, 0, 0, 0,
3141
48, 0, 49, 0, 50, 0, 51, 0, 0, 0,
3142
-3, 1, 2, 3, 4, 0, 5, 6, 7, 8,
3143
9, 10, 11, 0, 0, 0, 13, 14, 15, 16,
3144
17, 18, 19, 20, 0, 0, 22, 23, 0, 0,
3145
0, 0, 0, 0, 24, 0, 25, 26, 0, 27,
3146
0, 28, 0, 29, 0, 30, 31, 32, 0, 0,
3147
33, 34, 0, 35, 36, 0, 0, 0, 0, 0,
3148
0, 37, 38, 39, 0, 0, 0, 0, 0, 40,
3149
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3150
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3151
41, 42, 0, 0, 0, 0, 0, 0, 0, 350,
3152
0, 0, 0, 0, 0, 0, 0, 0, 0, 44,
3153
0, 0, 45, 0, 0, 0, 0, 46, 47, 0,
3154
0, 0, 48, 0, 351, 0, 50, 0, 51, 0,
3155
0, 0, -15, 1, 2, 3, 4, 0, 5, 6,
3156
7, 8, 9, 10, 11, 0, 0, 0, 13, 14,
3157
15, 16, 17, 18, 19, 20, 0, 0, 22, 23,
3158
0, 0, 0, 0, 0, 0, 24, 0, 25, 26,
3159
0, 27, 0, 28, 0, 29, 0, 30, 31, 32,
3160
0, 0, 33, 34, 0, 35, 36, 0, 0, 0,
3161
0, 0, 0, 37, 38, 39, 0, 0, 0, 0,
3162
0, 40, 0, 0, 0, 0, 0, 0, 0, 0,
3163
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3164
0, 0, 41, 42, 0, 0, 0, 0, 0, 0,
3165
0, 350, 0, 0, 0, 0, 0, 0, 0, 0,
3166
0, 44, 0, 0, 45, 0, 0, 0, 0, 46,
3167
47, 0, 0, 0, 48, 0, 351, 0, 50, 0,
3168
51, 0, 0, 0, -16, 1, 2, 3, 4, 0,
3169
5, 6, 7, 8, 9, 10, 11, 0, 0, 0,
3170
13, 14, 15, 16, 17, 18, 19, 20, 0, 0,
3171
22, 23, 0, 0, 0, 0, 0, 0, 24, 0,
3172
25, 26, 0, 27, 0, 28, 0, 29, 0, 30,
3173
31, 32, 0, 0, 33, 34, 0, 35, 36, 0,
3174
0, 0, 0, 0, 0, 37, 38, 39, 0, 0,
3175
0, 0, 0, 40, 0, 0, 0, 0, 0, 0,
3176
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3177
0, 0, 0, 0, 41, 42, 0, 0, 0, 0,
3178
0, 0, 0, 550, 0, 0, 0, 0, 0, 0,
3179
0, 0, 0, 44, 0, 0, 45, 0, 0, 0,
3180
0, 46, 47, 0, 0, 0, 48, 0, 49, 0,
3181
50, 0, 51, 0, 0, 0, -149, 1, 2, 3,
3182
4, 0, 5, 6, 7, 8, 9, 10, 11, 0,
3183
0, 0, 13, 14, 15, 16, 17, 18, 19, 20,
3184
0, 0, 22, 23, 0, 0, 0, 0, 0, 0,
3185
24, 0, 25, 26, 0, 27, 0, 28, 0, 29,
3186
0, 30, 31, 32, 0, 0, 33, 34, 0, 35,
3187
36, 0, 0, 0, 0, 0, 0, 37, 38, 39,
3188
0, 0, 0, 0, 0, 40, 0, 0, 0, 0,
3189
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3190
0, 0, 0, 0, 0, 0, 41, 42, 0, 0,
3191
0, 0, 0, 0, 0, 550, 0, 0, 0, 0,
3192
0, 0, 0, 0, 0, 44, 0, 0, 45, 0,
3193
0, 0, 0, 46, 47, 0, 0, 0, 48, 0,
3194
49, 0, 50, 0, 51, 0, -3, 0, -150, 1,
3195
2, 3, 4, 0, 5, 6, 7, 8, 9, 10,
3196
11, 0, 0, 12, 13, 14, 15, 16, 17, 18,
3197
19, 20, 0, 0, 22, 23, 0, 0, 0, 0,
3198
0, 0, 24, 0, 25, 26, 0, 27, 0, 28,
3199
0, 29, 0, 30, 31, 32, 0, 0, 33, 34,
3200
0, 35, 36, 0, 0, 0, 0, 0, 0, 37,
3201
38, 39, 0, 0, 0, 0, 0, 40, 0, 0,
3202
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3203
0, 0, 0, 0, 0, 0, 0, 0, 41, 42,
3204
0, 0, 0, 0, 0, 0, 0, 43, 0, 0,
3205
0, 0, 0, 0, 0, 0, 0, 44, 0, 0,
3206
45, 0, 0, 0, 0, 46, 47, 0, 0, 0,
3207
48, 0, 49, 0, 50, 0, 51, 1, 2, 3,
3208
4, 0, 5, 6, 7, 8, 9, 10, 11, 0,
3209
-125, 0, 13, 14, 15, 16, 17, 18, 19, 20,
3210
21, 0, 22, 23, 145, 0, 146, 0, 0, 0,
3211
24, 147, 25, 26, 0, 27, 148, 28, 0, 29,
3212
149, 30, 31, 32, 0, 0, 33, 34, 0, 35,
3213
36, 0, 0, 0, 0, 0, 0, 37, 38, 39,
3214
0, 150, 0, 0, 0, 40, 0, 0, 0, 0,
3215
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3216
0, 0, 0, 0, 0, 0, 41, 42, 0, 0,
3217
0, 0, 0, 0, 0, 151, 0, 0, 0, 0,
3218
0, 0, 0, 0, 0, 44, 0, 0, 45, 0,
3219
0, 0, 0, 46, 47, 0, 0, 0, 48, 0,
3220
49, 0, 50, 0, 51, 1, 2, 3, 4, 0,
3221
5, 6, 7, 8, 9, 10, 11, 0, 0, 0,
3222
13, 14, 15, 16, 17, 18, 19, 20, 21, 0,
3223
22, 23, 145, 0, 146, 0, 0, 0, 24, 147,
3224
25, 26, 0, 27, 148, 28, 0, 29, 149, 30,
3225
31, 32, 0, 0, 33, 34, 0, 35, 36, 0,
3226
0, 0, 0, 0, 0, 37, 38, 39, 0, 150,
3227
0, 0, 0, 40, 0, 0, 0, 0, 0, 0,
3228
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3229
0, 0, 0, 0, 41, 42, 0, 0, 0, 0,
3230
0, 0, 0, 151, 0, 0, 0, 0, 0, 0,
3231
0, 0, 0, 44, 0, 0, 45, 0, 0, 0,
3232
0, 46, 47, 0, 0, 0, 48, 0, 49, 0,
3233
50, 167, 51, 3, 4, 0, 5, 6, 7, 0,
3234
0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
3235
0, 0, 19, 0, 21, 0, 22, 23, 0, 0,
3236
146, 0, 0, 0, 24, 0, 0, 0, 0, 0,
3237
0, 28, 0, 29, 168, 0, 0, 0, 0, 0,
3238
0, 34, 0, 35, 36, 0, 0, 0, 0, 0,
3239
0, 0, 38, 0, 0, 0, 0, 0, 0, 40,
3240
0, 0, 0, 109, 0, 3, 4, 0, 5, 6,
3241
7, 0, 0, 0, 0, 0, 0, 0, 0, 14,
3242
41, 42, 0, 0, 19, 0, 21, 0, 22, 23,
3243
0, 0, 0, 0, 0, 0, 24, 0, 0, 44,
3244
0, 0, 45, 28, 0, 29, 0, 46, 47, 0,
3245
0, 0, 48, 34, 49, 35, 36, 0, 51, 0,
3246
109, 0, 3, 4, 38, 5, 6, 7, 0, 0,
3247
0, 40, 0, 0, 0, 0, 14, 0, 0, 0,
3248
0, 19, 0, 21, 0, 22, 23, 0, 0, 0,
3249
0, 0, 41, 42, 0, 0, 0, 0, 0, 0,
3250
0, 0, 29, 0, 0, 0, 0, 0, 0, 0,
3251
34, 44, 35, 36, 45, 0, 0, 0, 0, 46,
3252
47, 0, 0, 0, 48, 0, 49, 0, 40, 0,
3253
51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3254
0, 0, 0, 0, 0, 0, 0, 0, 0, 41,
3255
42, 0, 0, 0, 0, 0, 189, 0, 0, 0,
3256
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3257
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3258
0, 48, 0, 49, 190, 191, 192, 51, 193, 194,
3259
195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
3260
205, 206, 207, 208, 209, 210, 211, 0, 212, 213,
3261
214, 0, 215, 216, 217, 0, 0, 0, 0, 0,
3262
218, 219, 0, 220, 221, 222, 189, 223, 224, 0,
3263
225, 226, 227, 228, 229, 0, 0, 0, 0, 0,
3264
230, 0, 231, 0, 0, 232, 0, 0, 0, 0,
3265
0, 418, 0, 0, 190, 191, 192, 0, 193, 194,
3266
195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
3267
205, 206, 207, 208, 209, 210, 211, 0, 212, 213,
3268
214, 0, 215, 216, 217, 0, 0, 0, 0, 0,
3269
218, 219, 0, 220, 221, 222, 189, 223, 224, 0,
3270
225, 226, 227, 228, 229, 0, 0, 0, 0, 0,
3271
230, 0, 231, 0, 0, 232, 0, 0, 0, 0,
3272
0, 507, 0, 0, 190, 191, 192, 0, 193, 194,
3273
195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
3274
205, 206, 207, 208, 209, 210, 211, 0, 212, 213,
3275
214, 0, 215, 216, 217, 0, 0, 0, 189, 0,
3276
218, 219, 408, 220, 221, 222, 0, 223, 224, 0,
3277
225, 226, 227, 228, 229, 0, 0, 0, 0, 0,
3278
230, 0, 231, 0, 0, 232, 190, 191, 192, 0,
3279
193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
3280
203, 204, 205, 206, 207, 208, 209, 210, 211, 0,
3281
212, 213, 214, 0, 215, 216, 217, 0, 0, 0,
3282
189, 0, 218, 219, 0, 220, 221, 222, 0, 223,
3283
224, 0, 225, 226, 227, 228, 229, 0, 0, 0,
3284
0, 0, 230, 0, 231, 410, 0, 232, 190, 191,
3285
192, 0, 193, 194, 195, 196, 197, 198, 199, 200,
3286
201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
3287
211, 0, 212, 213, 214, 0, 215, 216, 217, 0,
3288
0, 0, 189, 0, 218, 219, 0, 220, 221, 222,
3289
0, 223, 224, 0, 225, 226, 227, 228, 229, 0,
3290
0, 0, 0, 0, 230, 0, 231, 465, 0, 232,
3291
190, 191, 192, 0, 193, 194, 195, 196, 197, 198,
3292
199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
3293
209, 210, 211, 0, 212, 213, 214, 0, 215, 216,
3294
217, 0, 0, 0, 189, 0, 218, 219, 0, 220,
3295
221, 222, 0, 223, 224, 0, 225, 226, 227, 228,
3296
229, 0, 0, 0, 0, 0, 230, 0, 231, 506,
3297
0, 232, 190, 191, 192, 0, 193, 194, 195, 196,
3298
197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
3299
207, 208, 209, 210, 211, 0, 212, 213, 214, 0,
3300
215, 216, 217, 0, 0, 0, 189, 0, 218, 219,
3301
0, 220, 221, 222, 0, 223, 224, 0, 225, 226,
3302
227, 228, 229, 0, 0, 0, 0, 0, 230, 0,
3303
231, 508, 0, 232, 190, 191, 192, 0, 193, 194,
3304
195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
3305
205, 206, 207, 208, 209, 210, 211, 0, 212, 213,
3306
214, 0, 215, 216, 217, 0, 0, 0, 189, 0,
3307
218, 219, 0, 220, 221, 222, 0, 223, 224, 0,
3308
225, 226, 227, 228, 229, 0, 0, 0, 0, 0,
3309
230, 0, 231, 515, 0, 232, 190, 191, 192, 0,
3310
193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
3311
203, 204, 205, 206, 207, 208, 209, 210, 211, 0,
3312
212, 213, 214, 0, 215, 216, 217, 0, 0, 0,
3313
189, 0, 218, 219, 567, 220, 221, 222, 0, 223,
3314
224, 0, 225, 226, 227, 228, 229, 0, 0, 0,
3315
0, 0, 230, 0, 231, 0, 0, 232, 190, 191,
3316
192, 0, 193, 194, 195, 196, 197, 198, 199, 200,
3317
201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
3318
211, 0, 212, 213, 214, 0, 215, 216, 217, 0,
3319
0, 0, 189, 0, 218, 219, 0, 220, 221, 222,
3320
0, 223, 224, 0, 225, 226, 227, 228, 229, 0,
3321
0, 0, 0, 0, 230, 0, 231, 0, 0, 232,
3322
190, 191, 192, 0, 193, 194, 195, 196, 197, 198,
3323
199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
3324
209, 210, 211, 0, 212, 213, 214, 0, 215, 216,
3325
217, 0, 0, 0, 189, 0, 218, 219, 0, 220,
3326
221, 222, 0, 0, 224, 0, 225, 226, 227, 228,
3327
229, 0, 0, 0, 0, 0, 230, 0, 231, 0,
3328
0, 232, 190, 191, 192, 0, 193, 194, 195, 196,
3329
197, 198, 0, 0, 0, 0, 0, 0, 0, 0,
3330
0, 0, 0, 0, 0, 0, 212, 213, 214, 0,
3331
215, 216, 217, 0, 0, 0, 189, 0, 0, 0,
3332
0, 220, 221, 222, 0, 223, 224, 0, 225, 226,
3333
227, 228, 229, 0, 0, 0, 0, 0, 230, 0,
3334
231, 0, 0, 232, 190, 191, 192, 0, 193, 194,
3335
195, 196, 197, 198, 0, 0, 0, 0, 0, 0,
3336
0, 0, 0, 0, 0, 0, 0, 0, 212, 213,
3337
214, 0, 215, 216, 217, 0, 0, 0, 189, 0,
3338
0, 0, 0, 0, 221, 222, 0, 223, 224, 0,
3339
225, 226, 227, 228, 229, 0, 0, 0, 0, 0,
3340
230, 0, 231, 0, 0, 232, 190, 191, 192, 0,
3341
193, 194, 195, 196, 197, 198, 0, 0, 0, 0,
3342
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3343
212, 213, 214, 0, 215, 216, 217, 0, 0, 0,
3344
189, 0, 0, 0, 0, 0, 0, 222, 0, 223,
3345
224, 0, 225, 226, 227, 228, 229, 0, 0, 0,
3346
0, 0, 230, 0, 231, 0, 0, 232, 190, 191,
3347
192, 0, 193, 194, 195, 196, 197, 198, 0, 0,
3348
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3349
0, 0, 212, 213, 214, 0, 215, 216, 217, 0,
3350
0, 0, 189, 0, 0, 0, 0, 0, 0, -338,
3351
0, 223, 224, 0, 225, 226, 227, 228, 229, 0,
3352
0, 0, 0, 0, 230, 0, 231, 0, 0, 232,
3353
190, 191, 192, 0, -338, -338, -338, -338, 197, 198,
3354
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3355
0, 0, 0, 0, 212, 213, 214, 0, 215, 216,
3356
217, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3357
0, 0, 0, 223, 224, 0, 225, 226, 227, 228,
3358
229, 0, 0, 0, 0, 0, 230, 0, 231, 0,
3362
static const yytype_int16 yycheck[] =
3364
0, 0, 0, 0, 0, 108, 60, 19, 277, 67,
3365
142, 120, 24, 50, 3, 187, 28, 232, 446, 5,
3366
5, 361, 50, 3, 3, 3, 38, 541, 367, 41,
3367
42, 545, 546, 45, 46, 47, 48, 49, 461, 69,
3368
98, 92, 93, 94, 94, 128, 129, 535, 5, 12,
3369
102, 5, 505, 567, 54, 54, 54, 54, 54, 114,
3370
0, 102, 34, 112, 27, 0, 27, 116, 0, 124,
3371
584, 12, 33, 124, 104, 126, 126, 565, 129, 129,
3372
594, 504, 422, 135, 96, 538, 27, 3, 4, 35,
3373
62, 430, 147, 148, 135, 153, 124, 3, 4, 563,
3374
16, 17, 114, 91, 319, 51, 347, 3, 120, 5,
3375
16, 17, 124, 29, 54, 579, 95, 95, 124, 54,
3376
292, 230, 54, 29, 16, 3, 258, 396, 16, 344,
3377
142, 3, 4, 3, 4, 147, 148, 378, 477, 128,
3378
124, 124, 128, 128, 16, 17, 16, 17, 128, 3,
3379
4, 124, 128, 124, 111, 112, 129, 29, 112, 29,
3380
429, 3, 16, 17, 592, 0, 166, 166, 166, 166,
3381
166, 128, 128, 185, 128, 29, 188, 189, 190, 191,
3382
192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
3383
202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
3384
415, 117, 443, 215, 216, 217, 218, 219, 220, 221,
3385
222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
3386
102, 3, 128, 278, 279, 124, 166, 239, 400, 401,
3387
104, 166, 106, 12, 166, 124, 3, 4, 275, 129,
3388
240, 240, 240, 255, 485, 117, 258, 117, 260, 16,
3389
17, 214, 124, 129, 126, 364, 3, 526, 130, 104,
3390
130, 134, 29, 117, 102, 106, 278, 279, 127, 232,
3391
102, 3, 126, 3, 4, 3, 3, 128, 547, 242,
3392
16, 4, 16, 69, 525, 3, 16, 17, 251, 392,
3393
26, 394, 101, 348, 69, 18, 32, 20, 21, 29,
3394
23, 433, 25, 101, 16, 3, 36, 3, 3, 135,
3395
46, 102, 124, 129, 26, 38, 129, 375, 124, 31,
3396
32, 135, 106, 46, 47, 48, 49, 385, 135, 598,
3397
4, 343, 44, 135, 46, 3, 348, 5, 102, 351,
3398
8, 9, 10, 104, 18, 448, 20, 21, 3, 23,
3399
117, 25, 364, 353, 353, 353, 319, 3, 4, 126,
3400
134, 361, 361, 361, 38, 54, 3, 4, 54, 3,
3401
16, 17, 46, 47, 48, 49, 3, 4, 101, 16,
3402
17, 344, 104, 29, 104, 135, 91, 117, 442, 16,
3403
17, 494, 29, 134, 406, 128, 408, 91, 91, 411,
3404
363, 413, 29, 91, 3, 40, 127, 419, 15, 135,
3405
102, 134, 129, 425, 124, 134, 106, 104, 101, 135,
3406
128, 433, 422, 422, 422, 102, 438, 101, 134, 128,
3407
66, 135, 134, 68, 69, 70, 102, 72, 73, 74,
3408
75, 76, 77, 128, 135, 112, 104, 128, 40, 128,
3409
134, 124, 415, 135, 116, 90, 106, 92, 93, 94,
3410
134, 96, 97, 98, 111, 134, 3, 3, 26, 134,
3411
134, 117, 107, 108, 109, 116, 111, 112, 134, 114,
3412
115, 116, 117, 118, 76, 77, 128, 135, 128, 124,
3413
502, 126, 3, 112, 129, 495, 134, 509, 112, 124,
3414
92, 93, 94, 134, 96, 97, 98, 128, 134, 166,
3415
134, 54, 135, 353, 134, 98, 92, 93, 94, 111,
3416
112, 60, 114, 115, 116, 117, 118, 527, 527, 527,
3417
527, 527, 124, 533, 126, 453, 146, 129, 114, 115,
3418
116, 117, 118, 512, 512, 384, 483, 483, 124, 72,
3419
126, 573, 555, 129, 454, 555, 555, 555, 555, 555,
3420
475, 292, 27, 533, 448, 560, 426, 48, -1, -1,
3421
-1, -1, -1, 573, 573, 573, 573, 573, 0, 259,
3422
-1, 3, 4, 5, 6, -1, 8, 9, 10, 11,
3423
12, 13, 14, -1, -1, 17, 18, 19, 20, 21,
3424
22, 23, 24, 25, -1, -1, 28, 29, -1, -1,
3425
40, -1, -1, -1, 36, -1, 38, 39, -1, 41,
3426
-1, 43, -1, 45, -1, 47, 48, 49, -1, -1,
3427
52, 53, -1, 55, 56, -1, -1, -1, 68, 69,
3428
70, 63, 64, 65, -1, -1, 76, 77, -1, 71,
3429
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3430
-1, -1, 92, 93, 94, -1, 96, 97, 98, -1,
3431
92, 93, -1, -1, -1, -1, -1, -1, -1, 101,
3432
-1, 111, 112, -1, 114, 115, 116, 117, 118, 111,
3433
-1, -1, 114, -1, 124, -1, 126, 119, 120, 129,
3434
-1, -1, 124, -1, 126, -1, 128, -1, 130, -1,
3435
-1, -1, 134, 3, 4, 5, 6, -1, 8, 9,
3436
10, 11, 12, 13, 14, -1, -1, -1, 18, 19,
3437
20, 21, 22, 23, 24, 25, 26, -1, 28, 29,
3438
30, -1, 32, -1, -1, -1, 36, 37, 38, 39,
3439
-1, 41, 42, 43, -1, 45, 46, 47, 48, 49,
3440
-1, -1, 52, 53, -1, 55, 56, -1, -1, -1,
3441
4, -1, -1, 63, 64, 65, -1, 67, -1, -1,
3442
-1, 71, -1, -1, 18, -1, 20, 21, -1, 23,
3443
-1, 25, -1, -1, 92, 93, 94, -1, -1, -1,
3444
-1, -1, 92, 93, 38, -1, -1, -1, -1, -1,
3445
-1, 101, -1, 47, 48, 49, -1, -1, 116, 117,
3446
118, 111, -1, -1, 114, -1, 124, -1, 126, 119,
3447
120, 129, -1, -1, 124, -1, 126, -1, 128, -1,
3448
130, -1, -1, -1, 134, 3, 4, 5, 6, -1,
3449
8, 9, 10, 11, 12, 13, 14, -1, -1, -1,
3450
18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
3451
28, 29, 30, -1, 32, -1, -1, -1, 36, 37,
3452
38, 39, -1, 41, 42, 43, -1, 45, 46, 47,
3453
48, 49, -1, -1, 52, 53, -1, 55, 56, -1,
3454
-1, -1, -1, -1, -1, 63, 64, 65, -1, 67,
3455
-1, -1, -1, 71, -1, -1, -1, -1, -1, -1,
3456
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3457
-1, -1, -1, -1, 92, 93, -1, -1, -1, -1,
3458
-1, -1, -1, 101, -1, -1, -1, -1, -1, -1,
3459
-1, -1, -1, 111, -1, -1, 114, -1, -1, -1,
3460
-1, 119, 120, -1, -1, -1, 124, -1, 126, -1,
3461
128, -1, 130, -1, -1, -1, 134, 3, 4, 5,
3462
6, -1, 8, 9, 10, 11, 12, 13, 14, -1,
3463
-1, -1, 18, 19, 20, 21, 22, 23, 24, 25,
3464
26, -1, 28, 29, 30, -1, 32, -1, -1, -1,
3465
36, 37, 38, 39, -1, 41, 42, 43, -1, 45,
3466
46, 47, 48, 49, -1, -1, 52, 53, -1, 55,
3467
56, -1, -1, -1, -1, -1, -1, 63, 64, 65,
3468
-1, 67, -1, -1, -1, 71, -1, -1, -1, -1,
3469
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3470
-1, -1, -1, -1, -1, -1, 92, 93, -1, -1,
3471
-1, -1, -1, -1, -1, 101, -1, -1, -1, -1,
3472
-1, -1, -1, -1, -1, 111, -1, -1, 114, -1,
3473
-1, -1, -1, 119, 120, -1, -1, -1, 124, -1,
3474
126, -1, 128, -1, 130, -1, -1, -1, 134, 3,
3475
4, 5, 6, -1, 8, 9, 10, 11, 12, 13,
3476
14, -1, -1, 17, 18, 19, 20, 21, 22, 23,
3477
24, 25, -1, -1, 28, 29, -1, -1, -1, -1,
3478
-1, -1, 36, -1, 38, 39, -1, 41, -1, 43,
3479
-1, 45, -1, 47, 48, 49, -1, -1, 52, 53,
3480
-1, 55, 56, -1, -1, -1, -1, -1, -1, 63,
3481
64, 65, -1, -1, -1, -1, -1, 71, -1, -1,
3482
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3483
-1, -1, -1, -1, -1, -1, -1, -1, 92, 93,
3484
-1, -1, -1, -1, -1, -1, -1, 101, -1, -1,
3485
-1, -1, -1, -1, -1, -1, -1, 111, -1, -1,
3486
114, -1, -1, -1, -1, 119, 120, -1, -1, -1,
3487
124, -1, 126, -1, 128, -1, 130, -1, -1, -1,
3488
134, 3, 4, 5, 6, -1, 8, 9, 10, 11,
3489
12, 13, 14, -1, -1, -1, 18, 19, 20, 21,
3490
22, 23, 24, 25, -1, -1, 28, 29, -1, -1,
3491
-1, -1, -1, -1, 36, -1, 38, 39, -1, 41,
3492
-1, 43, -1, 45, -1, 47, 48, 49, -1, -1,
3493
52, 53, -1, 55, 56, -1, -1, -1, -1, -1,
3494
-1, 63, 64, 65, -1, -1, -1, -1, -1, 71,
3495
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3496
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3497
92, 93, -1, -1, -1, -1, -1, -1, -1, 101,
3498
-1, -1, -1, -1, -1, -1, -1, -1, -1, 111,
3499
-1, -1, 114, -1, -1, -1, -1, 119, 120, -1,
3500
-1, -1, 124, -1, 126, -1, 128, -1, 130, -1,
3501
-1, -1, 134, 3, 4, 5, 6, -1, 8, 9,
3502
10, 11, 12, 13, 14, -1, -1, -1, 18, 19,
3503
20, 21, 22, 23, 24, 25, -1, -1, 28, 29,
3504
-1, -1, -1, -1, -1, -1, 36, -1, 38, 39,
3505
-1, 41, -1, 43, -1, 45, -1, 47, 48, 49,
3506
-1, -1, 52, 53, -1, 55, 56, -1, -1, -1,
3507
-1, -1, -1, 63, 64, 65, -1, -1, -1, -1,
3508
-1, 71, -1, -1, -1, -1, -1, -1, -1, -1,
3509
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3510
-1, -1, 92, 93, -1, -1, -1, -1, -1, -1,
3511
-1, 101, -1, -1, -1, -1, -1, -1, -1, -1,
3512
-1, 111, -1, -1, 114, -1, -1, -1, -1, 119,
3513
120, -1, -1, -1, 124, -1, 126, -1, 128, -1,
3514
130, -1, -1, -1, 134, 3, 4, 5, 6, -1,
3515
8, 9, 10, 11, 12, 13, 14, -1, -1, -1,
3516
18, 19, 20, 21, 22, 23, 24, 25, -1, -1,
3517
28, 29, -1, -1, -1, -1, -1, -1, 36, -1,
3518
38, 39, -1, 41, -1, 43, -1, 45, -1, 47,
3519
48, 49, -1, -1, 52, 53, -1, 55, 56, -1,
3520
-1, -1, -1, -1, -1, 63, 64, 65, -1, -1,
3521
-1, -1, -1, 71, -1, -1, -1, -1, -1, -1,
3522
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3523
-1, -1, -1, -1, 92, 93, -1, -1, -1, -1,
3524
-1, -1, -1, 101, -1, -1, -1, -1, -1, -1,
3525
-1, -1, -1, 111, -1, -1, 114, -1, -1, -1,
3526
-1, 119, 120, -1, -1, -1, 124, -1, 126, -1,
3527
128, -1, 130, -1, -1, -1, 134, 3, 4, 5,
3528
6, -1, 8, 9, 10, 11, 12, 13, 14, -1,
3529
-1, -1, 18, 19, 20, 21, 22, 23, 24, 25,
3530
-1, -1, 28, 29, -1, -1, -1, -1, -1, -1,
3531
36, -1, 38, 39, -1, 41, -1, 43, -1, 45,
3532
-1, 47, 48, 49, -1, -1, 52, 53, -1, 55,
3533
56, -1, -1, -1, -1, -1, -1, 63, 64, 65,
3534
-1, -1, -1, -1, -1, 71, -1, -1, -1, -1,
3535
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3536
-1, -1, -1, -1, -1, -1, 92, 93, -1, -1,
3537
-1, -1, -1, -1, -1, 101, -1, -1, -1, -1,
3538
-1, -1, -1, -1, -1, 111, -1, -1, 114, -1,
3539
-1, -1, -1, 119, 120, -1, -1, -1, 124, -1,
3540
126, -1, 128, -1, 130, -1, 0, -1, 134, 3,
3541
4, 5, 6, -1, 8, 9, 10, 11, 12, 13,
3542
14, -1, -1, 17, 18, 19, 20, 21, 22, 23,
3543
24, 25, -1, -1, 28, 29, -1, -1, -1, -1,
3544
-1, -1, 36, -1, 38, 39, -1, 41, -1, 43,
3545
-1, 45, -1, 47, 48, 49, -1, -1, 52, 53,
3546
-1, 55, 56, -1, -1, -1, -1, -1, -1, 63,
3547
64, 65, -1, -1, -1, -1, -1, 71, -1, -1,
3548
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3549
-1, -1, -1, -1, -1, -1, -1, -1, 92, 93,
3550
-1, -1, -1, -1, -1, -1, -1, 101, -1, -1,
3551
-1, -1, -1, -1, -1, -1, -1, 111, -1, -1,
3552
114, -1, -1, -1, -1, 119, 120, -1, -1, -1,
3553
124, -1, 126, -1, 128, -1, 130, 3, 4, 5,
3554
6, -1, 8, 9, 10, 11, 12, 13, 14, -1,
3555
16, -1, 18, 19, 20, 21, 22, 23, 24, 25,
3556
26, -1, 28, 29, 30, -1, 32, -1, -1, -1,
3557
36, 37, 38, 39, -1, 41, 42, 43, -1, 45,
3558
46, 47, 48, 49, -1, -1, 52, 53, -1, 55,
3559
56, -1, -1, -1, -1, -1, -1, 63, 64, 65,
3560
-1, 67, -1, -1, -1, 71, -1, -1, -1, -1,
3561
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3562
-1, -1, -1, -1, -1, -1, 92, 93, -1, -1,
3563
-1, -1, -1, -1, -1, 101, -1, -1, -1, -1,
3564
-1, -1, -1, -1, -1, 111, -1, -1, 114, -1,
3565
-1, -1, -1, 119, 120, -1, -1, -1, 124, -1,
3566
126, -1, 128, -1, 130, 3, 4, 5, 6, -1,
3567
8, 9, 10, 11, 12, 13, 14, -1, -1, -1,
3568
18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
3569
28, 29, 30, -1, 32, -1, -1, -1, 36, 37,
3570
38, 39, -1, 41, 42, 43, -1, 45, 46, 47,
3571
48, 49, -1, -1, 52, 53, -1, 55, 56, -1,
3572
-1, -1, -1, -1, -1, 63, 64, 65, -1, 67,
3573
-1, -1, -1, 71, -1, -1, -1, -1, -1, -1,
3574
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3575
-1, -1, -1, -1, 92, 93, -1, -1, -1, -1,
3576
-1, -1, -1, 101, -1, -1, -1, -1, -1, -1,
3577
-1, -1, -1, 111, -1, -1, 114, -1, -1, -1,
3578
-1, 119, 120, -1, -1, -1, 124, -1, 126, -1,
3579
128, 3, 130, 5, 6, -1, 8, 9, 10, -1,
3580
-1, -1, -1, -1, -1, -1, -1, 19, -1, -1,
3581
-1, -1, 24, -1, 26, -1, 28, 29, -1, -1,
3582
32, -1, -1, -1, 36, -1, -1, -1, -1, -1,
3583
-1, 43, -1, 45, 46, -1, -1, -1, -1, -1,
3584
-1, 53, -1, 55, 56, -1, -1, -1, -1, -1,
3585
-1, -1, 64, -1, -1, -1, -1, -1, -1, 71,
3586
-1, -1, -1, 3, -1, 5, 6, -1, 8, 9,
3587
10, -1, -1, -1, -1, -1, -1, -1, -1, 19,
3588
92, 93, -1, -1, 24, -1, 26, -1, 28, 29,
3589
-1, -1, -1, -1, -1, -1, 36, -1, -1, 111,
3590
-1, -1, 114, 43, -1, 45, -1, 119, 120, -1,
3591
-1, -1, 124, 53, 126, 55, 56, -1, 130, -1,
3592
3, -1, 5, 6, 64, 8, 9, 10, -1, -1,
3593
-1, 71, -1, -1, -1, -1, 19, -1, -1, -1,
3594
-1, 24, -1, 26, -1, 28, 29, -1, -1, -1,
3595
-1, -1, 92, 93, -1, -1, -1, -1, -1, -1,
3596
-1, -1, 45, -1, -1, -1, -1, -1, -1, -1,
3597
53, 111, 55, 56, 114, -1, -1, -1, -1, 119,
3598
120, -1, -1, -1, 124, -1, 126, -1, 71, -1,
3599
130, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3600
-1, -1, -1, -1, -1, -1, -1, -1, -1, 92,
3601
93, -1, -1, -1, -1, -1, 40, -1, -1, -1,
3602
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3603
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3604
-1, 124, -1, 126, 68, 69, 70, 130, 72, 73,
3605
74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
3606
84, 85, 86, 87, 88, 89, 90, -1, 92, 93,
3607
94, -1, 96, 97, 98, -1, -1, -1, -1, -1,
3608
104, 105, -1, 107, 108, 109, 40, 111, 112, -1,
3609
114, 115, 116, 117, 118, -1, -1, -1, -1, -1,
3610
124, -1, 126, -1, -1, 129, -1, -1, -1, -1,
3611
-1, 135, -1, -1, 68, 69, 70, -1, 72, 73,
3612
74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
3613
84, 85, 86, 87, 88, 89, 90, -1, 92, 93,
3614
94, -1, 96, 97, 98, -1, -1, -1, -1, -1,
3615
104, 105, -1, 107, 108, 109, 40, 111, 112, -1,
3616
114, 115, 116, 117, 118, -1, -1, -1, -1, -1,
3617
124, -1, 126, -1, -1, 129, -1, -1, -1, -1,
3618
-1, 135, -1, -1, 68, 69, 70, -1, 72, 73,
3619
74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
3620
84, 85, 86, 87, 88, 89, 90, -1, 92, 93,
3621
94, -1, 96, 97, 98, -1, -1, -1, 40, -1,
3622
104, 105, 106, 107, 108, 109, -1, 111, 112, -1,
3623
114, 115, 116, 117, 118, -1, -1, -1, -1, -1,
3624
124, -1, 126, -1, -1, 129, 68, 69, 70, -1,
3625
72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
3626
82, 83, 84, 85, 86, 87, 88, 89, 90, -1,
3627
92, 93, 94, -1, 96, 97, 98, -1, -1, -1,
3628
40, -1, 104, 105, -1, 107, 108, 109, -1, 111,
3629
112, -1, 114, 115, 116, 117, 118, -1, -1, -1,
3630
-1, -1, 124, -1, 126, 127, -1, 129, 68, 69,
3631
70, -1, 72, 73, 74, 75, 76, 77, 78, 79,
3632
80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
3633
90, -1, 92, 93, 94, -1, 96, 97, 98, -1,
3634
-1, -1, 40, -1, 104, 105, -1, 107, 108, 109,
3635
-1, 111, 112, -1, 114, 115, 116, 117, 118, -1,
3636
-1, -1, -1, -1, 124, -1, 126, 127, -1, 129,
3637
68, 69, 70, -1, 72, 73, 74, 75, 76, 77,
3638
78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
3639
88, 89, 90, -1, 92, 93, 94, -1, 96, 97,
3640
98, -1, -1, -1, 40, -1, 104, 105, -1, 107,
3641
108, 109, -1, 111, 112, -1, 114, 115, 116, 117,
3642
118, -1, -1, -1, -1, -1, 124, -1, 126, 127,
3643
-1, 129, 68, 69, 70, -1, 72, 73, 74, 75,
3644
76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
3645
86, 87, 88, 89, 90, -1, 92, 93, 94, -1,
3646
96, 97, 98, -1, -1, -1, 40, -1, 104, 105,
3647
-1, 107, 108, 109, -1, 111, 112, -1, 114, 115,
3648
116, 117, 118, -1, -1, -1, -1, -1, 124, -1,
3649
126, 127, -1, 129, 68, 69, 70, -1, 72, 73,
3650
74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
3651
84, 85, 86, 87, 88, 89, 90, -1, 92, 93,
3652
94, -1, 96, 97, 98, -1, -1, -1, 40, -1,
3653
104, 105, -1, 107, 108, 109, -1, 111, 112, -1,
3654
114, 115, 116, 117, 118, -1, -1, -1, -1, -1,
3655
124, -1, 126, 127, -1, 129, 68, 69, 70, -1,
3656
72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
3657
82, 83, 84, 85, 86, 87, 88, 89, 90, -1,
3658
92, 93, 94, -1, 96, 97, 98, -1, -1, -1,
3659
40, -1, 104, 105, 106, 107, 108, 109, -1, 111,
3660
112, -1, 114, 115, 116, 117, 118, -1, -1, -1,
3661
-1, -1, 124, -1, 126, -1, -1, 129, 68, 69,
3662
70, -1, 72, 73, 74, 75, 76, 77, 78, 79,
3663
80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
3664
90, -1, 92, 93, 94, -1, 96, 97, 98, -1,
3665
-1, -1, 40, -1, 104, 105, -1, 107, 108, 109,
3666
-1, 111, 112, -1, 114, 115, 116, 117, 118, -1,
3667
-1, -1, -1, -1, 124, -1, 126, -1, -1, 129,
3668
68, 69, 70, -1, 72, 73, 74, 75, 76, 77,
3669
78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
3670
88, 89, 90, -1, 92, 93, 94, -1, 96, 97,
3671
98, -1, -1, -1, 40, -1, 104, 105, -1, 107,
3672
108, 109, -1, -1, 112, -1, 114, 115, 116, 117,
3673
118, -1, -1, -1, -1, -1, 124, -1, 126, -1,
3674
-1, 129, 68, 69, 70, -1, 72, 73, 74, 75,
3675
76, 77, -1, -1, -1, -1, -1, -1, -1, -1,
3676
-1, -1, -1, -1, -1, -1, 92, 93, 94, -1,
3677
96, 97, 98, -1, -1, -1, 40, -1, -1, -1,
3678
-1, 107, 108, 109, -1, 111, 112, -1, 114, 115,
3679
116, 117, 118, -1, -1, -1, -1, -1, 124, -1,
3680
126, -1, -1, 129, 68, 69, 70, -1, 72, 73,
3681
74, 75, 76, 77, -1, -1, -1, -1, -1, -1,
3682
-1, -1, -1, -1, -1, -1, -1, -1, 92, 93,
3683
94, -1, 96, 97, 98, -1, -1, -1, 40, -1,
3684
-1, -1, -1, -1, 108, 109, -1, 111, 112, -1,
3685
114, 115, 116, 117, 118, -1, -1, -1, -1, -1,
3686
124, -1, 126, -1, -1, 129, 68, 69, 70, -1,
3687
72, 73, 74, 75, 76, 77, -1, -1, -1, -1,
3688
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3689
92, 93, 94, -1, 96, 97, 98, -1, -1, -1,
3690
40, -1, -1, -1, -1, -1, -1, 109, -1, 111,
3691
112, -1, 114, 115, 116, 117, 118, -1, -1, -1,
3692
-1, -1, 124, -1, 126, -1, -1, 129, 68, 69,
3693
70, -1, 72, 73, 74, 75, 76, 77, -1, -1,
3694
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3695
-1, -1, 92, 93, 94, -1, 96, 97, 98, -1,
3696
-1, -1, 40, -1, -1, -1, -1, -1, -1, 109,
3697
-1, 111, 112, -1, 114, 115, 116, 117, 118, -1,
3698
-1, -1, -1, -1, 124, -1, 126, -1, -1, 129,
3699
68, 69, 70, -1, 72, 73, 74, 75, 76, 77,
3700
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3701
-1, -1, -1, -1, 92, 93, 94, -1, 96, 97,
3702
98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3703
-1, -1, -1, 111, 112, -1, 114, 115, 116, 117,
3704
118, -1, -1, -1, -1, -1, 124, -1, 126, -1,
3708
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
3709
symbol of state STATE-NUM. */
3710
static const yytype_uint16 yystos[] =
3712
0, 3, 4, 5, 6, 8, 9, 10, 11, 12,
3713
13, 14, 17, 18, 19, 20, 21, 22, 23, 24,
3714
25, 26, 28, 29, 36, 38, 39, 41, 43, 45,
3715
47, 48, 49, 52, 53, 55, 56, 63, 64, 65,
3716
71, 92, 93, 101, 111, 114, 119, 120, 124, 126,
3717
128, 130, 137, 138, 139, 140, 146, 149, 151, 159,
3718
162, 163, 164, 165, 166, 173, 181, 184, 185, 188,
3719
191, 192, 193, 194, 198, 200, 209, 214, 215, 216,
3720
227, 234, 237, 250, 251, 252, 257, 261, 265, 266,
3721
268, 269, 270, 91, 50, 124, 124, 156, 157, 124,
3722
3, 4, 16, 17, 29, 128, 186, 187, 16, 3,
3723
261, 3, 236, 261, 124, 3, 187, 240, 261, 128,
3724
124, 129, 16, 261, 124, 3, 5, 8, 9, 10,
3725
258, 259, 260, 261, 261, 261, 261, 261, 256, 261,
3726
246, 247, 248, 254, 261, 30, 32, 37, 42, 46,
3727
67, 101, 134, 145, 146, 147, 151, 153, 167, 168,
3728
183, 192, 253, 3, 0, 140, 128, 3, 46, 153,
3729
160, 161, 257, 147, 148, 16, 26, 31, 32, 44,
3730
46, 208, 267, 194, 3, 128, 221, 225, 102, 40,
3731
68, 69, 70, 72, 73, 74, 75, 76, 77, 78,
3732
79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
3733
89, 90, 92, 93, 94, 96, 97, 98, 104, 105,
3734
107, 108, 109, 111, 112, 114, 115, 116, 117, 118,
3735
124, 126, 129, 3, 124, 255, 256, 12, 148, 174,
3736
190, 128, 129, 186, 187, 239, 240, 241, 249, 124,
3737
255, 129, 182, 246, 3, 104, 255, 134, 106, 102,
3738
102, 135, 127, 102, 254, 3, 3, 154, 155, 255,
3739
255, 154, 3, 134, 147, 128, 138, 3, 101, 69,
3740
101, 3, 35, 51, 233, 3, 3, 210, 261, 3,
3741
221, 226, 228, 229, 261, 261, 261, 261, 261, 261,
3742
261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
3743
261, 261, 261, 261, 261, 261, 261, 261, 117, 130,
3744
186, 264, 261, 261, 261, 261, 261, 261, 261, 261,
3745
261, 261, 261, 261, 261, 261, 261, 246, 261, 3,
3746
4, 117, 124, 126, 130, 263, 264, 135, 124, 261,
3747
101, 126, 141, 142, 143, 149, 151, 198, 200, 209,
3748
234, 189, 186, 129, 124, 245, 3, 95, 230, 231,
3749
232, 135, 117, 186, 144, 145, 135, 261, 135, 254,
3750
259, 261, 106, 244, 102, 145, 134, 244, 255, 255,
3751
104, 3, 54, 195, 54, 196, 3, 211, 212, 222,
3752
104, 104, 112, 116, 217, 229, 126, 264, 106, 135,
3753
127, 262, 261, 126, 264, 91, 156, 255, 135, 150,
3754
134, 143, 128, 141, 246, 104, 106, 213, 232, 135,
3755
102, 134, 156, 106, 36, 117, 241, 243, 104, 152,
3756
155, 134, 101, 135, 3, 5, 124, 241, 15, 197,
3757
241, 242, 128, 244, 102, 134, 5, 221, 5, 221,
3758
218, 223, 261, 261, 261, 127, 261, 264, 135, 128,
3759
261, 141, 134, 135, 261, 243, 244, 95, 232, 27,
3760
33, 175, 177, 179, 180, 66, 158, 254, 261, 257,
3761
156, 230, 242, 128, 102, 201, 152, 212, 112, 5,
3762
111, 112, 128, 219, 224, 227, 127, 135, 127, 34,
3763
62, 169, 170, 171, 172, 127, 134, 213, 128, 232,
3764
128, 124, 175, 177, 156, 135, 135, 199, 241, 46,
3765
101, 192, 205, 206, 207, 116, 261, 111, 227, 223,
3766
261, 106, 134, 171, 172, 238, 178, 3, 156, 244,
3767
101, 146, 151, 192, 202, 203, 204, 209, 234, 3,
3768
26, 134, 207, 225, 220, 116, 223, 106, 144, 144,
3769
144, 244, 128, 128, 134, 204, 233, 218, 134, 225,
3770
144, 134, 134, 135, 235, 202, 3, 112, 218, 176,
3771
144, 134, 124, 112, 128, 134, 230, 144, 135, 134,
3775
#define yyerrok (yyerrstatus = 0)
3776
#define yyclearin (yychar = YYEMPTY)
3777
#define YYEMPTY (-2)
3780
#define YYACCEPT goto yyacceptlab
3781
#define YYABORT goto yyabortlab
3782
#define YYERROR goto yyerrorlab
3785
/* Like YYERROR except do call yyerror. This remains here temporarily
3786
to ease the transition to the new meaning of YYERROR, for GCC.
3787
Once GCC version 2 has supplanted version 1, this can go. */
3789
#define YYFAIL goto yyerrlab
3791
#define YYRECOVERING() (!!yyerrstatus)
3793
#define YYBACKUP(Token, Value) \
3795
if (yychar == YYEMPTY && yylen == 1) \
3799
yytoken = YYTRANSLATE (yychar); \
3805
yyerror (YY_("syntax error: cannot back up")); \
3812
#define YYERRCODE 256
3815
/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
3816
If N is 0, then set CURRENT to the empty location which ends
3817
the previous symbol: RHS[0] (always defined). */
3819
#define YYRHSLOC(Rhs, K) ((Rhs)[K])
3820
#ifndef YYLLOC_DEFAULT
3821
# define YYLLOC_DEFAULT(Current, Rhs, N) \
3825
(Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
3826
(Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
3827
(Current).last_line = YYRHSLOC (Rhs, N).last_line; \
3828
(Current).last_column = YYRHSLOC (Rhs, N).last_column; \
3832
(Current).first_line = (Current).last_line = \
3833
YYRHSLOC (Rhs, 0).last_line; \
3834
(Current).first_column = (Current).last_column = \
3835
YYRHSLOC (Rhs, 0).last_column; \
3841
/* YY_LOCATION_PRINT -- Print the location on the stream.
3842
This macro was not mandated originally: define only if we know
3843
we won't break user code: when these are the locations we know. */
3845
#ifndef YY_LOCATION_PRINT
3846
# if YYLTYPE_IS_TRIVIAL
3847
# define YY_LOCATION_PRINT(File, Loc) \
3848
fprintf (File, "%d.%d-%d.%d", \
3849
(Loc).first_line, (Loc).first_column, \
3850
(Loc).last_line, (Loc).last_column)
3852
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
3857
/* YYLEX -- calling `yylex' with the right arguments. */
3860
# define YYLEX yylex (YYLEX_PARAM)
3862
# define YYLEX yylex ()
3865
/* Enable debugging if requested. */
3869
# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
3870
# define YYFPRINTF fprintf
3873
# define YYDPRINTF(Args) \
3879
# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
3883
YYFPRINTF (stderr, "%s ", Title); \
3884
yy_symbol_print (stderr, \
3886
YYFPRINTF (stderr, "\n"); \
3891
/*--------------------------------.
3892
| Print this symbol on YYOUTPUT. |
3893
`--------------------------------*/
3896
#if (defined __STDC__ || defined __C99__FUNC__ \
3897
|| defined __cplusplus || defined _MSC_VER)
3899
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
3902
yy_symbol_value_print (yyoutput, yytype, yyvaluep)
3905
YYSTYPE const * const yyvaluep;
3911
if (yytype < YYNTOKENS)
3912
YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
3924
/*--------------------------------.
3925
| Print this symbol on YYOUTPUT. |
3926
`--------------------------------*/
3928
#if (defined __STDC__ || defined __C99__FUNC__ \
3929
|| defined __cplusplus || defined _MSC_VER)
3931
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
3934
yy_symbol_print (yyoutput, yytype, yyvaluep)
3937
YYSTYPE const * const yyvaluep;
3940
if (yytype < YYNTOKENS)
3941
YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
3943
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
3945
yy_symbol_value_print (yyoutput, yytype, yyvaluep);
3946
YYFPRINTF (yyoutput, ")");
3949
/*------------------------------------------------------------------.
3950
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
3952
`------------------------------------------------------------------*/
3954
#if (defined __STDC__ || defined __C99__FUNC__ \
3955
|| defined __cplusplus || defined _MSC_VER)
3957
yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
3960
yy_stack_print (yybottom, yytop)
3961
yytype_int16 *yybottom;
3962
yytype_int16 *yytop;
3965
YYFPRINTF (stderr, "Stack now");
3966
for (; yybottom <= yytop; yybottom++)
3968
int yybot = *yybottom;
3969
YYFPRINTF (stderr, " %d", yybot);
3971
YYFPRINTF (stderr, "\n");
3974
# define YY_STACK_PRINT(Bottom, Top) \
3977
yy_stack_print ((Bottom), (Top)); \
3981
/*------------------------------------------------.
3982
| Report that the YYRULE is going to be reduced. |
3983
`------------------------------------------------*/
3985
#if (defined __STDC__ || defined __C99__FUNC__ \
3986
|| defined __cplusplus || defined _MSC_VER)
3988
yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
3991
yy_reduce_print (yyvsp, yyrule)
3996
int yynrhs = yyr2[yyrule];
3998
unsigned long int yylno = yyrline[yyrule];
3999
YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
4001
/* The symbols being reduced. */
4002
for (yyi = 0; yyi < yynrhs; yyi++)
4004
YYFPRINTF (stderr, " $%d = ", yyi + 1);
4005
yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
4006
&(yyvsp[(yyi + 1) - (yynrhs)])
4008
YYFPRINTF (stderr, "\n");
4012
# define YY_REDUCE_PRINT(Rule) \
4015
yy_reduce_print (yyvsp, Rule); \
4018
/* Nonzero means print parse trace. It is left uninitialized so that
4019
multiple parsers can coexist. */
4021
#else /* !YYDEBUG */
4022
# define YYDPRINTF(Args)
4023
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
4024
# define YY_STACK_PRINT(Bottom, Top)
4025
# define YY_REDUCE_PRINT(Rule)
4026
#endif /* !YYDEBUG */
4029
/* YYINITDEPTH -- initial size of the parser's stacks. */
4031
# define YYINITDEPTH 200
4034
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
4035
if the built-in stack extension method is used).
4037
Do not make this value too large; the results are undefined if
4038
YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
4039
evaluated with infinite-precision integer arithmetic. */
4042
# define YYMAXDEPTH 10000
4050
# if defined __GLIBC__ && defined _STRING_H
4051
# define yystrlen strlen
4053
/* Return the length of YYSTR. */
4054
#if (defined __STDC__ || defined __C99__FUNC__ \
4055
|| defined __cplusplus || defined _MSC_VER)
4057
yystrlen (const char *yystr)
4065
for (yylen = 0; yystr[yylen]; yylen++)
4073
# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
4074
# define yystpcpy stpcpy
4076
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
4078
#if (defined __STDC__ || defined __C99__FUNC__ \
4079
|| defined __cplusplus || defined _MSC_VER)
4081
yystpcpy (char *yydest, const char *yysrc)
4084
yystpcpy (yydest, yysrc)
4090
const char *yys = yysrc;
4092
while ((*yyd++ = *yys++) != '\0')
4101
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
4102
quotes and backslashes, so that it's suitable for yyerror. The
4103
heuristic is that double-quoting is unnecessary unless the string
4104
contains an apostrophe, a comma, or backslash (other than
4105
backslash-backslash). YYSTR is taken from yytname. If YYRES is
4106
null, do not copy; instead, return the length of what the result
4109
yytnamerr (char *yyres, const char *yystr)
4114
char const *yyp = yystr;
4121
goto do_not_strip_quotes;
4125
goto do_not_strip_quotes;
4138
do_not_strip_quotes: ;
4142
return yystrlen (yystr);
4144
return yystpcpy (yyres, yystr) - yyres;
4148
/* Copy into YYRESULT an error message about the unexpected token
4149
YYCHAR while in state YYSTATE. Return the number of bytes copied,
4150
including the terminating null byte. If YYRESULT is null, do not
4151
copy anything; just return the number of bytes that would be
4152
copied. As a special case, return 0 if an ordinary "syntax error"
4153
message will do. Return YYSIZE_MAXIMUM if overflow occurs during
4154
size calculation. */
4156
yysyntax_error (char *yyresult, int yystate, int yychar)
4158
int yyn = yypact[yystate];
4160
if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
4164
int yytype = YYTRANSLATE (yychar);
4165
YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
4166
YYSIZE_T yysize = yysize0;
4168
int yysize_overflow = 0;
4169
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
4170
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
4174
/* This is so xgettext sees the translatable formats that are
4175
constructed on the fly. */
4176
YY_("syntax error, unexpected %s");
4177
YY_("syntax error, unexpected %s, expecting %s");
4178
YY_("syntax error, unexpected %s, expecting %s or %s");
4179
YY_("syntax error, unexpected %s, expecting %s or %s or %s");
4180
YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
4184
static char const yyunexpected[] = "syntax error, unexpected %s";
4185
static char const yyexpecting[] = ", expecting %s";
4186
static char const yyor[] = " or %s";
4187
char yyformat[sizeof yyunexpected
4188
+ sizeof yyexpecting - 1
4189
+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
4190
* (sizeof yyor - 1))];
4191
char const *yyprefix = yyexpecting;
4193
/* Start YYX at -YYN if negative to avoid negative indexes in
4195
int yyxbegin = yyn < 0 ? -yyn : 0;
4197
/* Stay within bounds of both yycheck and yytname. */
4198
int yychecklim = YYLAST - yyn + 1;
4199
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
4202
yyarg[0] = yytname[yytype];
4203
yyfmt = yystpcpy (yyformat, yyunexpected);
4205
for (yyx = yyxbegin; yyx < yyxend; ++yyx)
4206
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4208
if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
4212
yyformat[sizeof yyunexpected - 1] = '\0';
4215
yyarg[yycount++] = yytname[yyx];
4216
yysize1 = yysize + yytnamerr (0, yytname[yyx]);
4217
yysize_overflow |= (yysize1 < yysize);
4219
yyfmt = yystpcpy (yyfmt, yyprefix);
4223
yyf = YY_(yyformat);
4224
yysize1 = yysize + yystrlen (yyf);
4225
yysize_overflow |= (yysize1 < yysize);
4228
if (yysize_overflow)
4229
return YYSIZE_MAXIMUM;
4233
/* Avoid sprintf, as that infringes on the user's name space.
4234
Don't have undefined behavior even if the translation
4235
produced a string with the wrong number of "%s"s. */
4236
char *yyp = yyresult;
4238
while ((*yyp = *yyf) != '\0')
4240
if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
4242
yyp += yytnamerr (yyp, yyarg[yyi++]);
4255
#endif /* YYERROR_VERBOSE */
4258
/*-----------------------------------------------.
4259
| Release the memory associated to this symbol. |
4260
`-----------------------------------------------*/
4263
#if (defined __STDC__ || defined __C99__FUNC__ \
4264
|| defined __cplusplus || defined _MSC_VER)
4266
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
4269
yydestruct (yymsg, yytype, yyvaluep)
4279
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
4289
/* Prevent warnings from -Wmissing-prototypes. */
4290
#ifdef YYPARSE_PARAM
4291
#if defined __STDC__ || defined __cplusplus
4292
int yyparse (void *YYPARSE_PARAM);
4296
#else /* ! YYPARSE_PARAM */
4297
#if defined __STDC__ || defined __cplusplus
4302
#endif /* ! YYPARSE_PARAM */
4305
/* The lookahead symbol. */
4308
/* The semantic value of the lookahead symbol. */
4311
/* Number of syntax errors so far. */
4316
/*-------------------------.
4317
| yyparse or yypush_parse. |
4318
`-------------------------*/
4320
#ifdef YYPARSE_PARAM
4321
#if (defined __STDC__ || defined __C99__FUNC__ \
4322
|| defined __cplusplus || defined _MSC_VER)
4324
yyparse (void *YYPARSE_PARAM)
4327
yyparse (YYPARSE_PARAM)
4328
void *YYPARSE_PARAM;
4330
#else /* ! YYPARSE_PARAM */
4331
#if (defined __STDC__ || defined __C99__FUNC__ \
4332
|| defined __cplusplus || defined _MSC_VER)
4345
/* Number of tokens to shift before error messages enabled. */
4348
/* The stacks and their tools:
4349
`yyss': related to states.
4350
`yyvs': related to semantic values.
4352
Refer to the stacks thru separate pointers, to allow yyoverflow
4353
to reallocate them elsewhere. */
4355
/* The state stack. */
4356
yytype_int16 yyssa[YYINITDEPTH];
4358
yytype_int16 *yyssp;
4360
/* The semantic value stack. */
4361
YYSTYPE yyvsa[YYINITDEPTH];
4365
YYSIZE_T yystacksize;
4369
/* Lookahead token as an internal (translated) token number. */
4371
/* The variables used to return semantic value and location from the
4376
/* Buffer for error messages, and its allocated size. */
4378
char *yymsg = yymsgbuf;
4379
YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
4382
#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
4384
/* The number of symbols on the RHS of the reduced rule.
4385
Keep to zero when no symbol should be popped. */
4391
yystacksize = YYINITDEPTH;
4393
YYDPRINTF ((stderr, "Starting parse\n"));
4398
yychar = YYEMPTY; /* Cause a token to be read. */
4400
/* Initialize stack pointers.
4401
Waste one element of value and location stack
4402
so that they stay on the same level as the state stack.
4403
The wasted elements are never initialized. */
4409
/*------------------------------------------------------------.
4410
| yynewstate -- Push a new state, which is found in yystate. |
4411
`------------------------------------------------------------*/
4413
/* In all cases, when you get here, the value and location stacks
4414
have just been pushed. So pushing a state here evens the stacks. */
4420
if (yyss + yystacksize - 1 <= yyssp)
4422
/* Get the current used size of the three stacks, in elements. */
4423
YYSIZE_T yysize = yyssp - yyss + 1;
4427
/* Give user a chance to reallocate the stack. Use copies of
4428
these so that the &'s don't force the real ones into
4430
YYSTYPE *yyvs1 = yyvs;
4431
yytype_int16 *yyss1 = yyss;
4433
/* Each stack pointer address is followed by the size of the
4434
data in use in that stack, in bytes. This used to be a
4435
conditional around just the two extra args, but that might
4436
be undefined if yyoverflow is a macro. */
4437
yyoverflow (YY_("memory exhausted"),
4438
&yyss1, yysize * sizeof (*yyssp),
4439
&yyvs1, yysize * sizeof (*yyvsp),
4445
#else /* no yyoverflow */
4446
# ifndef YYSTACK_RELOCATE
4447
goto yyexhaustedlab;
4449
/* Extend the stack our own way. */
4450
if (YYMAXDEPTH <= yystacksize)
4451
goto yyexhaustedlab;
4453
if (YYMAXDEPTH < yystacksize)
4454
yystacksize = YYMAXDEPTH;
4457
yytype_int16 *yyss1 = yyss;
4458
union yyalloc *yyptr =
4459
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
4461
goto yyexhaustedlab;
4462
YYSTACK_RELOCATE (yyss_alloc, yyss);
4463
YYSTACK_RELOCATE (yyvs_alloc, yyvs);
4464
# undef YYSTACK_RELOCATE
4466
YYSTACK_FREE (yyss1);
4469
#endif /* no yyoverflow */
4471
yyssp = yyss + yysize - 1;
4472
yyvsp = yyvs + yysize - 1;
4474
YYDPRINTF ((stderr, "Stack size increased to %lu\n",
4475
(unsigned long int) yystacksize));
4477
if (yyss + yystacksize - 1 <= yyssp)
4481
YYDPRINTF ((stderr, "Entering state %d\n", yystate));
4483
if (yystate == YYFINAL)
4493
/* Do appropriate processing given the current state. Read a
4494
lookahead token if we need one and don't already have one. */
4496
/* First try to decide what to do without reference to lookahead token. */
4497
yyn = yypact[yystate];
4498
if (yyn == YYPACT_NINF)
4501
/* Not known => get a lookahead token if don't already have one. */
4503
/* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
4504
if (yychar == YYEMPTY)
4506
YYDPRINTF ((stderr, "Reading a token: "));
4510
if (yychar <= YYEOF)
4512
yychar = yytoken = YYEOF;
4513
YYDPRINTF ((stderr, "Now at end of input.\n"));
4517
yytoken = YYTRANSLATE (yychar);
4518
YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
4521
/* If the proper action on seeing token YYTOKEN is to reduce or to
4522
detect an error, take that action. */
4524
if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
4529
if (yyn == 0 || yyn == YYTABLE_NINF)
4535
/* Count tokens shifted since error; after three, turn off error
4540
/* Shift the lookahead token. */
4541
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
4543
/* Discard the shifted token. */
4552
/*-----------------------------------------------------------.
4553
| yydefault -- do the default action for the current state. |
4554
`-----------------------------------------------------------*/
4556
yyn = yydefact[yystate];
4562
/*-----------------------------.
4563
| yyreduce -- Do a reduction. |
4564
`-----------------------------*/
4566
/* yyn is the number of a rule to reduce with. */
4569
/* If YYLEN is nonzero, implement the default value of the action:
4572
Otherwise, the following line sets YYVAL to garbage.
4573
This behavior is undocumented and Bison
4574
users should not rely upon it. Assigning to YYVAL
4575
unconditionally makes the parser a bit smaller, and it avoids a
4576
GCC warning that YYVAL may be used uninitialized. */
4577
yyval = yyvsp[1-yylen];
4580
YY_REDUCE_PRINT (yyn);
4587
/* Line 1464 of skeleton.m4 */
4588
#line 1953 "parser.y"
4589
{PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
4598
/* Line 1464 of skeleton.m4 */
4599
#line 1965 "parser.y"
4600
{PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
4609
/* Line 1464 of skeleton.m4 */
4610
#line 1966 "parser.y"
4611
{PASS_ALWAYS as3_pass=(yyvsp[(2) - (4)].number_int);PASS1 as3_warning("embed command ignored");}
4620
/* Line 1464 of skeleton.m4 */
4621
#line 1969 "parser.y"
4622
{(yyval.code)=(yyvsp[(1) - (1)].code);}
4631
/* Line 1464 of skeleton.m4 */
4632
#line 1970 "parser.y"
4633
{(yyval.code)=code_new();}
4642
/* Line 1464 of skeleton.m4 */
4643
#line 1972 "parser.y"
4645
(yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));
4655
/* Line 1464 of skeleton.m4 */
4656
#line 1975 "parser.y"
4657
{(yyval.code)=(yyvsp[(1) - (1)].code);}
4666
/* Line 1464 of skeleton.m4 */
4667
#line 1991 "parser.y"
4668
{(yyval.code)=(yyvsp[(2) - (3)].code);}
4677
/* Line 1464 of skeleton.m4 */
4678
#line 1992 "parser.y"
4688
/* Line 1464 of skeleton.m4 */
4689
#line 1995 "parser.y"
4699
/* Line 1464 of skeleton.m4 */
4700
#line 2002 "parser.y"
4704
(yyval.code) = (yyvsp[(3) - (4)].code);
4708
as3_pass=(yyvsp[(1) - (4)].number_int);
4718
/* Line 1464 of skeleton.m4 */
4719
#line 2014 "parser.y"
4720
{(yyval.code)=(yyvsp[(1) - (2)].code);}
4729
/* Line 1464 of skeleton.m4 */
4730
#line 2015 "parser.y"
4731
{(yyval.code)=(yyvsp[(1) - (1)].code);}
4740
/* Line 1464 of skeleton.m4 */
4741
#line 2019 "parser.y"
4743
if((yyvsp[(1) - (1)].code)) {
4745
global->init = abc_initscript(global->file);
4746
code_t**cc = &global->init->method->body->code;
4747
*cc = code_append(*cc, (yyvsp[(1) - (1)].code));
4758
/* Line 1464 of skeleton.m4 */
4759
#line 2030 "parser.y"
4762
(yyval.number_int) = as3_pass;
4773
/* Line 1464 of skeleton.m4 */
4774
#line 2038 "parser.y"
4777
(yyval.number_int)=as3_pass;
4778
char*key = concat3((yyvsp[(1) - (3)].id),"::",(yyvsp[(3) - (3)].id));
4779
if(!definitions || !dict_contains(definitions, key)) {
4792
/* Line 1464 of skeleton.m4 */
4793
#line 2065 "parser.y"
4794
{(yyval.node)=(yyvsp[(2) - (2)].node);}
4803
/* Line 1464 of skeleton.m4 */
4804
#line 2066 "parser.y"
4805
{(yyval.node)=mkdummynode();}
4814
/* Line 1464 of skeleton.m4 */
4815
#line 2068 "parser.y"
4816
{(yyval.code)=(yyvsp[(2) - (2)].code);}
4825
/* Line 1464 of skeleton.m4 */
4826
#line 2069 "parser.y"
4827
{(yyval.code)=(yyvsp[(2) - (2)].code);}
4836
/* Line 1464 of skeleton.m4 */
4837
#line 2071 "parser.y"
4838
{(yyval.code) = (yyvsp[(1) - (1)].code);}
4847
/* Line 1464 of skeleton.m4 */
4848
#line 2072 "parser.y"
4849
{(yyval.code) = code_append((yyvsp[(1) - (3)].code), (yyvsp[(3) - (3)].code));}
4858
/* Line 1464 of skeleton.m4 */
4859
#line 2075 "parser.y"
4862
if(variable_exists((yyvsp[(1) - (3)].id)))
4863
syntaxerror("Variable %s already defined", (yyvsp[(1) - (3)].id));
4865
new_variable((yyvsp[(1) - (3)].id), 0, 1, 0);
4871
if(state->method->uses_slots) {
4872
v = find_slot(state, (yyvsp[(1) - (3)].id));
4874
// this variable is stored in a slot
4876
v->type = (yyvsp[(2) - (3)].classinfo);
4881
v = new_variable2((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].classinfo), 1, 0);
4884
(yyval.code) = slot?abc_getscopeobject(0, 1):0;
4886
typedcode_t val = node_read((yyvsp[(3) - (3)].node));
4887
if(!is_subtype_of(val.t, (yyvsp[(2) - (3)].classinfo))) {
4888
syntaxerror("Can't convert %s to %s", val.t->name, (yyvsp[(2) - (3)].classinfo)->name);
4890
if((yyvsp[(2) - (3)].classinfo)) {
4891
if(val.c->prev || val.c->opcode != OPCODE_PUSHUNDEFINED) {
4892
(yyval.code) = code_append((yyval.code), val.c);
4893
(yyval.code) = converttype((yyval.code), val.t, (yyvsp[(2) - (3)].classinfo));
4896
(yyval.code) = defaultvalue((yyval.code), (yyvsp[(2) - (3)].classinfo));
4899
if(val.c->prev || val.c->opcode != OPCODE_PUSHUNDEFINED) {
4900
(yyval.code) = code_append((yyval.code), val.c);
4901
(yyval.code) = abc_coerce_a((yyval.code));
4903
// don't do anything
4905
code_free((yyval.code));
4911
(yyval.code) = abc_setslot((yyval.code), v->index);
4913
(yyval.code) = abc_setlocal((yyval.code), v->index);
4914
v->init = do_init_variable((yyvsp[(1) - (3)].id));
4925
/* Line 1464 of skeleton.m4 */
4926
#line 2135 "parser.y"
4927
{PASS12 new_state();}
4936
/* Line 1464 of skeleton.m4 */
4937
#line 2135 "parser.y"
4939
(yyval.code) = var_block((yyvsp[(2) - (2)].code), state->vars);
4950
/* Line 1464 of skeleton.m4 */
4951
#line 2139 "parser.y"
4952
{(yyval.code) = code_new();}
4961
/* Line 1464 of skeleton.m4 */
4962
#line 2140 "parser.y"
4963
{(yyval.code)=(yyvsp[(2) - (2)].code);}
4972
/* Line 1464 of skeleton.m4 */
4973
#line 2143 "parser.y"
4975
(yyval.code) = code_new();
4976
(yyval.code) = code_append((yyval.code), (yyvsp[(3) - (6)].value).c);
4977
code_t*myjmp,*myif = (yyval.code) = abc_iffalse((yyval.code), 0);
4979
(yyval.code) = code_append((yyval.code), (yyvsp[(5) - (6)].code));
4980
if((yyvsp[(6) - (6)].code)) {
4981
myjmp = (yyval.code) = abc_jump((yyval.code), 0);
4983
myif->branch = (yyval.code) = abc_nop((yyval.code));
4984
if((yyvsp[(6) - (6)].code)) {
4985
(yyval.code) = code_append((yyval.code), (yyvsp[(6) - (6)].code));
4986
myjmp->branch = (yyval.code) = abc_nop((yyval.code));
4997
/* Line 1464 of skeleton.m4 */
4998
#line 2159 "parser.y"
4999
{(yyval.code)=code_new();}
5008
/* Line 1464 of skeleton.m4 */
5009
#line 2166 "parser.y"
5011
PASS1 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable((yyvsp[(2) - (3)].id),0,1,0);
5012
PASS2 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable((yyvsp[(2) - (3)].id),(yyvsp[(3) - (3)].classinfo),1,0);
5022
/* Line 1464 of skeleton.m4 */
5023
#line 2170 "parser.y"
5026
(yyval.id)=(yyvsp[(1) - (1)].id);
5036
/* Line 1464 of skeleton.m4 */
5037
#line 2175 "parser.y"
5038
{PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (2)].id);(yyval.for_start).each=0;}
5047
/* Line 1464 of skeleton.m4 */
5048
#line 2176 "parser.y"
5049
{PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (3)].id);(yyval.for_start).each=1;}
5058
/* Line 1464 of skeleton.m4 */
5059
#line 2178 "parser.y"
5061
if((yyvsp[(1) - (8)].for_start).each) syntaxerror("invalid syntax: ; not allowed in for each statement");
5062
(yyval.code) = code_new();
5063
(yyval.code) = code_append((yyval.code), (yyvsp[(2) - (8)].code));
5064
code_t*loopstart = (yyval.code) = abc_label((yyval.code));
5065
(yyval.code) = code_append((yyval.code), (yyvsp[(4) - (8)].value).c);
5066
code_t*myif = (yyval.code) = abc_iffalse((yyval.code), 0);
5067
(yyval.code) = code_append((yyval.code), (yyvsp[(8) - (8)].code));
5068
code_t*cont = (yyval.code) = abc_nop((yyval.code));
5069
(yyval.code) = code_append((yyval.code), (yyvsp[(6) - (8)].code));
5070
(yyval.code) = abc_jump((yyval.code), loopstart);
5071
code_t*out = (yyval.code) = abc_nop((yyval.code));
5072
breakjumpsto((yyval.code), (yyvsp[(1) - (8)].for_start).name, out);
5073
continuejumpsto((yyval.code), (yyvsp[(1) - (8)].for_start).name, cont);
5076
(yyval.code) = var_block((yyval.code), state->vars);
5087
/* Line 1464 of skeleton.m4 */
5088
#line 2198 "parser.y"
5090
variable_t*var = find_variable(state, (yyvsp[(2) - (6)].id));
5092
syntaxerror("variable %s not known in this scope", (yyvsp[(2) - (6)].id));
5094
int it = alloc_local();
5095
int array = alloc_local();
5097
(yyval.code) = code_new();
5098
(yyval.code) = code_append((yyval.code), (yyvsp[(4) - (6)].value).c);
5099
(yyval.code) = abc_coerce_a((yyval.code));
5100
(yyval.code) = abc_setlocal((yyval.code), array);
5101
(yyval.code) = abc_pushbyte((yyval.code), 0);
5102
(yyval.code) = abc_setlocal((yyval.code), it);
5104
code_t*loopstart = (yyval.code) = abc_label((yyval.code));
5106
(yyval.code) = abc_hasnext2((yyval.code), array, it);
5107
code_t*myif = (yyval.code) = abc_iffalse((yyval.code), 0);
5108
(yyval.code) = abc_getlocal((yyval.code), array);
5109
(yyval.code) = abc_getlocal((yyval.code), it);
5110
if(!(yyvsp[(1) - (6)].for_start).each)
5111
(yyval.code) = abc_nextname((yyval.code));
5113
(yyval.code) = abc_nextvalue((yyval.code));
5114
(yyval.code) = converttype((yyval.code), 0, var->type);
5115
(yyval.code) = abc_setlocal((yyval.code), var->index);
5117
(yyval.code) = code_append((yyval.code), (yyvsp[(6) - (6)].code));
5118
(yyval.code) = abc_jump((yyval.code), loopstart);
5120
code_t*out = (yyval.code) = abc_nop((yyval.code));
5121
breakjumpsto((yyval.code), (yyvsp[(1) - (6)].for_start).name, out);
5122
continuejumpsto((yyval.code), (yyvsp[(1) - (6)].for_start).name, loopstart);
5126
(yyval.code) = abc_kill((yyval.code), it);
5127
(yyval.code) = abc_kill((yyval.code), array);
5139
/* Line 1464 of skeleton.m4 */
5140
#line 2241 "parser.y"
5143
(yyval.code) = code_new();
5145
code_t*myjmp = (yyval.code) = abc_jump((yyval.code), 0);
5146
code_t*loopstart = (yyval.code) = abc_label((yyval.code));
5147
(yyval.code) = code_append((yyval.code), (yyvsp[(5) - (5)].code));
5148
code_t*cont = (yyval.code) = abc_nop((yyval.code));
5149
myjmp->branch = cont;
5150
(yyval.code) = code_append((yyval.code), (yyvsp[(3) - (5)].value).c);
5151
(yyval.code) = abc_iftrue((yyval.code), loopstart);
5152
code_t*out = (yyval.code) = abc_nop((yyval.code));
5153
breakjumpsto((yyval.code), (yyvsp[(1) - (5)].id), out);
5154
continuejumpsto((yyval.code), (yyvsp[(1) - (5)].id), cont);
5164
/* Line 1464 of skeleton.m4 */
5165
#line 2257 "parser.y"
5167
(yyval.code) = code_new();
5168
code_t*loopstart = (yyval.code) = abc_label((yyval.code));
5169
(yyval.code) = code_append((yyval.code), (yyvsp[(2) - (6)].code));
5170
code_t*cont = (yyval.code) = abc_nop((yyval.code));
5171
(yyval.code) = code_append((yyval.code), (yyvsp[(5) - (6)].value).c);
5172
(yyval.code) = abc_iftrue((yyval.code), loopstart);
5173
code_t*out = (yyval.code) = abc_nop((yyval.code));
5174
breakjumpsto((yyval.code), (yyvsp[(1) - (6)].id), out);
5175
continuejumpsto((yyval.code), (yyvsp[(1) - (6)].id), cont);
5185
/* Line 1464 of skeleton.m4 */
5186
#line 2269 "parser.y"
5188
(yyval.code) = abc___break__(0, "");
5198
/* Line 1464 of skeleton.m4 */
5199
#line 2272 "parser.y"
5201
(yyval.code) = abc___break__(0, (yyvsp[(2) - (2)].id));
5211
/* Line 1464 of skeleton.m4 */
5212
#line 2275 "parser.y"
5214
(yyval.code) = abc___continue__(0, "");
5224
/* Line 1464 of skeleton.m4 */
5225
#line 2278 "parser.y"
5227
(yyval.code) = abc___continue__(0, (yyvsp[(2) - (2)].id));
5237
/* Line 1464 of skeleton.m4 */
5238
#line 2282 "parser.y"
5248
/* Line 1464 of skeleton.m4 */
5249
#line 2283 "parser.y"
5250
{(yyval.code)=(yyvsp[(1) - (1)].code);}
5259
/* Line 1464 of skeleton.m4 */
5260
#line 2284 "parser.y"
5261
{(yyval.code)=(yyvsp[(1) - (1)].code);}
5270
/* Line 1464 of skeleton.m4 */
5271
#line 2285 "parser.y"
5272
{(yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));}
5281
/* Line 1464 of skeleton.m4 */
5282
#line 2286 "parser.y"
5283
{(yyval.code)=(yyvsp[(1) - (1)].code);}
5292
/* Line 1464 of skeleton.m4 */
5293
#line 2287 "parser.y"
5294
{(yyval.code)=code_append((yyval.code),(yyvsp[(2) - (2)].code));}
5303
/* Line 1464 of skeleton.m4 */
5304
#line 2289 "parser.y"
5306
(yyval.code) = abc_getlocal(0, state->switch_var);
5307
(yyval.code) = code_append((yyval.code), node_read((yyvsp[(2) - (4)].node)).c);
5308
code_t*j = (yyval.code) = abc_ifne((yyval.code), 0);
5309
(yyval.code) = code_append((yyval.code), (yyvsp[(4) - (4)].code));
5310
if((yyval.code)->opcode != OPCODE___BREAK__) {
5311
(yyval.code) = abc___fallthrough__((yyval.code), "");
5313
code_t*e = (yyval.code) = abc_nop((yyval.code));
5324
/* Line 1464 of skeleton.m4 */
5325
#line 2300 "parser.y"
5327
(yyval.code) = (yyvsp[(3) - (3)].code);
5337
/* Line 1464 of skeleton.m4 */
5338
#line 2303 "parser.y"
5339
{PASS12 new_state();state->switch_var=alloc_local();}
5348
/* Line 1464 of skeleton.m4 */
5349
#line 2303 "parser.y"
5351
(yyval.code) = node_read((yyvsp[(4) - (8)].node)).c;
5352
(yyval.code) = abc_setlocal((yyval.code), state->switch_var);
5353
(yyval.code) = code_append((yyval.code), (yyvsp[(7) - (8)].code));
5355
code_t*out = (yyval.code) = abc_kill((yyval.code), state->switch_var);
5356
breakjumpsto((yyval.code), (yyvsp[(1) - (8)].id), out);
5358
code_t*c = (yyval.code),*lastblock=0;
5360
if(c->opcode == OPCODE_IFNE) {
5361
if(!c->next) syntaxerror("internal error in fallthrough handling");
5363
} else if(c->opcode == OPCODE___FALLTHROUGH__) {
5365
c->opcode = OPCODE_JUMP;
5366
c->branch = lastblock;
5368
/* fall through end of switch */
5369
c->opcode = OPCODE_NOP;
5375
(yyval.code) = var_block((yyval.code), state->vars);
5386
/* Line 1464 of skeleton.m4 */
5387
#line 2334 "parser.y"
5388
{PASS12 new_state();
5389
state->exception_name=(yyvsp[(3) - (5)].id);
5390
PASS1 new_variable((yyvsp[(3) - (5)].id), 0, 0, 0);
5391
PASS2 new_variable((yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].classinfo), 0, 0);
5401
/* Line 1464 of skeleton.m4 */
5402
#line 2339 "parser.y"
5404
namespace_t name_ns = {ACCESS_PACKAGE, ""};
5405
multiname_t name = {QNAME, &name_ns, 0, (yyvsp[(3) - (9)].id)};
5407
NEW(abc_exception_t, e)
5408
e->exc_type = sig2mname((yyvsp[(4) - (9)].classinfo));
5409
e->var_name = multiname_clone(&name);
5410
(yyval.exception) = e;
5413
int i = find_variable_safe(state, (yyvsp[(3) - (9)].id))->index;
5414
e->target = c = abc_nop(0);
5415
c = abc_setlocal(c, i);
5416
c = code_append(c, code_dup(state->method->scope_code));
5417
c = code_append(c, (yyvsp[(8) - (9)].code));
5420
c = var_block(c, state->vars);
5431
/* Line 1464 of skeleton.m4 */
5432
#line 2359 "parser.y"
5433
{PASS12 new_state();state->exception_name=0;}
5442
/* Line 1464 of skeleton.m4 */
5443
#line 2359 "parser.y"
5445
(yyvsp[(4) - (5)].code) = var_block((yyvsp[(4) - (5)].code), state->vars);
5446
if(!(yyvsp[(4) - (5)].code)) {
5447
(yyval.exception)=0;
5449
NEW(abc_exception_t, e)
5450
e->exc_type = 0; //all exceptions
5451
e->var_name = 0; //no name
5454
e->to = code_append(e->to, (yyvsp[(4) - (5)].code));
5455
(yyval.exception) = e;
5467
/* Line 1464 of skeleton.m4 */
5468
#line 2375 "parser.y"
5469
{(yyval.catch_list).l=list_new();(yyval.catch_list).finally=0;list_append((yyval.catch_list).l,(yyvsp[(1) - (1)].exception));}
5478
/* Line 1464 of skeleton.m4 */
5479
#line 2376 "parser.y"
5480
{(yyval.catch_list)=(yyvsp[(1) - (2)].catch_list);list_append((yyval.catch_list).l,(yyvsp[(2) - (2)].exception));}
5489
/* Line 1464 of skeleton.m4 */
5490
#line 2377 "parser.y"
5491
{(yyval.catch_list)=(yyvsp[(1) - (1)].catch_list);}
5500
/* Line 1464 of skeleton.m4 */
5501
#line 2378 "parser.y"
5503
(yyval.catch_list) = (yyvsp[(1) - (2)].catch_list);
5504
(yyval.catch_list).finally = 0;
5505
if((yyvsp[(2) - (2)].exception)) {
5506
list_append((yyval.catch_list).l,(yyvsp[(2) - (2)].exception));
5507
(yyval.catch_list).finally = (yyvsp[(2) - (2)].exception)->to;(yyvsp[(2) - (2)].exception)->to=0;
5518
/* Line 1464 of skeleton.m4 */
5519
#line 2386 "parser.y"
5521
(yyval.catch_list).l=list_new();
5522
(yyval.catch_list).finally = 0;
5523
if((yyvsp[(1) - (1)].exception)) {
5524
list_append((yyval.catch_list).l,(yyvsp[(1) - (1)].exception));
5525
(yyval.catch_list).finally = (yyvsp[(1) - (1)].exception)->to;(yyvsp[(1) - (1)].exception)->to=0;
5536
/* Line 1464 of skeleton.m4 */
5537
#line 2395 "parser.y"
5538
{PASS12 new_state();
5539
state->method->has_exceptions=1;
5540
state->method->late_binding=1;//for invariant scope_code
5550
/* Line 1464 of skeleton.m4 */
5551
#line 2398 "parser.y"
5553
code_t*out = abc_nop(0);
5555
code_t*start = abc_nop(0);
5556
(yyval.code) = code_append(start, (yyvsp[(4) - (6)].code));
5557
if(!is_break_or_jump((yyvsp[(4) - (6)].code))) {
5558
(yyval.code) = abc_jump((yyval.code), out);
5560
code_t*end = (yyval.code) = abc_nop((yyval.code));
5563
if((yyvsp[(6) - (6)].catch_list).finally)
5564
tmp = alloc_local();
5566
abc_exception_list_t*l = (yyvsp[(6) - (6)].catch_list).l;
5569
abc_exception_t*e = l->abc_exception;
5571
(yyval.code) = code_append((yyval.code), e->target);
5572
(yyval.code) = abc_jump((yyval.code), out);
5574
parserassert((ptroff_t)(yyvsp[(6) - (6)].catch_list).finally);
5576
e->target = (yyval.code) = abc_nop((yyval.code));
5577
(yyval.code) = code_append((yyval.code), code_dup(state->method->scope_code));
5578
(yyval.code) = abc___rethrow__((yyval.code));
5586
(yyval.code) = code_append((yyval.code), out);
5588
(yyval.code) = insert_finally((yyval.code), (yyvsp[(6) - (6)].catch_list).finally, tmp);
5590
list_concat(state->method->exceptions, (yyvsp[(6) - (6)].catch_list).l);
5592
(yyval.code) = var_block((yyval.code), state->vars);
5603
/* Line 1464 of skeleton.m4 */
5604
#line 2444 "parser.y"
5606
(yyval.code)=(yyvsp[(2) - (2)].value).c;
5607
(yyval.code)=abc_throw((yyval.code));
5617
/* Line 1464 of skeleton.m4 */
5618
#line 2448 "parser.y"
5620
if(!state->exception_name)
5621
syntaxerror("re-throw only possible within a catch block");
5622
variable_t*v = find_variable(state, state->exception_name);
5623
(yyval.code)=code_new();
5624
(yyval.code)=abc_getlocal((yyval.code), v->index);
5625
(yyval.code)=abc_throw((yyval.code));
5635
/* Line 1464 of skeleton.m4 */
5636
#line 2459 "parser.y"
5639
if(state->method->has_exceptions) {
5640
int v = alloc_local();
5641
state->method->scope_code = abc_getlocal(state->method->scope_code, v);
5642
state->method->scope_code = abc_pushwith(state->method->scope_code);
5643
(yyval.value_list).number = v;
5645
(yyval.value_list).cc = (yyvsp[(3) - (4)].value).c;
5655
/* Line 1464 of skeleton.m4 */
5656
#line 2469 "parser.y"
5658
/* remove getlocal;pushwith from scope code again */
5659
state->method->scope_code = code_cutlast(code_cutlast(state->method->scope_code));
5661
(yyval.code) = (yyvsp[(1) - (2)].value_list).cc;
5662
if(state->method->has_exceptions) {
5663
(yyval.code) = abc_dup((yyval.code));
5664
(yyval.code) = abc_setlocal((yyval.code), (yyvsp[(1) - (2)].value_list).number);
5666
(yyval.code) = abc_pushwith((yyval.code));
5667
(yyval.code) = code_append((yyval.code), (yyvsp[(2) - (2)].code));
5668
(yyval.code) = abc_popscope((yyval.code));
5679
/* Line 1464 of skeleton.m4 */
5680
#line 2487 "parser.y"
5681
{PASS12 (yyval.id)="package";}
5690
/* Line 1464 of skeleton.m4 */
5691
#line 2488 "parser.y"
5692
{PASS12 (yyval.id)="namespace";}
5701
/* Line 1464 of skeleton.m4 */
5702
#line 2489 "parser.y"
5703
{PASS12 (yyval.id)="NaN";}
5712
/* Line 1464 of skeleton.m4 */
5713
#line 2490 "parser.y"
5714
{PASS12 (yyval.id)=(yyvsp[(1) - (1)].id);}
5723
/* Line 1464 of skeleton.m4 */
5724
#line 2492 "parser.y"
5725
{PASS12 (yyval.id) = concat3((yyvsp[(1) - (3)].id),".",(yyvsp[(3) - (3)].id));free((yyvsp[(1) - (3)].id));(yyvsp[(1) - (3)].id)=0;}
5734
/* Line 1464 of skeleton.m4 */
5735
#line 2493 "parser.y"
5736
{PASS12 (yyval.id)=strdup((yyvsp[(1) - (1)].id));}
5745
/* Line 1464 of skeleton.m4 */
5746
#line 2495 "parser.y"
5747
{PASS12 startpackage((yyvsp[(2) - (3)].id));free((yyvsp[(2) - (3)].id));(yyvsp[(2) - (3)].id)=0;}
5756
/* Line 1464 of skeleton.m4 */
5757
#line 2496 "parser.y"
5758
{PASS12 endpackage();(yyval.code)=0;}
5767
/* Line 1464 of skeleton.m4 */
5768
#line 2497 "parser.y"
5769
{PASS12 startpackage("");}
5778
/* Line 1464 of skeleton.m4 */
5779
#line 2498 "parser.y"
5780
{PASS12 endpackage();(yyval.code)=0;}
5789
/* Line 1464 of skeleton.m4 */
5790
#line 2521 "parser.y"
5793
slotinfo_t*s = registry_find(state->package, (yyvsp[(2) - (2)].id));
5794
if(!s && as3_pass==1) {as3_schedule_class(state->package, (yyvsp[(2) - (2)].id));}
5795
state_has_imports();
5796
dict_put(state->imports, state->package, (yyvsp[(2) - (2)].id));
5807
/* Line 1464 of skeleton.m4 */
5808
#line 2529 "parser.y"
5811
slotinfo_t*s = registry_find((yyvsp[(2) - (2)].classinfo)->package, (yyvsp[(2) - (2)].classinfo)->name);
5812
if(!s && as3_pass==1) {// || !(s->flags&FLAG_BUILTIN)) {
5813
as3_schedule_class((yyvsp[(2) - (2)].classinfo)->package, (yyvsp[(2) - (2)].classinfo)->name);
5815
state_has_imports();
5816
dict_put(state->imports, (yyvsp[(2) - (2)].classinfo)->name, (yyvsp[(2) - (2)].classinfo));
5817
import_toplevel((yyvsp[(2) - (2)].classinfo)->package);
5828
/* Line 1464 of skeleton.m4 */
5829
#line 2540 "parser.y"
5832
if(strncmp("flash.", (yyvsp[(2) - (4)].id), 6) && as3_pass==1) {
5833
as3_schedule_package((yyvsp[(2) - (4)].id));
5837
i->package = (yyvsp[(2) - (4)].id);
5838
state_has_imports();
5839
list_append(state->wildcard_imports, i);
5840
import_toplevel(i->package);
5851
/* Line 1464 of skeleton.m4 */
5852
#line 2556 "parser.y"
5853
{PASS12 (yyval.flags).flags=0;(yyval.flags).ns=0;}
5862
/* Line 1464 of skeleton.m4 */
5863
#line 2557 "parser.y"
5864
{PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);}
5873
/* Line 1464 of skeleton.m4 */
5874
#line 2558 "parser.y"
5875
{PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);}
5884
/* Line 1464 of skeleton.m4 */
5885
#line 2559 "parser.y"
5888
(yyval.flags).flags=(yyvsp[(1) - (2)].flags).flags|(yyvsp[(2) - (2)].flags).flags;
5889
if((yyvsp[(1) - (2)].flags).ns && (yyvsp[(2) - (2)].flags).ns) syntaxerror("only one namespace allowed in one declaration");
5890
(yyval.flags).ns=(yyvsp[(1) - (2)].flags).ns?(yyvsp[(1) - (2)].flags).ns:(yyvsp[(2) - (2)].flags).ns;
5901
/* Line 1464 of skeleton.m4 */
5902
#line 2566 "parser.y"
5903
{PASS12 (yyval.flags).flags=FLAG_PUBLIC;(yyval.flags).ns=0;}
5912
/* Line 1464 of skeleton.m4 */
5913
#line 2567 "parser.y"
5914
{PASS12 (yyval.flags).flags=FLAG_PRIVATE;(yyval.flags).ns=0;}
5923
/* Line 1464 of skeleton.m4 */
5924
#line 2568 "parser.y"
5925
{PASS12 (yyval.flags).flags=FLAG_PROTECTED;(yyval.flags).ns=0;}
5934
/* Line 1464 of skeleton.m4 */
5935
#line 2569 "parser.y"
5936
{PASS12 (yyval.flags).flags=FLAG_STATIC;(yyval.flags).ns=0;}
5945
/* Line 1464 of skeleton.m4 */
5946
#line 2570 "parser.y"
5947
{PASS12 (yyval.flags).flags=FLAG_DYNAMIC;(yyval.flags).ns=0;}
5956
/* Line 1464 of skeleton.m4 */
5957
#line 2571 "parser.y"
5958
{PASS12 (yyval.flags).flags=FLAG_FINAL;(yyval.flags).ns=0;}
5967
/* Line 1464 of skeleton.m4 */
5968
#line 2572 "parser.y"
5969
{PASS12 (yyval.flags).flags=FLAG_OVERRIDE;(yyval.flags).ns=0;}
5978
/* Line 1464 of skeleton.m4 */
5979
#line 2573 "parser.y"
5980
{PASS12 (yyval.flags).flags=FLAG_NATIVE;(yyval.flags).ns=0;}
5989
/* Line 1464 of skeleton.m4 */
5990
#line 2574 "parser.y"
5991
{PASS12 (yyval.flags).flags=FLAG_PACKAGEINTERNAL;(yyval.flags).ns=0;}
6000
/* Line 1464 of skeleton.m4 */
6001
#line 2575 "parser.y"
6002
{PASS12 (yyval.flags).flags=FLAG_NAMESPACE;
6003
(yyval.flags).ns=(yyvsp[(1) - (1)].id);
6013
/* Line 1464 of skeleton.m4 */
6014
#line 2579 "parser.y"
6015
{PASS12 (yyval.classinfo)=0;}
6024
/* Line 1464 of skeleton.m4 */
6025
#line 2580 "parser.y"
6026
{PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
6035
/* Line 1464 of skeleton.m4 */
6036
#line 2582 "parser.y"
6037
{PASS12 (yyval.classinfo_list)=list_new();}
6046
/* Line 1464 of skeleton.m4 */
6047
#line 2583 "parser.y"
6048
{PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);}
6057
/* Line 1464 of skeleton.m4 */
6058
#line 2585 "parser.y"
6059
{PASS12 (yyval.classinfo_list)=list_new();}
6068
/* Line 1464 of skeleton.m4 */
6069
#line 2586 "parser.y"
6070
{PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);}
6079
/* Line 1464 of skeleton.m4 */
6080
#line 2590 "parser.y"
6081
{PASS12 startclass(&(yyvsp[(1) - (6)].flags),(yyvsp[(3) - (6)].id),(yyvsp[(4) - (6)].classinfo),(yyvsp[(5) - (6)].classinfo_list));}
6090
/* Line 1464 of skeleton.m4 */
6091
#line 2592 "parser.y"
6092
{PASS12 endclass();(yyval.code)=0;}
6101
/* Line 1464 of skeleton.m4 */
6102
#line 2596 "parser.y"
6103
{PASS12 (yyvsp[(1) - (5)].flags).flags|=FLAG_INTERFACE;
6104
startclass(&(yyvsp[(1) - (5)].flags),(yyvsp[(3) - (5)].id),0,(yyvsp[(4) - (5)].classinfo_list));}
6113
/* Line 1464 of skeleton.m4 */
6114
#line 2599 "parser.y"
6115
{PASS12 endclass();(yyval.code)=0;}
6124
/* Line 1464 of skeleton.m4 */
6125
#line 2608 "parser.y"
6126
{PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
6135
/* Line 1464 of skeleton.m4 */
6136
#line 2612 "parser.y"
6138
code_t*c = state->cls->static_init->header;
6139
c = code_append(c, (yyvsp[(1) - (1)].code));
6140
state->cls->static_init->header = c;
6150
/* Line 1464 of skeleton.m4 */
6151
#line 2623 "parser.y"
6153
syntaxerror("variable declarations not allowed in interfaces");
6163
/* Line 1464 of skeleton.m4 */
6164
#line 2626 "parser.y"
6167
(yyvsp[(1) - (8)].flags).flags |= FLAG_PUBLIC;
6168
if((yyvsp[(1) - (8)].flags).flags&(FLAG_PRIVATE|FLAG_PACKAGEINTERNAL|FLAG_PROTECTED)) {
6169
syntaxerror("invalid method modifiers: interface methods always need to be public");
6171
startfunction(&(yyvsp[(1) - (8)].flags),(yyvsp[(3) - (8)].token),(yyvsp[(4) - (8)].id),&(yyvsp[(6) - (8)].params),(yyvsp[(8) - (8)].classinfo));
6172
endfunction(&(yyvsp[(1) - (8)].flags),(yyvsp[(3) - (8)].token),(yyvsp[(4) - (8)].id),&(yyvsp[(6) - (8)].params),(yyvsp[(8) - (8)].classinfo), 0);
6173
list_deep_free((yyvsp[(6) - (8)].params).list);
6183
/* Line 1464 of skeleton.m4 */
6184
#line 2701 "parser.y"
6185
{PASS12 setslotstate(&(yyvsp[(1) - (2)].flags),(yyvsp[(2) - (2)].token));}
6194
/* Line 1464 of skeleton.m4 */
6195
#line 2701 "parser.y"
6196
{PASS12 (yyval.code)=(yyvsp[(4) - (4)].code);setslotstate(0, 0);}
6205
/* Line 1464 of skeleton.m4 */
6206
#line 2703 "parser.y"
6207
{PASS12 (yyval.code)=0;}
6216
/* Line 1464 of skeleton.m4 */
6217
#line 2704 "parser.y"
6218
{PASS12 (yyval.code)=0;}
6227
/* Line 1464 of skeleton.m4 */
6228
#line 2707 "parser.y"
6231
int flags = slotstate_flags->flags;
6232
namespace_t ns = modifiers2access(slotstate_flags);
6236
varinfo_t* info = 0;
6238
memberinfo_t*i = registry_findmember(state->cls->info, ns.name, (yyvsp[(1) - (3)].id), 1);
6240
check_override(i, flags);
6242
info = varinfo_register_onclass(state->cls->info, ns.access, ns.name, (yyvsp[(1) - (3)].id));
6244
slotinfo_t*i = registry_find(state->package, (yyvsp[(1) - (3)].id));
6246
syntaxerror("package %s already contains '%s'", state->package, (yyvsp[(1) - (3)].id));
6248
if(ns.name && ns.name[0]) {
6249
syntaxerror("namespaces not allowed on package-level variables");
6251
info = varinfo_register_global(ns.access, state->package, (yyvsp[(1) - (3)].id));
6254
info->type = (yyvsp[(2) - (3)].classinfo);
6255
info->flags = flags;
6257
dict_put(global->token2info, (void*)(ptroff_t)as3_tokencount, info);
6261
varinfo_t*info = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount);
6265
trait_t*t = add_abc_slot(slotstate_flags, (yyvsp[(1) - (3)].id), &mname, &code);
6267
if((yyvsp[(2) - (3)].classinfo)) {
6268
MULTINAME(m, (yyvsp[(2) - (3)].classinfo));
6269
t->type_name = multiname_clone(&m);
6271
info->slot = t->slot_id;
6273
/* workaround for "VerifyError: Error #1053: Illegal override of ::test2 in C1"
6274
FIXME: is there a way to use slots and still don't have conflicting overrides?
6276
info->slot = t->slot_id = 0;
6278
constant_t cval = (yyvsp[(3) - (3)].node)->type->eval((yyvsp[(3) - (3)].node));
6279
if(cval.type!=CONSTANT_UNKNOWN) {
6280
/* compile time constant */
6281
t->value = malloc(sizeof(constant_t));
6282
memcpy(t->value, &cval, sizeof(constant_t));
6283
info->value = constant_clone(t->value);
6285
typedcode_t v = node_read((yyvsp[(3) - (3)].node));
6286
/* initalization code (if needed) */
6288
if(v.c && !is_pushundefined(v.c)) {
6289
c = abc_getlocal_0(c);
6290
c = code_append(c, v.c);
6291
c = converttype(c, v.t, (yyvsp[(2) - (3)].classinfo));
6293
c = abc_initproperty2(c, &mname);
6295
c = abc_setslot(c, t->slot_id);
6298
*code = code_append(*code, c);
6301
if(slotstate_varconst==KW_CONST) {
6302
t->kind= TRAIT_CONST;
6303
info->flags |= FLAG_CONST;
6317
/* Line 1464 of skeleton.m4 */
6318
#line 2790 "parser.y"
6319
{(yyval.constant)=0;}
6328
/* Line 1464 of skeleton.m4 */
6329
#line 2791 "parser.y"
6331
(yyval.constant) = malloc(sizeof(constant_t));
6332
*(yyval.constant) = node_eval((yyvsp[(2) - (2)].node));
6333
if((yyval.constant)->type == CONSTANT_UNKNOWN) {
6334
syntaxerror("can't evaluate default parameter value (needs to be a compile-time constant)");
6345
/* Line 1464 of skeleton.m4 */
6346
#line 2800 "parser.y"
6347
{(yyval.constant) = constant_new_int((yyvsp[(1) - (1)].number_int));}
6356
/* Line 1464 of skeleton.m4 */
6357
#line 2801 "parser.y"
6359
(yyval.constant) = constant_new_uint((yyvsp[(1) - (1)].number_uint));
6369
/* Line 1464 of skeleton.m4 */
6370
#line 2804 "parser.y"
6371
{(yyval.constant) = constant_new_float((yyvsp[(1) - (1)].number_float));}
6380
/* Line 1464 of skeleton.m4 */
6381
#line 2805 "parser.y"
6382
{(yyval.constant) = constant_new_string2((yyvsp[(1) - (1)].str).str,(yyvsp[(1) - (1)].str).len);free((char*)(yyvsp[(1) - (1)].str).str);}
6391
/* Line 1464 of skeleton.m4 */
6392
#line 2806 "parser.y"
6393
{(yyval.constant) = constant_new_true((yyvsp[(1) - (1)].token));}
6402
/* Line 1464 of skeleton.m4 */
6403
#line 2807 "parser.y"
6404
{(yyval.constant) = constant_new_false((yyvsp[(1) - (1)].token));}
6413
/* Line 1464 of skeleton.m4 */
6414
#line 2808 "parser.y"
6415
{(yyval.constant) = constant_new_null((yyvsp[(1) - (1)].token));}
6424
/* Line 1464 of skeleton.m4 */
6425
#line 2809 "parser.y"
6426
{(yyval.constant) = constant_new_undefined((yyvsp[(1) - (1)].token));}
6435
/* Line 1464 of skeleton.m4 */
6436
#line 2810 "parser.y"
6437
{(yyval.constant) = constant_new_float(__builtin_nan(""));}
6446
/* Line 1464 of skeleton.m4 */
6447
#line 2823 "parser.y"
6449
multiname_t m = {QNAME, &stdns, 0, "XML"};
6452
v.c = abc_getlex2(v.c, &m);
6453
v.c = code_append(v.c, node_read((yyvsp[(1) - (1)].node)).c);
6454
v.c = abc_construct(v.c, 1);
6456
(yyval.node) = mkcodenode(v);
6466
/* Line 1464 of skeleton.m4 */
6467
#line 2834 "parser.y"
6468
{PASS_ALWAYS if(!xml_level++) tokenizer_begin_xml();}
6477
/* Line 1464 of skeleton.m4 */
6478
#line 2835 "parser.y"
6479
{PASS_ALWAYS tokenizer_begin_xmltext();}
6488
/* Line 1464 of skeleton.m4 */
6489
#line 2836 "parser.y"
6490
{PASS_ALWAYS if(!--xml_level) tokenizer_end_xml(); else tokenizer_begin_xmltext();}
6499
/* Line 1464 of skeleton.m4 */
6500
#line 2838 "parser.y"
6501
{PASS_ALWAYS tokenizer_begin_xmltext();}
6510
/* Line 1464 of skeleton.m4 */
6511
#line 2838 "parser.y"
6513
(yyval.node) = (yyvsp[(2) - (4)].node);
6523
/* Line 1464 of skeleton.m4 */
6524
#line 2841 "parser.y"
6525
{PASS_ALWAYS tokenizer_begin_xml();}
6534
/* Line 1464 of skeleton.m4 */
6535
#line 2841 "parser.y"
6537
(yyval.node) = (yyvsp[(2) - (4)].node);
6547
/* Line 1464 of skeleton.m4 */
6548
#line 2844 "parser.y"
6549
{(yyval.node)=mkstringnode("");}
6558
/* Line 1464 of skeleton.m4 */
6559
#line 2845 "parser.y"
6561
(yyval.node) = mkaddnode((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node));
6571
/* Line 1464 of skeleton.m4 */
6572
#line 2848 "parser.y"
6574
char* str = string_cstr(&(yyvsp[(2) - (2)].str));
6575
(yyval.node) = mkaddnode((yyvsp[(1) - (2)].node),mkstringnode(str));
6586
/* Line 1464 of skeleton.m4 */
6587
#line 2853 "parser.y"
6589
(yyval.node) = mkaddnode((yyvsp[(1) - (2)].node), mkstringnode(">"));
6599
/* Line 1464 of skeleton.m4 */
6600
#line 2856 "parser.y"
6602
(yyval.node) = mkaddnode((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node));
6612
/* Line 1464 of skeleton.m4 */
6613
#line 2859 "parser.y"
6615
(yyval.node) = mkaddnode((yyvsp[(1) - (3)].node), mkaddnode((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node)));
6625
/* Line 1464 of skeleton.m4 */
6626
#line 2862 "parser.y"
6628
(yyval.node) = mkstringnode((yyvsp[(1) - (1)].id));
6638
/* Line 1464 of skeleton.m4 */
6639
#line 2865 "parser.y"
6641
(yyval.node) = (yyvsp[(1) - (1)].node);
6651
/* Line 1464 of skeleton.m4 */
6652
#line 2869 "parser.y"
6654
(yyval.node) = mkstringnode("");
6664
/* Line 1464 of skeleton.m4 */
6665
#line 2872 "parser.y"
6667
(yyval.node) = mkaddnode(mkstringnode(" "),(yyvsp[(1) - (1)].node));
6677
/* Line 1464 of skeleton.m4 */
6678
#line 2876 "parser.y"
6680
//$$ = allocprintf("<%s%s/>", $2, $3, $5, $8);
6681
(yyval.node) = mkaddnode(mkaddnode(mkaddnode(mkstringnode("<"),(yyvsp[(2) - (6)].node)),(yyvsp[(3) - (6)].node)),mkstringnode("/>"));
6691
/* Line 1464 of skeleton.m4 */
6692
#line 2880 "parser.y"
6694
//$$ = allocprintf("<%s%s>%s</%s>", $2, $3, $5, $8);
6695
(yyval.node) = mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(
6696
mkstringnode("<"),(yyvsp[(2) - (10)].node)),(yyvsp[(3) - (10)].node)),mkstringnode(">")),(yyvsp[(5) - (10)].node)),mkstringnode("</")),(yyvsp[(8) - (10)].node)),mkstringnode(">"));
6706
/* Line 1464 of skeleton.m4 */
6707
#line 2885 "parser.y"
6709
//$$ = allocprintf("<%s%s>%s%s</%s>", $2, $3, $5, $6, $9);
6710
(yyval.node) = mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(
6711
mkstringnode("<"),(yyvsp[(2) - (11)].node)),(yyvsp[(3) - (11)].node)),mkstringnode(">")),(yyvsp[(5) - (11)].node)),(yyvsp[(6) - (11)].node)),mkstringnode("</")),(yyvsp[(9) - (11)].node)),mkstringnode(">"));
6721
/* Line 1464 of skeleton.m4 */
6722
#line 2891 "parser.y"
6724
(yyval.node) = (yyvsp[(1) - (1)].node);
6734
/* Line 1464 of skeleton.m4 */
6735
#line 2894 "parser.y"
6737
(yyval.node) = mkaddnode((yyvsp[(1) - (2)].node), mkaddnode(mkstringnode(" "),(yyvsp[(2) - (2)].node)));
6747
/* Line 1464 of skeleton.m4 */
6748
#line 2897 "parser.y"
6750
(yyval.node) = (yyvsp[(1) - (1)].node);
6760
/* Line 1464 of skeleton.m4 */
6761
#line 2900 "parser.y"
6763
char* str = string_cstr(&(yyvsp[(3) - (3)].str));
6764
(yyval.node) = mkaddnode((yyvsp[(1) - (3)].node), mkstringnode(concat2("=",str)));
6775
/* Line 1464 of skeleton.m4 */
6776
#line 2905 "parser.y"
6778
(yyval.node) = mkaddnode((yyvsp[(1) - (3)].node), mkaddnode(mkstringnode("=\""), mkaddnode((yyvsp[(3) - (3)].node), mkstringnode("\""))));
6788
/* Line 1464 of skeleton.m4 */
6789
#line 2908 "parser.y"
6791
(yyval.node) = mkaddnode(mkaddnode(mkstringnode(concat2((yyvsp[(1) - (3)].id),"=\"")), (yyvsp[(3) - (3)].node)), mkstringnode("\""));
6801
/* Line 1464 of skeleton.m4 */
6802
#line 2911 "parser.y"
6804
char* str = string_cstr(&(yyvsp[(3) - (3)].str));
6805
(yyval.node)=mkstringnode(allocprintf("%s=%s", (yyvsp[(1) - (3)].id),str));
6807
free((yyvsp[(1) - (3)].id));free((char*)(yyvsp[(3) - (3)].str).str);
6817
/* Line 1464 of skeleton.m4 */
6818
#line 2921 "parser.y"
6821
memset(&(yyval.params),0,sizeof((yyval.params)));
6831
/* Line 1464 of skeleton.m4 */
6832
#line 2925 "parser.y"
6835
(yyval.params)=(yyvsp[(1) - (1)].params);
6845
/* Line 1464 of skeleton.m4 */
6846
#line 2931 "parser.y"
6849
memset(&(yyval.params),0,sizeof((yyval.params)));
6850
(yyval.params).varargs=1;
6851
list_append((yyval.params).list, (yyvsp[(2) - (2)].param));
6861
/* Line 1464 of skeleton.m4 */
6862
#line 2937 "parser.y"
6865
(yyval.params) =(yyvsp[(1) - (4)].params);
6866
(yyval.params).varargs=1;
6867
list_append((yyval.params).list, (yyvsp[(4) - (4)].param));
6877
/* Line 1464 of skeleton.m4 */
6878
#line 2945 "parser.y"
6881
(yyval.params) = (yyvsp[(1) - (3)].params);
6882
list_append((yyval.params).list, (yyvsp[(3) - (3)].param));
6892
/* Line 1464 of skeleton.m4 */
6893
#line 2950 "parser.y"
6896
memset(&(yyval.params),0,sizeof((yyval.params)));
6897
list_append((yyval.params).list, (yyvsp[(1) - (1)].param));
6907
/* Line 1464 of skeleton.m4 */
6908
#line 2956 "parser.y"
6911
(yyval.param) = rfx_calloc(sizeof(param_t));
6912
(yyval.param)->name=(yyvsp[(1) - (4)].id);
6913
(yyval.param)->type = (yyvsp[(3) - (4)].classinfo);
6915
(yyval.param)->value = (yyvsp[(4) - (4)].constant);
6925
/* Line 1464 of skeleton.m4 */
6926
#line 2964 "parser.y"
6929
(yyval.param) = rfx_calloc(sizeof(param_t));
6930
(yyval.param)->name=(yyvsp[(1) - (2)].id);
6931
(yyval.param)->type = TYPE_ANY;
6933
(yyval.param)->value = (yyvsp[(2) - (2)].constant);
6943
/* Line 1464 of skeleton.m4 */
6944
#line 2974 "parser.y"
6945
{PASS12 (yyval.token)=0;}
6954
/* Line 1464 of skeleton.m4 */
6955
#line 2977 "parser.y"
6956
{PASS12 startfunction(&(yyvsp[(1) - (9)].flags),(yyvsp[(3) - (9)].token),(yyvsp[(4) - (9)].id),&(yyvsp[(6) - (9)].params),(yyvsp[(8) - (9)].classinfo));}
6965
/* Line 1464 of skeleton.m4 */
6966
#line 2978 "parser.y"
6969
endfunction(&(yyvsp[(1) - (12)].flags),(yyvsp[(3) - (12)].token),(yyvsp[(4) - (12)].id),&(yyvsp[(6) - (12)].params),0,0);
6971
if(!state->method->info) syntaxerror("internal error");
6973
code_t*c = method_header(state->method);
6974
c = wrap_function(c, 0, (yyvsp[(11) - (12)].code));
6976
endfunction(&(yyvsp[(1) - (12)].flags),(yyvsp[(3) - (12)].token),(yyvsp[(4) - (12)].id),&(yyvsp[(6) - (12)].params),(yyvsp[(8) - (12)].classinfo),c);
6978
list_deep_free((yyvsp[(6) - (12)].params).list);
6989
/* Line 1464 of skeleton.m4 */
6990
#line 2994 "parser.y"
6991
{PASS12 (yyval.id)=0;}
7000
/* Line 1464 of skeleton.m4 */
7001
#line 2996 "parser.y"
7002
{PASS12 innerfunction((yyvsp[(2) - (7)].id),&(yyvsp[(4) - (7)].params),(yyvsp[(6) - (7)].classinfo));}
7011
/* Line 1464 of skeleton.m4 */
7012
#line 2997 "parser.y"
7015
endfunction(0,0,(yyvsp[(2) - (10)].id),&(yyvsp[(4) - (10)].params),0,0);
7017
methodinfo_t*f = state->method->info;
7018
if(!f || !f->kind) syntaxerror("internal error");
7020
code_t*c = method_header(state->method);
7021
c = wrap_function(c, 0, (yyvsp[(9) - (10)].code));
7023
int index = state->method->var_index;
7024
endfunction(0,0,(yyvsp[(2) - (10)].id),&(yyvsp[(4) - (10)].params),(yyvsp[(6) - (10)].classinfo),c);
7026
(yyval.value).c = abc_getlocal(0, index);
7027
(yyval.value).t = TYPE_FUNCTION(f);
7029
PASS12 list_deep_free((yyvsp[(4) - (10)].params).list);
7039
/* Line 1464 of skeleton.m4 */
7040
#line 3019 "parser.y"
7042
PASS1 NEW(unresolvedinfo_t,c);
7043
memset(c, 0, sizeof(*c));
7044
c->kind = INFOTYPE_UNRESOLVED;
7045
c->name = (yyvsp[(1) - (1)].id);
7046
c->package = get_package_from_name((yyvsp[(1) - (1)].id));
7048
c->nsset = get_current_imports();
7049
/* make the compiler look for this class in the current directory,
7051
as3_schedule_class_noerror(state->package, (yyvsp[(1) - (1)].id));
7053
(yyval.classinfo) = (classinfo_t*)c;
7055
slotinfo_t*s = find_class((yyvsp[(1) - (1)].id));
7056
if(!s) syntaxerror("Could not find class/method %s (current package: %s)\n", (yyvsp[(1) - (1)].id), state->package);
7057
(yyval.classinfo) = (classinfo_t*)s;
7067
/* Line 1464 of skeleton.m4 */
7068
#line 3038 "parser.y"
7070
PASS1 NEW(unresolvedinfo_t,c);
7071
memset(c, 0, sizeof(*c));
7072
c->kind = INFOTYPE_UNRESOLVED;
7073
c->package = (yyvsp[(1) - (3)].id);
7074
c->name = (yyvsp[(3) - (3)].id);
7075
(yyval.classinfo) = (classinfo_t*)c;
7077
slotinfo_t*s = registry_find((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].id));
7078
if(!s) syntaxerror("Couldn't find class/method %s.%s\n", (yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].id));
7079
free((yyvsp[(1) - (3)].id));(yyvsp[(1) - (3)].id)=0;
7080
(yyval.classinfo) = (classinfo_t*)s;
7090
/* Line 1464 of skeleton.m4 */
7091
#line 3055 "parser.y"
7092
{PASS12 (yyval.classinfo_list)=list_new();list_append((yyval.classinfo_list), (yyvsp[(1) - (1)].classinfo));}
7101
/* Line 1464 of skeleton.m4 */
7102
#line 3056 "parser.y"
7103
{PASS12 (yyval.classinfo_list)=(yyvsp[(1) - (3)].classinfo_list);list_append((yyval.classinfo_list),(yyvsp[(3) - (3)].classinfo));}
7112
/* Line 1464 of skeleton.m4 */
7113
#line 3058 "parser.y"
7114
{PASS12 (yyval.classinfo)=(yyvsp[(1) - (1)].classinfo);}
7123
/* Line 1464 of skeleton.m4 */
7124
#line 3059 "parser.y"
7125
{PASS12 (yyval.classinfo)=TYPE_ANY;}
7134
/* Line 1464 of skeleton.m4 */
7135
#line 3060 "parser.y"
7136
{PASS12 (yyval.classinfo)=TYPE_VOID;}
7145
/* Line 1464 of skeleton.m4 */
7146
#line 3069 "parser.y"
7147
{PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
7156
/* Line 1464 of skeleton.m4 */
7157
#line 3070 "parser.y"
7158
{PASS12 (yyval.classinfo)=0;}
7167
/* Line 1464 of skeleton.m4 */
7168
#line 3074 "parser.y"
7169
{(yyval.value_list).cc=0;(yyval.value_list).number=0;}
7178
/* Line 1464 of skeleton.m4 */
7179
#line 3075 "parser.y"
7180
{(yyval.value_list)=(yyvsp[(2) - (3)].value_list);}
7189
/* Line 1464 of skeleton.m4 */
7190
#line 3077 "parser.y"
7191
{(yyval.value_list).cc=0;(yyval.value_list).number=0;}
7200
/* Line 1464 of skeleton.m4 */
7201
#line 3081 "parser.y"
7202
{(yyval.value_list).number=1;
7203
(yyval.value_list).cc = (yyvsp[(1) - (1)].value).c;
7213
/* Line 1464 of skeleton.m4 */
7214
#line 3085 "parser.y"
7215
{(yyval.value_list) = (yyvsp[(1) - (2)].value_list);}
7224
/* Line 1464 of skeleton.m4 */
7225
#line 3086 "parser.y"
7227
(yyval.value_list).number= (yyvsp[(1) - (2)].value_list).number+1;
7228
(yyval.value_list).cc = code_append((yyvsp[(1) - (2)].value_list).cc, (yyvsp[(2) - (2)].value).c);
7238
/* Line 1464 of skeleton.m4 */
7239
#line 3092 "parser.y"
7241
typedcode_t v = node_read((yyvsp[(2) - (4)].node));
7242
(yyval.value).c = v.c;
7243
if((yyval.value).c->opcode == OPCODE_COERCE_A) (yyval.value).c = code_cutlast((yyval.value).c);
7245
code_t*paramcode = (yyvsp[(4) - (4)].value_list).cc;
7246
if((yyval.value).c->opcode == OPCODE_GETPROPERTY) {
7247
multiname_t*name = (yyval.value).c->data[0];(yyval.value).c->data[0]=0;
7248
(yyval.value).c = code_cutlast((yyval.value).c);
7249
(yyval.value).c = code_append((yyval.value).c, paramcode);
7250
(yyval.value).c = abc_constructprop2((yyval.value).c, name, (yyvsp[(4) - (4)].value_list).number);
7251
multiname_destroy(name);
7252
} else if(TYPE_IS_CLASS(v.t) && v.t->data) {
7253
code_free((yyval.value).c);
7254
classinfo_t*c = v.t->data;
7256
(yyval.value).c = abc_findpropstrict2(0, &m);
7257
(yyval.value).c = code_append((yyval.value).c, paramcode);
7258
(yyval.value).c = abc_constructprop2((yyval.value).c, &m, (yyvsp[(4) - (4)].value_list).number);
7259
/*} else if($$.c->opcode == OPCODE_GETSLOT) {
7260
int slot = (int)(ptroff_t)$$.c->data[0];
7261
trait_t*t = traits_find_slotid(state->cls->abc->traits,slot);//FIXME
7262
multiname_t*name = t->name;
7263
$$.c = code_cutlast($$.c);
7264
$$.c = code_append($$.c, paramcode);
7265
$$.c = abc_constructprop2($$.c, name, $4.number);*/
7267
(yyval.value).c = code_append((yyval.value).c, paramcode);
7268
(yyval.value).c = abc_construct((yyval.value).c, (yyvsp[(4) - (4)].value_list).number);
7271
(yyval.value).t = TYPE_ANY;
7272
if(TYPE_IS_CLASS(v.t) && v.t->data) {
7273
(yyval.value).t = v.t->data;
7275
(yyval.value).c = abc_coerce_a((yyval.value).c);
7276
(yyval.value).t = TYPE_ANY;
7287
/* Line 1464 of skeleton.m4 */
7288
#line 3136 "parser.y"
7291
typedcode_t v = node_read((yyvsp[(1) - (4)].node));
7292
(yyval.value).c = v.c;
7293
if((yyval.value).c->opcode == OPCODE_COERCE_A) {
7294
(yyval.value).c = code_cutlast((yyval.value).c);
7296
code_t*paramcode = (yyvsp[(3) - (4)].value_list).cc;
7298
(yyval.value).t = TYPE_ANY;
7299
if((yyval.value).c->opcode == OPCODE_GETPROPERTY) {
7300
multiname_t*name = (yyval.value).c->data[0];(yyval.value).c->data[0]=0;
7301
(yyval.value).c = code_cutlast((yyval.value).c);
7302
(yyval.value).c = code_append((yyval.value).c, paramcode);
7303
(yyval.value).c = abc_callproperty2((yyval.value).c, name, (yyvsp[(3) - (4)].value_list).number);
7304
multiname_destroy(name);
7305
/* } else if($$.c->opcode == OPCODE_GETSLOT && $$.c->prev->opcode != OPCODE_GETSCOPEOBJECT) {
7306
int slot = (int)(ptroff_t)$$.c->data[0];
7307
trait_t*t = traits_find_slotid(state->cls->abc->traits,slot);
7308
if(t->kind!=TRAIT_METHOD) {
7309
//ok: flash allows to assign closures to members.
7311
multiname_t*name = t->name;
7312
$$.c = code_cutlast($$.c);
7313
$$.c = code_append($$.c, paramcode);
7314
//$$.c = abc_callmethod($$.c, t->method, len); //#1051 illegal early access binding
7315
$$.c = abc_callproperty2($$.c, name, $3.number);*/
7316
} else if((yyval.value).c->opcode == OPCODE_GETSUPER) {
7317
multiname_t*name = (yyval.value).c->data[0];(yyval.value).c->data[0]=0;
7318
(yyval.value).c = code_cutlast((yyval.value).c);
7319
(yyval.value).c = code_append((yyval.value).c, paramcode);
7320
(yyval.value).c = abc_callsuper2((yyval.value).c, name, (yyvsp[(3) - (4)].value_list).number);
7321
multiname_destroy(name);
7323
(yyval.value).c = abc_getglobalscope((yyval.value).c);
7324
(yyval.value).c = code_append((yyval.value).c, paramcode);
7325
(yyval.value).c = abc_call((yyval.value).c, (yyvsp[(3) - (4)].value_list).number);
7328
if(TYPE_IS_FUNCTION(v.t) && v.t->data) {
7329
(yyval.value).t = ((methodinfo_t*)(v.t->data))->return_type;
7330
} else if(TYPE_IS_CLASS(v.t) && v.t->data) {
7331
// calling a class is like a typecast
7332
(yyval.value).t = (classinfo_t*)v.t->data;
7334
(yyval.value).t = TYPE_ANY;
7335
(yyval.value).c = abc_coerce_a((yyval.value).c);
7346
/* Line 1464 of skeleton.m4 */
7347
#line 3186 "parser.y"
7349
if(!state->cls) syntaxerror("super() not allowed outside of a class");
7350
if(!state->method) syntaxerror("super() not allowed outside of a function");
7351
if(!state->method->is_constructor) syntaxerror("super() not allowed outside of a constructor");
7353
(yyval.value).c = code_new();
7354
(yyval.value).c = abc_getlocal_0((yyval.value).c);
7356
(yyval.value).c = code_append((yyval.value).c, (yyvsp[(3) - (4)].value_list).cc);
7358
this is dependent on the control path, check this somewhere else
7359
if(state->method->has_super)
7360
syntaxerror("constructor may call super() only once");
7362
state->method->has_super = 1;
7364
(yyval.value).c = abc_constructsuper((yyval.value).c, (yyvsp[(3) - (4)].value_list).number);
7365
(yyval.value).c = abc_pushundefined((yyval.value).c);
7366
(yyval.value).t = TYPE_ANY;
7376
/* Line 1464 of skeleton.m4 */
7377
#line 3207 "parser.y"
7379
typedcode_t v = node_read((yyvsp[(2) - (2)].node));
7380
(yyval.value).c = v.c;
7381
if((yyval.value).c->opcode == OPCODE_COERCE_A) {
7382
(yyval.value).c = code_cutlast((yyval.value).c);
7384
multiname_t*name = 0;
7385
if((yyval.value).c->opcode == OPCODE_GETPROPERTY) {
7386
(yyval.value).c->opcode = OPCODE_DELETEPROPERTY;
7387
} else if((yyval.value).c->opcode == OPCODE_GETSLOT) {
7388
int slot = (int)(ptroff_t)(yyval.value).c->data[0];
7389
multiname_t*name = traits_find_slotid(state->cls->abc->traits,slot)->name;
7390
(yyval.value).c = code_cutlast((yyval.value).c);
7391
(yyval.value).c = abc_deleteproperty2((yyval.value).c, name);
7393
(yyval.value).c = abc_getlocal_0((yyval.value).c);
7394
MULTINAME_LATE(m, v.t?v.t->access:ACCESS_PACKAGE, "");
7395
(yyval.value).c = abc_deleteproperty2((yyval.value).c, &m);
7397
(yyval.value).t = TYPE_BOOLEAN;
7407
/* Line 1464 of skeleton.m4 */
7408
#line 3229 "parser.y"
7410
(yyval.code) = abc_returnvoid(0);
7420
/* Line 1464 of skeleton.m4 */
7421
#line 3232 "parser.y"
7423
(yyval.code) = (yyvsp[(2) - (2)].value).c;
7424
(yyval.code) = abc_returnvalue((yyval.code));
7434
/* Line 1464 of skeleton.m4 */
7435
#line 3239 "parser.y"
7437
(yyval.value) = node_read((yyvsp[(1) - (1)].node));
7447
/* Line 1464 of skeleton.m4 */
7448
#line 3242 "parser.y"
7450
(yyval.value) = node_read((yyvsp[(1) - (1)].node));
7460
/* Line 1464 of skeleton.m4 */
7461
#line 3245 "parser.y"
7463
(yyval.node) = mkmultinode(&node_comma, (yyvsp[(1) - (1)].node));
7473
/* Line 1464 of skeleton.m4 */
7474
#line 3248 "parser.y"
7476
(yyval.node) = multinode_extend((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7486
/* Line 1464 of skeleton.m4 */
7487
#line 3251 "parser.y"
7489
(yyval.code) = node_exec((yyvsp[(1) - (1)].node));
7499
/* Line 1464 of skeleton.m4 */
7500
#line 3254 "parser.y"
7502
(yyval.code) = (yyvsp[(1) - (3)].code);
7503
(yyval.code) = code_append((yyval.code), node_exec((yyvsp[(3) - (3)].node)));
7513
/* Line 1464 of skeleton.m4 */
7514
#line 3259 "parser.y"
7515
{(yyval.value_list).cc=0;(yyval.value_list).number=0;}
7524
/* Line 1464 of skeleton.m4 */
7525
#line 3260 "parser.y"
7526
{(yyval.value_list)=(yyvsp[(1) - (1)].value_list);}
7535
/* Line 1464 of skeleton.m4 */
7536
#line 3262 "parser.y"
7537
{(yyval.code)=abc_pushstring(0,(yyvsp[(1) - (1)].id));}
7546
/* Line 1464 of skeleton.m4 */
7547
#line 3263 "parser.y"
7548
{(yyval.code)=abc_pushstring2(0,&(yyvsp[(1) - (1)].str));}
7557
/* Line 1464 of skeleton.m4 */
7558
#line 3264 "parser.y"
7559
{syntaxerror("dictionary keys must be strings");}
7568
/* Line 1464 of skeleton.m4 */
7569
#line 3265 "parser.y"
7570
{syntaxerror("dictionary keys must be strings");}
7579
/* Line 1464 of skeleton.m4 */
7580
#line 3266 "parser.y"
7581
{syntaxerror("dictionary keys must be strings");}
7590
/* Line 1464 of skeleton.m4 */
7591
#line 3268 "parser.y"
7593
(yyval.value_list).cc = 0;
7594
(yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(1) - (3)].code));
7595
(yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(3) - (3)].value).c);
7596
(yyval.value_list).number = 2;
7606
/* Line 1464 of skeleton.m4 */
7607
#line 3274 "parser.y"
7609
(yyval.value_list).cc = (yyvsp[(1) - (5)].value_list).cc;
7610
(yyval.value_list).number = (yyvsp[(1) - (5)].value_list).number+2;
7611
(yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(3) - (5)].code));
7612
(yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(5) - (5)].value).c);
7622
/* Line 1464 of skeleton.m4 */
7623
#line 3283 "parser.y"
7624
{(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
7633
/* Line 1464 of skeleton.m4 */
7634
#line 3284 "parser.y"
7635
{(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
7644
/* Line 1464 of skeleton.m4 */
7645
#line 3285 "parser.y"
7646
{(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
7655
/* Line 1464 of skeleton.m4 */
7656
#line 3286 "parser.y"
7657
{(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
7666
/* Line 1464 of skeleton.m4 */
7667
#line 3287 "parser.y"
7668
{(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
7677
/* Line 1464 of skeleton.m4 */
7678
#line 3288 "parser.y"
7679
{(yyval.node) = (yyvsp[(1) - (1)].node);}
7688
/* Line 1464 of skeleton.m4 */
7689
#line 3290 "parser.y"
7691
(yyval.node) = mkconstnode((yyvsp[(1) - (1)].constant));
7701
/* Line 1464 of skeleton.m4 */
7702
#line 3294 "parser.y"
7704
(yyval.node) = (yyvsp[(1) - (1)].node);
7714
/* Line 1464 of skeleton.m4 */
7715
#line 3299 "parser.y"
7719
multiname_t m = {QNAME, &stdns, 0, "RegExp"};
7720
if(!(yyvsp[(1) - (1)].regexp).options) {
7721
v.c = abc_getlex2(v.c, &m);
7722
v.c = abc_pushstring(v.c, (yyvsp[(1) - (1)].regexp).pattern);
7723
v.c = abc_construct(v.c, 1);
7725
v.c = abc_getlex2(v.c, &m);
7726
v.c = abc_pushstring(v.c, (yyvsp[(1) - (1)].regexp).pattern);
7727
v.c = abc_pushstring(v.c, (yyvsp[(1) - (1)].regexp).options);
7728
v.c = abc_construct(v.c, 2);
7731
(yyval.node) = mkcodenode(v);
7741
/* Line 1464 of skeleton.m4 */
7742
#line 3317 "parser.y"
7745
state->method->need_arguments = 1;
7748
v.c = abc_getlocal(0, state->method->need_arguments);
7750
(yyval.node) = mkcodenode(v);
7760
/* Line 1464 of skeleton.m4 */
7761
#line 3328 "parser.y"
7765
v.c = code_append(v.c, (yyvsp[(2) - (3)].value_list).cc);
7766
v.c = abc_newarray(v.c, (yyvsp[(2) - (3)].value_list).number);
7767
v.t = registry_getarrayclass();
7768
(yyval.node) = mkcodenode(v);
7778
/* Line 1464 of skeleton.m4 */
7779
#line 3338 "parser.y"
7783
v.c = code_append(v.c, (yyvsp[(2) - (3)].value_list).cc);
7784
v.c = abc_newobject(v.c, (yyvsp[(2) - (3)].value_list).number/2);
7785
v.t = registry_getobjectclass();
7786
(yyval.node) = mkcodenode(v);
7796
/* Line 1464 of skeleton.m4 */
7797
#line 3347 "parser.y"
7798
{(yyval.node) = mknode2(&node_lt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
7807
/* Line 1464 of skeleton.m4 */
7808
#line 3348 "parser.y"
7809
{(yyval.node) = mknode2(&node_gt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
7818
/* Line 1464 of skeleton.m4 */
7819
#line 3349 "parser.y"
7820
{(yyval.node) = mknode2(&node_le,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
7829
/* Line 1464 of skeleton.m4 */
7830
#line 3350 "parser.y"
7831
{(yyval.node) = mknode2(&node_ge,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
7840
/* Line 1464 of skeleton.m4 */
7841
#line 3351 "parser.y"
7842
{(yyval.node) = mknode2(&node_eqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
7851
/* Line 1464 of skeleton.m4 */
7852
#line 3352 "parser.y"
7853
{(yyval.node) = mknode2(&node_eqeqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
7862
/* Line 1464 of skeleton.m4 */
7863
#line 3353 "parser.y"
7864
{(yyval.node) = mknode2(&node_noteqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
7873
/* Line 1464 of skeleton.m4 */
7874
#line 3354 "parser.y"
7875
{(yyval.node) = mknode2(&node_noteq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
7884
/* Line 1464 of skeleton.m4 */
7885
#line 3355 "parser.y"
7886
{(yyval.node) = mknode2(&node_oror,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
7895
/* Line 1464 of skeleton.m4 */
7896
#line 3356 "parser.y"
7897
{(yyval.node) = mknode2(&node_andand,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
7906
/* Line 1464 of skeleton.m4 */
7907
#line 3357 "parser.y"
7908
{(yyval.node) = mknode1(&node_not, (yyvsp[(2) - (2)].node));}
7917
/* Line 1464 of skeleton.m4 */
7918
#line 3358 "parser.y"
7919
{(yyval.node) = mknode1(&node_bitnot, (yyvsp[(2) - (2)].node));}
7928
/* Line 1464 of skeleton.m4 */
7929
#line 3359 "parser.y"
7930
{(yyval.node) = mknode2(&node_bitand, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
7939
/* Line 1464 of skeleton.m4 */
7940
#line 3360 "parser.y"
7941
{(yyval.node) = mknode2(&node_bitxor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
7950
/* Line 1464 of skeleton.m4 */
7951
#line 3361 "parser.y"
7952
{(yyval.node) = mknode2(&node_bitor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
7961
/* Line 1464 of skeleton.m4 */
7962
#line 3362 "parser.y"
7963
{(yyval.node) = mknode2(&node_shr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
7972
/* Line 1464 of skeleton.m4 */
7973
#line 3363 "parser.y"
7974
{(yyval.node) = mknode2(&node_ushr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
7983
/* Line 1464 of skeleton.m4 */
7984
#line 3364 "parser.y"
7985
{(yyval.node) = mknode2(&node_shl, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
7994
/* Line 1464 of skeleton.m4 */
7995
#line 3365 "parser.y"
7996
{(yyval.node) = mknode2(&node_div, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8005
/* Line 1464 of skeleton.m4 */
8006
#line 3366 "parser.y"
8007
{(yyval.node) = mknode2(&node_mod, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8016
/* Line 1464 of skeleton.m4 */
8017
#line 3367 "parser.y"
8018
{(yyval.node) = mknode2(&node_plus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8027
/* Line 1464 of skeleton.m4 */
8028
#line 3368 "parser.y"
8029
{(yyval.node) = mknode2(&node_minus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8038
/* Line 1464 of skeleton.m4 */
8039
#line 3369 "parser.y"
8040
{(yyval.node) = mknode2(&node_multiply, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8049
/* Line 1464 of skeleton.m4 */
8050
#line 3370 "parser.y"
8051
{(yyval.node) = mknode2(&node_in, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8060
/* Line 1464 of skeleton.m4 */
8061
#line 3371 "parser.y"
8062
{(yyval.node) = mknode2(&node_as, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8071
/* Line 1464 of skeleton.m4 */
8072
#line 3372 "parser.y"
8073
{(yyval.node) = mknode2(&node_instanceof, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8082
/* Line 1464 of skeleton.m4 */
8083
#line 3373 "parser.y"
8084
{(yyval.node) = mknode2(&node_is, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8093
/* Line 1464 of skeleton.m4 */
8094
#line 3374 "parser.y"
8095
{(yyval.node) = mknode1(&node_typeof, (yyvsp[(2) - (2)].node));}
8104
/* Line 1464 of skeleton.m4 */
8105
#line 3375 "parser.y"
8106
{(yyval.node) = mknode1(&node_void, (yyvsp[(2) - (2)].node));}
8115
/* Line 1464 of skeleton.m4 */
8116
#line 3376 "parser.y"
8117
{ (yyval.node) = mkconstnode(constant_new_undefined());}
8126
/* Line 1464 of skeleton.m4 */
8127
#line 3377 "parser.y"
8128
{ (yyval.node)=(yyvsp[(2) - (3)].node);}
8137
/* Line 1464 of skeleton.m4 */
8138
#line 3378 "parser.y"
8139
{(yyval.node) = mknode1(&node_neg, (yyvsp[(2) - (2)].node));}
8148
/* Line 1464 of skeleton.m4 */
8149
#line 3379 "parser.y"
8150
{(yyval.node) = mknode2(&node_arraylookup, (yyvsp[(1) - (4)].node),(yyvsp[(3) - (4)].node));}
8159
/* Line 1464 of skeleton.m4 */
8160
#line 3380 "parser.y"
8161
{(yyval.node) = mknode2(&node_muleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8170
/* Line 1464 of skeleton.m4 */
8171
#line 3381 "parser.y"
8172
{(yyval.node) = mknode2(&node_modeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8181
/* Line 1464 of skeleton.m4 */
8182
#line 3382 "parser.y"
8183
{(yyval.node) = mknode2(&node_shleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8192
/* Line 1464 of skeleton.m4 */
8193
#line 3383 "parser.y"
8194
{(yyval.node) = mknode2(&node_shreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8203
/* Line 1464 of skeleton.m4 */
8204
#line 3384 "parser.y"
8205
{(yyval.node) = mknode2(&node_ushreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8214
/* Line 1464 of skeleton.m4 */
8215
#line 3385 "parser.y"
8216
{ (yyval.node) = mknode2(&node_diveq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8225
/* Line 1464 of skeleton.m4 */
8226
#line 3386 "parser.y"
8227
{ (yyval.node) = mknode2(&node_bitoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8236
/* Line 1464 of skeleton.m4 */
8237
#line 3387 "parser.y"
8238
{ (yyval.node) = mknode2(&node_bitxoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8247
/* Line 1464 of skeleton.m4 */
8248
#line 3388 "parser.y"
8249
{ (yyval.node) = mknode2(&node_bitandeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8258
/* Line 1464 of skeleton.m4 */
8259
#line 3389 "parser.y"
8260
{ (yyval.node) = mknode2(&node_pluseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8269
/* Line 1464 of skeleton.m4 */
8270
#line 3390 "parser.y"
8271
{ (yyval.node) = mknode2(&node_minuseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8280
/* Line 1464 of skeleton.m4 */
8281
#line 3391 "parser.y"
8282
{ (yyval.node) = mknode2(&node_assign, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
8291
/* Line 1464 of skeleton.m4 */
8292
#line 3392 "parser.y"
8293
{ (yyval.node) = mknode3(&node_tenary, (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));}
8302
/* Line 1464 of skeleton.m4 */
8303
#line 3394 "parser.y"
8304
{ (yyval.node) = mknode1(&node_rplusplus, (yyvsp[(1) - (2)].node));}
8313
/* Line 1464 of skeleton.m4 */
8314
#line 3395 "parser.y"
8315
{ (yyval.node) = mknode1(&node_rminusminus, (yyvsp[(1) - (2)].node));}
8324
/* Line 1464 of skeleton.m4 */
8325
#line 3396 "parser.y"
8326
{(yyval.node) = mknode1(&node_lplusplus, (yyvsp[(2) - (2)].node)); }
8335
/* Line 1464 of skeleton.m4 */
8336
#line 3397 "parser.y"
8337
{(yyval.node) = mknode1(&node_lminusminus, (yyvsp[(2) - (2)].node)); }
8346
/* Line 1464 of skeleton.m4 */
8347
#line 3400 "parser.y"
8348
{ if(!state->cls->info)
8349
syntaxerror("super keyword not allowed outside a class");
8350
classinfo_t*t = state->cls->info->superclass;
8351
if(!t) t = TYPE_OBJECT;
8352
memberinfo_t*f = findmember_nsset(t, (yyvsp[(3) - (3)].id), 1);
8353
MEMBER_MULTINAME(m, f, (yyvsp[(3) - (3)].id));
8356
v.c = abc_getlocal_0(v.c);
8357
v.c = abc_getsuper2(v.c, &m);
8358
v.t = slotinfo_gettype((slotinfo_t*)f);
8359
(yyval.node) = mkcodenode(v);
8369
/* Line 1464 of skeleton.m4 */
8370
#line 3414 "parser.y"
8373
multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(2) - (2)].id)};
8374
v.c = abc_getlex2(0, &m);
8376
(yyval.node) = mkcodenode(v);
8386
/* Line 1464 of skeleton.m4 */
8387
#line 3422 "parser.y"
8388
{PASS12 new_state();state->xmlfilter=1;}
8397
/* Line 1464 of skeleton.m4 */
8398
#line 3422 "parser.y"
8402
typedcode_t v = node_read((yyvsp[(1) - (6)].node));
8403
typedcode_t w = node_read((yyvsp[(5) - (6)].node));
8405
int index = alloc_local();
8406
int result = alloc_local();
8407
int tmp = alloc_local();
8408
int xml = alloc_local();
8410
c = code_append(c, v.c);
8411
c = abc_checkfilter(c);
8412
c = abc_coerce_a(c); //hasnext2 converts to *
8413
c = abc_setlocal(c, xml);
8414
multiname_t m = {QNAME, &stdns, 0, "XMLList"};
8415
c = abc_getlex2(c, &m);
8416
c = abc_construct(c, 0);
8417
c = abc_setlocal(c, result);
8418
c = abc_pushbyte(c, 0);
8419
c = abc_setlocal(c, index);
8420
code_t*jmp = c = abc_jump(c, 0);
8421
code_t*loop = c = abc_label(c);
8422
c = abc_getlocal(c, xml);
8423
c = abc_getlocal(c, index);
8424
c = abc_nextvalue(c);
8426
c = abc_setlocal(c, tmp);
8427
c = abc_pushwith(c);
8428
c = code_append(c, w.c);
8429
c = abc_popscope(c);
8430
code_t*b = c = abc_iffalse(c, 0);
8431
c = abc_getlocal(c, result);
8432
c = abc_getlocal(c, index);
8433
c = abc_getlocal(c, tmp);
8434
multiname_t m2 = {MULTINAMEL, 0, &nopackage_namespace_set, 0};
8435
c = abc_setproperty2(c, &m2);
8436
c = b->branch = jmp->branch = abc_nop(c);
8437
c = abc_kill(c, tmp);
8438
c = abc_hasnext2(c, xml, index);
8439
c = abc_iftrue(c, loop);
8440
c = abc_getlocal(c, result);
8441
c = abc_kill(c, xml);
8442
c = abc_kill(c, result);
8443
c = abc_kill(c, index);
8445
c = var_block(c, state->vars);
8450
(yyval.node) = mkcodenode(r);
8460
/* Line 1464 of skeleton.m4 */
8461
#line 3476 "parser.y"
8462
{(yyval.id)=(yyvsp[(1) - (1)].id);}
8471
/* Line 1464 of skeleton.m4 */
8472
#line 3477 "parser.y"
8482
/* Line 1464 of skeleton.m4 */
8483
#line 3478 "parser.y"
8484
{(yyval.id)=(char*)(yyvsp[(1) - (1)].id);}
8493
/* Line 1464 of skeleton.m4 */
8494
#line 3480 "parser.y"
8504
/* Line 1464 of skeleton.m4 */
8505
#line 3488 "parser.y"
8507
typedcode_t v = node_read((yyvsp[(1) - (5)].node));
8508
typedcode_t w = node_read(resolve_identifier((yyvsp[(3) - (5)].id)));
8509
v.c = code_append(v.c, w.c);
8510
if(!TYPE_IS_NAMESPACE(w.t)) {
8511
as3_softwarning("%s might not be a namespace", (yyvsp[(3) - (5)].id));
8513
v.c = converttype(v.c, w.t, TYPE_NAMESPACE);
8514
multiname_t m = {RTQNAME, 0, 0, (yyvsp[(5) - (5)].id)};
8515
v.c = abc_getproperty2(v.c, &m);
8516
if(TYPE_IS_XML(v.t)) {
8519
v.c = abc_coerce_a(v.c);
8522
(yyval.node) = mkcodenode(v);
8532
/* Line 1464 of skeleton.m4 */
8533
#line 3506 "parser.y"
8535
typedcode_t v = node_read((yyvsp[(1) - (3)].node));
8536
multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(3) - (3)].id)};
8537
v.c = abc_getdescendants2(v.c, &m);
8539
(yyval.node) = mkcodenode(v);
8549
/* Line 1464 of skeleton.m4 */
8550
#line 3513 "parser.y"
8552
typedcode_t v = node_read((yyvsp[(1) - (5)].node));
8553
typedcode_t w = node_read((yyvsp[(4) - (5)].node));
8554
multiname_t m = {MULTINAMEL, 0, &nopackage_namespace_set, 0};
8555
v.c = code_append(v.c, w.c);
8556
v.c = converttype(w.c, w.t, TYPE_STRING);
8557
v.c = abc_getproperty2(v.c, &m);
8559
(yyval.node) = mkcodenode(v);
8569
/* Line 1464 of skeleton.m4 */
8570
#line 3524 "parser.y"
8572
typedcode_t v = node_read((yyvsp[(1) - (4)].node));
8573
multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(4) - (4)].id)};
8574
v.c = abc_getproperty2(v.c, &m);
8576
(yyval.node) = mkcodenode(v);
8586
/* Line 1464 of skeleton.m4 */
8587
#line 3531 "parser.y"
8589
typedcode_t v = node_read((yyvsp[(1) - (4)].node));
8590
multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(4) - (4)].id)};
8591
v.c = abc_getdescendants2(v.c, &m);
8593
(yyval.node) = mkcodenode(v);
8603
/* Line 1464 of skeleton.m4 */
8604
#line 3538 "parser.y"
8606
typedcode_t v = node_read((yyvsp[(1) - (6)].node));
8607
typedcode_t w = node_read((yyvsp[(5) - (6)].node));
8608
multiname_t m = {MULTINAMELA, 0, &nopackage_namespace_set, 0};
8609
v.c = code_append(v.c, w.c);
8610
v.c = converttype(w.c, w.t, TYPE_STRING);
8611
v.c = abc_getproperty2(v.c, &m);
8613
(yyval.node) = mkcodenode(v);
8623
/* Line 1464 of skeleton.m4 */
8624
#line 3548 "parser.y"
8626
typedcode_t v = node_read((yyvsp[(1) - (6)].node));
8627
typedcode_t w = node_read((yyvsp[(5) - (6)].node));
8628
multiname_t m = {MULTINAMELA, 0, &nopackage_namespace_set, 0};
8629
v.c = code_append(v.c, w.c);
8630
v.c = converttype(w.c, w.t, TYPE_STRING);
8631
v.c = abc_getdescendants2(v.c, &m);
8633
(yyval.node) = mkcodenode(v);
8643
/* Line 1464 of skeleton.m4 */
8644
#line 3559 "parser.y"
8646
typedcode_t v1 = node_read((yyvsp[(1) - (3)].node));
8647
(yyval.value).c = v1.c;
8648
classinfo_t*t = v1.t;
8650
if(TYPE_IS_CLASS(t) && t->data) {
8654
if(TYPE_IS_XML(t)) {
8655
multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(3) - (3)].id)};
8656
(yyval.value).c = abc_getproperty2((yyval.value).c, &m);
8657
(yyval.value).c = abc_coerce_a((yyval.value).c);
8658
(yyval.value).t = TYPE_XMLLIST;
8660
if(t->subtype==INFOTYPE_UNRESOLVED) {
8661
syntaxerror("syntaxerror: trying to resolve property '%s' on incomplete object '%s'", (yyvsp[(3) - (3)].id), t->name);
8663
memberinfo_t*f = findmember_nsset(t, (yyvsp[(3) - (3)].id), 1);
8665
if(f && !is_static != !(f->flags&FLAG_STATIC))
8667
if(f && f->slot && !noslot) {
8668
(yyval.value).c = abc_getslot((yyval.value).c, f->slot);
8671
if(!TYPE_IS_XMLLIST(t)) {
8672
as3_softwarning("Access of undefined property '%s' in %s", (yyvsp[(3) - (3)].id), t->name);
8675
MEMBER_MULTINAME(m, f, (yyvsp[(3) - (3)].id));
8676
(yyval.value).c = abc_getproperty2((yyval.value).c, &m);
8678
/* determine type */
8679
(yyval.value).t = slotinfo_gettype((slotinfo_t*)f);
8680
if(!(yyval.value).t)
8681
(yyval.value).c = abc_coerce_a((yyval.value).c);
8683
} else if(v1.c && v1.c->opcode == OPCODE___PUSHPACKAGE__) {
8684
string_t*package = v1.c->data[0];
8685
char*package2 = concat3(package->str, ".", (yyvsp[(3) - (3)].id));
8687
slotinfo_t*a = registry_find(package->str, (yyvsp[(3) - (3)].id));
8689
(yyval.value) = push_class(a);
8690
} else if(dict_contains(state->import_toplevel_packages, package2) ||
8691
registry_ispackage(package2)) {
8692
(yyval.value).c = v1.c;
8693
(yyval.value).c->data[0] = string_new4(package2);
8694
(yyval.value).t = 0;
8696
syntaxerror("couldn't resolve %s", package2);
8699
/* when resolving a property on an unknown type, we do know the
8700
name of the property (and don't seem to need the package), but
8701
we need to make avm2 try out all access modes */
8702
as3_softwarning("Resolving %s on unknown type", (yyvsp[(3) - (3)].id));
8703
multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(3) - (3)].id)};
8704
(yyval.value).c = abc_getproperty2((yyval.value).c, &m);
8705
(yyval.value).c = abc_coerce_a((yyval.value).c);
8706
(yyval.value).t = TYPE_ANY;
8717
/* Line 1464 of skeleton.m4 */
8718
#line 3739 "parser.y"
8721
/* Queue unresolved identifiers for checking against the parent
8722
function's variables.
8723
We consider everything which is not a local variable "unresolved".
8724
This encompasses class names, members of the surrounding class
8725
etc. which is *correct* because local variables of the parent function
8729
if(!find_variable(state, (yyvsp[(1) - (1)].id))) {
8730
unknown_variable((yyvsp[(1) - (1)].id));
8731
/* let the compiler know that it might want to check the current directory/package
8732
for this identifier- maybe there's a file $1.as defining $1. */
8733
as3_schedule_class_noerror(state->package, (yyvsp[(1) - (1)].id));
8739
(yyval.node) = resolve_identifier((yyvsp[(1) - (1)].id));
8749
/* Line 1464 of skeleton.m4 */
8750
#line 3773 "parser.y"
8753
NEW(namespace_decl_t,n);
8754
n->name = (yyvsp[(2) - (2)].id);
8755
n->url = (yyvsp[(2) - (2)].id);
8756
(yyval.namespace_decl)=n;
8766
/* Line 1464 of skeleton.m4 */
8767
#line 3780 "parser.y"
8770
NEW(namespace_decl_t,n);
8771
n->name = (yyvsp[(2) - (4)].id);
8772
n->url = (yyvsp[(4) - (4)].id);
8773
(yyval.namespace_decl)=n;
8783
/* Line 1464 of skeleton.m4 */
8784
#line 3787 "parser.y"
8787
NEW(namespace_decl_t,n);
8788
n->name = (yyvsp[(2) - (4)].id);
8789
n->url = (yyvsp[(4) - (4)].str).str;
8790
(yyval.namespace_decl)=n;
8800
/* Line 1464 of skeleton.m4 */
8801
#line 3794 "parser.y"
8804
trie_put(active_namespaces, (yyvsp[(2) - (2)].namespace_decl)->name, (void*)(yyvsp[(2) - (2)].namespace_decl)->url);
8806
namespace_t access = modifiers2access(&(yyvsp[(1) - (2)].flags));
8807
varinfo_t* var = varinfo_register_global(access.access, state->package, (yyvsp[(2) - (2)].namespace_decl)->name);
8808
var->type = TYPE_NAMESPACE;
8810
ns.access = ACCESS_NAMESPACE;
8811
ns.name = (yyvsp[(2) - (2)].namespace_decl)->url;
8812
var->value = constant_new_namespace(&ns);
8815
MULTINAME(m, TYPE_NAMESPACE);
8816
trait_t*t = add_abc_slot(&(yyvsp[(1) - (2)].flags), (yyvsp[(2) - (2)].namespace_decl)->name, 0, 0);
8817
t->value = var->value;
8818
t->type_name = multiname_clone(&m);
8831
/* Line 1464 of skeleton.m4 */
8832
#line 3817 "parser.y"
8834
as3_warning("default xml namespaces not supported yet");
8845
/* Line 1464 of skeleton.m4 */
8846
#line 3822 "parser.y"
8849
const char*url = (yyvsp[(3) - (3)].classinfo)->name;
8851
varinfo_t*s = (varinfo_t*)(yyvsp[(3) - (3)].classinfo);
8852
if(s->kind == INFOTYPE_UNRESOLVED) {
8853
s = (varinfo_t*)registry_resolve((slotinfo_t*)s);
8855
syntaxerror("Couldn't resolve namespace %s", (yyvsp[(3) - (3)].classinfo)->name);
8858
if(!s || s->kind != INFOTYPE_VAR)
8859
syntaxerror("%s.%s is not a public namespace (%d)", (yyvsp[(3) - (3)].classinfo)->package, (yyvsp[(3) - (3)].classinfo)->name, s?s->kind:-1);
8860
if(!s->value || !NS_TYPE(s->value->type))
8861
syntaxerror("%s.%s is not a namespace", (yyvsp[(3) - (3)].classinfo)->package, (yyvsp[(3) - (3)].classinfo)->name);
8862
url = s->value->ns->name;
8864
trie_put(active_namespaces, (yyvsp[(3) - (3)].classinfo)->name, (void*)url);
8865
add_active_url(url);
8874
/* Line 1464 of skeleton.m4 */
8875
#line 8876 "parser.tab.c"
8878
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
8882
YY_STACK_PRINT (yyss, yyssp);
8886
/* Now `shift' the result of the reduction. Determine what state
8887
that goes to, based on the state we popped back to and the rule
8888
number reduced by. */
8892
yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
8893
if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
8894
yystate = yytable[yystate];
8896
yystate = yydefgoto[yyn - YYNTOKENS];
8901
/*------------------------------------.
8902
| yyerrlab -- here on detecting error |
8903
`------------------------------------*/
8905
/* If not already recovering from an error, report this error. */
8909
#if ! YYERROR_VERBOSE
8910
yyerror (YY_("syntax error"));
8913
YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
8914
if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
8916
YYSIZE_T yyalloc = 2 * yysize;
8917
if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
8918
yyalloc = YYSTACK_ALLOC_MAXIMUM;
8919
if (yymsg != yymsgbuf)
8920
YYSTACK_FREE (yymsg);
8921
yymsg = (char *) YYSTACK_ALLOC (yyalloc);
8923
yymsg_alloc = yyalloc;
8927
yymsg_alloc = sizeof yymsgbuf;
8931
if (0 < yysize && yysize <= yymsg_alloc)
8933
(void) yysyntax_error (yymsg, yystate, yychar);
8938
yyerror (YY_("syntax error"));
8940
goto yyexhaustedlab;
8948
if (yyerrstatus == 3)
8950
/* If just tried and failed to reuse lookahead token after an
8951
error, discard it. */
8953
if (yychar <= YYEOF)
8955
/* Return failure if at end of input. */
8956
if (yychar == YYEOF)
8961
yydestruct ("Error: discarding",
8967
/* Else will try to reuse lookahead token after shifting the error
8972
/*---------------------------------------------------.
8973
| yyerrorlab -- error raised explicitly by YYERROR. |
8974
`---------------------------------------------------*/
8977
/* Pacify compilers like GCC when the user code never invokes
8978
YYERROR and the label yyerrorlab therefore never appears in user
8980
if (/*CONSTCOND*/ 0)
8983
/* Do not reclaim the symbols of the rule which action triggered
8987
YY_STACK_PRINT (yyss, yyssp);
8992
/*-------------------------------------------------------------.
8993
| yyerrlab1 -- common code for both syntax error and YYERROR. |
8994
`-------------------------------------------------------------*/
8996
yyerrstatus = 3; /* Each real token shifted decrements this. */
9000
yyn = yypact[yystate];
9001
if (yyn != YYPACT_NINF)
9004
if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
9012
/* Pop the current state because it cannot handle the error token. */
9017
yydestruct ("Error: popping",
9018
yystos[yystate], yyvsp);
9021
YY_STACK_PRINT (yyss, yyssp);
9027
/* Shift the error token. */
9028
YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
9034
/*-------------------------------------.
9035
| yyacceptlab -- YYACCEPT comes here. |
9036
`-------------------------------------*/
9041
/*-----------------------------------.
9042
| yyabortlab -- YYABORT comes here. |
9043
`-----------------------------------*/
9048
#if !defined(yyoverflow) || YYERROR_VERBOSE
9049
/*-------------------------------------------------.
9050
| yyexhaustedlab -- memory exhaustion comes here. |
9051
`-------------------------------------------------*/
9053
yyerror (YY_("memory exhausted"));
9059
if (yychar != YYEMPTY)
9060
yydestruct ("Cleanup: discarding lookahead",
9062
/* Do not reclaim the symbols of the rule which action triggered
9063
this YYABORT or YYACCEPT. */
9065
YY_STACK_PRINT (yyss, yyssp);
9066
while (yyssp != yyss)
9068
yydestruct ("Cleanup: popping",
9069
yystos[*yyssp], yyvsp);
9074
YYSTACK_FREE (yyss);
9077
if (yymsg != yymsgbuf)
9078
YYSTACK_FREE (yymsg);
9080
/* Make sure YYID is used. */
9081
return YYID (yyresult);