1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639 |
- # line 2 "lua.stx"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "opcode.h"
- #include "hash.h"
- #include "inout.h"
- #include "table.h"
- #include "lua.h"
- #ifndef ALIGNMENT
- #define ALIGNMENT (sizeof(void *))
- #endif
- #ifndef MAXCODE
- #define MAXCODE 1024
- #endif
- static long buffer[MAXCODE];
- static Byte *code = (Byte *)buffer;
- static long mainbuffer[MAXCODE];
- static Byte *maincode = (Byte *)mainbuffer;
- static Byte *basepc;
- static Byte *pc;
- #define MAXVAR 32
- static long varbuffer[MAXVAR];
- static Byte nvarbuffer=0; /* number of variables at a list */
- static Word localvar[STACKGAP];
- static Byte nlocalvar=0; /* number of local variables */
- static int ntemp; /* number of temporary var into stack */
- static int err; /* flag to indicate error */
- /* Internal functions */
- #define align(n) align_n(sizeof(n))
- static void code_byte (Byte c)
- {
- if (pc-basepc>MAXCODE-1)
- {
- lua_error ("code buffer overflow");
- err = 1;
- }
- *pc++ = c;
- }
- static void code_word (Word n)
- {
- if (pc-basepc>MAXCODE-sizeof(Word))
- {
- lua_error ("code buffer overflow");
- err = 1;
- }
- *((Word *)pc) = n;
- pc += sizeof(Word);
- }
- static void code_float (float n)
- {
- if (pc-basepc>MAXCODE-sizeof(float))
- {
- lua_error ("code buffer overflow");
- err = 1;
- }
- *((float *)pc) = n;
- pc += sizeof(float);
- }
- static void incr_ntemp (void)
- {
- if (ntemp+nlocalvar+MAXVAR+1 < STACKGAP)
- ntemp++;
- else
- {
- lua_error ("stack overflow");
- err = 1;
- }
- }
- static void incr_nlocalvar (void)
- {
- if (ntemp+nlocalvar+MAXVAR+1 < STACKGAP)
- nlocalvar++;
- else
- {
- lua_error ("too many local variables or expression too complicate");
- err = 1;
- }
- }
- static void incr_nvarbuffer (void)
- {
- if (nvarbuffer < MAXVAR-1)
- nvarbuffer++;
- else
- {
- lua_error ("variable buffer overflow");
- err = 1;
- }
- }
- static void align_n (unsigned size)
- {
- if (size > ALIGNMENT) size = ALIGNMENT;
- while (((pc+1-code)%size) != 0) /* +1 to include BYTECODE */
- code_byte (NOP);
- }
- static void code_number (float f)
- { int i = f;
- if (f == i) /* f has an integer value */
- {
- if (i <= 2) code_byte(PUSH0 + i);
- else if (i <= 255)
- {
- code_byte(PUSHBYTE);
- code_byte(i);
- }
- else
- {
- align(Word);
- code_byte(PUSHWORD);
- code_word(i);
- }
- }
- else
- {
- align(float);
- code_byte(PUSHFLOAT);
- code_float(f);
- }
- incr_ntemp();
- }
- # line 140 "lua.stx"
- typedef union
- {
- int vInt;
- long vLong;
- float vFloat;
- Word vWord;
- Byte *pByte;
- } YYSTYPE;
- # define NIL 257
- # define IF 258
- # define THEN 259
- # define ELSE 260
- # define ELSEIF 261
- # define WHILE 262
- # define DO 263
- # define REPEAT 264
- # define UNTIL 265
- # define END 266
- # define RETURN 267
- # define LOCAL 268
- # define NUMBER 269
- # define FUNCTION 270
- # define NAME 271
- # define STRING 272
- # define DEBUG 273
- # define NOT 274
- # define AND 275
- # define OR 276
- # define NE 277
- # define LE 278
- # define GE 279
- # define CONC 280
- # define UNARY 281
- #define yyclearin yychar = -1
- #define yyerrok yyerrflag = 0
- extern int yychar;
- extern int yyerrflag;
- #ifndef YYMAXDEPTH
- #define YYMAXDEPTH 150
- #endif
- YYSTYPE yylval, yyval;
- # define YYERRCODE 256
- # line 530 "lua.stx"
- /*
- ** Search a local name and if find return its index. If do not find return -1
- */
- static int lua_localname (Word n)
- {
- int i;
- for (i=nlocalvar-1; i >= 0; i--)
- if (n == localvar[i]) return i; /* local var */
- return -1; /* global var */
- }
- /*
- ** Push a variable given a number. If number is positive, push global variable
- ** indexed by (number -1). If negative, push local indexed by ABS(number)-1.
- ** Otherwise, if zero, push indexed variable (record).
- */
- static void lua_pushvar (long number)
- {
- if (number > 0) /* global var */
- {
- align(Word);
- code_byte(PUSHGLOBAL);
- code_word(number-1);
- incr_ntemp();
- }
- else if (number < 0) /* local var */
- {
- number = (-number) - 1;
- if (number < 10) code_byte(PUSHLOCAL0 + number);
- else
- {
- code_byte(PUSHLOCAL);
- code_byte(number);
- }
- incr_ntemp();
- }
- else
- {
- code_byte(PUSHINDEXED);
- ntemp--;
- }
- }
- static void lua_codeadjust (int n)
- {
- code_byte(ADJUST);
- code_byte(n + nlocalvar);
- }
- static void lua_codestore (int i)
- {
- if (varbuffer[i] > 0) /* global var */
- {
- align(Word);
- code_byte(STOREGLOBAL);
- code_word(varbuffer[i]-1);
- }
- else if (varbuffer[i] < 0) /* local var */
- {
- int number = (-varbuffer[i]) - 1;
- if (number < 10) code_byte(STORELOCAL0 + number);
- else
- {
- code_byte(STORELOCAL);
- code_byte(number);
- }
- }
- else /* indexed var */
- {
- int j;
- int upper=0; /* number of indexed variables upper */
- int param; /* number of itens until indexed expression */
- for (j=i+1; j <nvarbuffer; j++)
- if (varbuffer[j] == 0) upper++;
- param = upper*2 + i;
- if (param == 0)
- code_byte(STOREINDEXED0);
- else
- {
- code_byte(STOREINDEXED);
- code_byte(param);
- }
- }
- }
- void yyerror (char *s)
- {
- static char msg[256];
- sprintf (msg,"%s near \"%s\" at line %d in file \"%s\"",
- s, lua_lasttext (), lua_linenumber, lua_filename());
- lua_error (msg);
- err = 1;
- }
- int yywrap (void)
- {
- return 1;
- }
- /*
- ** Parse LUA code and execute global statement.
- ** Return 0 on success or 1 on error.
- */
- int lua_parse (void)
- {
- Byte *initcode = maincode;
- err = 0;
- if (yyparse () || (err==1)) return 1;
- *maincode++ = HALT;
- if (lua_execute (initcode)) return 1;
- maincode = initcode;
- return 0;
- }
- #if 0
- static void PrintCode (void)
- {
- Byte *p = code;
- printf ("\n\nCODE\n");
- while (p != pc)
- {
- switch ((OpCode)*p)
- {
- case NOP: printf ("%d NOP\n", (p++)-code); break;
- case PUSHNIL: printf ("%d PUSHNIL\n", (p++)-code); break;
- case PUSH0: case PUSH1: case PUSH2:
- printf ("%d PUSH%c\n", p-code, *p-PUSH0+'0');
- p++;
- break;
- case PUSHBYTE:
- printf ("%d PUSHBYTE %d\n", p-code, *(++p));
- p++;
- break;
- case PUSHWORD:
- printf ("%d PUSHWORD %d\n", p-code, *((Word *)(p+1)));
- p += 1 + sizeof(Word);
- break;
- case PUSHFLOAT:
- printf ("%d PUSHFLOAT %f\n", p-code, *((float *)(p+1)));
- p += 1 + sizeof(float);
- break;
- case PUSHSTRING:
- printf ("%d PUSHSTRING %d\n", p-code, *((Word *)(p+1)));
- p += 1 + sizeof(Word);
- break;
- case PUSHLOCAL0: case PUSHLOCAL1: case PUSHLOCAL2: case PUSHLOCAL3:
- case PUSHLOCAL4: case PUSHLOCAL5: case PUSHLOCAL6: case PUSHLOCAL7:
- case PUSHLOCAL8: case PUSHLOCAL9:
- printf ("%d PUSHLOCAL%c\n", p-code, *p-PUSHLOCAL0+'0');
- p++;
- break;
- case PUSHLOCAL: printf ("%d PUSHLOCAL %d\n", p-code, *(++p));
- p++;
- break;
- case PUSHGLOBAL:
- printf ("%d PUSHGLOBAL %d\n", p-code, *((Word *)(p+1)));
- p += 1 + sizeof(Word);
- break;
- case PUSHINDEXED: printf ("%d PUSHINDEXED\n", (p++)-code); break;
- case PUSHMARK: printf ("%d PUSHMARK\n", (p++)-code); break;
- case PUSHOBJECT: printf ("%d PUSHOBJECT\n", (p++)-code); break;
- case STORELOCAL0: case STORELOCAL1: case STORELOCAL2: case STORELOCAL3:
- case STORELOCAL4: case STORELOCAL5: case STORELOCAL6: case STORELOCAL7:
- case STORELOCAL8: case STORELOCAL9:
- printf ("%d STORELOCAL%c\n", p-code, *p-STORELOCAL0+'0');
- p++;
- break;
- case STORELOCAL:
- printf ("%d STORELOCAK %d\n", p-code, *(++p));
- p++;
- break;
- case STOREGLOBAL:
- printf ("%d STOREGLOBAL %d\n", p-code, *((Word *)(p+1)));
- p += 1 + sizeof(Word);
- break;
- case STOREINDEXED0: printf ("%d STOREINDEXED0\n", (p++)-code); break;
- case STOREINDEXED: printf ("%d STOREINDEXED %d\n", p-code, *(++p));
- p++;
- break;
- case STOREFIELD: printf ("%d STOREFIELD\n", (p++)-code); break;
- case ADJUST:
- printf ("%d ADJUST %d\n", p-code, *(++p));
- p++;
- break;
- case CREATEARRAY: printf ("%d CREATEARRAY\n", (p++)-code); break;
- case EQOP: printf ("%d EQOP\n", (p++)-code); break;
- case LTOP: printf ("%d LTOP\n", (p++)-code); break;
- case LEOP: printf ("%d LEOP\n", (p++)-code); break;
- case ADDOP: printf ("%d ADDOP\n", (p++)-code); break;
- case SUBOP: printf ("%d SUBOP\n", (p++)-code); break;
- case MULTOP: printf ("%d MULTOP\n", (p++)-code); break;
- case DIVOP: printf ("%d DIVOP\n", (p++)-code); break;
- case CONCOP: printf ("%d CONCOP\n", (p++)-code); break;
- case MINUSOP: printf ("%d MINUSOP\n", (p++)-code); break;
- case NOTOP: printf ("%d NOTOP\n", (p++)-code); break;
- case ONTJMP:
- printf ("%d ONTJMP %d\n", p-code, *((Word *)(p+1)));
- p += sizeof(Word) + 1;
- break;
- case ONFJMP:
- printf ("%d ONFJMP %d\n", p-code, *((Word *)(p+1)));
- p += sizeof(Word) + 1;
- break;
- case JMP:
- printf ("%d JMP %d\n", p-code, *((Word *)(p+1)));
- p += sizeof(Word) + 1;
- break;
- case UPJMP:
- printf ("%d UPJMP %d\n", p-code, *((Word *)(p+1)));
- p += sizeof(Word) + 1;
- break;
- case IFFJMP:
- printf ("%d IFFJMP %d\n", p-code, *((Word *)(p+1)));
- p += sizeof(Word) + 1;
- break;
- case IFFUPJMP:
- printf ("%d IFFUPJMP %d\n", p-code, *((Word *)(p+1)));
- p += sizeof(Word) + 1;
- break;
- case POP: printf ("%d POP\n", (p++)-code); break;
- case CALLFUNC: printf ("%d CALLFUNC\n", (p++)-code); break;
- case RETCODE:
- printf ("%d RETCODE %d\n", p-code, *(++p));
- p++;
- break;
- default: printf ("%d Cannot happen\n", (p++)-code); break;
- }
- }
- }
- #endif
- int yyexca[] ={
- -1, 1,
- 0, -1,
- -2, 2,
- -1, 19,
- 40, 65,
- 91, 95,
- 46, 97,
- -2, 92,
- -1, 29,
- 40, 65,
- 91, 95,
- 46, 97,
- -2, 51,
- -1, 70,
- 275, 33,
- 276, 33,
- 61, 33,
- 277, 33,
- 62, 33,
- 60, 33,
- 278, 33,
- 279, 33,
- 280, 33,
- 43, 33,
- 45, 33,
- 42, 33,
- 47, 33,
- -2, 68,
- -1, 71,
- 91, 95,
- 46, 97,
- -2, 93,
- -1, 102,
- 260, 27,
- 261, 27,
- 265, 27,
- 266, 27,
- 267, 27,
- -2, 11,
- -1, 117,
- 93, 85,
- -2, 87,
- -1, 122,
- 267, 30,
- -2, 29,
- -1, 145,
- 275, 33,
- 276, 33,
- 61, 33,
- 277, 33,
- 62, 33,
- 60, 33,
- 278, 33,
- 279, 33,
- 280, 33,
- 43, 33,
- 45, 33,
- 42, 33,
- 47, 33,
- -2, 70,
- };
- # define YYNPROD 105
- # define YYLAST 318
- int yyact[]={
- 54, 52, 136, 53, 13, 55, 54, 52, 14, 53,
- 15, 55, 5, 166, 18, 6, 129, 21, 47, 46,
- 48, 107, 104, 97, 47, 46, 48, 54, 52, 80,
- 53, 21, 55, 54, 52, 40, 53, 9, 55, 54,
- 52, 158, 53, 160, 55, 47, 46, 48, 159, 101,
- 81, 47, 46, 48, 10, 54, 52, 126, 53, 67,
- 55, 54, 52, 60, 53, 155, 55, 148, 149, 135,
- 147, 108, 150, 47, 46, 48, 73, 23, 75, 47,
- 46, 48, 7, 25, 38, 153, 26, 164, 27, 117,
- 61, 62, 74, 11, 76, 54, 24, 127, 65, 66,
- 55, 37, 154, 151, 103, 111, 72, 28, 93, 94,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 116, 59, 77, 54, 52, 118, 53, 99, 55,
- 110, 95, 64, 44, 70, 109, 29, 33, 105, 106,
- 42, 112, 41, 165, 139, 19, 17, 152, 79, 123,
- 43, 119, 20, 114, 113, 98, 63, 144, 143, 122,
- 68, 39, 36, 130, 35, 120, 12, 8, 102, 125,
- 128, 141, 78, 69, 70, 71, 142, 131, 132, 140,
- 22, 124, 4, 3, 2, 121, 96, 138, 146, 137,
- 134, 157, 133, 115, 16, 1, 0, 0, 0, 0,
- 0, 0, 0, 156, 0, 0, 0, 0, 161, 0,
- 0, 0, 0, 162, 0, 0, 0, 168, 0, 172,
- 145, 163, 171, 0, 174, 0, 0, 0, 169, 156,
- 167, 170, 173, 57, 58, 49, 50, 51, 56, 57,
- 58, 49, 50, 51, 56, 175, 0, 0, 100, 0,
- 45, 0, 0, 0, 0, 70, 0, 0, 0, 0,
- 57, 58, 49, 50, 51, 56, 57, 58, 49, 50,
- 51, 56, 0, 0, 0, 0, 0, 56, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 57, 58,
- 49, 50, 51, 56, 0, 0, 49, 50, 51, 56,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 30, 0, 21, 31, 0, 34 };
- int yypact[]={
- -1000, -258, -1000, -1000, -1000, -234, -1000, 34, -254, -1000,
- -1000, -1000, -1000, 43, -1000, -1000, 40, -1000, -236, -1000,
- -1000, -1000, 93, -9, -1000, 43, 43, 43, 92, -1000,
- -1000, -1000, -1000, -1000, 43, 43, -1000, 43, -240, 62,
- 31, -13, 48, 83, -242, -1000, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 43, 43, -1000, -1000, 90,
- 13, -1000, -1000, -248, 43, 19, -15, -216, -1000, 60,
- -1000, -1000, -249, -1000, -1000, 43, -250, 43, 89, 61,
- -1000, -1000, -3, -3, -3, -3, -3, -3, 53, 53,
- -1000, -1000, 82, -1000, -1000, -1000, -2, -1000, 85, 13,
- -1000, 43, -1000, -1000, 31, 43, -36, -1000, 56, 60,
- -1000, -255, -1000, 43, 43, -1000, -269, -1000, -1000, -1000,
- 13, 34, -1000, 43, -1000, 13, -1000, -1000, -1000, -1000,
- -193, 19, 19, -53, 59, -1000, -1000, -8, 58, 43,
- -1000, -1000, -1000, -1000, -226, -1000, -218, -223, -1000, 43,
- -1000, -269, 26, -1000, -1000, -1000, 13, -253, 43, -1000,
- -1000, -1000, -42, -1000, 43, 43, -1000, 34, -1000, 13,
- -1000, -1000, -1000, -1000, -193, -1000 };
- int yypgo[]={
- 0, 195, 50, 96, 71, 135, 194, 193, 192, 190,
- 189, 187, 136, 186, 184, 82, 54, 183, 182, 180,
- 172, 170, 59, 168, 167, 166, 63, 70, 164, 162,
- 137, 161, 160, 159, 158, 157, 156, 155, 154, 153,
- 152, 150, 149, 148, 69, 147, 144, 65, 143, 142,
- 140, 76, 138 };
- int yyr1[]={
- 0, 1, 14, 1, 1, 1, 19, 21, 17, 23,
- 23, 24, 15, 16, 16, 25, 28, 25, 29, 25,
- 25, 25, 25, 27, 27, 27, 32, 33, 22, 34,
- 35, 34, 2, 26, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 36, 3,
- 3, 3, 3, 3, 3, 3, 3, 38, 3, 39,
- 3, 37, 37, 41, 30, 40, 4, 4, 5, 42,
- 5, 20, 20, 43, 43, 13, 13, 7, 7, 8,
- 8, 9, 9, 45, 44, 10, 10, 46, 11, 48,
- 11, 47, 6, 6, 12, 49, 12, 50, 12, 31,
- 31, 51, 52, 51, 18 };
- int yyr2[]={
- 0, 0, 1, 9, 4, 4, 1, 1, 19, 0,
- 6, 1, 4, 0, 2, 17, 1, 17, 1, 13,
- 7, 3, 4, 0, 4, 15, 1, 1, 9, 0,
- 1, 9, 1, 3, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 5, 5, 1, 9,
- 9, 3, 3, 3, 3, 3, 5, 1, 11, 1,
- 11, 1, 2, 1, 11, 3, 1, 3, 3, 1,
- 9, 0, 2, 3, 7, 1, 3, 7, 7, 1,
- 3, 3, 7, 1, 9, 1, 3, 1, 5, 1,
- 9, 3, 3, 7, 3, 1, 11, 1, 9, 5,
- 9, 1, 1, 6, 3 };
- int yychk[]={
- -1000, -1, -14, -17, -18, 270, 273, -15, -24, 271,
- -16, 59, -25, 258, 262, 264, -6, -30, 268, -12,
- -40, 271, -19, -26, -3, 40, 43, 45, 64, -12,
- 269, 272, 257, -30, 274, -28, -29, 61, 44, -31,
- 271, -49, -50, -41, 40, 259, 61, 60, 62, 277,
- 278, 279, 43, 45, 42, 47, 280, 275, 276, -3,
- -26, -26, -26, -36, 40, -26, -26, -22, -32, -5,
- -3, -12, 44, -51, 61, 91, 46, 40, -20, -43,
- 271, -2, -26, -26, -26, -26, -26, -26, -26, -26,
- -26, -26, -26, -2, -2, 41, -13, 271, -37, -26,
- 263, 265, -23, 44, 271, -52, -26, 271, -4, -5,
- 41, 44, -22, -38, -39, -7, 123, 91, 41, -2,
- -26, -15, -33, -42, -51, -26, 93, 41, -21, 271,
- -2, -26, -26, -8, -9, -44, 271, -10, -11, -46,
- -22, -2, -16, -34, -35, -3, -22, -27, 260, 261,
- 125, 44, -45, 93, 44, -47, -26, -2, 267, 266,
- 266, -22, -26, -44, 61, -48, 266, -4, 259, -26,
- -47, -16, -2, -22, -2, -27 };
- int yydef[]={
- 1, -2, 11, 4, 5, 0, 104, 13, 0, 6,
- 3, 14, 12, 0, 16, 18, 0, 21, 0, -2,
- 63, 94, 0, 0, 33, 0, 0, 0, 48, -2,
- 52, 53, 54, 55, 0, 0, 26, 0, 0, 22,
- 101, 0, 0, 0, 71, 32, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 32, 32, 33,
- 0, 46, 47, 75, 61, 56, 0, 0, 9, 20,
- -2, -2, 0, 99, 102, 0, 0, 66, 0, 72,
- 73, 26, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 57, 59, 34, 0, 76, 0, 62,
- 32, 0, -2, 69, 101, 0, 0, 98, 0, 67,
- 7, 0, 32, 0, 0, 49, 79, -2, 50, 26,
- 32, 13, -2, 0, 100, 103, 96, 64, 26, 74,
- 23, 58, 60, 0, 80, 81, 83, 0, 86, 0,
- 32, 19, 10, 28, 0, -2, 0, 0, 26, 0,
- 77, 0, 0, 78, 89, 88, 91, 0, 66, 8,
- 15, 24, 0, 82, 0, 0, 17, 13, 32, 84,
- 90, 31, 26, 32, 23, 25 };
- typedef struct { char *t_name; int t_val; } yytoktype;
- #ifndef YYDEBUG
- # define YYDEBUG 0 /* don't allow debugging */
- #endif
- #if YYDEBUG
- yytoktype yytoks[] =
- {
- "NIL", 257,
- "IF", 258,
- "THEN", 259,
- "ELSE", 260,
- "ELSEIF", 261,
- "WHILE", 262,
- "DO", 263,
- "REPEAT", 264,
- "UNTIL", 265,
- "END", 266,
- "RETURN", 267,
- "LOCAL", 268,
- "NUMBER", 269,
- "FUNCTION", 270,
- "NAME", 271,
- "STRING", 272,
- "DEBUG", 273,
- "NOT", 274,
- "AND", 275,
- "OR", 276,
- "=", 61,
- "NE", 277,
- ">", 62,
- "<", 60,
- "LE", 278,
- "GE", 279,
- "CONC", 280,
- "+", 43,
- "-", 45,
- "*", 42,
- "/", 47,
- "%", 37,
- "UNARY", 281,
- "-unknown-", -1 /* ends search */
- };
- char * yyreds[] =
- {
- "-no such reduction-",
- "functionlist : /* empty */",
- "functionlist : functionlist",
- "functionlist : functionlist stat sc",
- "functionlist : functionlist function",
- "functionlist : functionlist setdebug",
- "function : FUNCTION NAME",
- "function : FUNCTION NAME '(' parlist ')'",
- "function : FUNCTION NAME '(' parlist ')' block END",
- "statlist : /* empty */",
- "statlist : statlist stat sc",
- "stat : /* empty */",
- "stat : stat1",
- "sc : /* empty */",
- "sc : ';'",
- "stat1 : IF expr1 THEN PrepJump block PrepJump elsepart END",
- "stat1 : WHILE",
- "stat1 : WHILE expr1 DO PrepJump block PrepJump END",
- "stat1 : REPEAT",
- "stat1 : REPEAT block UNTIL expr1 PrepJump",
- "stat1 : varlist1 '=' exprlist1",
- "stat1 : functioncall",
- "stat1 : LOCAL declist",
- "elsepart : /* empty */",
- "elsepart : ELSE block",
- "elsepart : ELSEIF expr1 THEN PrepJump block PrepJump elsepart",
- "block : /* empty */",
- "block : statlist",
- "block : statlist ret",
- "ret : /* empty */",
- "ret : /* empty */",
- "ret : RETURN exprlist sc",
- "PrepJump : /* empty */",
- "expr1 : expr",
- "expr : '(' expr ')'",
- "expr : expr1 '=' expr1",
- "expr : expr1 '<' expr1",
- "expr : expr1 '>' expr1",
- "expr : expr1 NE expr1",
- "expr : expr1 LE expr1",
- "expr : expr1 GE expr1",
- "expr : expr1 '+' expr1",
- "expr : expr1 '-' expr1",
- "expr : expr1 '*' expr1",
- "expr : expr1 '/' expr1",
- "expr : expr1 CONC expr1",
- "expr : '+' expr1",
- "expr : '-' expr1",
- "expr : '@'",
- "expr : '@' objectname fieldlist",
- "expr : '@' '(' dimension ')'",
- "expr : var",
- "expr : NUMBER",
- "expr : STRING",
- "expr : NIL",
- "expr : functioncall",
- "expr : NOT expr1",
- "expr : expr1 AND PrepJump",
- "expr : expr1 AND PrepJump expr1",
- "expr : expr1 OR PrepJump",
- "expr : expr1 OR PrepJump expr1",
- "dimension : /* empty */",
- "dimension : expr1",
- "functioncall : functionvalue",
- "functioncall : functionvalue '(' exprlist ')'",
- "functionvalue : var",
- "exprlist : /* empty */",
- "exprlist : exprlist1",
- "exprlist1 : expr",
- "exprlist1 : exprlist1 ','",
- "exprlist1 : exprlist1 ',' expr",
- "parlist : /* empty */",
- "parlist : parlist1",
- "parlist1 : NAME",
- "parlist1 : parlist1 ',' NAME",
- "objectname : /* empty */",
- "objectname : NAME",
- "fieldlist : '{' ffieldlist '}'",
- "fieldlist : '[' lfieldlist ']'",
- "ffieldlist : /* empty */",
- "ffieldlist : ffieldlist1",
- "ffieldlist1 : ffield",
- "ffieldlist1 : ffieldlist1 ',' ffield",
- "ffield : NAME",
- "ffield : NAME '=' expr1",
- "lfieldlist : /* empty */",
- "lfieldlist : lfieldlist1",
- "lfieldlist1 : /* empty */",
- "lfieldlist1 : lfield",
- "lfieldlist1 : lfieldlist1 ','",
- "lfieldlist1 : lfieldlist1 ',' lfield",
- "lfield : expr1",
- "varlist1 : var",
- "varlist1 : varlist1 ',' var",
- "var : NAME",
- "var : var",
- "var : var '[' expr1 ']'",
- "var : var",
- "var : var '.' NAME",
- "declist : NAME init",
- "declist : declist ',' NAME init",
- "init : /* empty */",
- "init : '='",
- "init : '=' expr1",
- "setdebug : DEBUG",
- };
- #endif /* YYDEBUG */
- #line 1 "/usr/lib/yaccpar"
- /* @(#)yaccpar 1.10 89/04/04 SMI; from S5R3 1.10 */
- /*
- ** Skeleton parser driver for yacc output
- */
- /*
- ** yacc user known macros and defines
- */
- #define YYERROR goto yyerrlab
- #define YYACCEPT { free(yys); free(yyv); return(0); }
- #define YYABORT { free(yys); free(yyv); return(1); }
- #define YYBACKUP( newtoken, newvalue )\
- {\
- if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
- {\
- yyerror( "syntax error - cannot backup" );\
- goto yyerrlab;\
- }\
- yychar = newtoken;\
- yystate = *yyps;\
- yylval = newvalue;\
- goto yynewstate;\
- }
- #define YYRECOVERING() (!!yyerrflag)
- #ifndef YYDEBUG
- # define YYDEBUG 1 /* make debugging available */
- #endif
- /*
- ** user known globals
- */
- int yydebug; /* set to 1 to get debugging */
- /*
- ** driver internal defines
- */
- #define YYFLAG (-1000)
- /*
- ** static variables used by the parser
- */
- static YYSTYPE *yyv; /* value stack */
- static int *yys; /* state stack */
- static YYSTYPE *yypv; /* top of value stack */
- static int *yyps; /* top of state stack */
- static int yystate; /* current state */
- static int yytmp; /* extra var (lasts between blocks) */
- int yynerrs; /* number of errors */
- int yyerrflag; /* error recovery flag */
- int yychar; /* current input token number */
- /*
- ** yyparse - return 0 if worked, 1 if syntax error not recovered from
- */
- int
- yyparse()
- {
- register YYSTYPE *yypvt; /* top of value stack for $vars */
- unsigned yymaxdepth = YYMAXDEPTH;
- /*
- ** Initialize externals - yyparse may be called more than once
- */
- yyv = (YYSTYPE*)malloc(yymaxdepth*sizeof(YYSTYPE));
- yys = (int*)malloc(yymaxdepth*sizeof(int));
- if (!yyv || !yys)
- {
- yyerror( "out of memory" );
- return(1);
- }
- yypv = &yyv[-1];
- yyps = &yys[-1];
- yystate = 0;
- yytmp = 0;
- yynerrs = 0;
- yyerrflag = 0;
- yychar = -1;
- goto yystack;
- {
- register YYSTYPE *yy_pv; /* top of value stack */
- register int *yy_ps; /* top of state stack */
- register int yy_state; /* current state */
- register int yy_n; /* internal state number info */
- /*
- ** get globals into registers.
- ** branch to here only if YYBACKUP was called.
- */
- yynewstate:
- yy_pv = yypv;
- yy_ps = yyps;
- yy_state = yystate;
- goto yy_newstate;
- /*
- ** get globals into registers.
- ** either we just started, or we just finished a reduction
- */
- yystack:
- yy_pv = yypv;
- yy_ps = yyps;
- yy_state = yystate;
- /*
- ** top of for (;;) loop while no reductions done
- */
- yy_stack:
- /*
- ** put a state and value onto the stacks
- */
- #if YYDEBUG
- /*
- ** if debugging, look up token value in list of value vs.
- ** name pairs. 0 and negative (-1) are special values.
- ** Note: linear search is used since time is not a real
- ** consideration while debugging.
- */
- if ( yydebug )
- {
- register int yy_i;
- (void)printf( "State %d, token ", yy_state );
- if ( yychar == 0 )
- (void)printf( "end-of-file\n" );
- else if ( yychar < 0 )
- (void)printf( "-none-\n" );
- else
- {
- for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
- yy_i++ )
- {
- if ( yytoks[yy_i].t_val == yychar )
- break;
- }
- (void)printf( "%s\n", yytoks[yy_i].t_name );
- }
- }
- #endif /* YYDEBUG */
- if ( ++yy_ps >= &yys[ yymaxdepth ] ) /* room on stack? */
- {
- /*
- ** reallocate and recover. Note that pointers
- ** have to be reset, or bad things will happen
- */
- int yyps_index = (yy_ps - yys);
- int yypv_index = (yy_pv - yyv);
- int yypvt_index = (yypvt - yyv);
- yymaxdepth += YYMAXDEPTH;
- yyv = (YYSTYPE*)realloc((char*)yyv,
- yymaxdepth * sizeof(YYSTYPE));
- yys = (int*)realloc((char*)yys,
- yymaxdepth * sizeof(int));
- if (!yyv || !yys)
- {
- yyerror( "yacc stack overflow" );
- return(1);
- }
- yy_ps = yys + yyps_index;
- yy_pv = yyv + yypv_index;
- yypvt = yyv + yypvt_index;
- }
- *yy_ps = yy_state;
- *++yy_pv = yyval;
- /*
- ** we have a new state - find out what to do
- */
- yy_newstate:
- if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
- goto yydefault; /* simple state */
- #if YYDEBUG
- /*
- ** if debugging, need to mark whether new token grabbed
- */
- yytmp = yychar < 0;
- #endif
- if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
- yychar = 0; /* reached EOF */
- #if YYDEBUG
- if ( yydebug && yytmp )
- {
- register int yy_i;
- (void)printf( "Received token " );
- if ( yychar == 0 )
- (void)printf( "end-of-file\n" );
- else if ( yychar < 0 )
- (void)printf( "-none-\n" );
- else
- {
- for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
- yy_i++ )
- {
- if ( yytoks[yy_i].t_val == yychar )
- break;
- }
- (void)printf( "%s\n", yytoks[yy_i].t_name );
- }
- }
- #endif /* YYDEBUG */
- if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
- goto yydefault;
- if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/
- {
- yychar = -1;
- yyval = yylval;
- yy_state = yy_n;
- if ( yyerrflag > 0 )
- yyerrflag--;
- goto yy_stack;
- }
- yydefault:
- if ( ( yy_n = yydef[ yy_state ] ) == -2 )
- {
- #if YYDEBUG
- yytmp = yychar < 0;
- #endif
- if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
- yychar = 0; /* reached EOF */
- #if YYDEBUG
- if ( yydebug && yytmp )
- {
- register int yy_i;
- (void)printf( "Received token " );
- if ( yychar == 0 )
- (void)printf( "end-of-file\n" );
- else if ( yychar < 0 )
- (void)printf( "-none-\n" );
- else
- {
- for ( yy_i = 0;
- yytoks[yy_i].t_val >= 0;
- yy_i++ )
- {
- if ( yytoks[yy_i].t_val
- == yychar )
- {
- break;
- }
- }
- (void)printf( "%s\n", yytoks[yy_i].t_name );
- }
- }
- #endif /* YYDEBUG */
- /*
- ** look through exception table
- */
- {
- register int *yyxi = yyexca;
- while ( ( *yyxi != -1 ) ||
- ( yyxi[1] != yy_state ) )
- {
- yyxi += 2;
- }
- while ( ( *(yyxi += 2) >= 0 ) &&
- ( *yyxi != yychar ) )
- ;
- if ( ( yy_n = yyxi[1] ) < 0 )
- YYACCEPT;
- }
- }
- /*
- ** check for syntax error
- */
- if ( yy_n == 0 ) /* have an error */
- {
- /* no worry about speed here! */
- switch ( yyerrflag )
- {
- case 0: /* new error */
- yyerror( "syntax error" );
- goto skip_init;
- yyerrlab:
- /*
- ** get globals into registers.
- ** we have a user generated syntax type error
- */
- yy_pv = yypv;
- yy_ps = yyps;
- yy_state = yystate;
- yynerrs++;
- skip_init:
- case 1:
- case 2: /* incompletely recovered error */
- /* try again... */
- yyerrflag = 3;
- /*
- ** find state where "error" is a legal
- ** shift action
- */
- while ( yy_ps >= yys )
- {
- yy_n = yypact[ *yy_ps ] + YYERRCODE;
- if ( yy_n >= 0 && yy_n < YYLAST &&
- yychk[yyact[yy_n]] == YYERRCODE) {
- /*
- ** simulate shift of "error"
- */
- yy_state = yyact[ yy_n ];
- goto yy_stack;
- }
- /*
- ** current state has no shift on
- ** "error", pop stack
- */
- #if YYDEBUG
- # define _POP_ "Error recovery pops state %d, uncovers state %d\n"
- if ( yydebug )
- (void)printf( _POP_, *yy_ps,
- yy_ps[-1] );
- # undef _POP_
- #endif
- yy_ps--;
- yy_pv--;
- }
- /*
- ** there is no state on stack with "error" as
- ** a valid shift. give up.
- */
- YYABORT;
- case 3: /* no shift yet; eat a token */
- #if YYDEBUG
- /*
- ** if debugging, look up token in list of
- ** pairs. 0 and negative shouldn't occur,
- ** but since timing doesn't matter when
- ** debugging, it doesn't hurt to leave the
- ** tests here.
- */
- if ( yydebug )
- {
- register int yy_i;
- (void)printf( "Error recovery discards " );
- if ( yychar == 0 )
- (void)printf( "token end-of-file\n" );
- else if ( yychar < 0 )
- (void)printf( "token -none-\n" );
- else
- {
- for ( yy_i = 0;
- yytoks[yy_i].t_val >= 0;
- yy_i++ )
- {
- if ( yytoks[yy_i].t_val
- == yychar )
- {
- break;
- }
- }
- (void)printf( "token %s\n",
- yytoks[yy_i].t_name );
- }
- }
- #endif /* YYDEBUG */
- if ( yychar == 0 ) /* reached EOF. quit */
- YYABORT;
- yychar = -1;
- goto yy_newstate;
- }
- }/* end if ( yy_n == 0 ) */
- /*
- ** reduction by production yy_n
- ** put stack tops, etc. so things right after switch
- */
- #if YYDEBUG
- /*
- ** if debugging, print the string that is the user's
- ** specification of the reduction which is just about
- ** to be done.
- */
- if ( yydebug )
- (void)printf( "Reduce by (%d) \"%s\"\n",
- yy_n, yyreds[ yy_n ] );
- #endif
- yytmp = yy_n; /* value to switch over */
- yypvt = yy_pv; /* $vars top of value stack */
- /*
- ** Look in goto table for next state
- ** Sorry about using yy_state here as temporary
- ** register variable, but why not, if it works...
- ** If yyr2[ yy_n ] doesn't have the low order bit
- ** set, then there is no action to be done for
- ** this reduction. So, no saving & unsaving of
- ** registers done. The only difference between the
- ** code just after the if and the body of the if is
- ** the goto yy_stack in the body. This way the test
- ** can be made before the choice of what to do is needed.
- */
- {
- /* length of production doubled with extra bit */
- register int yy_len = yyr2[ yy_n ];
- if ( !( yy_len & 01 ) )
- {
- yy_len >>= 1;
- yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
- yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
- *( yy_ps -= yy_len ) + 1;
- if ( yy_state >= YYLAST ||
- yychk[ yy_state =
- yyact[ yy_state ] ] != -yy_n )
- {
- yy_state = yyact[ yypgo[ yy_n ] ];
- }
- goto yy_stack;
- }
- yy_len >>= 1;
- yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
- yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
- *( yy_ps -= yy_len ) + 1;
- if ( yy_state >= YYLAST ||
- yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
- {
- yy_state = yyact[ yypgo[ yy_n ] ];
- }
- }
- /* save until reenter driver code */
- yystate = yy_state;
- yyps = yy_ps;
- yypv = yy_pv;
- }
- /*
- ** code supplied by user is placed in this switch
- */
- switch( yytmp )
- {
-
- case 2:
- # line 179 "lua.stx"
- {pc=basepc=maincode; nlocalvar=0;} break;
- case 3:
- # line 179 "lua.stx"
- {maincode=pc;} break;
- case 6:
- # line 184 "lua.stx"
- {pc=basepc=code; nlocalvar=0;} break;
- case 7:
- # line 185 "lua.stx"
- {
- if (lua_debug)
- {
- align(Word);
- code_byte(SETFUNCTION);
- code_word(yypvt[-5].vWord);
- code_word(yypvt[-4].vWord);
- }
- lua_codeadjust (0);
- } break;
- case 8:
- # line 197 "lua.stx"
- {
- if (lua_debug) code_byte(RESET);
- code_byte(RETCODE); code_byte(nlocalvar);
- s_tag(yypvt[-7].vWord) = T_FUNCTION;
- s_bvalue(yypvt[-7].vWord) = calloc (pc-code, sizeof(Byte));
- memcpy (s_bvalue(yypvt[-7].vWord), code, (pc-code)*sizeof(Byte));
- } break;
- case 11:
- # line 210 "lua.stx"
- {
- ntemp = 0;
- if (lua_debug)
- {
- align(Word); code_byte(SETLINE); code_word(lua_linenumber);
- }
- } break;
- case 15:
- # line 223 "lua.stx"
- {
- {
- Byte *elseinit = yypvt[-2].pByte + sizeof(Word)+1;
- if (pc - elseinit == 0) /* no else */
- {
- pc -= sizeof(Word)+1;
- /* if (*(pc-1) == NOP) --pc; */
- elseinit = pc;
- }
- else
- {
- *(yypvt[-2].pByte) = JMP;
- *((Word *)(yypvt[-2].pByte+1)) = pc - elseinit;
- }
- *(yypvt[-4].pByte) = IFFJMP;
- *((Word *)(yypvt[-4].pByte+1)) = elseinit - (yypvt[-4].pByte + sizeof(Word)+1);
- }
- } break;
- case 16:
- # line 242 "lua.stx"
- {yyval.pByte = pc;} break;
- case 17:
- # line 244 "lua.stx"
- {
- *(yypvt[-3].pByte) = IFFJMP;
- *((Word *)(yypvt[-3].pByte+1)) = pc - (yypvt[-3].pByte + sizeof(Word)+1);
-
- *(yypvt[-1].pByte) = UPJMP;
- *((Word *)(yypvt[-1].pByte+1)) = pc - yypvt[-6].pByte;
- } break;
- case 18:
- # line 252 "lua.stx"
- {yyval.pByte = pc;} break;
- case 19:
- # line 254 "lua.stx"
- {
- *(yypvt[-0].pByte) = IFFUPJMP;
- *((Word *)(yypvt[-0].pByte+1)) = pc - yypvt[-4].pByte;
- } break;
- case 20:
- # line 261 "lua.stx"
- {
- {
- int i;
- if (yypvt[-0].vInt == 0 || nvarbuffer != ntemp - yypvt[-2].vInt * 2)
- lua_codeadjust (yypvt[-2].vInt * 2 + nvarbuffer);
- for (i=nvarbuffer-1; i>=0; i--)
- lua_codestore (i);
- if (yypvt[-2].vInt > 1 || (yypvt[-2].vInt == 1 && varbuffer[0] != 0))
- lua_codeadjust (0);
- }
- } break;
- case 21:
- # line 272 "lua.stx"
- { lua_codeadjust (0); } break;
- case 25:
- # line 279 "lua.stx"
- {
- {
- Byte *elseinit = yypvt[-1].pByte + sizeof(Word)+1;
- if (pc - elseinit == 0) /* no else */
- {
- pc -= sizeof(Word)+1;
- /* if (*(pc-1) == NOP) --pc; */
- elseinit = pc;
- }
- else
- {
- *(yypvt[-1].pByte) = JMP;
- *((Word *)(yypvt[-1].pByte+1)) = pc - elseinit;
- }
- *(yypvt[-3].pByte) = IFFJMP;
- *((Word *)(yypvt[-3].pByte+1)) = elseinit - (yypvt[-3].pByte + sizeof(Word)+1);
- }
- } break;
- case 26:
- # line 299 "lua.stx"
- {yyval.vInt = nlocalvar;} break;
- case 27:
- # line 299 "lua.stx"
- {ntemp = 0;} break;
- case 28:
- # line 300 "lua.stx"
- {
- if (nlocalvar != yypvt[-3].vInt)
- {
- nlocalvar = yypvt[-3].vInt;
- lua_codeadjust (0);
- }
- } break;
- case 30:
- # line 310 "lua.stx"
- { if (lua_debug){align(Word);code_byte(SETLINE);code_word(lua_linenumber);}} break;
- case 31:
- # line 312 "lua.stx"
- {
- if (lua_debug) code_byte(RESET);
- code_byte(RETCODE); code_byte(nlocalvar);
- } break;
- case 32:
- # line 319 "lua.stx"
- {
- align(Word);
- yyval.pByte = pc;
- code_byte(0); /* open space */
- code_word (0);
- } break;
- case 33:
- # line 326 "lua.stx"
- { if (yypvt[-0].vInt == 0) {lua_codeadjust (ntemp+1); incr_ntemp();}} break;
- case 34:
- # line 329 "lua.stx"
- { yyval.vInt = yypvt[-1].vInt; } break;
- case 35:
- # line 330 "lua.stx"
- { code_byte(EQOP); yyval.vInt = 1; ntemp--;} break;
- case 36:
- # line 331 "lua.stx"
- { code_byte(LTOP); yyval.vInt = 1; ntemp--;} break;
- case 37:
- # line 332 "lua.stx"
- { code_byte(LEOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break;
- case 38:
- # line 333 "lua.stx"
- { code_byte(EQOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break;
- case 39:
- # line 334 "lua.stx"
- { code_byte(LEOP); yyval.vInt = 1; ntemp--;} break;
- case 40:
- # line 335 "lua.stx"
- { code_byte(LTOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break;
- case 41:
- # line 336 "lua.stx"
- { code_byte(ADDOP); yyval.vInt = 1; ntemp--;} break;
- case 42:
- # line 337 "lua.stx"
- { code_byte(SUBOP); yyval.vInt = 1; ntemp--;} break;
- case 43:
- # line 338 "lua.stx"
- { code_byte(MULTOP); yyval.vInt = 1; ntemp--;} break;
- case 44:
- # line 339 "lua.stx"
- { code_byte(DIVOP); yyval.vInt = 1; ntemp--;} break;
- case 45:
- # line 340 "lua.stx"
- { code_byte(CONCOP); yyval.vInt = 1; ntemp--;} break;
- case 46:
- # line 341 "lua.stx"
- { yyval.vInt = 1; } break;
- case 47:
- # line 342 "lua.stx"
- { code_byte(MINUSOP); yyval.vInt = 1;} break;
- case 48:
- # line 344 "lua.stx"
- {
- code_byte(PUSHBYTE);
- yyval.pByte = pc; code_byte(0);
- incr_ntemp();
- code_byte(CREATEARRAY);
- } break;
- case 49:
- # line 351 "lua.stx"
- {
- *(yypvt[-2].pByte) = yypvt[-0].vInt;
- if (yypvt[-1].vLong < 0) /* there is no function to be called */
- {
- yyval.vInt = 1;
- }
- else
- {
- lua_pushvar (yypvt[-1].vLong+1);
- code_byte(PUSHMARK);
- incr_ntemp();
- code_byte(PUSHOBJECT);
- incr_ntemp();
- code_byte(CALLFUNC);
- ntemp -= 4;
- yyval.vInt = 0;
- if (lua_debug)
- {
- align(Word); code_byte(SETLINE); code_word(lua_linenumber);
- }
- }
- } break;
- case 50:
- # line 374 "lua.stx"
- {
- code_byte(CREATEARRAY);
- yyval.vInt = 1;
- } break;
- case 51:
- # line 378 "lua.stx"
- { lua_pushvar (yypvt[-0].vLong); yyval.vInt = 1;} break;
- case 52:
- # line 379 "lua.stx"
- { code_number(yypvt[-0].vFloat); yyval.vInt = 1; } break;
- case 53:
- # line 381 "lua.stx"
- {
- align(Word);
- code_byte(PUSHSTRING);
- code_word(yypvt[-0].vWord);
- yyval.vInt = 1;
- incr_ntemp();
- } break;
- case 54:
- # line 388 "lua.stx"
- {code_byte(PUSHNIL); yyval.vInt = 1; incr_ntemp();} break;
- case 55:
- # line 390 "lua.stx"
- {
- yyval.vInt = 0;
- if (lua_debug)
- {
- align(Word); code_byte(SETLINE); code_word(lua_linenumber);
- }
- } break;
- case 56:
- # line 397 "lua.stx"
- { code_byte(NOTOP); yyval.vInt = 1;} break;
- case 57:
- # line 398 "lua.stx"
- {code_byte(POP); ntemp--;} break;
- case 58:
- # line 399 "lua.stx"
- {
- *(yypvt[-2].pByte) = ONFJMP;
- *((Word *)(yypvt[-2].pByte+1)) = pc - (yypvt[-2].pByte + sizeof(Word)+1);
- yyval.vInt = 1;
- } break;
- case 59:
- # line 404 "lua.stx"
- {code_byte(POP); ntemp--;} break;
- case 60:
- # line 405 "lua.stx"
- {
- *(yypvt[-2].pByte) = ONTJMP;
- *((Word *)(yypvt[-2].pByte+1)) = pc - (yypvt[-2].pByte + sizeof(Word)+1);
- yyval.vInt = 1;
- } break;
- case 61:
- # line 412 "lua.stx"
- { code_byte(PUSHNIL); incr_ntemp();} break;
- case 63:
- # line 416 "lua.stx"
- {code_byte(PUSHMARK); yyval.vInt = ntemp; incr_ntemp();} break;
- case 64:
- # line 417 "lua.stx"
- { code_byte(CALLFUNC); ntemp = yypvt[-3].vInt-1;} break;
- case 65:
- # line 419 "lua.stx"
- {lua_pushvar (yypvt[-0].vLong); } break;
- case 66:
- # line 422 "lua.stx"
- { yyval.vInt = 1; } break;
- case 67:
- # line 423 "lua.stx"
- { yyval.vInt = yypvt[-0].vInt; } break;
- case 68:
- # line 426 "lua.stx"
- { yyval.vInt = yypvt[-0].vInt; } break;
- case 69:
- # line 427 "lua.stx"
- {if (!yypvt[-1].vInt){lua_codeadjust (ntemp+1); incr_ntemp();}} break;
- case 70:
- # line 428 "lua.stx"
- {yyval.vInt = yypvt[-0].vInt;} break;
- case 73:
- # line 435 "lua.stx"
- {localvar[nlocalvar]=yypvt[-0].vWord; incr_nlocalvar();} break;
- case 74:
- # line 436 "lua.stx"
- {localvar[nlocalvar]=yypvt[-0].vWord; incr_nlocalvar();} break;
- case 75:
- # line 439 "lua.stx"
- {yyval.vLong=-1;} break;
- case 76:
- # line 440 "lua.stx"
- {yyval.vLong=yypvt[-0].vWord;} break;
- case 77:
- # line 443 "lua.stx"
- { yyval.vInt = yypvt[-1].vInt; } break;
- case 78:
- # line 444 "lua.stx"
- { yyval.vInt = yypvt[-1].vInt; } break;
- case 79:
- # line 447 "lua.stx"
- { yyval.vInt = 0; } break;
- case 80:
- # line 448 "lua.stx"
- { yyval.vInt = yypvt[-0].vInt; } break;
- case 81:
- # line 451 "lua.stx"
- {yyval.vInt=1;} break;
- case 82:
- # line 452 "lua.stx"
- {yyval.vInt=yypvt[-2].vInt+1;} break;
- case 83:
- # line 456 "lua.stx"
- {
- align(Word);
- code_byte(PUSHSTRING);
- code_word(lua_findconstant (s_name(yypvt[-0].vWord)));
- incr_ntemp();
- } break;
- case 84:
- # line 463 "lua.stx"
- {
- code_byte(STOREFIELD);
- ntemp-=2;
- } break;
- case 85:
- # line 469 "lua.stx"
- { yyval.vInt = 0; } break;
- case 86:
- # line 470 "lua.stx"
- { yyval.vInt = yypvt[-0].vInt; } break;
- case 87:
- # line 473 "lua.stx"
- { code_number(1); } break;
- case 88:
- # line 473 "lua.stx"
- {yyval.vInt=1;} break;
- case 89:
- # line 474 "lua.stx"
- { code_number(yypvt[-1].vInt+1); } break;
- case 90:
- # line 475 "lua.stx"
- {yyval.vInt=yypvt[-3].vInt+1;} break;
- case 91:
- # line 479 "lua.stx"
- {
- code_byte(STOREFIELD);
- ntemp-=2;
- } break;
- case 92:
- # line 486 "lua.stx"
- {
- nvarbuffer = 0;
- varbuffer[nvarbuffer] = yypvt[-0].vLong; incr_nvarbuffer();
- yyval.vInt = (yypvt[-0].vLong == 0) ? 1 : 0;
- } break;
- case 93:
- # line 492 "lua.stx"
- {
- varbuffer[nvarbuffer] = yypvt[-0].vLong; incr_nvarbuffer();
- yyval.vInt = (yypvt[-0].vLong == 0) ? yypvt[-2].vInt + 1 : yypvt[-2].vInt;
- } break;
- case 94:
- # line 499 "lua.stx"
- {
- int local = lua_localname (yypvt[-0].vWord);
- if (local == -1) /* global var */
- yyval.vLong = yypvt[-0].vWord + 1; /* return positive value */
- else
- yyval.vLong = -(local+1); /* return negative value */
- } break;
- case 95:
- # line 507 "lua.stx"
- {lua_pushvar (yypvt[-0].vLong);} break;
- case 96:
- # line 508 "lua.stx"
- {
- yyval.vLong = 0; /* indexed variable */
- } break;
- case 97:
- # line 511 "lua.stx"
- {lua_pushvar (yypvt[-0].vLong);} break;
- case 98:
- # line 512 "lua.stx"
- {
- align(Word);
- code_byte(PUSHSTRING);
- code_word(lua_findconstant (s_name(yypvt[-0].vWord))); incr_ntemp();
- yyval.vLong = 0; /* indexed variable */
- } break;
- case 99:
- # line 520 "lua.stx"
- {localvar[nlocalvar]=yypvt[-1].vWord; incr_nlocalvar();} break;
- case 100:
- # line 521 "lua.stx"
- {localvar[nlocalvar]=yypvt[-1].vWord; incr_nlocalvar();} break;
- case 101:
- # line 524 "lua.stx"
- { code_byte(PUSHNIL); } break;
- case 102:
- # line 525 "lua.stx"
- {ntemp = 0;} break;
- case 104:
- # line 528 "lua.stx"
- {lua_debug = yypvt[-0].vInt;} break;
- }
- goto yystack; /* reset registers in driver code */
- }
|