1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367 |
- /* A Bison parser, made from parse.y */
- #define IDENTIFIER 258
- #define TYPENAME 259
- #define SCSPEC 260
- #define TYPESPEC 261
- #define TYPE_QUAL 262
- #define CONSTANT 263
- #define STRING 264
- #define ELLIPSIS 265
- #define SIZEOF 266
- #define ENUM 267
- #define STRUCT 268
- #define UNION 269
- #define IF 270
- #define ELSE 271
- #define WHILE 272
- #define DO 273
- #define FOR 274
- #define SWITCH 275
- #define CASE 276
- #define DEFAULT 277
- #define BREAK 278
- #define CONTINUE 279
- #define RETURN 280
- #define GOTO 281
- #define ASM 282
- #define TYPEOF 283
- #define ALIGNOF 284
- #define ASSIGN 285
- #define OROR 286
- #define ANDAND 287
- #define EQCOMPARE 288
- #define ARITHCOMPARE 289
- #define LSHIFT 290
- #define RSHIFT 291
- #define UNARY 292
- #define PLUSPLUS 293
- #define MINUSMINUS 294
- #define HYPERUNARY 295
- #define POINTSAT 296
- #line 43 "parse.y"
- #include "config.h"
- #include "tree.h"
- #include "parse.h"
- #include "c-tree.h"
- #include "flags.h"
- #include <stdio.h>
- /* Cause the `yydebug' variable to be defined. */
- #define YYDEBUG
- #line 58 "parse.y"
- typedef union {long itype; tree ttype; enum tree_code code; char *cptr; } YYSTYPE;
- #line 142 "parse.y"
- /* the declaration found for the last IDENTIFIER token read in.
- yylex must look this up to detect typedefs, which get token type TYPENAME,
- so it is left around in case the identifier is not a typedef but is
- used in a context which makes it a reference to a variable. */
- static tree lastiddecl;
- static tree make_pointer_declarator ();
- static tree combine_strings ();
- static void reinit_parse_for_function ();
- extern double atof ();
- /* List of types and structure classes of the current declaration */
- tree current_declspecs;
- char *input_filename; /* source file current line is coming from */
- char *main_input_filename; /* top-level source file */
- #ifndef YYLTYPE
- typedef
- struct yyltype
- {
- int timestamp;
- int first_line;
- int first_column;
- int last_line;
- int last_column;
- char *text;
- }
- yyltype;
- #define YYLTYPE yyltype
- #endif
- #define YYACCEPT return(0)
- #define YYABORT return(1)
- #define YYERROR return(1)
- #include <stdio.h>
- #ifndef __STDC__
- #define const
- #endif
- #define YYFINAL 481
- #define YYFLAG -32768
- #define YYNTBASE 64
- #define YYTRANSLATE(x) ((unsigned)(x) <= 296 ? yytranslate[x] : 161)
- static const char yytranslate[] = { 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 59, 2, 2, 2, 47, 38, 2, 54,
- 55, 45, 43, 60, 44, 53, 46, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 33, 56, 2,
- 31, 2, 32, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 62, 2, 63, 37, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 61, 36, 57, 58, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 34, 35, 39, 40, 41,
- 42, 48, 49, 50, 51, 52
- };
- static const short yyrline[] = { 0,
- 163, 164, 171, 173, 173, 174, 176, 178, 179, 186,
- 192, 194, 196, 198, 200, 201, 202, 205, 211, 213,
- 214, 216, 221, 223, 224, 226, 231, 233, 234, 238,
- 240, 243, 245, 247, 249, 251, 253, 255, 259, 263,
- 266, 269, 272, 276, 278, 280, 282, 285, 297, 302,
- 304, 309, 311, 313, 315, 317, 319, 321, 323, 325,
- 327, 329, 331, 333, 335, 337, 339, 341, 343, 347,
- 369, 370, 372, 374, 376, 383, 388, 390, 392, 394,
- 396, 398, 403, 405, 409, 411, 414, 416, 417, 418,
- 423, 428, 431, 433, 435, 443, 446, 450, 452, 454,
- 462, 465, 467, 469, 478, 481, 485, 487, 495, 496,
- 497, 498, 502, 510, 511, 512, 515, 517, 520, 522,
- 525, 528, 536, 541, 542, 547, 552, 553, 558, 560,
- 562, 564, 570, 573, 580, 582, 587, 590, 595, 597,
- 599, 601, 609, 615, 617, 619, 621, 627, 633, 635,
- 637, 639, 641, 644, 649, 653, 656, 658, 660, 662,
- 665, 667, 670, 673, 676, 679, 683, 685, 688, 690,
- 692, 706, 710, 713, 717, 720, 721, 725, 728, 730,
- 739, 741, 746, 749, 753, 756, 760, 763, 766, 769,
- 773, 776, 780, 784, 786, 788, 790, 792, 794, 796,
- 798, 806, 808, 809, 812, 814, 817, 820, 827, 828,
- 832, 836, 842, 847, 849, 851, 855, 858, 859, 861,
- 864, 867, 868, 871, 873, 878, 883, 887, 892, 900,
- 907, 909, 935, 935, 946, 946, 950, 954, 957, 960,
- 967, 975, 982, 987, 992, 992, 995, 997, 1000, 1003,
- 1008, 1009, 1013, 1014, 1023, 1026, 1032, 1035, 1038, 1040,
- 1041, 1045, 1047, 1053, 1055, 1057, 1061, 1064, 1070, 1073,
- 1075, 1077, 1079, 1084, 1087
- };
- static const char * const yytname[] = { 0,
- "error","$illegal.","IDENTIFIER","TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS",
- "SIZEOF","ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH",
- "CASE","DEFAULT","BREAK","CONTINUE","RETURN","GOTO","ASM","TYPEOF","ALIGNOF","ASSIGN",
- "'='","'?'","':'","OROR","ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE",
- "LSHIFT","RSHIFT","'+'","'-'","'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS",
- "HYPERUNARY","POINTSAT","'.'","'('","')'","';'","'}'","'~'","'!'","','",
- "'{'","'['","']'","program"
- };
- static const short yyr1[] = { 0,
- 64, 64, 66, 65, 67, 65, 68, 68, 68, 69,
- 69, 69, 69, 69, 69, 69, 69, 71, 72, 70,
- 70, 73, 74, 70, 70, 75, 76, 70, 70, 77,
- 77, 78, 78, 78, 78, 78, 78, 78, 79, 80,
- 80, 81, 81, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 83,
- 83, 83, 83, 83, 84, 83, 83, 83, 83, 83,
- 83, 83, 85, 85, 86, 86, 87, 87, 87, 87,
- 88, 89, 89, 89, 89, 90, 90, 91, 91, 91,
- 92, 92, 92, 92, 93, 93, 94, 94, 95, 95,
- 95, 95, 95, 96, 96, 96, 97, 97, 98, 98,
- 99, 99, 101, 100, 100, 103, 102, 102, 104, 104,
- 104, 104, 105, 105, 106, 106, 107, 107, 107, 107,
- 107, 107, 108, 108, 108, 108, 108, 109, 109, 109,
- 109, 109, 109, 111, 110, 110, 110, 112, 110, 110,
- 110, 113, 110, 114, 110, 110, 115, 115, 116, 116,
- 116, 117, 117, 117, 118, 118, 118, 119, 119, 119,
- 120, 120, 121, 121, 122, 122, 123, 123, 124, 124,
- 125, 125, 126, 126, 126, 126, 126, 126, 126, 126,
- 126, 127, 127, 127, 128, 128, 129, 130, 131, 131,
- 131, 131, 133, 132, 134, 134, 135, 134, 134, 136,
- 137, 134, 138, 139, 134, 140, 141, 142, 134, 143,
- 134, 144, 134, 145, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 146, 134, 134, 147, 147, 148, 148,
- 149, 149, 150, 150, 152, 151, 154, 153, 155, 155,
- 155, 156, 156, 157, 157, 157, 158, 158, 159, 159,
- 159, 159, 159, 160, 160
- };
- static const short yyr2[] = { 0,
- 0, 1, 0, 2, 0, 3, 1, 1, 5, 3,
- 4, 4, 2, 2, 2, 2, 1, 0, 0, 7,
- 4, 0, 0, 7, 4, 0, 0, 6, 3, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 3, 1, 2, 2, 4, 7, 2, 4,
- 2, 4, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 5, 3, 3, 1,
- 1, 1, 3, 3, 0, 4, 4, 4, 3, 3,
- 2, 2, 1, 2, 0, 1, 1, 1, 2, 2,
- 0, 4, 4, 2, 2, 2, 3, 0, 2, 2,
- 1, 1, 2, 2, 2, 3, 0, 2, 1, 1,
- 1, 4, 4, 1, 1, 1, 1, 3, 1, 3,
- 0, 4, 0, 5, 2, 0, 5, 2, 1, 3,
- 4, 1, 1, 3, 1, 1, 3, 3, 4, 3,
- 3, 1, 3, 4, 3, 3, 1, 3, 3, 3,
- 4, 3, 1, 0, 6, 4, 2, 0, 6, 4,
- 2, 0, 7, 0, 6, 2, 0, 1, 0, 3,
- 2, 3, 3, 1, 0, 1, 3, 1, 3, 2,
- 1, 3, 1, 3, 2, 2, 0, 1, 1, 2,
- 0, 2, 3, 3, 2, 3, 4, 3, 2, 3,
- 2, 1, 2, 2, 0, 1, 2, 0, 2, 5,
- 4, 4, 0, 6, 1, 2, 0, 4, 1, 0,
- 0, 7, 0, 0, 9, 0, 0, 0, 12, 0,
- 6, 0, 5, 0, 4, 2, 2, 2, 3, 6,
- 8, 10, 3, 0, 4, 1, 0, 1, 0, 1,
- 1, 3, 0, 4, 0, 2, 0, 2, 2, 2,
- 2, 2, 2, 0, 1, 3, 1, 3, 2, 2,
- 2, 2, 2, 1, 3
- };
- static const short yydefact[] = { 3,
- 5, 0, 0, 0, 111, 102, 109, 101, 0, 0,
- 0, 0, 0, 17, 4, 8, 7, 0, 91, 91,
- 98, 110, 6, 15, 16, 30, 31, 164, 166, 169,
- 157, 169, 161, 0, 0, 153, 191, 0, 0, 119,
- 0, 14, 0, 104, 103, 13, 0, 98, 96, 0,
- 162, 0, 154, 0, 158, 83, 0, 70, 189, 71,
- 0, 0, 32, 34, 33, 0, 35, 36, 0, 37,
- 38, 0, 0, 39, 42, 44, 72, 187, 107, 0,
- 187, 0, 0, 10, 0, 29, 0, 257, 0, 0,
- 128, 142, 191, 0, 0, 117, 0, 135, 136, 0,
- 0, 97, 100, 114, 115, 99, 116, 183, 167, 181,
- 0, 174, 171, 156, 91, 0, 91, 169, 160, 169,
- 84, 0, 0, 49, 0, 51, 45, 0, 0, 0,
- 0, 46, 112, 0, 0, 0, 249, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 81, 82, 0, 0, 40, 0, 191, 255, 0,
- 185, 188, 105, 113, 190, 107, 186, 192, 150, 149,
- 120, 121, 0, 148, 0, 152, 0, 0, 27, 86,
- 0, 91, 91, 88, 126, 0, 0, 12, 0, 21,
- 0, 125, 257, 0, 11, 25, 0, 0, 168, 0,
- 167, 175, 170, 175, 0, 0, 9, 0, 0, 74,
- 73, 208, 0, 0, 43, 69, 68, 250, 0, 66,
- 65, 63, 64, 62, 61, 60, 58, 59, 53, 54,
- 55, 56, 57, 80, 79, 0, 41, 0, 195, 0,
- 199, 0, 201, 0, 255, 0, 108, 106, 0, 0,
- 274, 187, 187, 258, 0, 265, 267, 0, 151, 207,
- 0, 89, 90, 94, 0, 95, 0, 0, 141, 137,
- 118, 19, 123, 138, 140, 0, 23, 184, 182, 165,
- 0, 0, 178, 172, 176, 173, 155, 159, 50, 52,
- 209, 0, 76, 0, 47, 0, 77, 78, 194, 193,
- 0, 256, 0, 200, 196, 198, 0, 122, 261, 147,
- 191, 255, 269, 270, 271, 191, 272, 273, 259, 0,
- 260, 0, 28, 0, 0, 121, 132, 0, 129, 127,
- 0, 0, 139, 0, 163, 180, 0, 0, 0, 70,
- 111, 0, 220, 223, 0, 0, 0, 0, 0, 0,
- 0, 0, 247, 246, 0, 0, 205, 0, 215, 219,
- 202, 133, 167, 67, 263, 262, 197, 195, 257, 0,
- 195, 266, 268, 275, 92, 93, 0, 20, 124, 24,
- 179, 177, 211, 0, 0, 0, 249, 0, 0, 234,
- 236, 237, 238, 0, 0, 248, 0, 244, 216, 0,
- 0, 212, 204, 203, 217, 0, 0, 146, 143, 145,
- 0, 130, 0, 0, 0, 0, 0, 0, 232, 0,
- 239, 243, 0, 0, 210, 0, 134, 48, 144, 131,
- 213, 0, 224, 226, 230, 0, 235, 0, 245, 218,
- 0, 221, 0, 249, 0, 233, 253, 0, 214, 0,
- 0, 0, 231, 0, 0, 251, 240, 222, 0, 227,
- 0, 253, 0, 253, 0, 249, 0, 0, 241, 252,
- 225, 0, 254, 0, 228, 242, 0, 229, 0, 0,
- 0
- };
- static const short yydefgoto[] = { 479,
- 1, 2, 3, 15, 16, 17, 191, 331, 197, 334,
- 90, 261, 355, 72, 356, 236, 74, 75, 76, 130,
- 77, 179, 180, 18, 181, 182, 49, 183, 78, 163,
- 21, 106, 95, 39, 91, 96, 332, 40, 268, 362,
- 363, 172, 98, 313, 99, 22, 118, 120, 111, 50,
- 200, 52, 116, 284, 285, 109, 110, 80, 161, 81,
- 82, 162, 358, 401, 184, 292, 359, 360, 441, 361,
- 426, 385, 450, 386, 443, 444, 466, 477, 445, 436,
- 420, 424, 397, 219, 455, 456, 241, 242, 174, 175,
- 254, 302, 255, 256, 257, 258
- };
- static const short yypact[] = { 26,
- 52, 1388, 1388, 221,-32768,-32768,-32768,-32768, 62, 73,
- 143, 13, 15,-32768,-32768,-32768,-32768, 168, 22, 430,
- -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -43,-32768,
- 24,-32768, 93, 161, 1204,-32768,-32768, 168, 101,-32768,
- 332,-32768, 251,-32768,-32768,-32768, 168,-32768, 398, 310,
- -32768, 275,-32768, 1348,-32768,-32768, 129,-32768,-32768,-32768,
- 1248, 1270,-32768,-32768,-32768, 1292,-32768,-32768, 692,-32768,
- -32768, 1292, 163, 120, 1439, 316, 218, -5,-32768, 179,
- 969, 241, -4,-32768, 251,-32768, 186,-32768, 817, 994,
- 230,-32768,-32768, 251, 187,-32768, 965, 123, 125, 190,
- 394, 398,-32768,-32768,-32768,-32768,-32768, 237, 220,-32768,
- 310,-32768,-32768,-32768,-32768, 216, 315,-32768,-32768,-32768,
- -32768, 228, 692,-32768, 692,-32768,-32768, 245, 249, 254,
- 269,-32768,-32768, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
- 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
- 1292,-32768,-32768, 310, 310, 1292, 1292,-32768, -5, 839,
- -32768, 144, 49,-32768,-32768,-32768,-32768,-32768, 125,-32768,
- -32768, 298, 161,-32768, 1417,-32768, 267, 278,-32768, 542,
- 456, 284, 660,-32768,-32768, 212, 27,-32768, 251,-32768,
- 994, 311,-32768, 861,-32768,-32768, 994, 1292, 310, 290,
- 220, 229,-32768, 229, 1352, 1371,-32768, 286, 293,-32768,
- -32768, 294, 295, 1145, 1439, 1439, 1439,-32768, 322, 1414,
- 1454, 1465, 1181, 1474, 564, 666, 264, 264, 246, 246,
- -32768,-32768,-32768,-32768,-32768, 301, 120, 304, 88, 119,
- -32768, 1434,-32768, 308,-32768, 883,-32768, 49, 153, 303,
- -32768, 148, 1006,-32768, 306, 312,-32768, 103,-32768,-32768,
- 254,-32768,-32768,-32768, 251,-32768, 168, 795, 123,-32768,
- -32768,-32768,-32768,-32768,-32768, 313,-32768, 1439,-32768,-32768,
- 307, 1292, 340, 314,-32768, 314,-32768,-32768, 736, 736,
- -32768, 515,-32768, 795,-32768, 1292,-32768,-32768, 144,-32768,
- 324,-32768, 326,-32768,-32768,-32768, 320,-32768,-32768,-32768,
- -32768, 83, 158, 125,-32768,-32768, 125,-32768,-32768, 483,
- -32768, 374,-32768, 196, 204, 128,-32768, 795, 1439,-32768,
- 254, 795,-32768, 254,-32768, 1439, 1292, 229, 261, 351,
- 352, 333,-32768,-32768, 335, 337, 1292, 363, 341, 346,
- 1226, 310, 406,-32768, 381, 359, 1058, 574,-32768, 401,
- -32768,-32768, 358, 1001,-32768,-32768,-32768, 94,-32768, 905,
- 29,-32768,-32768,-32768,-32768,-32768, 210,-32768,-32768,-32768,
- 1439,-32768,-32768, 1292, 365, 1117, 1292, 1292, 387,-32768,
- -32768,-32768,-32768, 367, 368,-32768, 373,-32768,-32768, 633,
- 371,-32768,-32768,-32768,-32768, 714, 372, 158,-32768,-32768,
- 369,-32768, 773, 375, 1292, 416, 382, 384,-32768, 1117,
- -32768,-32768, 161, 1117,-32768, 1117,-32768,-32768,-32768,-32768,
- -32768, 385,-32768,-32768,-32768, 1117,-32768, 38,-32768,-32768,
- 1117,-32768, 391, 1292, 1117,-32768, 432, 390,-32768, 1117,
- 1292, 393,-32768, 397, 4,-32768,-32768,-32768, 392,-32768,
- 1292, 432, 396, 432, 410, 1292, 417, 181,-32768,-32768,
- -32768, 436,-32768, 442,-32768,-32768, 1117,-32768, 453, 492,
- -32768
- };
- static const short yypgoto[] = {-32768,
- -32768,-32768,-32768, 499,-32768,-32768,-32768,-32768,-32768,-32768,
- -32768,-32768, 10,-32768, -35,-32768, 347, -31,-32768,-32768,
- -33, -97, 215, 9, -168, 0, 460, 3, -9, 338,
- 18, -121, 244, -38, -80, -60,-32768,-32768,-32768, -253,
- 197, -36, -55, 177, -14, -27,-32768,-32768,-32768,-32768,
- -187, 12,-32768, 327, 213, 439, 353, 80, -58, -6,
- -85, -143, 200,-32768, -170,-32768, -117,-32768,-32768, -151,
- -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
- -32768,-32768,-32768, -360, 99, 98, 318,-32768, -183,-32768,
- -32768,-32768, 325,-32768, 248,-32768
- };
- #define YYLAST 1521
- static const short yytable[] = { 73,
- 57, 19, 19, 41, 20, 20, 97, 186, 100, 274,
- 263, 262, 213, 281, 330, 240, 192, 51, 29, 31,
- 33, 107, 167, 83, 171, -1, 417, 43, 47, 124,
- 126, 36, 101, 129, 127, 168, 462, 48, 187, 158,
- 132, 247, 115, 54, 115, 117, 121, 117, 159, 88,
- 170, -2, 79, 177, 104, 105, 160, 89, 463, 108,
- 9, 10, 11, 464, 26, 27, 34, 169, 35, 79,
- 447, 79, 239, 316, 107, 26, 27, 42, 379, 83,
- 193, 270, 312, 452, 53, 36, 79, 129, 194, 129,
- 160, 192, 448, 272, 168, 299, 36, 310, 166, 277,
- 168, 218, 215, 216, 217, 472, 220, 221, 222, 223,
- 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
- 108, 238, 28, 202, 244, 204, 247, 316, 271, 205,
- 269, 206, 158, 30, 166, 107, 312, 121, 311, 249,
- 79, 159, 79, 323, 160, 26, 27, 312, 131, 160,
- 36, 310, 427, 55, 87, 160, 84, 321, 276, 427,
- 85, 121, 322, 234, 235, 283, 278, 283, 240, 56,
- 36, 169, 245, 300, 252, 407, 193, 253, 88, 134,
- 246, 88, 295, 122, 194, 409, 89, 403, 262, 89,
- 265, 267, 311, 315, 318, 115, 115, 245, 117, 117,
- 48, 312, 208, 32, 209, 246, 404, 308, 108, 160,
- 307, 369, 37, 378, 36, 92, 380, 133, 168, 370,
- 107, 38, 79, 79, 299, 368, 121, 299, 325, 403,
- 371, 36, 92, 164, 416, 474, 329, 314, 317, 173,
- 464, 252, 188, 36, 253, 195, 189, 168, 404, 85,
- 336, 375, 326, 36, 92, 189, 93, 295, 295, 376,
- 185, 282, 329, 85, 364, 94, 412, 198, 437, 413,
- 48, 203, 439, 93, 440, 112, 24, 25, 5, 199,
- 7, 59, 94, 207, 446, 37, 9, 10, 11, 449,
- 149, 150, 151, 453, 38, 93, 329, 83, 458, 210,
- 329, 283, 13, 211, 94, 381, 147, 148, 149, 150,
- 151, 389, 26, 27, 212, 394, 260, 383, 5, 252,
- 7, 165, 253, 214, 87, 478, 9, 10, 11, 259,
- 113, 114, 86, 260, 411, -26, -26, -26, -26, 264,
- 289, 273, 13, -26, -26, -26, 280, 290, 414, 293,
- 291, 218, 418, 169, 296, 297, 169, 309, 87, -26,
- 319, 395, -121, 335, 152, 153, 298, 154, 155, 156,
- 304, 320, 337, 338, 329, 333, 374, 157, 365, 432,
- 366, 329, 367, -30, -31, 88, 384, -121, 387, 438,
- 388, -121, -26, 89, 196, 390, 391, -22, -22, -22,
- -22, 392, 103, 104, 105, -22, -22, -22, 218, 9,
- 10, 11, 396, 398, 399, 459, 405, 406, 415, 419,
- 87, -22, 421, 422, -121, 467, 423, 425, 428, 431,
- 218, 429, 433, 5, 44, 7, 45, 434, 435, 442,
- 454, 9, 10, 11, 451, 457, 465, 88, 460, -121,
- 461, 469, 480, -121, -22, 89, 178, 13, -87, -87,
- -87, -87, -87, -87, -87, 471, -87, -87, -87, -87,
- -87, 473, -87, -87, -87, -87, -87, -87, -87, -87,
- -87, -87, -87, -87, -87, 46, 5, 6, 7, 8,
- 475, 481, 372, -87, 9, 10, 11, 476, -87, -87,
- -87, 23, 237, 248, -87, -87, 357, 102, 324, -87,
- 13, -87, -87, -87, -87, 339, -87, 340, 341, 6,
- 7, 8, 60, 56, 377, 61, 9, 10, 11, 342,
- 286, 343, 344, 345, 346, 347, 348, 349, 350, 351,
- 352, 353, 13, 62, 408, 5, 6, 7, 8, 201,
- 382, 279, 63, 9, 10, 11, 400, 64, 65, 66,
- 468, 470, 305, 67, 68, 0, 303, 373, 69, 13,
- 354, 0, 70, 71, 178, 212, 340, 27, 0, 0,
- 0, 60, 56, 0, 61, 0, 0, 0, 342, 0,
- 343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
- 353, 0, 62, 144, 145, 146, 147, 148, 149, 150,
- 151, 63, 0, 0, 0, 0, 64, 65, 66, 0,
- 0, 0, 67, 68, 0, 0, 0, 69, 0, 354,
- 402, 70, 71, 178, 212, 340, 27, 0, 0, 0,
- 60, 56, 0, 61, 0, 0, 0, 342, 0, 343,
- 344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
- 0, 62, 0, 5, 44, 7, 45, 0, 0, 0,
- 63, 9, 10, 11, 0, 64, 65, 66, 0, 0,
- 0, 67, 68, 0, 0, 0, 69, 13, 354, -206,
- 70, 71, 128, 212, 58, 5, 0, 7, 59, 60,
- 56, 0, 61, 9, 10, 11, 145, 146, 147, 148,
- 149, 150, 151, 0, 327, 266, 58, 0, 0, 13,
- 62, 60, 56, 0, 61, 0, 0, 0, 0, 63,
- 0, 0, 0, 0, 64, 65, 66, 0, 58, 0,
- 67, 68, 62, 60, 56, 69, 61, 0, 0, 70,
- 71, 63, -75, 0, 0, 0, 64, 65, 66, 0,
- 0, 0, 67, 68, 62, 0, 0, 69, 0, 0,
- -168, 70, 71, 327, 328, 58, 0, 0, 0, 0,
- 60, 56, 0, 61, 67, 68, 0, 0, 0, 69,
- 0, 0, 0, 70, 71, 327, 294, 58, 0, 0,
- 0, 62, 60, 56, 0, 61, 0, 0, 0, 0,
- 63, 0, 0, 0, 0, 64, 65, 66, 0, 58,
- 0, 67, 68, 62, 60, 56, 69, 61, 0, 430,
- 70, 71, 63, 328, 0, 0, 0, 64, 65, 66,
- 0, 58, 0, 67, 68, 62, 60, 56, 69, 61,
- 0, 0, 70, 71, 63, 328, 0, 0, 0, 64,
- 65, 66, 0, 58, 0, 67, 68, 62, 60, 56,
- 69, 61, 0, 0, 70, 71, 63, 0, 0, 176,
- 0, 64, 65, 66, 0, 58, 0, 67, 68, 62,
- 60, 56, 69, 61, 0, 0, 70, 71, 63, 0,
- 0, 243, 0, 64, 65, 66, 0, 58, 0, 67,
- 68, 62, 60, 56, 69, 61, 0, 0, 70, 71,
- 63, 0, 0, 275, 0, 64, 65, 66, 0, 0,
- 0, 67, 68, 62, 0, 0, 69, 0, 0, 0,
- 70, 71, 63, 0, 0, 306, 0, 64, 65, 66,
- 0, 0, 0, 67, 68, 0, 0, 0, 69, 0,
- 0, 0, 70, 71, 0, 190, 0, 410, -18, -18,
- -18, -18, 5, 0, 7, 165, -18, -18, -18, 0,
- 9, 10, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 87, -18, 0, 178, -121, 13, 5, 6, 7,
- 8, 0, 0, 0, 0, 9, 10, 11, 36, 5,
- 44, 7, 45, 158, 0, 0, 0, 9, 10, 11,
- -121, 13, 159, 0, -121, -18, 0, 0, 0, 0,
- 160, 0, 137, 13, 138, 139, 140, 141, 142, 143,
- 144, 145, 146, 147, 148, 149, 150, 151, 0, 0,
- 316, 0, 0, 0, -85, 0, 0, 0, 0, 312,
- 340, 341, 6, 7, 8, 60, 56, 160, 61, 9,
- 10, 11, 342, 0, 343, 344, 345, 346, 347, 348,
- 349, 350, 351, 352, 353, 13, 62, 0, 0, 0,
- 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
- 64, 65, 66, 0, 0, 0, 67, 68, 0, 0,
- 0, 69, 0, 354, 0, 70, 71, 0, 212, 340,
- 27, 0, 0, 0, 60, 56, 0, 61, 0, 0,
- 0, 342, 0, 343, 344, 345, 346, 347, 348, 349,
- 350, 351, 352, 353, 0, 62, 0, 58, 0, 0,
- 0, 0, 60, 56, 63, 61, 0, 0, 0, 64,
- 65, 66, 0, 0, 0, 67, 68, 0, 0, 0,
- 69, 0, 354, 62, 70, 71, 0, 212, 0, 0,
- 0, 0, 63, 0, 0, 0, 0, 64, 65, 66,
- 0, 0, 0, 67, 68, 0, 0, 0, 69, 0,
- 0, 0, 70, 71, 0, 294, 58, 5, 0, 7,
- 59, 60, 56, 0, 61, 9, 10, 11, 142, 143,
- 144, 145, 146, 147, 148, 149, 150, 151, 58, 0,
- 0, 13, 62, 60, 56, 0, 61, 0, 0, 0,
- 0, 63, 0, 0, 0, 0, 64, 65, 66, 0,
- 58, 0, 67, 68, 62, 60, 56, 69, 61, 0,
- 0, 70, 71, 63, 0, 0, 0, 0, 64, 65,
- 66, 0, 58, 0, 67, 68, 62, 60, 56, 69,
- 61, 393, 0, 70, 71, 63, 0, 0, 0, 0,
- 64, 65, 66, 0, 58, 0, 67, 68, 62, 60,
- 56, 123, 61, 0, 0, 70, 71, 63, 0, 0,
- 0, 0, 64, 65, 66, 0, 0, 0, 67, 68,
- 62, 0, 0, 125, 0, 0, 0, 70, 71, 63,
- 0, 0, 0, 0, 64, 65, 66, 0, 0, 0,
- 67, 68, 0, 0, 0, 69, 0, 0, 112, 70,
- 71, 5, 112, 7, 59, 5, 0, 7, 59, 9,
- 10, 11, 0, 9, 10, 11, 0, 0, 0, 0,
- 0, 112, 0, 0, 5, 13, 7, 59, 0, 13,
- 0, 0, 9, 10, 11, 0, 0, 0, 4, 0,
- -91, 5, 6, 7, 8, 0, 0, 0, 13, 9,
- 10, 11, 0, 113, 119, 0, 0, 113, 287, 0,
- 0, 0, 0, 0, 12, 13, 0, 250, 0, 251,
- 5, 6, 7, 8, 0, 0, 113, 288, 9, 10,
- 11, 0, -91, 0, 301, 0, 0, 5, 6, 7,
- 8, -91, 0, 14, 13, 9, 10, 11, 139, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 13, 0, 0, 0, 0, 0, 0, 135, 136,
- 137, -264, 138, 139, 140, 141, 142, 143, 144, 145,
- 146, 147, 148, 149, 150, 151, 0, 0, -264, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 141, 142, 143, 144, 145, 146, 147, 148, 149,
- 150, 151, 143, 144, 145, 146, 147, 148, 149, 150,
- 151
- };
- static const short yycheck[] = { 35,
- 34, 2, 3, 18, 2, 3, 43, 93, 47, 193,
- 181, 180, 130, 201, 268, 159, 97, 61, 9, 10,
- 11, 49, 81, 38, 85, 0, 387, 19, 20, 61,
- 62, 3, 47, 69, 66, 7, 33, 20, 94, 45,
- 72, 163, 52, 32, 54, 52, 9, 54, 54, 54,
- 55, 0, 35, 89, 6, 7, 62, 62, 55, 50,
- 12, 13, 14, 60, 3, 4, 54, 82, 54, 52,
- 33, 54, 158, 45, 102, 3, 4, 56, 332, 94,
- 54, 55, 54, 444, 61, 3, 69, 123, 62, 125,
- 62, 172, 55, 191, 7, 239, 3, 4, 81, 197,
- 7, 137, 134, 135, 136, 466, 138, 139, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 111, 157, 61, 115, 160, 117, 248, 45, 189, 118,
- 186, 120, 45, 61, 117, 163, 54, 9, 45, 173,
- 123, 54, 125, 261, 62, 3, 4, 54, 69, 62,
- 3, 4, 406, 61, 27, 62, 56, 55, 194, 413,
- 60, 9, 60, 154, 155, 202, 198, 204, 312, 9,
- 3, 186, 54, 55, 175, 363, 54, 175, 54, 60,
- 62, 54, 214, 55, 62, 369, 62, 358, 357, 62,
- 182, 183, 45, 252, 253, 205, 206, 54, 205, 206,
- 183, 54, 123, 61, 125, 62, 358, 55, 199, 62,
- 246, 54, 45, 331, 3, 4, 334, 55, 7, 62,
- 248, 54, 205, 206, 368, 311, 9, 371, 267, 400,
- 316, 3, 4, 55, 386, 55, 268, 252, 253, 54,
- 60, 242, 56, 3, 242, 56, 60, 7, 400, 60,
- 282, 56, 267, 3, 4, 60, 45, 289, 290, 56,
- 31, 33, 294, 60, 296, 54, 57, 31, 420, 60,
- 253, 56, 424, 45, 426, 1, 56, 57, 4, 60,
- 6, 7, 54, 56, 436, 45, 12, 13, 14, 441,
- 45, 46, 47, 445, 54, 45, 328, 312, 450, 55,
- 332, 338, 28, 55, 54, 337, 43, 44, 45, 46,
- 47, 347, 3, 4, 61, 351, 56, 57, 4, 320,
- 6, 7, 320, 55, 27, 477, 12, 13, 14, 63,
- 56, 57, 1, 56, 370, 4, 5, 6, 7, 56,
- 55, 31, 28, 12, 13, 14, 57, 55, 384, 55,
- 57, 387, 388, 368, 33, 55, 371, 55, 27, 28,
- 55, 352, 31, 57, 49, 50, 63, 52, 53, 54,
- 63, 60, 33, 60, 406, 63, 3, 62, 55, 415,
- 55, 413, 63, 33, 33, 54, 54, 56, 54, 423,
- 54, 60, 61, 62, 1, 33, 56, 4, 5, 6,
- 7, 56, 5, 6, 7, 12, 13, 14, 444, 12,
- 13, 14, 7, 33, 56, 451, 16, 60, 54, 33,
- 27, 28, 56, 56, 31, 461, 54, 57, 57, 55,
- 466, 63, 17, 4, 5, 6, 7, 56, 55, 55,
- 9, 12, 13, 14, 54, 56, 55, 54, 56, 56,
- 54, 56, 0, 60, 61, 62, 1, 28, 3, 4,
- 5, 6, 7, 8, 9, 56, 11, 12, 13, 14,
- 15, 55, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 56, 4, 5, 6, 7,
- 55, 0, 10, 38, 12, 13, 14, 56, 43, 44,
- 45, 3, 156, 166, 49, 50, 292, 48, 265, 54,
- 28, 56, 57, 58, 59, 1, 61, 3, 4, 5,
- 6, 7, 8, 9, 328, 11, 12, 13, 14, 15,
- 204, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 368, 4, 5, 6, 7, 111,
- 338, 199, 38, 12, 13, 14, 357, 43, 44, 45,
- 462, 464, 245, 49, 50, -1, 242, 320, 54, 28,
- 56, -1, 58, 59, 1, 61, 3, 4, -1, -1,
- -1, 8, 9, -1, 11, -1, -1, -1, 15, -1,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, -1, 29, 40, 41, 42, 43, 44, 45, 46,
- 47, 38, -1, -1, -1, -1, 43, 44, 45, -1,
- -1, -1, 49, 50, -1, -1, -1, 54, -1, 56,
- 57, 58, 59, 1, 61, 3, 4, -1, -1, -1,
- 8, 9, -1, 11, -1, -1, -1, 15, -1, 17,
- 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
- -1, 29, -1, 4, 5, 6, 7, -1, -1, -1,
- 38, 12, 13, 14, -1, 43, 44, 45, -1, -1,
- -1, 49, 50, -1, -1, -1, 54, 28, 56, 57,
- 58, 59, 1, 61, 3, 4, -1, 6, 7, 8,
- 9, -1, 11, 12, 13, 14, 41, 42, 43, 44,
- 45, 46, 47, -1, 1, 56, 3, -1, -1, 28,
- 29, 8, 9, -1, 11, -1, -1, -1, -1, 38,
- -1, -1, -1, -1, 43, 44, 45, -1, 3, -1,
- 49, 50, 29, 8, 9, 54, 11, -1, -1, 58,
- 59, 38, 61, -1, -1, -1, 43, 44, 45, -1,
- -1, -1, 49, 50, 29, -1, -1, 54, -1, -1,
- 57, 58, 59, 1, 61, 3, -1, -1, -1, -1,
- 8, 9, -1, 11, 49, 50, -1, -1, -1, 54,
- -1, -1, -1, 58, 59, 1, 61, 3, -1, -1,
- -1, 29, 8, 9, -1, 11, -1, -1, -1, -1,
- 38, -1, -1, -1, -1, 43, 44, 45, -1, 3,
- -1, 49, 50, 29, 8, 9, 54, 11, -1, 57,
- 58, 59, 38, 61, -1, -1, -1, 43, 44, 45,
- -1, 3, -1, 49, 50, 29, 8, 9, 54, 11,
- -1, -1, 58, 59, 38, 61, -1, -1, -1, 43,
- 44, 45, -1, 3, -1, 49, 50, 29, 8, 9,
- 54, 11, -1, -1, 58, 59, 38, -1, -1, 63,
- -1, 43, 44, 45, -1, 3, -1, 49, 50, 29,
- 8, 9, 54, 11, -1, -1, 58, 59, 38, -1,
- -1, 63, -1, 43, 44, 45, -1, 3, -1, 49,
- 50, 29, 8, 9, 54, 11, -1, -1, 58, 59,
- 38, -1, -1, 63, -1, 43, 44, 45, -1, -1,
- -1, 49, 50, 29, -1, -1, 54, -1, -1, -1,
- 58, 59, 38, -1, -1, 63, -1, 43, 44, 45,
- -1, -1, -1, 49, 50, -1, -1, -1, 54, -1,
- -1, -1, 58, 59, -1, 1, -1, 63, 4, 5,
- 6, 7, 4, -1, 6, 7, 12, 13, 14, -1,
- 12, 13, 14, -1, -1, -1, -1, -1, -1, -1,
- -1, 27, 28, -1, 1, 31, 28, 4, 5, 6,
- 7, -1, -1, -1, -1, 12, 13, 14, 3, 4,
- 5, 6, 7, 45, -1, -1, -1, 12, 13, 14,
- 56, 28, 54, -1, 60, 61, -1, -1, -1, -1,
- 62, -1, 32, 28, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, -1, -1,
- 45, -1, -1, -1, 61, -1, -1, -1, -1, 54,
- 3, 4, 5, 6, 7, 8, 9, 62, 11, 12,
- 13, 14, 15, -1, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, -1, -1, -1,
- -1, -1, -1, -1, -1, 38, -1, -1, -1, -1,
- 43, 44, 45, -1, -1, -1, 49, 50, -1, -1,
- -1, 54, -1, 56, -1, 58, 59, -1, 61, 3,
- 4, -1, -1, -1, 8, 9, -1, 11, -1, -1,
- -1, 15, -1, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, -1, 29, -1, 3, -1, -1,
- -1, -1, 8, 9, 38, 11, -1, -1, -1, 43,
- 44, 45, -1, -1, -1, 49, 50, -1, -1, -1,
- 54, -1, 56, 29, 58, 59, -1, 61, -1, -1,
- -1, -1, 38, -1, -1, -1, -1, 43, 44, 45,
- -1, -1, -1, 49, 50, -1, -1, -1, 54, -1,
- -1, -1, 58, 59, -1, 61, 3, 4, -1, 6,
- 7, 8, 9, -1, 11, 12, 13, 14, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 3, -1,
- -1, 28, 29, 8, 9, -1, 11, -1, -1, -1,
- -1, 38, -1, -1, -1, -1, 43, 44, 45, -1,
- 3, -1, 49, 50, 29, 8, 9, 54, 11, -1,
- -1, 58, 59, 38, -1, -1, -1, -1, 43, 44,
- 45, -1, 3, -1, 49, 50, 29, 8, 9, 54,
- 11, 56, -1, 58, 59, 38, -1, -1, -1, -1,
- 43, 44, 45, -1, 3, -1, 49, 50, 29, 8,
- 9, 54, 11, -1, -1, 58, 59, 38, -1, -1,
- -1, -1, 43, 44, 45, -1, -1, -1, 49, 50,
- 29, -1, -1, 54, -1, -1, -1, 58, 59, 38,
- -1, -1, -1, -1, 43, 44, 45, -1, -1, -1,
- 49, 50, -1, -1, -1, 54, -1, -1, 1, 58,
- 59, 4, 1, 6, 7, 4, -1, 6, 7, 12,
- 13, 14, -1, 12, 13, 14, -1, -1, -1, -1,
- -1, 1, -1, -1, 4, 28, 6, 7, -1, 28,
- -1, -1, 12, 13, 14, -1, -1, -1, 1, -1,
- 3, 4, 5, 6, 7, -1, -1, -1, 28, 12,
- 13, 14, -1, 56, 57, -1, -1, 56, 57, -1,
- -1, -1, -1, -1, 27, 28, -1, 1, -1, 3,
- 4, 5, 6, 7, -1, -1, 56, 57, 12, 13,
- 14, -1, 45, -1, 1, -1, -1, 4, 5, 6,
- 7, 54, -1, 56, 28, 12, 13, 14, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 28, -1, -1, -1, -1, -1, -1, 30, 31,
- 32, 55, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, -1, -1, 55, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 39, 40, 41, 42, 43, 44, 45, 46,
- 47
- };
- #define YYPURE 1
- #line 2 "bison.simple"
- /* Skeleton output parser for bison,
- copyright (C) 1984 Bob Corbett and Richard Stallman
- NO WARRANTY
- BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
- NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT
- WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
- RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
- WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
- BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY
- AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
- DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
- CORRECTION.
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
- STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
- WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
- OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
- USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
- DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
- A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
- PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
- DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
- GENERAL PUBLIC LICENSE TO COPY
- 1. You may copy and distribute verbatim copies of this source file
- as you receive it, in any medium, provided that you conspicuously and
- appropriately publish on each copy a valid copyright notice "Copyright
- (C) 1985 Free Software Foundation, Inc."; and include following the
- copyright notice a verbatim copy of the above disclaimer of warranty
- and of this License. You may charge a distribution fee for the
- physical act of transferring a copy.
- 2. You may modify your copy or copies of this source file or
- any portion of it, and copy and distribute such modifications under
- the terms of Paragraph 1 above, provided that you also do the following:
- a) cause the modified files to carry prominent notices stating
- that you changed the files and the date of any change; and
- b) cause the whole of any work that you distribute or publish,
- that in whole or in part contains or is a derivative of this
- program or any part thereof, to be licensed at no charge to all
- third parties on terms identical to those contained in this
- License Agreement (except that you may choose to grant more
- extensive warranty protection to third parties, at your option).
- c) You may charge a distribution fee for the physical act of
- transferring a copy, and you may at your option offer warranty
- protection in exchange for a fee.
- 3. You may copy and distribute this program or any portion of it in
- compiled, executable or object code form under the terms of Paragraphs
- 1 and 2 above provided that you do the following:
- a) cause each such copy to be accompanied by the
- corresponding machine-readable source code, which must
- be distributed under the terms of Paragraphs 1 and 2 above; or,
- b) cause each such copy to be accompanied by a
- written offer, with no time limit, to give any third party
- free (except for a nominal shipping charge) a machine readable
- copy of the corresponding source code, to be distributed
- under the terms of Paragraphs 1 and 2 above; or,
- c) in the case of a recipient of this program in compiled, executable
- or object code form (without the corresponding source code) you
- shall cause copies you distribute to be accompanied by a copy
- of the written offer of source code which you received along
- with the copy you received.
- 4. You may not copy, sublicense, distribute or transfer this program
- except as expressly provided under this License Agreement. Any attempt
- otherwise to copy, sublicense, distribute or transfer this program is void and
- your rights to use the program under this License agreement shall be
- automatically terminated. However, parties who have received computer
- software programs from you with this License Agreement will not have
- their licenses terminated so long as such parties remain in full compliance.
- 5. If you wish to incorporate parts of this program into other free
- programs whose distribution conditions are different, write to the Free
- Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not yet
- worked out a simple rule that can be stated here, but we will often permit
- this. We will be guided by the two goals of preserving the free status of
- all derivatives of our free software and of promoting the sharing and reuse of
- software.
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding! */
- /* This is the parser code that is written into each bison parser
- when the %semantic_parser declaration is not specified in the grammar.
- It was written by Richard Stallman by simplifying the hairy parser
- used when %semantic_parser is specified. */
- /* Note: there must be only one dollar sign in this file.
- It is replaced by the list of actions, each action
- as one case of the switch. */
- #define yyerrok (yyerrstatus = 0)
- #define yyclearin (yychar = YYEMPTY)
- #define YYEMPTY -2
- #define YYEOF 0
- #define YYFAIL goto yyerrlab;
- #define YYTERROR 1
- #ifndef YYIMPURE
- #define YYLEX yylex()
- #endif
- #ifndef YYPURE
- #define YYLEX yylex(&yylval, &yylloc)
- #endif
- /* If nonreentrant, generate the variables here */
- #ifndef YYIMPURE
- int yychar; /* the lookahead symbol */
- YYSTYPE yylval; /* the semantic value of the */
- /* lookahead symbol */
- YYLTYPE yylloc; /* location data for the lookahead */
- /* symbol */
- int yydebug = 0; /* nonzero means print parse trace */
- #endif /* YYIMPURE */
- /* YYMAXDEPTH indicates the initial size of the parser's stacks */
- #ifndef YYMAXDEPTH
- #define YYMAXDEPTH 200
- #endif
- /* YYMAXLIMIT is the maximum size the stacks can grow to
- (effective only if the built-in stack extension method is used). */
- #ifndef YYMAXLIMIT
- #define YYMAXLIMIT 10000
- #endif
- #line 87 "bison.simple"
- int
- yyparse()
- {
- register int yystate;
- register int yyn;
- register short *yyssp;
- register YYSTYPE *yyvsp;
- YYLTYPE *yylsp;
- int yyerrstatus; /* number of tokens to shift before error messages enabled */
- int yychar1; /* lookahead token as an internal (translated) token number */
- short yyssa[YYMAXDEPTH]; /* the state stack */
- YYSTYPE yyvsa[YYMAXDEPTH]; /* the semantic value stack */
- YYLTYPE yylsa[YYMAXDEPTH]; /* the location stack */
- short *yyss = yyssa; /* refer to the stacks thru separate pointers */
- YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
- YYLTYPE *yyls = yylsa;
- int yymaxdepth = YYMAXDEPTH;
- #ifndef YYPURE
- int yychar;
- YYSTYPE yylval;
- YYLTYPE yylloc;
- extern int yydebug;
- #endif
- YYSTYPE yyval; /* the variable used to return */
- /* semantic values from the action */
- /* routines */
- int yylen;
- if (yydebug)
- fprintf(stderr, "Starting parse\n");
- yystate = 0;
- yyerrstatus = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack. */
- yyssp = yyss - 1;
- yyvsp = yyvs;
- yylsp = yyls;
- /* Push a new state, which is found in yystate . */
- /* In all cases, when you get here, the value and location stacks
- have just been pushed. so pushing a state here evens the stacks. */
- yynewstate:
- *++yyssp = yystate;
- if (yyssp >= yyss + yymaxdepth - 1)
- {
- /* Give user a chance to reallocate the stack */
- /* Use copies of these so that the &'s don't force the real ones into memory. */
- YYSTYPE *yyvs1 = yyvs;
- YYLTYPE *yyls1 = yyls;
- short *yyss1 = yyss;
- /* Get the current used size of the three stacks, in elements. */
- int size = yyssp - yyss + 1;
- #ifdef yyoverflow
- /* Each stack pointer address is followed by the size of
- the data in use in that stack, in bytes. */
- yyoverflow("parser stack overflow",
- &yyss1, size * sizeof (*yyssp),
- &yyvs1, size * sizeof (*yyvsp),
- &yyls1, size * sizeof (*yylsp),
- &yymaxdepth);
- yyss = yyss1; yyvs = yyvs1; yyls = yyls1;
- #else /* no yyoverflow */
- /* Extend the stack our own way. */
- if (yymaxdepth >= YYMAXLIMIT)
- yyerror("parser stack overflow");
- yymaxdepth *= 2;
- if (yymaxdepth > YYMAXLIMIT)
- yymaxdepth = YYMAXLIMIT;
- yyss = (short *) alloca (yymaxdepth * sizeof (*yyssp));
- bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
- yyls = (YYLTYPE *) alloca (yymaxdepth * sizeof (*yylsp));
- bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
- yyvs = (YYSTYPE *) alloca (yymaxdepth * sizeof (*yyvsp));
- bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
- #endif /* no yyoverflow */
- yyssp = yyss + size - 1;
- yylsp = yyls + size - 1;
- yyvsp = yyvs + size - 1;
- if (yydebug)
- fprintf(stderr, "Stack size increased to %d\n", yymaxdepth);
- if (yyssp >= yyss + yymaxdepth - 1)
- YYERROR;
- }
- if (yydebug)
- fprintf(stderr, "Entering state %d\n", yystate);
- /* Do appropriate processing given the current state. */
- /* Read a lookahead token if we need one and don't already have one. */
- yyresume:
- /* First try to decide what to do without reference to lookahead token. */
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yydefault;
- /* Not known => get a lookahead token if don't already have one. */
- /* yychar is either YYEMPTY or YYEOF
- or a valid token in external form. */
- if (yychar == YYEMPTY)
- {
- yychar = YYLEX;
- }
- /* Convert token to internal form (in yychar1) for indexing tables with */
- if (yychar <= 0) /* This means end of input. */
- {
- yychar1 = 0;
- yychar = YYEOF; /* Don't call YYLEX any more */
- if (yydebug)
- fprintf(stderr, "Now at end of input.\n");
- }
- else
- {
- yychar1 = YYTRANSLATE(yychar);
- if (yydebug)
- fprintf(stderr, "Parsing next token; it is %d (%s)\n", yychar, yytname[yychar1]);
- }
- yyn += yychar1;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
- goto yydefault;
- yyn = yytable[yyn];
- /* yyn is what to do for this token type in this state.
- Negative => reduce, -yyn is rule number.
- Positive => shift, yyn is new state.
- New state is final state => don't bother to shift,
- just return success.
- 0, or most negative number => error. */
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrlab;
- if (yyn == YYFINAL)
- YYACCEPT;
- /* Shift the lookahead token. */
- if (yydebug)
- fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
- /* Discard the token being shifted unless it is eof. */
- if (yychar != YYEOF)
- yychar = YYEMPTY;
- *++yyvsp = yylval;
- *++yylsp = yylloc;
- /* count tokens shifted since error; after three, turn off error status. */
- if (yyerrstatus) yyerrstatus--;
- yystate = yyn;
- goto yynewstate;
- /* Do the default action for the current state. */
- yydefault:
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
- /* Do a reduction. yyn is the number of a rule to reduce with. */
- yyreduce:
- yylen = yyr2[yyn];
- yyval = yyvsp[1-yylen]; /* implement default value of the action */
- if (yydebug)
- {
- if (yylen == 1)
- fprintf (stderr, "Reducing 1 value via line %d, ",
- yyrline[yyn]);
- else
- fprintf (stderr, "Reducing %d values via line %d, ",
- yylen, yyrline[yyn]);
- }
- switch (yyn) {
- case 3:
- #line 172 "parse.y"
- {yyval.ttype = NULL_TREE; ;
- break;}
- case 5:
- #line 173 "parse.y"
- {yyval.ttype = NULL_TREE; ;
- break;}
- case 9:
- #line 180 "parse.y"
- { if (pedantic)
- warning ("ANSI C forbids use of `asm' keyword");
- if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
- assemble_asm (yyvsp[-2].ttype); ;
- break;}
- case 10:
- #line 188 "parse.y"
- { if (pedantic)
- error ("ANSI C forbids data definition lacking type or storage class");
- else
- warning ("data definition lacks type or storage class"); ;
- break;}
- case 11:
- #line 193 "parse.y"
- {;
- break;}
- case 12:
- #line 195 "parse.y"
- {;
- break;}
- case 13:
- #line 197 "parse.y"
- { error ("empty declaration"); ;
- break;}
- case 14:
- #line 199 "parse.y"
- { shadow_tag (yyvsp[-1].ttype); ;
- break;}
- case 18:
- #line 207 "parse.y"
- { if (! start_function (yyvsp[-2].ttype, yyvsp[0].ttype))
- YYFAIL;
- reinit_parse_for_function (); ;
- break;}
- case 19:
- #line 211 "parse.y"
- { store_parm_decls (); ;
- break;}
- case 20:
- #line 213 "parse.y"
- { finish_function (input_filename, yylsp[0].first_line); ;
- break;}
- case 21:
- #line 215 "parse.y"
- { ;
- break;}
- case 22:
- #line 217 "parse.y"
- { if (! start_function (yyvsp[-2].ttype, yyvsp[0].ttype))
- YYFAIL;
- reinit_parse_for_function (); ;
- break;}
- case 23:
- #line 221 "parse.y"
- { store_parm_decls (); ;
- break;}
- case 24:
- #line 223 "parse.y"
- { finish_function (input_filename, yylsp[0].first_line); ;
- break;}
- case 25:
- #line 225 "parse.y"
- { ;
- break;}
- case 26:
- #line 227 "parse.y"
- { if (! start_function (0, yyvsp[0].ttype))
- YYFAIL;
- reinit_parse_for_function (); ;
- break;}
- case 27:
- #line 231 "parse.y"
- { store_parm_decls (); ;
- break;}
- case 28:
- #line 233 "parse.y"
- { finish_function (input_filename, yylsp[0].first_line); ;
- break;}
- case 29:
- #line 235 "parse.y"
- { ;
- break;}
- case 32:
- #line 244 "parse.y"
- { yyval.code = ADDR_EXPR; ;
- break;}
- case 33:
- #line 246 "parse.y"
- { yyval.code = NEGATE_EXPR; ;
- break;}
- case 34:
- #line 248 "parse.y"
- { yyval.code = CONVERT_EXPR; ;
- break;}
- case 35:
- #line 250 "parse.y"
- { yyval.code = PREINCREMENT_EXPR; ;
- break;}
- case 36:
- #line 252 "parse.y"
- { yyval.code = PREDECREMENT_EXPR; ;
- break;}
- case 37:
- #line 254 "parse.y"
- { yyval.code = BIT_NOT_EXPR; ;
- break;}
- case 38:
- #line 256 "parse.y"
- { yyval.code = TRUTH_NOT_EXPR; ;
- break;}
- case 39:
- #line 260 "parse.y"
- { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
- break;}
- case 40:
- #line 265 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 42:
- #line 271 "parse.y"
- { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
- break;}
- case 43:
- #line 273 "parse.y"
- { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
- break;}
- case 45:
- #line 279 "parse.y"
- { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
- break;}
- case 46:
- #line 281 "parse.y"
- { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); ;
- break;}
- case 47:
- #line 283 "parse.y"
- { tree type = groktypename (yyvsp[-2].ttype);
- yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
- break;}
- case 48:
- #line 286 "parse.y"
- { tree type = groktypename (yyvsp[-5].ttype);
- if (pedantic)
- warning ("ANSI C forbids constructor-expressions");
- yyval.ttype = digest_init (type, build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)), 0);
- if (TREE_CODE (type) == ARRAY_TYPE && TYPE_SIZE (type) == 0)
- {
- int failure = complete_array_type (type, yyval.ttype, 1);
- if (failure)
- abort ();
- }
- ;
- break;}
- case 49:
- #line 298 "parse.y"
- { if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
- && TREE_PACKED (TREE_OPERAND (yyvsp[0].ttype, 1)))
- error ("sizeof applied to a bit-field");
- yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
- break;}
- case 50:
- #line 303 "parse.y"
- { yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
- break;}
- case 51:
- #line 305 "parse.y"
- { if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
- && TREE_PACKED (TREE_OPERAND (yyvsp[0].ttype, 1)))
- error ("__alignof applied to a bit-field");
- yyval.ttype = c_alignof (TREE_TYPE (yyvsp[0].ttype)); ;
- break;}
- case 52:
- #line 310 "parse.y"
- { yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
- break;}
- case 53:
- #line 312 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 54:
- #line 314 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 55:
- #line 316 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 56:
- #line 318 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 57:
- #line 320 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 58:
- #line 322 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 59:
- #line 324 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 60:
- #line 326 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 61:
- #line 328 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 62:
- #line 330 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 63:
- #line 332 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 64:
- #line 334 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 65:
- #line 336 "parse.y"
- { yyval.ttype = build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 66:
- #line 338 "parse.y"
- { yyval.ttype = build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 67:
- #line 340 "parse.y"
- { yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 68:
- #line 342 "parse.y"
- { yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype); ;
- break;}
- case 69:
- #line 344 "parse.y"
- { yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); ;
- break;}
- case 70:
- #line 349 "parse.y"
- { yyval.ttype = lastiddecl;
- if (!yyval.ttype)
- {
- if (yychar == YYEMPTY)
- yychar = YYLEX;
- if (yychar == '(')
- yyval.ttype = implicitly_declare (yyvsp[0].ttype);
- else
- {
- if (IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) != error_mark_node)
- error ("undeclared variable `%s' (first use here)",
- IDENTIFIER_POINTER (yyvsp[0].ttype));
- yyval.ttype = error_mark_node;
- /* Prevent repeated error messages. */
- IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) = error_mark_node;
- }
- }
- if (TREE_CODE (yyval.ttype) == CONST_DECL)
- yyval.ttype = DECL_INITIAL (yyval.ttype);
- ;
- break;}
- case 72:
- #line 371 "parse.y"
- { yyval.ttype = combine_strings (yyvsp[0].ttype); ;
- break;}
- case 73:
- #line 373 "parse.y"
- { yyval.ttype = yyvsp[-1].ttype; ;
- break;}
- case 74:
- #line 375 "parse.y"
- { yyval.ttype = error_mark_node; ;
- break;}
- case 75:
- #line 377 "parse.y"
- { if (current_function_decl == 0)
- {
- error ("braced-group within expression allowed only inside a function");
- YYFAIL;
- }
- expand_start_stmt_expr (); ;
- break;}
- case 76:
- #line 384 "parse.y"
- { if (pedantic)
- warning ("ANSI C forbids braced-groups within expressions");
- yyval.ttype = get_last_expr ();
- expand_end_stmt_expr (); ;
- break;}
- case 77:
- #line 389 "parse.y"
- { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 78:
- #line 391 "parse.y"
- { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 79:
- #line 393 "parse.y"
- { yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 80:
- #line 395 "parse.y"
- { yyval.ttype = build_component_ref (build_indirect_ref (yyvsp[-2].ttype, "->"), yyvsp[0].ttype); ;
- break;}
- case 81:
- #line 397 "parse.y"
- { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
- break;}
- case 82:
- #line 399 "parse.y"
- { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
- break;}
- case 84:
- #line 406 "parse.y"
- { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 91:
- #line 424 "parse.y"
- { current_declspecs = yyvsp[0].ttype;
- yyval.itype = suspend_momentary (); ;
- break;}
- case 92:
- #line 430 "parse.y"
- { resume_momentary (yyvsp[-2].itype); ;
- break;}
- case 93:
- #line 432 "parse.y"
- { resume_momentary (yyvsp[-2].itype); ;
- break;}
- case 94:
- #line 434 "parse.y"
- { shadow_tag (yyvsp[-1].ttype); ;
- break;}
- case 95:
- #line 436 "parse.y"
- { warning ("empty declaration"); ;
- break;}
- case 96:
- #line 445 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 97:
- #line 447 "parse.y"
- { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
- break;}
- case 98:
- #line 451 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 99:
- #line 453 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 100:
- #line 455 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 101:
- #line 464 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 102:
- #line 466 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 103:
- #line 468 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 104:
- #line 470 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 105:
- #line 480 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 106:
- #line 482 "parse.y"
- { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
- break;}
- case 107:
- #line 486 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 108:
- #line 488 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 112:
- #line 499 "parse.y"
- { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype);
- if (pedantic)
- warning ("ANSI C forbids `typeof'") ;
- break;}
- case 113:
- #line 503 "parse.y"
- { yyval.ttype = groktypename (yyvsp[-1].ttype);
- if (pedantic)
- warning ("ANSI C forbids `typeof'") ;
- break;}
- case 121:
- #line 527 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 122:
- #line 529 "parse.y"
- { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
- yyval.ttype = yyvsp[-1].ttype;
- if (pedantic)
- warning ("ANSI C forbids use of `asm' keyword");
- ;
- break;}
- case 123:
- #line 538 "parse.y"
- { yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 1); ;
- break;}
- case 124:
- #line 541 "parse.y"
- { finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype); ;
- break;}
- case 125:
- #line 543 "parse.y"
- { tree d = start_decl (yyvsp[-1].ttype, current_declspecs, 0);
- finish_decl (d, NULL_TREE, yyvsp[0].ttype); ;
- break;}
- case 126:
- #line 549 "parse.y"
- { yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 1); ;
- break;}
- case 127:
- #line 552 "parse.y"
- { finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype); ;
- break;}
- case 128:
- #line 554 "parse.y"
- { tree d = start_decl (yyvsp[-1].ttype, current_declspecs, 0);
- finish_decl (d, NULL_TREE, yyvsp[0].ttype); ;
- break;}
- case 130:
- #line 561 "parse.y"
- { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype)); ;
- break;}
- case 131:
- #line 563 "parse.y"
- { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); ;
- break;}
- case 132:
- #line 565 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 133:
- #line 572 "parse.y"
- { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
- break;}
- case 134:
- #line 574 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
- break;}
- case 137:
- #line 589 "parse.y"
- { yyval.ttype = yyvsp[-1].ttype; ;
- break;}
- case 138:
- #line 591 "parse.y"
- { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 139:
- #line 596 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 140:
- #line 598 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
- break;}
- case 141:
- #line 600 "parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 143:
- #line 611 "parse.y"
- { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 144:
- #line 616 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 145:
- #line 618 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
- break;}
- case 146:
- #line 620 "parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 148:
- #line 629 "parse.y"
- { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 149:
- #line 634 "parse.y"
- { yyval.ttype = yyvsp[-1].ttype; ;
- break;}
- case 150:
- #line 636 "parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 151:
- #line 638 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 152:
- #line 640 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
- break;}
- case 154:
- #line 646 "parse.y"
- { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
- /* Start scope of tag before parsing components. */
- ;
- break;}
- case 155:
- #line 650 "parse.y"
- { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype);
- /* Really define the structure. */
- ;
- break;}
- case 156:
- #line 654 "parse.y"
- { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
- yyvsp[-1].ttype); ;
- break;}
- case 157:
- #line 657 "parse.y"
- { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
- break;}
- case 158:
- #line 659 "parse.y"
- { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
- break;}
- case 159:
- #line 661 "parse.y"
- { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
- break;}
- case 160:
- #line 663 "parse.y"
- { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
- yyvsp[-1].ttype); ;
- break;}
- case 161:
- #line 666 "parse.y"
- { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
- break;}
- case 162:
- #line 668 "parse.y"
- { yyvsp[0].itype = suspend_momentary ();
- yyval.ttype = start_enum (yyvsp[-1].ttype); ;
- break;}
- case 163:
- #line 671 "parse.y"
- { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
- resume_momentary (yyvsp[-4].itype); ;
- break;}
- case 164:
- #line 674 "parse.y"
- { yyvsp[0].itype = suspend_momentary ();
- yyval.ttype = start_enum (NULL_TREE); ;
- break;}
- case 165:
- #line 677 "parse.y"
- { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
- resume_momentary (yyvsp[-4].itype); ;
- break;}
- case 166:
- #line 680 "parse.y"
- { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
- break;}
- case 169:
- #line 689 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 170:
- #line 691 "parse.y"
- { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
- break;}
- case 171:
- #line 693 "parse.y"
- { if (pedantic)
- warning ("extra semicolon in struct or union specified"); ;
- break;}
- case 172:
- #line 708 "parse.y"
- { yyval.ttype = yyvsp[0].ttype;
- resume_momentary (yyvsp[-1].itype); ;
- break;}
- case 173:
- #line 711 "parse.y"
- { yyval.ttype = yyvsp[0].ttype;
- resume_momentary (yyvsp[-1].itype); ;
- break;}
- case 174:
- #line 714 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 175:
- #line 719 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 177:
- #line 722 "parse.y"
- { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 178:
- #line 727 "parse.y"
- { yyval.ttype = grokfield (input_filename, yylsp[0].first_line, yyvsp[0].ttype, current_declspecs, NULL_TREE); ;
- break;}
- case 179:
- #line 729 "parse.y"
- { yyval.ttype = grokfield (input_filename, yylsp[-2].first_line, yyvsp[-2].ttype, current_declspecs, yyvsp[0].ttype); ;
- break;}
- case 180:
- #line 731 "parse.y"
- { yyval.ttype = grokfield (input_filename, yylsp[-1].first_line, NULL_TREE, current_declspecs, yyvsp[0].ttype); ;
- break;}
- case 182:
- #line 742 "parse.y"
- { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
- break;}
- case 183:
- #line 748 "parse.y"
- { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 184:
- #line 750 "parse.y"
- { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 185:
- #line 755 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 186:
- #line 757 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 187:
- #line 762 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 189:
- #line 768 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 190:
- #line 770 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 191:
- #line 775 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 192:
- #line 777 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 193:
- #line 782 "parse.y"
- { yyval.ttype = yyvsp[-1].ttype; ;
- break;}
- case 194:
- #line 785 "parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 195:
- #line 787 "parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 196:
- #line 789 "parse.y"
- { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 197:
- #line 791 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 198:
- #line 793 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
- break;}
- case 199:
- #line 795 "parse.y"
- { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 200:
- #line 797 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
- break;}
- case 201:
- #line 799 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
- break;}
- case 208:
- #line 821 "parse.y"
- { pushlevel (0);
- clear_last_expr ();
- push_momentary ();
- expand_start_bindings (0); ;
- break;}
- case 210:
- #line 829 "parse.y"
- { expand_end_bindings (getdecls (), 1);
- poplevel (1, 1, 0);
- pop_momentary (); ;
- break;}
- case 211:
- #line 833 "parse.y"
- { expand_end_bindings (getdecls (), 0);
- poplevel (0, 0, 0);
- pop_momentary (); ;
- break;}
- case 212:
- #line 837 "parse.y"
- { expand_end_bindings (getdecls (), 0);
- poplevel (0, 0, 0);
- pop_momentary (); ;
- break;}
- case 213:
- #line 844 "parse.y"
- { emit_note (input_filename, yylsp[-3].first_line);
- expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0); ;
- break;}
- case 216:
- #line 852 "parse.y"
- { emit_note (input_filename, yylsp[-1].first_line);
- expand_expr_stmt (yyvsp[-1].ttype);
- clear_momentary (); ;
- break;}
- case 217:
- #line 856 "parse.y"
- { expand_start_else (); ;
- break;}
- case 218:
- #line 858 "parse.y"
- { expand_end_else (); ;
- break;}
- case 219:
- #line 860 "parse.y"
- { expand_end_cond (); ;
- break;}
- case 220:
- #line 862 "parse.y"
- { emit_note (input_filename, yylsp[0].first_line);
- expand_start_loop (1); ;
- break;}
- case 221:
- #line 865 "parse.y"
- { expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-1].ttype)); ;
- break;}
- case 222:
- #line 867 "parse.y"
- { expand_end_loop (); ;
- break;}
- case 223:
- #line 869 "parse.y"
- { emit_note (input_filename, yylsp[0].first_line);
- expand_start_loop_continue_elsewhere (1); ;
- break;}
- case 224:
- #line 872 "parse.y"
- { expand_loop_continue_here (); ;
- break;}
- case 225:
- #line 874 "parse.y"
- { emit_note (input_filename, yylsp[-2].first_line);
- expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-2].ttype));
- expand_end_loop ();
- clear_momentary (); ;
- break;}
- case 226:
- #line 880 "parse.y"
- { emit_note (input_filename, yylsp[-3].first_line);
- if (yyvsp[-1].ttype) expand_expr_stmt (yyvsp[-1].ttype);
- expand_start_loop_continue_elsewhere (1); ;
- break;}
- case 227:
- #line 884 "parse.y"
- { emit_note (input_filename, yylsp[-1].first_line);
- if (yyvsp[-1].ttype)
- expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-1].ttype)); ;
- break;}
- case 228:
- #line 890 "parse.y"
- { push_momentary (); ;
- break;}
- case 229:
- #line 892 "parse.y"
- { emit_note (input_filename, yylsp[-3].first_line);
- expand_loop_continue_here ();
- if (yyvsp[-3].ttype)
- {
- expand_expr_stmt (yyvsp[-3].ttype);
- }
- pop_momentary ();
- expand_end_loop (); ;
- break;}
- case 230:
- #line 901 "parse.y"
- { emit_note (input_filename, yylsp[-3].first_line);
- c_expand_start_case (yyvsp[-1].ttype);
- /* Don't let the tree nodes for $3 be discarded by
- clear_momentary during the parsing of the next stmt. */
- push_momentary (); ;
- break;}
- case 231:
- #line 907 "parse.y"
- { expand_end_case ();
- pop_momentary (); ;
- break;}
- case 232:
- #line 910 "parse.y"
- { register tree value = fold (yyvsp[-1].ttype);
- register tree label
- = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
- if (TREE_CODE (value) != INTEGER_CST
- && value != error_mark_node)
- {
- error ("case label does not reduce to an integer constant");
- value = error_mark_node;
- }
- else
- /* Promote char or short to int. */
- value = default_conversion (value);
- if (value != error_mark_node)
- {
- int success = pushcase (value, label);
- if (success == 1)
- error ("case label not within a switch statement");
- else if (success == 2)
- error ("duplicate case value");
- else if (success == 3)
- warning ("case value out of range");
- }
- ;
- break;}
- case 234:
- #line 936 "parse.y"
- {
- register tree label
- = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
- int success = pushcase (NULL_TREE, label);
- if (success == 1)
- error ("default label not within a switch statement");
- else if (success == 2)
- error ("multiple default labels in one switch");
- ;
- break;}
- case 236:
- #line 947 "parse.y"
- { emit_note (input_filename, yylsp[-1].first_line);
- if ( ! expand_exit_something ())
- error ("break statement not within loop or switch"); ;
- break;}
- case 237:
- #line 951 "parse.y"
- { emit_note (input_filename, yylsp[-1].first_line);
- if (! expand_continue_loop ())
- error ("continue statement not within a loop"); ;
- break;}
- case 238:
- #line 955 "parse.y"
- { emit_note (input_filename, yylsp[-1].first_line);
- c_expand_return (NULL_TREE); ;
- break;}
- case 239:
- #line 958 "parse.y"
- { emit_note (input_filename, yylsp[-2].first_line);
- c_expand_return (yyvsp[-1].ttype); ;
- break;}
- case 240:
- #line 961 "parse.y"
- { if (pedantic)
- warning ("ANSI C forbids use of `asm' keyword");
- emit_note (input_filename, yylsp[-5].first_line);
- if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
- expand_asm (yyvsp[-2].ttype); ;
- break;}
- case 241:
- #line 968 "parse.y"
- { if (pedantic)
- warning ("ANSI C forbids use of `asm' keyword");
- emit_note (input_filename, yylsp[-7].first_line);
- if (TREE_CHAIN (yyvsp[-4].ttype)) yyvsp[-4].ttype = combine_strings (yyvsp[-4].ttype);
- c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
- yyvsp[-6].ttype == ridpointers[(int)RID_VOLATILE]); ;
- break;}
- case 242:
- #line 976 "parse.y"
- { if (pedantic)
- warning ("ANSI C forbids use of `asm' keyword");
- emit_note (input_filename, yylsp[-9].first_line);
- if (TREE_CHAIN (yyvsp[-6].ttype)) yyvsp[-6].ttype = combine_strings (yyvsp[-6].ttype);
- c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
- yyvsp[-8].ttype == ridpointers[(int)RID_VOLATILE]); ;
- break;}
- case 243:
- #line 983 "parse.y"
- { tree decl;
- emit_note (input_filename, yylsp[-2].first_line);
- decl = lookup_label (yyvsp[-1].ttype);
- expand_goto (decl); ;
- break;}
- case 244:
- #line 988 "parse.y"
- { tree label = define_label (input_filename, yylsp[-1].first_line, yyvsp[-1].ttype);
- if (label)
- expand_label (label); ;
- break;}
- case 249:
- #line 1002 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 252:
- #line 1010 "parse.y"
- { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 254:
- #line 1015 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 255:
- #line 1024 "parse.y"
- { pushlevel (0); ;
- break;}
- case 256:
- #line 1026 "parse.y"
- { yyval.ttype = yyvsp[0].ttype; poplevel (0); ;
- break;}
- case 257:
- #line 1033 "parse.y"
- { pushlevel (0); ;
- break;}
- case 258:
- #line 1035 "parse.y"
- { yyval.ttype = yyvsp[0].ttype; poplevel (0, 0, 0); ;
- break;}
- case 261:
- #line 1042 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 263:
- #line 1048 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 264:
- #line 1054 "parse.y"
- { yyval.ttype = get_parm_types (0); ;
- break;}
- case 265:
- #line 1056 "parse.y"
- { yyval.ttype = get_parm_types (1); ;
- break;}
- case 266:
- #line 1058 "parse.y"
- { yyval.ttype = get_parm_types (0); ;
- break;}
- case 267:
- #line 1063 "parse.y"
- { push_parm_decl (yyvsp[0].ttype); ;
- break;}
- case 268:
- #line 1065 "parse.y"
- { push_parm_decl (yyvsp[0].ttype); ;
- break;}
- case 269:
- #line 1072 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ;
- break;}
- case 270:
- #line 1074 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ;
- break;}
- case 271:
- #line 1076 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 272:
- #line 1078 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ;
- break;}
- case 273:
- #line 1080 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 274:
- #line 1086 "parse.y"
- { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
- break;}
- case 275:
- #line 1088 "parse.y"
- { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
- break;}
- }
- /* the action file gets copied in in place of this dollarsign */
- #line 303 "bison.simple"
- yyvsp -= yylen;
- yylsp -= yylen;
- yyssp -= yylen;
- if (yydebug)
- {
- short *ssp1 = yyss - 1;
- fprintf (stderr, "state stack now", yyssp-yyss);
- while (ssp1 != yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
- *++yyvsp = yyval;
- yylsp++;
- if (yylen == 0)
- {
- yylsp->first_line = yylloc.first_line;
- yylsp->first_column = yylloc.first_column;
- yylsp->last_line = (yylsp-1)->last_line;
- yylsp->last_column = (yylsp-1)->last_column;
- yylsp->text = 0;
- }
- else
- {
- yylsp->last_line = (yylsp+yylen-1)->last_line;
- yylsp->last_column = (yylsp+yylen-1)->last_column;
- }
- /* Now "shift" the result of the reduction.
- Determine what state that goes to,
- based on the state we popped back to
- and the rule number reduced by. */
- yyn = yyr1[yyn];
- yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
- if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTBASE];
- goto yynewstate;
- yyerrlab: /* here on detecting error */
- if (! yyerrstatus)
- /* If not already recovering from an error, report this error. */
- {
- yyerror("parse error");
- }
- if (yyerrstatus == 3)
- {
- /* if just tried and failed to reuse lookahead token after an error, discard it. */
- /* return failure if at end of input */
- if (yychar == YYEOF)
- YYERROR;
- if (yydebug)
- fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
- yychar = YYEMPTY;
- }
- /* Else will try to reuse lookahead token
- after shifting the error token. */
- yyerrstatus = 3; /* Each real token shifted decrements this */
- goto yyerrhandle;
- yyerrdefault: /* current state does not do anything special for the error token. */
- #if 0
- /* This is wrong; only states that explicitly want error tokens
- should shift them. */
- yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
- if (yyn) goto yydefault;
- #endif
- yyerrpop: /* pop the current state because it cannot handle the error token */
- if (yyssp == yyss) YYERROR;
- yyvsp--;
- yylsp--;
- yystate = *--yyssp;
- if (yydebug)
- {
- short *ssp1 = yyss - 1;
- fprintf (stderr, "Error: state stack now", yyssp-yyss);
- while (ssp1 != yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
- yyerrhandle:
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yyerrdefault;
- yyn += YYTERROR;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
- goto yyerrdefault;
- yyn = yytable[yyn];
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrpop;
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrpop;
- if (yyn == YYFINAL)
- YYACCEPT;
- if (yydebug)
- fprintf(stderr, "Shifting error token, ");
- *++yyvsp = yylval;
- *++yylsp = yylloc;
- yystate = yyn;
- goto yynewstate;
- }
- #line 1090 "parse.y"
- /* Return something to represent absolute declarators containing a *.
- TARGET is the absolute declarator that the * contains.
- TYPE_QUALS is a list of modifiers such as const or volatile
- to apply to the pointer type, represented as identifiers.
- We return an INDIRECT_REF whose "contents" are TARGET
- and whose type is the modifier list. */
-
- static tree
- make_pointer_declarator (type_quals, target)
- tree type_quals, target;
- {
- return build (INDIRECT_REF, type_quals, target);
- }
- /* Given a chain of STRING_CST nodes,
- concatenate them into one STRING_CST
- and give it a suitable array-of-chars data type. */
- static tree
- combine_strings (strings)
- tree strings;
- {
- register tree value, t;
- register int length = 1;
- int wide_length = 0;
- int wide_flag = 0;
- if (TREE_CHAIN (strings))
- {
- /* More than one in the chain, so concatenate. */
- register char *p, *q;
- /* Don't include the \0 at the end of each substring,
- except for the last one.
- Count wide strings and ordinary strings separately. */
- for (t = strings; t; t = TREE_CHAIN (t))
- {
- if (TREE_TYPE (t) == int_array_type_node)
- {
- wide_length += (TREE_STRING_LENGTH (t) - 1);
- wide_flag = 1;
- }
- else
- length += (TREE_STRING_LENGTH (t) - 1);
- }
- /* If anything is wide, the non-wides will be converted,
- which makes them take more space. */
- if (wide_flag)
- length = length * UNITS_PER_WORD + wide_length;
- p = (char *) oballoc (length);
- /* Copy the individual strings into the new combined string.
- If the combined string is wide, convert the chars to ints
- for any individual strings that are not wide. */
- q = p;
- for (t = strings; t; t = TREE_CHAIN (t))
- {
- int len = TREE_STRING_LENGTH (t) - 1;
- if ((TREE_TYPE (t) == int_array_type_node) == wide_flag)
- {
- bcopy (TREE_STRING_POINTER (t), q, len);
- q += len;
- }
- else
- {
- int i;
- for (i = 0; i < len; i++)
- ((int *) q)[i] = TREE_STRING_POINTER (t)[i];
- q += len * UNITS_PER_WORD;
- }
- }
- *q = 0;
- value = make_node (STRING_CST);
- TREE_STRING_POINTER (value) = p;
- TREE_STRING_LENGTH (value) = length;
- TREE_LITERAL (value) = 1;
- }
- else
- {
- value = strings;
- length = TREE_STRING_LENGTH (value);
- if (TREE_TYPE (value) == int_array_type_node)
- wide_flag = 1;
- }
- TREE_TYPE (value)
- = build_array_type (wide_flag ? integer_type_node : char_type_node,
- make_index_type (build_int_2 (length - 1, 0)));
- TREE_LITERAL (value) = 1;
- TREE_STATIC (value) = 1;
- return value;
- }
- int lineno; /* current line number in file being read */
- FILE *finput; /* input file.
- Normally a pipe from the preprocessor. */
- /* lexical analyzer */
- static int maxtoken; /* Current nominal length of token buffer */
- static char *token_buffer; /* Pointer to token buffer.
- Actual allocated length is maxtoken + 2. */
- static dollar_seen = 0; /* Nonzero if have warned about `$'. */
- #define MAXRESERVED 9
- /* frw[I] is index in `reswords' of the first word whose length is I;
- frw[I+1] is one plus the index of the last word whose length is I.
- The length of frw must be MAXRESERVED + 2 so there is an element
- at MAXRESERVED+1 for the case I == MAXRESERVED. */
- static char frw[MAXRESERVED+2] =
- { 0, 0, 0, 2, 5, 13, 19, 29, 32, 36, 37 };
- /* Table of reserved words. */
- struct resword { char *name; short token; enum rid rid;};
- #define NORID RID_UNUSED
- static struct resword reswords[]
- = {{"if", IF, NORID},
- {"do", DO, NORID},
- {"int", TYPESPEC, RID_INT},
- {"for", FOR, NORID},
- {"asm", ASM, NORID},
- {"case", CASE, NORID},
- {"char", TYPESPEC, RID_CHAR},
- {"auto", SCSPEC, RID_AUTO},
- {"goto", GOTO, NORID},
- {"else", ELSE, NORID},
- {"long", TYPESPEC, RID_LONG},
- {"void", TYPESPEC, RID_VOID},
- {"enum", ENUM, NORID},
- {"float", TYPESPEC, RID_FLOAT},
- {"short", TYPESPEC, RID_SHORT},
- {"union", UNION, NORID},
- {"break", BREAK, NORID},
- {"while", WHILE, NORID},
- {"const", TYPE_QUAL, RID_CONST},
- {"double", TYPESPEC, RID_DOUBLE},
- {"static", SCSPEC, RID_STATIC},
- {"extern", SCSPEC, RID_EXTERN},
- {"struct", STRUCT, NORID},
- {"return", RETURN, NORID},
- {"sizeof", SIZEOF, NORID},
- {"typeof", TYPEOF, NORID},
- {"switch", SWITCH, NORID},
- {"signed", TYPESPEC, RID_SIGNED},
- {"inline", SCSPEC, RID_INLINE},
- {"typedef", SCSPEC, RID_TYPEDEF},
- {"default", DEFAULT, NORID},
- {"noalias", TYPE_QUAL, RID_NOALIAS},
- {"unsigned", TYPESPEC, RID_UNSIGNED},
- {"continue", CONTINUE, NORID},
- {"register", SCSPEC, RID_REGISTER},
- {"volatile", TYPE_QUAL, RID_VOLATILE},
- {"__alignof", ALIGNOF, NORID}};
- /* The elements of `ridpointers' are identifier nodes
- for the reserved type names and storage classes.
- It is indexed by a RID_... value. */
- tree ridpointers[(int) RID_MAX];
- static tree line_identifier; /* The identifier node named "line" */
- void check_newline ();
- void
- init_lex ()
- {
- extern char *malloc ();
- /* Start it at 0, because check_newline is called at the very beginning
- and will increment it to 1. */
- lineno = 0;
- line_identifier = get_identifier ("line");
- maxtoken = 40;
- token_buffer = malloc (maxtoken + 2);
- ridpointers[(int) RID_INT] = get_identifier ("int");
- ridpointers[(int) RID_CHAR] = get_identifier ("char");
- ridpointers[(int) RID_VOID] = get_identifier ("void");
- ridpointers[(int) RID_FLOAT] = get_identifier ("float");
- ridpointers[(int) RID_DOUBLE] = get_identifier ("double");
- ridpointers[(int) RID_SHORT] = get_identifier ("short");
- ridpointers[(int) RID_LONG] = get_identifier ("long");
- ridpointers[(int) RID_UNSIGNED] = get_identifier ("unsigned");
- ridpointers[(int) RID_SIGNED] = get_identifier ("signed");
- ridpointers[(int) RID_INLINE] = get_identifier ("inline");
- ridpointers[(int) RID_CONST] = get_identifier ("const");
- ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");
- ridpointers[(int) RID_AUTO] = get_identifier ("auto");
- ridpointers[(int) RID_STATIC] = get_identifier ("static");
- ridpointers[(int) RID_EXTERN] = get_identifier ("extern");
- ridpointers[(int) RID_TYPEDEF] = get_identifier ("typedef");
- ridpointers[(int) RID_REGISTER] = get_identifier ("register");
- }
- static void
- reinit_parse_for_function ()
- {
- }
- static int
- skip_white_space ()
- {
- register int c;
- register int inside;
- c = getc (finput);
- for (;;)
- {
- switch (c)
- {
- case '/':
- c = getc (finput);
- if (c != '*')
- {
- ungetc (c, finput);
- return '/';
- }
- c = getc (finput);
- inside = 1;
- while (inside)
- {
- if (c == '*')
- {
- while (c == '*')
- c = getc (finput);
- if (c == '/')
- {
- inside = 0;
- c = getc (finput);
- }
- }
- else if (c == '\n')
- {
- lineno++;
- c = getc (finput);
- }
- else if (c == EOF)
- {
- error ("unterminated comment");
- break;
- }
- else
- c = getc (finput);
- }
- break;
- case '\n':
- check_newline ();
- case ' ':
- case '\t':
- case '\f':
- case '\r':
- case '\b':
- c = getc (finput);
- break;
- case '\\':
- c = getc (finput);
- if (c == '\n')
- lineno++;
- else
- error ("stray '\\' in program");
- c = getc (finput);
- break;
- default:
- return (c);
- }
- }
- }
- /* Make the token buffer longer, preserving the data in it.
- P should point to just beyond the last valid character in the old buffer.
- The value we return is a pointer to the new buffer
- at a place corresponding to P. */
- static char *
- extend_token_buffer (p)
- char *p;
- {
- int offset = p - token_buffer;
- maxtoken = maxtoken * 2 + 10;
- token_buffer = (char *) realloc (token_buffer, maxtoken + 2);
- if (token_buffer == 0)
- fatal ("virtual memory exceeded");
- return token_buffer + offset;
- }
- /* At the beginning of a line, increment the line number
- and handle a #line directive immediately following */
- void
- check_newline ()
- {
- register int c;
- register int token;
- while (1)
- {
- lineno++;
- /* Read first nonwhite char on the line. */
- c = getc (finput);
- while (c == ' ' || c == '\t')
- c = getc (finput);
- if (c != '#')
- {
- /* If not #, unread it. */
- ungetc (c, finput);
- return;
- }
- /* Read first nonwhite char after the `#'. */
- c = getc (finput);
- while (c == ' ' || c == '\t')
- c = getc (finput);
- /* If a letter follows, then if the word here is `line', skip
- it and ignore it; otherwise, ignore the line, with an error
- if the word isn't `pragma'. */
- if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
- {
- if (c == 'p')
- {
- if (getc (finput) == 'r'
- && getc (finput) == 'a'
- && getc (finput) == 'g'
- && getc (finput) == 'm'
- && getc (finput) == 'a'
- && ((c = getc (finput)) == ' ' || c == '\t'))
- goto noerror;
- }
- else if (c == 'l')
- {
- if (getc (finput) == 'i'
- && getc (finput) == 'n'
- && getc (finput) == 'e'
- && ((c = getc (finput)) == ' ' || c == '\t'))
- goto linenum;
- }
- error ("undefined or invalid # directive");
- noerror:
- while ((c = getc (finput)) && c != '\n');
- continue;
- }
- linenum:
- /* Here we have either `#line' or `# <nonletter>'.
- In either case, it should be a line number; a digit should follow.
- while (c == ' ' || c == '\t')
- c = getc (finput);
- /* If the # is the only nonwhite char on the line,
- just ignore it. Check the new newline. */
- if (c == '\n')
- continue;
- /* Something follows the #; read a token. */
- ungetc (c, finput);
- token = yylex ();
- if (token == CONSTANT
- && TREE_CODE (yylval.ttype) == INTEGER_CST)
- {
- /* subtract one, because it is the following line that
- gets the specified number */
- int l = TREE_INT_CST_LOW (yylval.ttype) - 1;
- /* Is this the last nonwhite stuff on the line? */
- c = getc (finput);
- while (c == ' ' || c == '\t')
- c = getc (finput);
- if (c == '\n')
- {
- /* No more: store the line number and check following line. */
- lineno = l;
- continue;
- }
- ungetc (c, finput);
- /* More follows: it must be a string constant (filename). */
- token = yylex ();
- if (token != STRING || TREE_CODE (yylval.ttype) != STRING_CST)
- {
- error ("invalid #line");
- return;
- }
- input_filename
- = (char *) permalloc (TREE_STRING_LENGTH (yylval.ttype) + 1);
- strcpy (input_filename, TREE_STRING_POINTER (yylval.ttype));
- lineno = l;
- if (main_input_filename == 0)
- main_input_filename = input_filename;
- }
- else
- error ("invalid #line");
- /* skip the rest of this line. */
- while ((c = getc (finput)) != '\n');
- }
- }
- #define isalnum(char) ((char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || (char >= '0' && char <= '9'))
- #define isdigit(char) (char >= '0' && char <= '9')
- #define ENDFILE -1 /* token that represents end-of-file */
- static int
- readescape ()
- {
- register int c = getc (finput);
- register int count, code;
- switch (c)
- {
- case 'x':
- code = 0;
- count = 0;
- while (1)
- {
- c = getc (finput);
- if (!(c >= 'a' && c <= 'f')
- && !(c >= 'A' && c <= 'F')
- && !(c >= '0' && c <= '9'))
- {
- ungetc (c, finput);
- break;
- }
- code *= 16;
- if (c >= 'a' && c <= 'f')
- code += c - 'a' + 10;
- if (c >= 'A' && c <= 'F')
- code += c - 'A' + 10;
- if (c >= '0' && c <= '9')
- code += c - '0';
- count++;
- }
- if (count == 0)
- error ("\\x used with no following hex digits");
- return code;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7':
- code = 0;
- count = 0;
- while ((c <= '7') && (c >= '0') && (count++ < 3))
- {
- code = (code * 8) + (c - '0');
- c = getc (finput);
- }
- ungetc (c, finput);
- return code;
- case '\\': case '\'': case '"':
- return c;
- case '\n':
- lineno++;
- return -1;
- case 'n':
- return TARGET_NEWLINE;
- case 't':
- return TARGET_TAB;
- case 'r':
- return TARGET_CR;
- case 'f':
- return TARGET_FF;
- case 'b':
- return TARGET_BS;
- case 'a':
- return TARGET_BELL;
- case 'v':
- return TARGET_VT;
- case 'E':
- return 033;
- case '?':
- return c;
- }
- if (c >= 040 && c <= 0177)
- warning ("unknown escape sequence `\\%c'", c);
- else
- warning ("unknown escape sequence: `\\' followed by char code 0x%x", c);
- return c;
- }
- void
- yyerror ()
- {
- /* We can't print string and character constants well
- because the token_buffer contains the result of processing escapes. */
- if (token_buffer[0] == 0)
- error ("parse error at end of input");
- else if (token_buffer[0] == '"')
- error ("parse error at string constant");
- else if (token_buffer[0] == '\'')
- error ("parse error at character constant");
- else
- error ("parse error at `%s'", token_buffer);
- }
- static int
- yylex ()
- {
- register int c;
- register char *p;
- register int value;
- int wide_flag = 0;
- token_buffer[0] = c = skip_white_space ();
- token_buffer[1] = 0;
- yylloc.first_line = lineno;
- switch (c)
- {
- case EOF:
- token_buffer[0] = 0;
- value = ENDFILE;
- break;
- case 'L':
- /* Capital L may start a wide-string or wide-character constant. */
- {
- register int c = getc (finput);
- if (c == '\'')
- {
- wide_flag = 1;
- goto char_constant;
- }
- if (c == '"')
- {
- wide_flag = 1;
- goto string_constant;
- }
- ungetc (c, finput);
- }
- case 'A': case 'B': case 'C': case 'D': case 'E':
- case 'F': case 'G': case 'H': case 'I': case 'J':
- case 'K': case 'M': case 'N': case 'O':
- case 'P': case 'Q': case 'R': case 'S': case 'T':
- case 'U': case 'V': case 'W': case 'X': case 'Y':
- case 'Z':
- case 'a': case 'b': case 'c': case 'd': case 'e':
- case 'f': case 'g': case 'h': case 'i': case 'j':
- case 'k': case 'l': case 'm': case 'n': case 'o':
- case 'p': case 'q': case 'r': case 's': case 't':
- case 'u': case 'v': case 'w': case 'x': case 'y':
- case 'z':
- case '_':
- case '$':
- p = token_buffer;
- while (isalnum (c) || c == '_' || c == '$')
- {
- if (p >= token_buffer + maxtoken)
- p = extend_token_buffer (p);
- if (c == '$')
- {
- if (pedantic)
- {
- if (! dollar_seen)
- warning ("ANSI C forbids `$' (first use here)");
- dollar_seen = 1;
- }
- }
- *p++ = c;
- c = getc (finput);
- }
- *p = 0;
- ungetc (c, finput);
- value = IDENTIFIER;
- yylval.itype = 0;
- /* Try to recognize a keyword. */
- if (p - token_buffer <= MAXRESERVED)
- {
- register int lim = frw [p - token_buffer + 1];
- register int i = frw[p - token_buffer];
- register struct resword *p = &reswords[i];
- for (; i < lim; i++, p++)
- if (p->name[0] == token_buffer[0]
- && !strcmp (p->name, token_buffer))
- {
- if (p->rid)
- yylval.ttype = ridpointers[(int) p->rid];
- if ((! flag_no_asm
- || ((int) p->token != ASM
- && (int) p->token != TYPEOF
- && strcmp (p->name, "inline")))
- /* -ftraditional means don't recognize
- typeof, const, volatile, noalias, signed or inline. */
- && (! flag_traditional
- || ((int) p->token != TYPE_QUAL
- && (int) p->token != TYPEOF
- && strcmp (p->name, "signed")
- && strcmp (p->name, "inline"))))
- value = (int) p->token;
- break;
- }
- }
- /* If we did not find a keyword, look for an identifier
- (or a typename). */
- if (value == IDENTIFIER)
- {
- yylval.ttype = get_identifier (token_buffer);
- lastiddecl = lookup_name (yylval.ttype);
- if (lastiddecl != 0 && TREE_CODE (lastiddecl) == TYPE_DECL)
- value = TYPENAME;
- }
- break;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case '.':
- {
- int base = 10;
- int count = 0;
- int largest_digit = 0;
- int numdigits = 0;
- /* for multi-precision arithmetic,
- we store only 8 live bits in each short,
- giving us 64 bits of reliable precision */
- short shorts[8];
- int floatflag = 0; /* Set 1 if we learn this is a floating constant */
- for (count = 0; count < 8; count++)
- shorts[count] = 0;
- p = token_buffer;
- *p++ = c;
- if (c == '0')
- {
- *p++ = (c = getc (finput));
- if ((c == 'x') || (c == 'X'))
- {
- base = 16;
- *p++ = (c = getc (finput));
- }
- else
- {
- base = 8;
- numdigits++;
- }
- }
- /* Read all the digits-and-decimal-points. */
- while (c == '.'
- || (isalnum (c) && (c != 'l') && (c != 'L')
- && (c != 'u') && (c != 'U')
- && (!floatflag || ((c != 'f') && (c != 'F')))))
- {
- if (c == '.')
- {
- if (base == 16)
- error ("floating constant may not be in radix 16");
- floatflag = 1;
- base = 10;
- *p++ = c = getc (finput);
- /* Accept '.' as the start of a floating-point number
- only when it is followed by a digit.
- Otherwise, unread the following non-digit
- and use the '.' as a structural token. */
- if (p == token_buffer + 2 && !isdigit (c))
- {
- if (c == '.')
- {
- c = getc (finput);
- if (c == '.')
- {
- *p++ = c;
- *p = 0;
- return ELLIPSIS;
- }
- error ("parse error at `..'");
- }
- ungetc (c, finput);
- token_buffer[1] = 0;
- value = '.';
- goto done;
- }
- }
- else
- {
- /* It is not a decimal point.
- It should be a digit (perhaps a hex digit). */
- if (isdigit (c))
- {
- c = c - '0';
- }
- else if (base <= 10)
- {
- if ((c&~040) == 'E')
- {
- base = 10;
- floatflag = 1;
- break; /* start of exponent */
- }
- error ("nondigits in number and not hexadecimal");
- c = 0;
- }
- else if (c >= 'a')
- {
- c = c - 'a' + 10;
- }
- else
- {
- c = c - 'A' + 10;
- }
- if (c >= largest_digit)
- largest_digit = c;
- numdigits++;
-
- for (count = 0; count < 8; count++)
- {
- (shorts[count] *= base);
- if (count)
- {
- shorts[count] += (shorts[count-1] >> 8);
- shorts[count-1] &= (1<<8)-1;
- }
- else shorts[0] += c;
- }
-
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = (c = getc (finput));
- }
- }
- if (numdigits == 0)
- error ("numeric constant with no digits");
- if (largest_digit >= base)
- error ("numeric constant contains digits beyond the radix");
- /* Remove terminating char from the token buffer and delimit the string */
- *--p = 0;
- if (floatflag)
- {
- tree type = double_type_node;
- char f_seen = 0;
- char l_seen = 0;
- /* Read explicit exponent if any, and put it in tokenbuf. */
- if ((c == 'e') || (c == 'E'))
- {
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- if ((c == '+') || (c == '-'))
- {
- *p++ = c;
- c = getc (finput);
- }
- if (! isdigit (c))
- error ("floating constant exponent has no digits");
- while (isdigit (c))
- {
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- }
- }
- *p = 0;
- yylval.ttype = build_real (atof (token_buffer));
- while (1)
- {
- if (c == 'f' || c == 'F')
- {
- if (f_seen)
- error ("two `f's in floating constant");
- f_seen = 1;
- type = float_type_node;
- }
- else if (c == 'l' || c == 'L')
- {
- if (l_seen)
- error ("two `l's in floating constant");
- l_seen = 1;
- type = long_double_type_node;
- }
- else
- {
- if (isalnum (c))
- {
- error ("garbage at end of number");
- while (isalnum (c))
- {
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- }
- }
- break;
- }
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- }
- ungetc (c, finput);
- *p = 0;
- TREE_TYPE (yylval.ttype) = type;
- }
- else
- {
- tree type;
- int spec_unsigned = 0;
- int spec_long = 0;
- while (1)
- {
- if (c == 'u' || c == 'U')
- {
- if (spec_unsigned)
- error ("two `u's in integer constant");
- spec_unsigned = 1;
- }
- else if (c == 'l' || c == 'L')
- {
- if (spec_long)
- error ("two `l's in integer constant");
- spec_long = 1;
- }
- else
- {
- if (isalnum (c))
- {
- error ("garbage at end of number");
- while (isalnum (c))
- {
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- }
- }
- break;
- }
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- }
- ungetc (c, finput);
- if (shorts[7] | shorts[6] | shorts[5] | shorts[4])
- warning ("integer constant out of range");
- /* This is simplified by the fact that our constant
- is always positive. */
- yylval.ttype
- = build_int_2 ((shorts[3]<<24) + (shorts[2]<<16) + (shorts[1]<<8) + shorts[0],
- 0);
-
- if (!spec_long && !spec_unsigned
- && int_fits_type_p (yylval.ttype, integer_type_node))
- type = integer_type_node;
- else if (!spec_long && base != 10
- && int_fits_type_p (yylval.ttype, unsigned_type_node))
- type = unsigned_type_node;
- else if (!spec_unsigned
- && int_fits_type_p (yylval.ttype, long_integer_type_node))
- type = long_integer_type_node;
- else
- {
- type = long_unsigned_type_node;
- if (! int_fits_type_p (yylval.ttype, long_unsigned_type_node))
- warning ("integer constant out of range");
- }
- TREE_TYPE (yylval.ttype) = type;
- }
- value = CONSTANT; break;
- }
- case '\'':
- char_constant:
- c = getc (finput);
- {
- register int code = 0;
- tryagain:
- if (c == '\\')
- {
- c = readescape ();
- if (c < 0)
- goto tryagain;
- }
- else if (c == '\n')
- {
- if (pedantic)
- warning ("ANSI C forbids newline in character constant");
- lineno++;
- }
- code = c;
- token_buffer[1] = c;
- token_buffer[2] = '\'';
- token_buffer[3] = 0;
- c = getc (finput);
- if (c != '\'')
- error ("malformatted character constant");
- /* If char type is signed, sign-extend the constant. */
- if (TREE_UNSIGNED (char_type_node)
- || ((code >> (BITS_PER_UNIT - 1)) & 1) == 0)
- yylval.ttype = build_int_2 (code & ((1 << BITS_PER_UNIT) - 1), 0);
- else
- yylval.ttype = build_int_2 (code | ((-1) << BITS_PER_UNIT), -1);
- TREE_TYPE (yylval.ttype) = integer_type_node;
- value = CONSTANT; break;
- }
- case '"':
- string_constant:
- {
- c = getc (finput);
- p = token_buffer + 1;
- while (c != '"')
- {
- if (c == '\\')
- {
- c = readescape ();
- if (c < 0)
- goto skipnewline;
- }
- else if (c == '\n')
- {
- if (pedantic)
- warning ("ANSI C forbids newline in string constant");
- lineno++;
- }
- if (p == token_buffer + maxtoken)
- p = extend_token_buffer (p);
- *p++ = c;
- skipnewline:
- c = getc (finput);
- }
- *p = 0;
- if (wide_flag)
- {
- /* If this is a L"..." wide-string, convert each char
- to an int, making a vector of ints. */
- int *widebuf = (int *) alloca (p - token_buffer);
- char *p1 = token_buffer + 1;
- for (; p1 == p; p1++)
- widebuf[p1 - token_buffer - 1] = *p1;
- yylval.ttype = build_string ((p - token_buffer) * sizeof (int),
- widebuf);
- TREE_TYPE (yylval.ttype) = int_array_type_node;
- }
- else
- {
- yylval.ttype = build_string (p - token_buffer, token_buffer + 1);
- TREE_TYPE (yylval.ttype) = char_array_type_node;
- }
- *p++ = '"';
- *p = 0;
- value = STRING; break;
- }
-
- case '+':
- case '-':
- case '&':
- case '|':
- case '<':
- case '>':
- case '*':
- case '/':
- case '%':
- case '^':
- case '!':
- case '=':
- {
- register int c1;
- combine:
- switch (c)
- {
- case '+':
- yylval.code = PLUS_EXPR; break;
- case '-':
- yylval.code = MINUS_EXPR; break;
- case '&':
- yylval.code = BIT_AND_EXPR; break;
- case '|':
- yylval.code = BIT_IOR_EXPR; break;
- case '*':
- yylval.code = MULT_EXPR; break;
- case '/':
- yylval.code = TRUNC_DIV_EXPR; break;
- case '%':
- yylval.code = TRUNC_MOD_EXPR; break;
- case '^':
- yylval.code = BIT_XOR_EXPR; break;
- case LSHIFT:
- yylval.code = LSHIFT_EXPR; break;
- case RSHIFT:
- yylval.code = RSHIFT_EXPR; break;
- case '<':
- yylval.code = LT_EXPR; break;
- case '>':
- yylval.code = GT_EXPR; break;
- }
- token_buffer[1] = c1 = getc (finput);
- token_buffer[2] = 0;
- if (c1 == '=')
- {
- switch (c)
- {
- case '<':
- value = ARITHCOMPARE; yylval.code = LE_EXPR; goto done;
- case '>':
- value = ARITHCOMPARE; yylval.code = GE_EXPR; goto done;
- case '!':
- value = EQCOMPARE; yylval.code = NE_EXPR; goto done;
- case '=':
- value = EQCOMPARE; yylval.code = EQ_EXPR; goto done;
- }
- value = ASSIGN; goto done;
- }
- else if (c == c1)
- switch (c)
- {
- case '+':
- value = PLUSPLUS; goto done;
- case '-':
- value = MINUSMINUS; goto done;
- case '&':
- value = ANDAND; goto done;
- case '|':
- value = OROR; goto done;
- case '<':
- c = LSHIFT;
- goto combine;
- case '>':
- c = RSHIFT;
- goto combine;
- }
- else if ((c == '-') && (c1 == '>'))
- { value = POINTSAT; goto done; }
- ungetc (c1, finput);
- token_buffer[1] = 0;
- if ((c == '<') || (c == '>'))
- value = ARITHCOMPARE;
- else value = c;
- goto done;
- }
- default:
- value = c;
- }
- done:
- yylloc.last_line = lineno;
- return value;
- }
|