#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 !IMP syntax checker - based on M68000 IMP compiler
// 2 ! (qv for fuller annotation)
// 3 ! Hamish Dewar Computer Science Edinburgh University 1983
// 4 !
// 5 %constinteger MAXNAME=127
// 6 %recordformat EDFILE(%integer start1,lim1, {part 1}
struct EDFILE {
union {
struct {
int START1;
int LIM1;
int START2;
int LIM2;
int LIM;
int LBEG;
int FP;
int CHANGE;
int FLAG;
int LINE;
int DIFF;
int SHIFT;
unsigned char TOP;
unsigned char WIN;
unsigned char BOT;
unsigned char MIN;
unsigned char ROW;
unsigned char COL;
_imp_string127 NAME;
};
};
};
// 7+ start2,lim2, {part2}
// 8+ lim, {VMLIM}
// 9+ lbeg,fp,change,flag,
// 10+ line {line number of current pos},
// 11+ diff {diff between LINE and ROW},
// 12+ shift {right shift of window on file},
// 13+ %byteinteger top {top row of sub_window},
// 14+ win {floating top},
// 15+ bot {bottom row +1 of sub_window},
// 16+ min {minimum window size},
// 17+ row {last row position},
// 18+ col {last col position},
// 19+ %string(maxname) name)
// 20 !
// 21 %external%routine EDI(%record(edfile)%name main,sec,
void EDI(struct EDFILE *MAIN, struct EDFILE *SEC, _imp_string255 MESSAGE) {
// 22+ %string(255) message)
// 23 %end
return;
} /* end of EDI */
// ?MESSAGE unused
// ?SEC unused
// ?MAIN unused
// 24
// 25 %external%routine CONNECT EDFILE(%record(edfile)%name f)
void CONNECTEDFILE(struct EDFILE *F) {
// 26 %end
return;
} /* end of CONNECTEDFILE */
// ?F unused
// 27
// 28 %external%routine DISCONNECT EDFILE(%record(edfile)%name f)
void DISCONNECTEDFILE(struct EDFILE *F) {
// 29 %end
return;
} /* end of DISCONNECTEDFILE */
// ?F unused
// 30
// 31
// 32 !%external%routine%spec EDI(%record(edfile)%name main,sec,
// 33 ! %string(255) message)
// 34 !%external%routine%spec CONNECT EDFILE(%record(edfile)%name f)
// 35 !%external%routine%spec DISCONNECT EDFILE(%record(edfile)%name f)
// 36
// 37 !
// 38 !$IF VAX
// 39 %conststring(13) permfile="ECCE_PERM"
const _imp_string13 PERMFILE = _imp_str_init("ECCE_PERM");
// 40 !$IF AMDAHL
// 41 {%conststring(18) permfile="ERCLIB:VECCE.IPERM"
// 42 !$FINISH
// 43
// 44 !! control
// 45 %constinteger logbit= 16_00040000 {print log},
// 46+ warnbit= 16_00020000 {print warnings},
// 47+ nonsbit= 16_00010000 {print nonstandard reports},
// 48+ DICTLIST= 16_00001000 {list dict entries},
// 49+ EXPLIST= 16_00000800 {list EXP entries}
// 50 %owninteger control=warnbit+nonsbit
static int CONTROL = 196608;
// 51 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 52 %externalroutine ECCECI(%record(edfile)%name main)
void ECCECI(struct EDFILE *MAIN) {
// 53 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 54 %ownstring(maxname) extraname
static _imp_string127 EXTRANAME;
// 55 %ownrecord(edfile) extra=0,null=0
static struct EDFILE EXTRA = {0};
static struct EDFILE NULL = {0};
// 56 %integer curstart,curlim
int CURSTART;
int CURLIM;
// 57 %integer nonstop
int NONSTOP;
// 58 %owninteger change=0
static int CHANGE = 0;
// 59 !! Fault numbers
// 60 %constinteger FORMERR=0, ATOMERR=1, NAMERR=2, CATERR=3, SIZERR=4,
// 61+ ASSERR=5, TYPERR=6, DUPERR=7,
// 62+ NOSTART=8, NOCYCLE=9,
// 63+ ORDERERR=10, MATCHERR=11, RANGERR=12, NONLITERAL=13,
// 64+ BOUNDSERR=14, ACCESSERR=15, NOTINLOOP=16,
// 65+ NOTINROUT=17, NOTINFUN=18, NOTINPRED=19,
// 66+ PLEXERR=20, NOIF=21, NONSTAND=22, NOTIN=23,
// 67+ INDEXERR=24,
// 68+ MOPERR=27, NOTERM=28, NONSTARTER=29,
// 69+ NONVAR=30, NONREF=31, TOOMANY=32, TOOFEW=33,
// 70+ UNWANTED=34, NOPARM=35, UNENDING=37,
// 71+ SELFREF=38
// 72 %constinteger NOEND=40, NOBEGIN=41,
// 73+ IDMISSING=42, NOFINISH=43, NOREPEAT=44,
// 74+ COUNTERR=45, NORESULT=46
// 75 %constinteger ERRMAX=46
// 76 %constinteger POINT=64,WARN=128
// 77 %owninteger FAULTNUM=0
static int FAULTNUM = 0;
// 78 %owninteger FAULTS=0; !fault count
static int FAULTS = 0;
// 79 !
// 80 %constinteger MAXINT=16_7FFFFFFF, MININT=\MAXINT,
// 81+ MAX10=maxint//10, MAXDIG=maxint-max10*10
// 82 %constinteger FALSE=0, TRUE=1
// 83 %integer I
int I;
// 84 !
// 85 !! Program statistics
// 86 %owninteger STATEMENTS=0; !statement count
static int STATEMENTS = 0;
// 87 !%owninteger ATOMS=0; !atom count
// 88 !%owninteger IDENTATOMS=0; !identifier count
// 89 !%owninteger NUMATOMS=0; !numeric atom count
// 90 !%owninteger MISSES=0; !ident mismatches
// 91 !%owninteger ZAPS=0
// 92 !
// 93 !!!!!!!!!!!!!!!! Operand Representation !!!!!!!!!!!!!!!!!!!
// 94
// 95 %constinteger SMALLMIN=-1000, SMALLMAX=1000,
// 96+ LITMIN=smallmax+1, LITMAX=smallmax+1000,
// 97+ D0=litmax+1, D1=d0+1, D2=d0+2, D6=d0+6, D7=d0+7,
// 98+ A0=d0+8, A1=a0+1, A6=a0+6, A7=a0+7,
// 99+ INDA0=a0+8,
// 100+ POSTA0=inda0+8, POSTA7=posta0+7,
// 101+ PREA0=posta0+8, PREA7=prea0+7,
// 102+ DICTMIN=prea0+8, DICTMAX=prea0+1200,
// 103+ LABMIN=dictmax+1, LAB1=labmin+1, LABMAX=labmin+20,
// 104+ EXPMIN=labmax+1, EXPMAX=labmax+300,
// 105+ UNDEF=expmax+1, AD=16_4000
// 106 %constinteger MAXDREG=d0+4, MAXAREG=a0+3
// 107 %constinteger D0B=1, D1B=2, D2B=4,
// 108+ A0B=16_100, A1B=16_200, A2B=16_400
// 109 %constinteger ALLREGS=2_0000111100011111; !a3:a0 & d4:d0
// 110 %owninteger FREE=allregs
static int FREE = 3871;
// 111 %constinteger NULLTYPE=dictmin,
// 112+ RECY=nulltype+1, ARRY=recy+1, STRINGY=arry+1,
// 113+ REALY=stringy+1, INTY=realy+1,
// 114+ CHARTYPE=inty+1, BOOLTYPE=chartype+1,
// 115+ FALSECONST=booltype+1, TRUECONST=booltype+2,
// 116+ INTTYPE=trueconst+1, SHORTTYPE=inttype+1,
// 117+ HALFTYPE=shorttype+1, BYTETYPE=halftype+1,
// 118+ MITETYPE=bytetype+1, BITTYPE=MITETYPE+1,
// 119+ LONGINTTYPE=bittype+1,
// 120+ REALTYPE=longinttype+1, LONGREALTYPE=realtype+1
// 121 %constinteger PURETYPE=8191, DIRECT=8192, INDIRECT=16384
// 122 %constinteger ANYINT=inty+direct, ANYINTVAR=inty+indirect,
// 123+ ANYSTRING=stringy+direct, ANYSTRINGVAR=stringy+indirect
// 124 %constinteger ANYNAME=nulltype+indirect
// 125
// 126 !
// 127 %owninteger dictshown=dictmin
static int DICTSHOWN = 2041;
// 128
// 129 !!!!!!!!!!!!!!!!!!!!!!! Big Literals !!!!!!!!!!!!!!!!!!!!!!!
// 130 %owninteger LITPOS=litmin, SLITPOS=litmax
static int LITPOS = 1001;
static int SLITPOS = 2000;
// 131 %integerarray LITSTORE(litmin:litmax)
int LITSTORE[1000];
// 132 !
// 133 !!!!!!!!!!!!!!!!!!!!!!!!!! MODE VALUES !!!!!!!!!!!!!!!!!!!!!!!!!
// 134 !Size codes:
// 135 %constinteger bytesize=1, wordsize=2, longsize=3
// 136 %constinteger sizemask=16_C0, sizeshift=6
// 137 !Address modes:
// 138 %constinteger dmode=0, amode=2_001000,
// 139+ indmode=2_010000, postmode=2_011000, premode=2_100000,
// 140+ dispmode=2_101000, indexmode=2_110000, absmode=2_111000,
// 141+ pcmode=2_111010, litmode=2_111100
// 142 %constinteger ownmode=dispmode+6; !d(A6)
// 143 !
// 144 !!!!!!!!!!!!!!!!!!!!!!!! Identifiers !!!!!!!!!!!!!!!!!!!!!!!!
// 145 !
// 146 %recordformat OBJINFO %C
struct OBJINFO {
union {
struct {
int FLAGS;
int TYPE;
union {
struct {
int EXTRA;
unsigned char SPARE;
unsigned char MODE;
};
struct {
int LOW;
};
};
int VAL;
};
};
};
// 147+ (%integer flags,type,
// 148+ (%integer extra, %byteinteger spare,mode %or %integer low),
// 149+ %integer val)
// 150 %recordformat IDENTINFO %C
struct IDENTINFO {
union {
struct {
union {
struct {
int FLAGS;
int TYPE;
union {
struct {
int EXTRA;
unsigned char SPARE;
unsigned char MODE;
};
struct {
int LOW;
};
};
int VAL;
};
struct {
struct OBJINFO DETAILS;
};
};
int TEXT;
int LINK;
};
};
};
// 151+ ((%integer flags,type,
// 152+ (%integer extra, %byteinteger spare,mode %or %integer low),
// 153+ %integer val %or %record(objinfo) details),
// 154+ %integer text,link)
// 155 !
// 156 ! Significance of FLAGS:
// 157 %constinteger VAR=16_0001, LAB=16_0002, PROC=16_0004, STATIC=16_0008,
// 158+ SPEC=16_0010, EXT=16_0020, PARM=16_0040, MORE=16_0080,
// 159+ TYPEID=16_0100, OKFLAG=16_0200, ALT=16_0800,
// 160+ RFLAG=16_1000,WFLAG=16_2000
// 161 !
// 162 ! Significance of VAL:
// 163 ! for literal : the actual value
// 164 ! for variable : machine address (displacement)
// 165 ! for undefined label : reference chain
// 166 ! for undefined procedure : "
// 167 ! for base type : (index to) range
// 168 ! for record type : size of record in bytes
// 169 !
// 170 ! Identifier dictionary:
// 171 %record(identinfo)%array DICT(d0:labmax)
struct IDENTINFO DICT[1254];
// 172 ! indexing DICT:
// 173 %owninteger DLIM=trueconst+1; !dict limit (up)
static int DLIM = 2051;
// 174 %owninteger DLIM0
static int DLIM0;
// 175 %owninteger PERMLIM=dictmin
static int PERMLIM = 2041;
// 176 %owninteger DMIN=dictmax-1; !dict upper limit (down)
static int DMIN = 3232;
// 177
// 178 ! Text of identifiers (indexed by _TEXT):
// 179 %constinteger CHARBOUND=6000
// 180 %byteintegerarray CHAR(0:charbound)
unsigned char CHAR[6001];
// 181 %integer CHARBASE,CHARLIM,CHARMIN; !pointers
int CHARBASE;
int CHARLIM;
int CHARMIN;
// 182 %integer NEWLEN
int NEWLEN;
// 183
// 184 ! Hash index to DICT:
// 185 %integerarray HASHINDEX(0:255)
int HASHINDEX[256];
// 186 %integername HEAD; !head of ident search list
int *HEAD;
// 187 !
// 188 !!!!!!!!!!!!!!!!!!!!! Complex operands !!!!!!!!!!!!!!!!!!!!!!!
// 189 !%recordformat EXPINFO(%integer act,x,y)
// 190 !%record(expinfo)%array EXP(expmin:expmax)
// 191 %owninteger EXPLO=expmax+1, OLDEXPLO=expmax+1
static int EXPLO = 3555;
static int OLDEXPLO = 3555;
// 192 %constinteger NP0=expmin
// 193 %owninteger NP,CONDNP,INSTNP
static int NP;
static int CONDNP;
static int INSTNP;
// 194
// 195 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 196 !!!!!!!!!!!!!!!!!! Keywords and operators !!!!!!!!!!!!!!!!!!!!
// 197 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 198 !*!!!!!!! Keyword codes -- used by KEYGEN to produce tables !!
// 199 %constinteger END=1 {end},
// 200+ REPEAT=2 {repeat},
// 201+ FINISH=3 {finish},
// 202+ ELSE=4 {else},
// 203+ BEGIN=5 {begin},
// 204+ EXIT=6 {exit_1,continue_0},
// 205+ RETURN=7 {return},
// 206+ TF=8 {true_1,false_0},
// 207+ RESULT=9 {result},
// 208+ STOP=10 {stop},
// 209+ GOTO=11 {goto},
// 210+ SIGNAL=12 {signal},
// 211+ MONITOR=13 {monitor},
// 212+ ON=15 {on},
// 213+ IU=16 {if_0,unless_1},
// 214+ WHILE=17 {while},
// 215+ UNTIL=18 {until_1},
// 216+ FOR=19 {for},
// 217+ THEN=20 {then},
// 218+ START=21 {start},
// 219+ CYCLE=22 {cycle},
// 220+ KEYLABEL=23 {label},
// 221+ PREFIX=24 {const_9,constant_9,own_8,external_40,system_40,dynamic_40},
// 222+ KRANGE=25 {short_1,half_2,byte_3,mite_4,bit_5},
// 223+ KEYLONG=26 {long},
// 224+ KEYINTEGER=27 {integer},
// 225+ KEYREAL=28 {real},
// 226+ KEYSTRING=29 {string},
// 227+ KEYRECORD=30 {record},
// 228+ KEYFORMAT=31 {format},
// 229+ FNMAP=32 {fn_0,function_0,map_1},
// 230+ RPRED=33 {routine_0,predicate_1},
// 231+ KEYSPEC=34 {spec},
// 232+ KEYARRAY=35 {array},
// 233+ KEYNAME=36 {name},
// 234+ KEYSWITCH=37 {switch},
// 235+ OF=38 {of},
// 236+ KEYFILE=39 {file},
// 237+ PROGRAM=40 {program},
// 238+ KEYLIST=41 {list},
// 239+ KEYCONTROL=42 {control},
// 240+ COMMENT=43 {comment},
// 241+ KEYEVENT=44 {event},
// 242+ INCLUDE=45 {include},
// 243+ ALIAS=46 {alias},
// 244+ KEYNOT=47 {not},
// 245+ KEYAND=64 {and},
// 246+ KEYOR=65 {or}
// 247 %CONSTintegerARRAY SYMINIT(97:122) = %C
const int SYMINIT[26] = {2, 15, 27, 57, 64, 87, 118, 122, 126, 1, 1, 141, 154,
168, 175, 184, 1, 199, 230, 270, 278, 1, 288, 1, 1, 1};
// 248+ 2, 15, 27, 57, 64, 87,118,122,126, 1, 1,141,154,168,175,184,
// 249+ 1,199,230,270,278, 1,288, 1, 1, 1
// 250
// 251 %CONSTBYTEINTEGERARRAY SYMBOL(1:292) = %C
const unsigned char SYMBOL[292] = {
128, 114, 114, 97, 121, 163, 108, 105, 97, 115, 174, 110, 100, 192, 101, 103, 105, 110, 133, 121, 116, 101, 153,
105, 116, 153, 111, 110, 116, 105, 110, 117, 101, 134, 121, 99, 108, 101, 150, 109, 109, 101, 110, 116, 171, 115,
116, 97, 110, 116, 152, 152, 114, 111, 108, 170, 121, 110, 97, 109, 105, 99, 152, 110, 100, 129, 108, 115, 101,
132, 120, 105, 116, 134, 118, 101, 110, 116, 172, 116, 101, 114, 110, 97, 108, 152, 105, 110, 105, 115, 104, 131,
97, 108, 115, 101, 136, 111, 114, 109, 97, 116, 159, 110, 160, 117, 110, 99, 116, 105, 111, 110, 160, 147, 108,
101, 167, 111, 116, 111, 139, 97, 108, 102, 153, 102, 144, 110, 116, 101, 103, 101, 114, 155, 99, 108, 117, 100,
101, 173, 97, 98, 101, 108, 151, 111, 110, 103, 154, 105, 115, 116, 169, 111, 110, 105, 116, 111, 114, 141, 105,
116, 101, 153, 97, 112, 160, 97, 109, 101, 164, 111, 116, 175, 110, 143, 119, 110, 152, 102, 166, 114, 193, 114,
101, 100, 105, 99, 97, 116, 101, 161, 111, 103, 114, 97, 109, 168, 101, 112, 101, 97, 116, 130, 111, 117, 116,
105, 110, 101, 161, 116, 117, 114, 110, 135, 115, 117, 108, 116, 137, 97, 108, 156, 99, 111, 114, 100, 158, 116,
111, 112, 138, 105, 103, 110, 97, 108, 140, 121, 115, 116, 101, 109, 152, 104, 111, 114, 116, 153, 112, 101, 99,
162, 119, 105, 116, 99, 104, 165, 97, 114, 116, 149, 114, 105, 110, 103, 157, 114, 117, 101, 136, 104, 101, 110,
148, 110, 108, 101, 115, 115, 144, 116, 105, 108, 146, 104, 105, 108, 101, 145};
// 252+ 128,114,114, 97,121,163,108,105, 97,115,174,110,100,192,101,103,
// 253+ 105,110,133,121,116,101,153,105,116,153,111,110,116,105,110,117,
// 254+ 101,134,121, 99,108,101,150,109,109,101,110,116,171,115,116, 97,
// 255+ 110,116,152,152,114,111,108,170,121,110, 97,109,105, 99,152,110,
// 256+ 100,129,108,115,101,132,120,105,116,134,118,101,110,116,172,116,
// 257+ 101,114,110, 97,108,152,105,110,105,115,104,131, 97,108,115,101,
// 258+ 136,111,114,109, 97,116,159,110,160,117,110, 99,116,105,111,110,
// 259+ 160,147,108,101,167,111,116,111,139, 97,108,102,153,102,144,110,
// 260+ 116,101,103,101,114,155, 99,108,117,100,101,173, 97, 98,101,108,
// 261+ 151,111,110,103,154,105,115,116,169,111,110,105,116,111,114,141,
// 262+ 105,116,101,153, 97,112,160, 97,109,101,164,111,116,175,110,143,
// 263+ 119,110,152,102,166,114,193,114,101,100,105, 99, 97,116,101,161,
// 264+ 111,103,114, 97,109,168,101,112,101, 97,116,130,111,117,116,105,
// 265+ 110,101,161,116,117,114,110,135,115,117,108,116,137, 97,108,156,
// 266+ 99,111,114,100,158,116,111,112,138,105,103,110, 97,108,140,121,
// 267+ 115,116,101,109,152,104,111,114,116,153,112,101, 99,162,119,105,
// 268+ 116, 99,104,165, 97,114,116,149,114,105,110,103,157,114,117,101,
// 269+ 136,104,101,110,148,110,108,101,115,115,144,116,105,108,146,104,
// 270+ 105,108,101,145
// 271
// 272 %CONSTBYTEINTEGERARRAY ALTDISP(1:292) = %C
const unsigned char ALTDISP[292] = {
0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 4, 0, 0, 3, 0, 0, 5, 8, 12, 17, 23, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 3, 0, 0,
4, 0, 0, 0, 4, 8, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 6, 27, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 0,
14, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0,
0, 1, 4, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 8, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
6, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 30,
0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 40, 5, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0};
// 273+ 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 5, 0,
// 274+ 0, 0, 0, 4, 0, 0, 3, 0, 0, 5, 8, 12, 17, 23, 0, 0,
// 275+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
// 276+ 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 3,
// 277+ 0, 0, 4, 0, 0, 0, 4, 8, 0, 1, 0, 0, 0, 0, 0, 0,
// 278+ 0, 0, 0, 0, 0, 40, 6, 27, 0, 0, 0, 0, 5, 0, 0, 0,
// 279+ 0, 6, 0, 14, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
// 280+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0,
// 281+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
// 282+ 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0,
// 283+ 4, 0, 0, 4, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 2, 0,
// 284+ 3, 0, 8, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1,
// 285+ 0, 0, 0, 0, 0, 0, 6, 12, 0, 0, 0, 0, 0, 0, 0, 0,
// 286+ 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 3, 0, 0,
// 287+ 0, 0, 0, 0, 0, 4, 30, 0, 0, 6, 0, 0, 0, 0, 0, 6,
// 288+ 0, 0, 0, 0, 40, 5, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0,
// 289+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
// 290+ 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 1, 0,
// 291+ 0, 0, 0, 0
// 292
// 293
// 294 !*!!!!!! end of generated tables !!!!!!!!!!!!!!!!!!!!!!!!!!!
// 295 !
// 296 %constinteger TERMINATOR=52, CONST=53, IDENT=54,
// 297+ AREF=55, RECREF=56,
// 298+ MODSIGN=57,
// 299+ COLON=58, COMMA=59, RIGHT=60, RIGHTBRACKET=61,
// 300+ DUD=63
// 301
// 302 !Operators (in banks of 8 acc to rank)
// 303 %constinteger BOOLAND=64, BOOLOR=65, BOOLNOT=66,
// 304+ FLOAT=67, IMOD=68, FMOD=69
// 305 %constinteger EQUALS=70, NOTEQ=71, LESSEQ=72,
// 306+ LESS=73, GREATEQ=74, GREATER=75,
// 307+ EQEQ=76, NOTEQEQ=77, RESOLVE=79
// 308 %constinteger PLUS=80, MINUS=81, LOGOR=82,
// 309+ LOGXOR=83, CONCAT=84
// 310 %constinteger MULT=88, FDIV=89, IDIV=90,
// 311+ LOGAND=91
// 312 %constinteger FPOWER=96, IPOWER=97,
// 313+ LSHIFT=100, RSHIFT=101, LOGNOT=102
// 314 %constinteger FCALL=106, MCALL=107
// 315 %constinteger ATOMMAX=107
// 316
// 317 ! Instruction actions:
// 318 %constinteger swgoto=35, rcall=mcall+2,
// 319+ assign=41, jamassign=42, plusass=43,
// 320+ compare=44, jump=45, label=46, adecl=47
// 321 %constinteger actmax=49
// 322 !
// 323 !Branch cases ( = machine condition-code)
// 324 %constinteger EQ=2_0111, NE=2_0110,
// 325+ GT=2_1110, LE=2_1111,
// 326+ LT=2_1101, GE=2_1100,
// 327+ CC=2_0100, CS=2_0101
// 328 %constinteger DOUBLE=16
// 329
// 330 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 331 ! Perm procedure identifiers which are recognised explicitly and
// 332 ! either implemented in-line or mapped to system entry-point
// 333 %constinteger DSHORT=dictmin+6, DLENGTH=dshort+1, DCHARNO=dlength+1,
// 334+ DADDR=dcharno+1, DTOSTR=daddr+1,
// 335+ DREM=dtostr+1,
// 336+ DNEXTSYM=drem+1, DREADSYM=dnextsym+1,
// 337+ DPRINTSTR=dreadsym+3,
// 338+ DREAD=dictmin+27,
// 339+ DNEWLINE=dictmin+41
// 340 !System entry-points used explicitly
// 341 %constinteger SIGENTRY=16_1114, SCOMPENTRY=16_1128,
// 342+ BOUNDENTRY=16_1134, AGETENTRY=16_1138,
// 343+ INDEXENTRY=16_113C, IREADENTRY=16_1118
// 344
// 345 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 346
// 347 %owninteger STARTS=0, CYCLES=0
static int STARTS = 0;
static int CYCLES = 0;
// 348 %owninteger LOOPLAB=0
static int LOOPLAB = 0;
// 349 %owninteger CURLAB=lab1
static int CURLAB = 3235;
// 350 !
// 351 %recordformat BLOCKINF(%integer sp, delta, fortemps, flags, type,
struct BLOCKINF {
union {
struct {
int SP;
int DELTA;
int FORTEMPS;
int FLAGS;
int TYPE;
int LOCALDPOS;
int PARLIM;
int LOCALTEXT;
int LOCALPC;
int LOCALSPC;
int PIDPOS;
int ACCESS;
int FORWARD;
int EVENTS;
int EVENTPC;
int FAULTS;
int RETURN;
int SHORTS;
};
};
};
// 352+ localdpos, parlim, localtext, localpc,
// 353+ localspc, pidpos, access, forward, events,
// 354+ eventpc, faults, return, shorts)
// 355 !Flag bits (VAR=1 from D_FLAGS)
// 356 %constinteger WRONGCC=2, NONLOCALREF=4, DYNARRAY=8
// 357 %constinteger HADON=16_10, HADINST=16_20
// 358
// 359 %constinteger OUTERLEVEL=0, MAXLEVEL=16
// 360 %owninteger LEVEL=outerlevel; !current block level
static int LEVEL = 0;
// 361 %record(blockinf) C; !info for current block
struct BLOCKINF C;
// 362 %record(blockinf)%array HOLD(0:maxlevel-1); !info for global blocks
struct BLOCKINF HOLD[16 - 1 + 1];
// 363
// 364 ! Final core image
// 365 %constinteger PUREBOUND=0, OWNBASE=purebound+1,
// 366+ FINALBOUND=ownbase+8191
// 367 %byteintegerarray FINAL(0:finalbound); !for switch info only
unsigned char FINAL[8193];
// 368 %owninteger FINALAD=2, OWNAD=ownbase
static int FINALAD = 2;
static int OWNAD = 1;
// 369 !%owninteger FIRSTENTRY=finalbound, FIRSTDPOS=dictmax
// 370 !%ownintegername CONSTAD; !== ownad or finalad
// 371 !%owninteger CONSTBOUND=purebound; !for const/code
// 372 ! =finalbound; !for own
// 373 %owninteger PC=0, SPC=finalbound; !for switch info
static int PC = 0;
static int SPC = 8192;
// 374
// 375 !Recognition:-
// 376 %constinteger CASEMASK=95, CASEBIT=32; !for case conversion
// 377
// 378 !Memo variables for current statement:-
// 379 %owninteger ITEM=0; !current operand
static int ITEM = 0;
// 380 %record(objinfo) T; !full typeinfo for ITEM
struct OBJINFO T;
// 381 %record(identinfo)%name DITEM
struct IDENTINFO *DITEM;
// 382 %owninteger ELEMENTS; !range details
static int ELEMENTS;
// 383 %owninteger HASH
static int HASH;
// 384 %owninteger SPECCING=0, MCODING=0
static int SPECCING = 0;
static int MCODING = 0;
// 385 %owninteger DECLMODE, DSIZE
static int DECLMODE;
static int DSIZE;
// 386 %ownrecord(identinfo) D; !declaration details
static struct IDENTINFO D;
// 387
// 388 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 389
// 390 !! Source file input and listing
// 391 %owninteger ATOM=0; !current lexical atom
static int ATOM = 0;
// 392 %owninteger MATCHED=1; !indic that atom has been matched
static int MATCHED = 1;
// 393 %owninteger SYM=nl; !current input symbol
static int SYM = 10;
// 394 %owninteger LINE=0; !current line number
static int LINE = 0;
// 395 %owninteger MAINLINE=0
static int MAINLINE = 0;
// 396 %owninteger DIAGLINE=-9999
static int DIAGLINE = -9999;
// 397 %owninteger PROLINE=0
static int PROLINE = 0;
// 398 %owninteger MODESYM='&'; !space or '+' or '&' or '"'
static int MODESYM = 38;
// 399 !%owninteger OUTCOL=0; !output line position
// 400 ! Pointers to source file:
// 401 %owninteger LINESTART=0
static int LINESTART = 0;
// 402 %owninteger FP=0; !(file pointer) current position
static int FP = 0;
// 403 %owninteger CHARS=0
static int CHARS = 0;
// 404 %owninteger ATOMP=0; !start of current atom
static int ATOMP = 0;
// 405 %owninteger FAULTP=0; !fault position
static int FAULTP = 0;
// 406 %owninteger MAINFP
static int MAINFP;
// 407 %owninteger STRINGP,EXPP
static int STRINGP;
static int EXPP;
// 408 %owninteger listout=0
static int LISTOUT = 0;
// 409 !
// 410 !! Listing, diagnostic and report routines
// 411 !
// 412 %ownstring(255) rep=""
static _imp_string255 REP = _imp_str_init("");
// 413 !
// 414 %routine NEWLINE
void NEWLINE(void) {
// 415 print string(rep); print symbol(nl)
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = REP /*q*/;
(_imp_string255 *)&tmp;
})
);
_imp_PRINTSYMBOL(10);
// 416 rep = ""
_imp_strncpy(/*?*/ &REP, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 417 %end
return;
} /* end of NEWLINE */
// 418 !
// 419 %routine PUT SYM(%integer k)
void PUTSYM(int K) {
// 420 rep = rep.tostring(k) %if length(rep) < 132
if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &REP) >= 132) goto L_0001;
_imp_strncpy(/*?*/ &REP, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &REP, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(K);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
L_0001:;
// 421 %end
return;
} /* end of PUTSYM */
// 422 !
// 423 %routine PRINT STRING(%string(255) s)
void PRINTSTRING(_imp_string255 S) {
// 424 rep = rep.s %if length(rep) < 132
if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &REP) >= 132) goto L_0002;
_imp_strncpy(/*?*/ &REP, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &REP, (_imp_string *)/*?*/ &S);
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
L_0002:;
// 425 %end
return;
} /* end of PRINTSTRING */
// 426 !
// 427 %routine SPACES(%integer n)
void SPACES(int N) {
// 428 %while n > 0 %cycle
L_0003:;
if (N <= 0) goto L_0004;
// 429 rep = rep." "; n = n-1
_imp_strncpy(/*?*/ &REP, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &REP, (_imp_string *)/*?*/ _imp_str_literal_ptr(" "));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
N = N - 1;
// 430 %repeat
goto L_0003;
L_0004:;
// 431 %end
return;
} /* end of SPACES */
// 432 !
// 433 %routine WRITE(%integer val,p)
void WRITE(int VAL, int P) {
// 434 %routine PD(%integer v)
void PD(int V) {
// 435 p = p-1
P = P - 1;
// 436 pd(v//10) %and v = v-v//10*10 %if v <= -10
if (V > -10) goto L_0005;
PD(((long)V / (long)10));
V = V - ((long)V / (long)10) * 10;
L_0005:;
// 437 spaces(p) %and p = 0 %if p > 0
if (P <= 0) goto L_0006;
SPACES(P);
P = 0;
L_0006:;
// 438 put sym('0'-v)
PUTSYM(48 - V);
// 439 %end
return;
} /* end of PD */
// 440 %if val < 0 %start
if (VAL >= 0) goto L_0007;
// 441 put sym('-'); pd(val)
PUTSYM(45);
PD(VAL);
// 442 %finish %else pd(-val)
goto L_0008;
L_0007:;
PD(-VAL);
L_0008:;
// 443 %end
return;
} /* end of WRITE */
// 444
// 445 !%routine put ident(%integer t)
// 446 ! rep = rep.string(charbase+t)
// 447 !!%integer l
// 448 ! t = t+charbase
// 449 ! l = byteinteger(t); l = 11 %if l > 11
// 450 ! %while l > 0 %cycle
// 451 ! l = l-1; t = t+1
// 452 ! put sym(byteinteger(t))
// 453 ! %repeat
// 454 !%end
// 455 !
// 456 !%routine mark at(%integer col)
// 457 ! put sym(' ') %while outcol < col; put sym('|')
// 458 !%end
// 459 !
// 460 !%routine show dict(%integer from)
// 461 !%integer f,i
// 462 !%record(identinfo) d
// 463 !%constbyteintegerarray flagsym(0:7) =
// 464 ! 'V','L','P','O','S','E', 'A', 'M'
// 465 !%constbyteintegerarray dsym(0:3) =
// 466 ! ' ','D','I','!'
// 467 !%conststring(6)%array typetext(0:7) =
// 468 ! "NULL ", "RECORD", "ARRAY ", "STRING",
// 469 ! "REALY ", "INTY ", "CHAR ", "BOOL "
// 470 ! %return %if from >= dlim
// 471 ! newline %and outcol = 0 %if outcol # 0
// 472 ! print string(" __identifier___flags___type___extra___value___")
// 473 ! newline; outcol = 0
// 474 ! %cycle
// 475 ! spaces(5); outcol = 5
// 476 ! pdec(from); mark at(10)
// 477 ! d = dict(from)
// 478 ! put sym(' ')
// 479 ! put ident(d_text)
// 480 ! mark at(23)
// 481 ! %for i = 7,-1,0 %cycle
// 482 ! %if d_flags>>i&1 = 0 %then put sym(' ') %c
// 483 ! %else put sym(flagsym(i))
// 484 ! %repeat
// 485 ! put sym('|')
// 486 ! i = d_type-nulltype
// 487 ! %if 0 <= i <= 7 %then printstring(typetext(i)) %c
// 488 ! %else putsym(dsym(d_type>>13)) %and pdec(d_type&puretype)
// 489 ! mark at(39)
// 490 ! put sym(' '); pdec(d_extra); mark at(47)
// 491 ! put sym(' '); pdec(d_val); mark at(56)
// 492 ! newline; outcol = 0
// 493 ! from = from+1
// 494 ! %repeat %until from = dlim
// 495 ! print string(" +----------------------------------------------+")
// 496 ! newline; outcol = 0
// 497 !%end
// 498 !
// 499 !%routine show exp(%integer from,to)
// 500 !![out of date]
// 501 !%conststring(7)%array acttext(0:63) =
// 502 ! "?0", "?1", "ADD", "SUB",
// 503 ! "?4", "LOGAND", "LOGOR", "LOGXOR",
// 504 ! "NEGATE", "LOGNOT", "LSHIFT", "RSHIFT",
// 505 ! "IABS", "FABS", "?14", "?15",
// 506 ! "MULT", "IDIV", "IPOWER", "FPLUS",
// 507 ! "FMINUS", "FMULT", "FDIV", "FPOWER",
// 508 ! "FNEGATE", "FLOAT", "CONCAT", "BOOLNOT",
// 509 ! "BOOLAND", "BOOLOR", "MEMBER", "MODULO",
// 510 ! "RECREF", "AREF", "INDRECT", "SWJUMP",
// 511 ! "FCALL", "MCALL", "?38", "RCALL",
// 512 ! "?40", "ASSIGN", "JAMASS", "PLUSASS",
// 513 ! "COMPARE", "JUMP", "LABEL", "ADECL",
// 514 ! "?48", "?49", "?50", "?51",
// 515 ! "?52", "?53", "?54", "?55",
// 516 ! "?56", "?57", "?58", "?59",
// 517 ! "?60", "?61", "?62", "?63"
// 518 !%routine put operand(%integer i)
// 519 ! %if dictmin <= i <= dictmax %then put ident(dict(i)_text) %else pdec(i)
// 520 !%end
// 521 ! %return %if from >= np
// 522 ! newline %and outcol = 0 %if outcol # 0
// 523 ! print string(" __action_____first_______second____")
// 524 ! newline; outcol = 0
// 525 ! %cycle
// 526 ! spaces(5); outcol = 5
// 527 ! pdec(from); mark at(10)
// 528 ! put sym(' '); printstring(acttext(exp(from)_act&63))
// 529 ! mark at(20); put sym(' ')
// 530 ! put operand(exp(from)_x)
// 531 ! mark at(32); put sym(' ')
// 532 ! put operand(exp(from)_y)
// 533 ! mark at(44)
// 534 ! newline; outcol = 0
// 535 ! from = from+1
// 536 ! %if from = to %start
// 537 ! from = explo
// 538 ! %exit %if from >= oldexplo
// 539 ! printstring(" |---------------------------------|")
// 540 ! newline; outcol = 0
// 541 ! %finish
// 542 ! %repeat %until from >= oldexplo
// 543 ! oldexplo = explo
// 544 ! print string(" +---------------------------------+")
// 545 ! newline; outcol = 0
// 546 !%end
// 547 !
// 548 !! Fault reporting
// 549 !
// 550 %routine REPORT(%integer n,joker)
void REPORT(int N, int JOKER) {
// 551 %integer mark,start,errline,k,editfp
int MARK;
int START;
int ERRLINE;
int K;
int EDITFP;
// 552 %routine PRINT IDENT(%integer x)
void PRINTIDENT(int X) {
// 553 put sym('"')
PUTSYM(34);
// 554 print string(string(dict(x)_text+charbase))
PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = *_imp_STRING(DICT[X - 2001].TEXT + CHARBASE) /*q*/;
(_imp_string255 *)&tmp;
})
);
// 555 put sym('"')
PUTSYM(34);
// 556 %end
return;
} /* end of PRINTIDENT */
// 557 %routine PRINT TEXT(%integer x,stream)
void PRINTTEXT(int X, int STREAM) {
// 558 %constinteger esc=27
// 559 %integer k,p
int K;
int P;
// 560 %switch s(0:errmax)
int S_index;
int S_line;
char *S_file;
static const void *S[47] = {
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing};
// 561 put sym(mark)
PUTSYM(MARK);
// 562 write(line,4)
WRITE(LINE, 4);
// 563 put sym(modesym); put sym(' ')
PUTSYM(MODESYM);
PUTSYM(32);
// 564 ->s(n&63)
S_line = __LINE__;
S_file = __FILE__;
S_index = N & 63;
goto case_S_dispatch;
// 565 s(formerr): printstring("Faulty form"); -> print
case_S_0:;
PRINTSTRING(_imp_str_literal("Faulty form"));
goto U_1000;
// 566 s(atomerr): printstring("Unknown atom"); -> print
case_S_1:;
PRINTSTRING(_imp_str_literal("Unknown atom"));
goto U_1000;
// 567 s(namerr): printstring("Unknown name"); -> print
case_S_2:;
PRINTSTRING(_imp_str_literal("Unknown name"));
goto U_1000;
// 568 s(caterr): printstring("Unsuitable"); -> print
case_S_3:;
PRINTSTRING(_imp_str_literal("Unsuitable"));
goto U_1000;
// 569 s(sizerr): printstring("Size"); -> print
case_S_4:;
PRINTSTRING(_imp_str_literal("Size"));
goto U_1000;
// 570 s(typerr): printstring("Wrong type"); -> print
case_S_6:;
PRINTSTRING(_imp_str_literal("Wrong type"));
goto U_1000;
// 571 s(boundserr): printstring("Inside out"); -> print
case_S_14:;
PRINTSTRING(_imp_str_literal("Inside out"));
goto U_1000;
// 572 s(unending): printstring("Endless loop"); -> print
case_S_37:;
PRINTSTRING(_imp_str_literal("Endless loop"));
goto U_1000;
// 573 s(indexerr): printstring("Index"); -> print
case_S_24:;
PRINTSTRING(_imp_str_literal("Index"));
goto U_1000;
// 574 s(accesserr): printstring("Not accessible");-> print
case_S_15:;
PRINTSTRING(_imp_str_literal("Not accessible"));
goto U_1000;
// 575 s(notinloop): printstring("Not in loop"); -> print
case_S_16:;
PRINTSTRING(_imp_str_literal("Not in loop"));
goto U_1000;
// 576 s(notinrout): printstring("Not in routine");-> print
case_S_17:;
PRINTSTRING(_imp_str_literal("Not in routine"));
goto U_1000;
// 577 s(notinfun): printstring("Not in fn/map"); -> print
case_S_18:;
PRINTSTRING(_imp_str_literal("Not in fn/map"));
goto U_1000;
// 578 s(notinpred): printstring("Not in pred"); -> print
case_S_19:;
PRINTSTRING(_imp_str_literal("Not in pred"));
goto U_1000;
// 579 s(plexerr): printstring("Too complex!"); -> print
case_S_20:;
PRINTSTRING(_imp_str_literal("Too complex!"));
goto U_1000;
// 580 s(duperr): printstring("Duplicate"); -> print
case_S_7:;
PRINTSTRING(_imp_str_literal("Duplicate"));
goto U_1000;
// 581 s(ordererr): printstring("Out of order"); -> print
case_S_10:;
PRINTSTRING(_imp_str_literal("Out of order"));
goto U_1000;
// 582 s(matcherr): printstring("Mismatch"); -> print
case_S_11:;
PRINTSTRING(_imp_str_literal("Mismatch"));
goto U_1000;
// 583 s(rangerr): printstring("Out of range"); -> print
case_S_12:;
PRINTSTRING(_imp_str_literal("Out of range"));
goto U_1000;
// 584 s(nonliteral):printstring("Not literal"); -> print
case_S_13:;
PRINTSTRING(_imp_str_literal("Not literal"));
goto U_1000;
// 585 s(nonstand): printstring("Nonstandard"); -> print
case_S_22:;
PRINTSTRING(_imp_str_literal("Nonstandard"));
goto U_1000;
// 586 s(notin): printstring("Not in yet"); -> print
case_S_23:;
PRINTSTRING(_imp_str_literal("Not in yet"));
goto U_1000;
// 587 s(moperr): printstring("Faulty operand");-> print
case_S_27:;
PRINTSTRING(_imp_str_literal("Faulty operand"));
goto U_1000;
// 588 s(nocycle): printstring("Missing %CYCLE"); -> print
case_S_9:;
PRINTSTRING(_imp_str_literal("Missing %CYCLE"));
goto U_1000;
// 589 s(nostart): printstring("Missing %START"); -> print
case_S_8:;
PRINTSTRING(_imp_str_literal("Missing %START"));
goto U_1000;
// 590 s(noif): printstring("Missing %IF"); -> print
case_S_21:;
PRINTSTRING(_imp_str_literal("Missing %IF"));
goto U_1000;
// 591 s(noterm): printstring("';' missing"); -> print
case_S_28:;
PRINTSTRING(_imp_str_literal("';' missing"));
goto U_1000;
// 592 s(nonstarter):printstring("Non-starter"); -> print
case_S_29:;
PRINTSTRING(_imp_str_literal("Non-starter"));
goto U_1000;
// 593 s(nonvar): printstring("Not variable"); -> print
case_S_30:;
PRINTSTRING(_imp_str_literal("Not variable"));
goto U_1000;
// 594 s(nonref): printstring("Not reference"); -> print
case_S_31:;
PRINTSTRING(_imp_str_literal("Not reference"));
goto U_1000;
// 595 s(noparm): printstring("No parameters"); -> print
case_S_35:;
PRINTSTRING(_imp_str_literal("No parameters"));
goto U_1000;
// 596 s(toofew): printstring("Too few"); -> print
case_S_33:;
PRINTSTRING(_imp_str_literal("Too few"));
goto U_1000;
// 597 s(unwanted): printstring("Unwanted"); -> print
case_S_34:;
PRINTSTRING(_imp_str_literal("Unwanted"));
goto U_1000;
// 598 s(toomany): printstring("Too many"); -> print
case_S_32:;
PRINTSTRING(_imp_str_literal("Too many"));
goto U_1000;
// 599 s(selfref): printstring("Self-reference"); -> print
case_S_38:;
PRINTSTRING(_imp_str_literal("Self-reference"));
goto U_1000;
// 600 s(nobegin): printstring("Extra %END"); -> print
case_S_41:;
PRINTSTRING(_imp_str_literal("Extra %END"));
goto U_1000;
// 601 print:
U_1000:;
// 602 spaces(21-length(rep))
SPACES(21 - *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &REP));
// 603 p = start
P = START;
// 604 %if p < faultp-50 %then p = faultp-47 %and printstring("...") %c
if (P >= FAULTP - 50) goto L_000A;
P = FAULTP - 47;
PRINTSTRING(_imp_str_literal("..."));
goto L_000B;
L_000A:;
PUTSYM(32);
L_000B:;
// 605+ %else put sym(' ')
// 606 %cycle
L_000C:;
// 607 k = byteinteger(p); p = p+1
K = *_imp_BYTEINTEGER(P);
P = P + 1;
// 608 %if p = faultp %start
if (P != FAULTP) goto L_000D;
// 609 !$IF VAX
// 610 put sym(esc) %and put sym('F') %if stream = 0
if (STREAM != 0) goto L_000E;
PUTSYM(27);
PUTSYM(70);
L_000E:;
// 611 !$FINISH
// 612 put sym('~')
PUTSYM(126);
// 613 !$IF VAX
// 614 put sym(esc) %and put sym('G') %if stream = 0
if (STREAM != 0) goto L_000F;
PUTSYM(27);
PUTSYM(71);
L_000F:;
// 615 !$FINISH
// 616 %finish
L_000D:;
// 617 %exit %if k = nl
if (K != 10) goto L_0010;
goto L_0011;
L_0010:;
// 618 %if ' ' <= k <= '~' %then put sym(k) %c
{
// Double-sided test on K (Part I)
int tmp;
if (32 > (tmp = K)) goto L_0012;
// Double-sided test on K (Part II)
if (tmp > 126) goto L_0012;
}
PUTSYM(K);
goto L_0013;
L_0012:;
PUTSYM(91);
WRITE(K, -1);
PUTSYM(93);
L_0013:;
// 619+ %else put sym('[') %and write(k,-1) %and put sym(']')
// 620 %repeat
goto L_000C;
L_0011:;
// 621 %return
return;
// 622 s(noend): printstring("%END"); ->mend
case_S_40:;
PRINTSTRING(_imp_str_literal("%END"));
goto U_1001;
// 623 s(noresult): printstring("Result"); ->mend
case_S_46:;
PRINTSTRING(_imp_str_literal("Result"));
goto U_1001;
// 624 s(nofinish): printstring("%FINISH"); ->mend0
case_S_43:;
PRINTSTRING(_imp_str_literal("%FINISH"));
goto U_1002;
// 625 s(norepeat): printstring("%REPEAT")
case_S_44:;
PRINTSTRING(_imp_str_literal("%REPEAT"));
// 626 mend0: printstring(" etc") %if curlab > lab1+2
U_1002:;
if (CURLAB <= 3235 + 2) goto L_0014;
PRINTSTRING(_imp_str_literal(" etc"));
L_0014:;
// 627 -> mend
goto U_1001;
// 628 s(idmissing):
case_S_42:;
// 629 %cycle
L_0015:;
// 630 ! newline %and spaces(8) %and outcol = 8 %if outcol > 50
// 631 put sym(' ')
PUTSYM(32);
// 632 print ident(x)
PRINTIDENT(X);
// 633 print string("(?)") %if dict(x)_flags&spec = 0; !switch
if (DICT[X - 2001].FLAGS & 16 != 0) goto L_0016;
PRINTSTRING(_imp_str_literal("(?)"));
L_0016:;
// 634 x = dict(x)_val
X = DICT[X - 2001].VAL;
// 635 %repeat %until x = 0
if (X == 0) goto L_0017;
goto L_0015;
L_0017:;
// 636 mend:
U_1001:;
// 637 printstring(" missing")
PRINTSTRING(_imp_str_literal(" missing"));
// 638 %if c_type # 0 %start
if (C.TYPE == 0) goto L_0018;
// 639 print string(" at END of ")
PRINTSTRING(_imp_str_literal(" at END of "));
// 640 print ident(c_pidpos)
PRINTIDENT(C.PIDPOS);
// 641 %finish %else n = 0
goto L_0019;
L_0018:;
N = 0;
L_0019:;
// 642 %return
return;
// 643 s(counterr):
case_S_45:;
// 644 %if elements < 0 %start
if (ELEMENTS >= 0) goto L_001A;
// 645 write(-elements,0); printstring(" extra")
WRITE(-ELEMENTS, 0);
PRINTSTRING(_imp_str_literal(" extra"));
// 646 %finish %else %start
goto L_001B;
L_001A:;
// 647 write(elements,0); printstring(" missing")
WRITE(ELEMENTS, 0);
PRINTSTRING(_imp_str_literal(" missing"));
// 648 %finish
L_001B:;
// 649 printstring(" value(s) for ")
PRINTSTRING(_imp_str_literal(" value(s) for "));
// 650 print ident(x)
PRINTIDENT(X);
// 651 %return
return;
// 652 s(asserr):
case_S_5:;
// 653 print ident(x)
PRINTIDENT(X);
// 654 print string(" void")
PRINTSTRING(_imp_str_literal(" void"));
// 655 %end
return;
case_S_dispatch:
if (S_index < 0 || S_index > 46)
_imp_signalf(6, 3, S_index, "->S(%d) out of bounds at %s line %d", S_index, S_file, S_line);
goto *S[S_index - 0];
case_S_missing:
_imp_signalf(8, 2, S_index, "switch jump to undefined label S(%d): at %s line %d", S_index, S_file, S_line);
} /* end of PRINTTEXT */
// 656
// 657 !Warning or error
// 658 mark = '?'
MARK = 63;
// 659 %if n&warn = 0 %start
if (N & 128 != 0) goto L_001C;
// 660 mark = '*'
MARK = 42;
// 661 c_faults = c_faults+1; faults = faults+1
C.FAULTS = C.FAULTS + 1;
FAULTS = FAULTS + 1;
// 662 %finish
L_001C:;
// 663 faultnum = 0; c_access = -1
FAULTNUM = 0;
C.ACCESS = -1;
// 664 !Ignore uncorrected earlier error
// 665 %return %if main_start1 <= fp < change
{
// Double-sided test on FP (Part I)
int tmp;
if (MAIN->START1 > (tmp = FP)) goto L_001D;
// Double-sided test on FP (Part II)
if (tmp >= CHANGE) goto L_001D;
}
return;
L_001D:;
// 666 !Track back if before current line
// 667 start = linestart; errline = line
START = LINESTART;
ERRLINE = LINE;
// 668 %if n&point = 0 %then faultp = 0 %else %start
if (N & 64 != 0) goto L_001E;
FAULTP = 0;
goto L_001F;
L_001E:;
// 669 faultp = joker %if joker > 0
if (JOKER <= 0) goto L_0020;
FAULTP = JOKER;
L_0020:;
// 670 %while faultp <= start %cycle
L_0021:;
if (FAULTP > START) goto L_0022;
// 671 start = start-1
START = START - 1;
// 672 errline = errline-1 %if byteinteger(start) = nl
if (*_imp_BYTEINTEGER(START) != 10) goto L_0023;
ERRLINE = ERRLINE - 1;
L_0023:;
// 673 %repeat
goto L_0021;
L_0022:;
// 674 start = start-1 %while start # curstart %and byteinteger(start-1) # nl
L_0024:;
if (START == CURSTART) goto L_0025;
if (*_imp_BYTEINTEGER(START - 1) == 10) goto L_0025;
START = START - 1;
goto L_0024;
L_0025:;
// 675 %finish
L_001F:;
// 676 editfp = start; editfp = faultp-1 %if faultp > start
EDITFP = START;
if (FAULTP <= START) goto L_0026;
EDITFP = FAULTP - 1;
L_0026:;
// 677 editfp = mainfp %if curlim = extra_lim2
if (CURLIM != EXTRA.LIM2) goto L_0027;
EDITFP = MAINFP;
L_0027:;
// 678 start = start+1 %while byteinteger(start) = ' '
L_0028:;
if (*_imp_BYTEINTEGER(START) != 32) goto L_0029;
START = START + 1;
goto L_0028;
L_0029:;
// 679 print text(joker,0)
PRINTTEXT(JOKER, 0);
// 680 newline %and %return %if n&warn # 0 %or nonstop # 0
if (N & 128 != 0) goto L_002A;
if (NONSTOP == 0) goto L_002B;
L_002A:;
NEWLINE();
return;
L_002B:;
// 681 main_fp = editfp; main_line = line
MAIN->FP = EDITFP;
MAIN->LINE = LINE;
// 682 %if change # 0 %then main_change = 16_7FFFFFFE
if (CHANGE == 0) goto L_002C;
MAIN->CHANGE = 2147483646;
L_002C:;
// 683 edi(main,null,rep)
EDI(MAIN, /*?*/ &NULL,
*({
__typeof__(_imp_string255) tmp = REP /*q*/;
(_imp_string255 *)&tmp;
})
);
// 684 rep = ""
_imp_strncpy(/*?*/ &REP, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 685 nonstop = 1 %if main_flag = 'I'
if (MAIN->FLAG != 73) goto L_002D;
NONSTOP = 1;
L_002D:;
// 686 %stop %if main_flag < 0
if (MAIN->FLAG >= 0) goto L_002E;
_imp_stop(0);
L_002E:;
// 687 %signal 12 %if main_change < 16_7FFFFFFE {change made}
if (MAIN->CHANGE >= 2147483646) goto L_002F;
_imp_signal(12, 0, 0, "");
L_002F:;
// 688 %end;
return;
} /* end of REPORT */
// ?K unused
// 689 ; !report
// 689
// 690 %routine CROAK(%string(255) s)
void CROAK(_imp_string255 S) {
// 691 print string("** ".s.". Checking abandoned at line ")
PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &*({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("** "), (_imp_string *)/*?*/ &S);
(_imp_string255 *)&tmp;
}),
(_imp_string *)/*?*/ _imp_str_literal_ptr(". Checking abandoned at line "));
(_imp_string255 *)&tmp;
}) /*q*/;
(_imp_string255 *)&tmp;
})
);
// 692 write(line,0); newline
WRITE(LINE, 0);
NEWLINE();
// 693 nonstop = -999
NONSTOP = -999;
// 694 %signal 12
_imp_signal(12, 0, 0, "");
// 695 %end
return;
} /* end of CROAK */
// 696
// 697 %routine FAULT(%integer n)
void FAULT(int N) {
// 698 !Note fault number and position of (earliest) fault
// 699 ! for subsequent reporting (warnings and weak errors)
// 700 faultnum = n %and faultp = atomp %if faultnum = 0
if (FAULTNUM != 0) goto L_0030;
FAULTNUM = N;
FAULTP = ATOMP;
L_0030:;
// 701 %end
return;
} /* end of FAULT */
// 702 %routine EXPFAULT(%integer n)
void EXPFAULT(int N) {
// 703 faultnum = n!point %and faultp = expp %if faultnum = 0 %or expp < faultp
if (FAULTNUM == 0) goto L_0031;
if (EXPP >= FAULTP) goto L_0032;
L_0031:;
FAULTNUM = N | 64;
FAULTP = EXPP;
L_0032:;
// 704 %end
return;
} /* end of EXPFAULT */
// 705
// 706 %constinteger pred=1, uparr=1<<1, nocomma=1<<2, overload=1<<3,
// 707+ ranges=1<<4, nolength=1<<5, initass=1<<6, kgoto=1<<7,
// 708+ hyphen=1<<8, naming=1<<9, klabel=1<<10, ibmhex=1<<11,
// 709+ oldcycle=1<<12, loop2=1<<13
// 710 %routine NONSTANDARD(%integer case)
void NONSTANDARD(int CASE) {
// 711 %owninteger hadit=0
static int HADIT = 0;
// 712 %if control&nonsbit # 0 %and case&hadit = 0 %start
if (CONTROL & 65536 == 0) goto L_0033;
if (CASE & HADIT != 0) goto L_0033;
// 713 hadit = hadit+case
HADIT = HADIT + CASE;
// 714 fault(nonstand+point+warn)
FAULT(22 + 64 + 128);
// 715 %finish
L_0033:;
// 716 %end
return;
} /* end of NONSTANDARD */
// 717
// 718 %routine ERROR(%integer case)
void ERROR(int CASE) {
// 719 report(case,atomp)
REPORT(CASE, ATOMP);
// 720 %signal 14
_imp_signal(14, 0, 0, "");
// 721 %end
return;
} /* end of ERROR */
// 722
// 723 %routine NAME ERROR
void NAMEERROR(void) {
// 724 !check if the culprit has occurred before
// 725 !and, if not, add it to the pool of unknowns stored at the
// 726 !far end of the dictionary.
// 727 %while item < 0 %c
L_0034:;
if (ITEM >= 0) goto L_0035;
if (_imp_strcmp((_imp_string *)_imp_STRING(DICT[-ITEM - 2001].TEXT + CHARBASE),
(_imp_string *)_imp_STRING(CHARLIM)) == 0)
goto L_0035;
// 728+ %and string(dict(-item)_text+charbase) # string(charlim) %cycle
// 729 item = dict(-item)_link
ITEM = DICT[-ITEM - 2001].LINK;
// 730 %repeat
goto L_0034;
L_0035:;
// 731 %if item >= 0 %start; !first time
if (ITEM < 0) goto L_0036;
// 732 report(namerr+point,atomp)
REPORT(2 + 64, ATOMP);
// 733 %if charmin-newlen-80 >= charlim %start
if (CHARMIN - NEWLEN - 80 < CHARLIM) goto L_0037;
// 734 dmin = dmin-1
DMIN = DMIN - 1;
// 735 charmin = charmin-newlen-1
CHARMIN = CHARMIN - NEWLEN - 1;
// 736 string(charmin) = string(charlim)
*_imp_STRING(CHARMIN) = *_imp_STRING(CHARLIM);
// 737 dict(dmin)_text = charmin-charbase
DICT[DMIN - 2001].TEXT = CHARMIN - CHARBASE;
// 738 head == dict(head)_link %while head > 0; !find last link
L_0038:;
if (*HEAD <= 0) goto L_0039;
HEAD = (int *)/*?*/ &DICT[*HEAD - 2001].LINK;
goto L_0038;
L_0039:;
// 739 dict(dmin)_link = head; head = -dmin
DICT[DMIN - 2001].LINK = *HEAD;
*HEAD = -DMIN;
// 740 %finish
L_0037:;
// 741 %finish
L_0036:;
// 742 %signal 14
_imp_signal(14, 0, 0, "");
// 743 %end
return;
} /* end of NAMEERROR */
// 744
// 745 %routine SYNTAX ERROR
void SYNTAXERROR(void) {
// 746 %integer e
int E;
// 747 e = formerr+point; e = atomerr+point %if atom = dud
E = 0 + 64;
if (ATOM != 63) goto L_003A;
E = 1 + 64;
L_003A:;
// 748 report(e,atomp)
REPORT(E, ATOMP);
// 749 %signal 14
_imp_signal(14, 0, 0, "");
// 750 %end
return;
} /* end of SYNTAXERROR */
// 751
// 752 !!!!!!!!!!!!!!!!!!!! CELL CONSTRUCTORS !!!!!!!!!!!!!!!!!!!
// 753 !
// 754 !%integerfn litref(%integer v)
// 755 !%integer i
// 756 ! %result = v %if smallmin <= v <= smallmax
// 757 ! litstore(litpos) = v
// 758 ! i = litmin-1
// 759 ! i = i+1 %until litstore(i) = v
// 760 ! %if i = litpos %start
// 761 ! litpos = litpos+1
// 762 ! croak("Too many literals") %if litpos >= slitpos
// 763 ! %finish
// 764 ! %result = i
// 765 !%end
// 766
// 767 !%integerfn litval(%integer v)
// 768 ! %result = v %if v <= smallmax
// 769 ! %result = litstore(v)
// 770 !%end
// 771
// 772 %integerfn floated(%integer item)
int FLOATED(int ITEM) {
// 773 %result = 0 %if item = 0
if (ITEM != 0) goto L_003B;
return 0;
L_003B:;
// 774 %result = explo;!expref(float,item,0)
return EXPLO;
// 775 %end
} /* end of FLOATED */
// 776
// 777 !%predicate is short (%integer v)
// 778 ! %true %if -32768 <= v <= 32767
// 779 ! %false
// 780 !%end
// 781
// 782 !%predicate is mite (%integer v)
// 783 ! %true %if -128 <= v <= 127
// 784 ! %false
// 785 !%end
// 786
// 787 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 788 !!!!!!!!!!!!!!!!! CODE GENERATION !!!!!!!!!!!!!!!!!!!!!!!!
// 789 !
// 790 %routine forget
void FORGET(void) {
// 791 %end
return;
} /* end of FORGET */
// 792 %routine forget all
void FORGETALL(void) {
// 793 %integer i,j
int I;
int J;
// 794 litpos = litmin; explo = expmax+1; oldexplo = explo
LITPOS = 1001;
EXPLO = 3554 + 1;
OLDEXPLO = EXPLO;
// 795 %end
return;
} /* end of FORGETALL */
// ?J unused
// ?I unused
// 796 !
// 797 %routine set label(%integer b)
void SETLABEL(int B) {
// 798 %end;
return;
} /* end of SETLABEL */
// ?B unused
// 799 ; !set label
void SETUSERLABEL(int DPOS) {
// 799 %routine set user label(%integer dpos)
// 800 %end
return;
} /* end of SETUSERLABEL */
// ?DPOS unused
// 801 %routine compile(%integer from,to)
void COMPILE(int FROM, int TO) {
// 802 ! show exp(from,to) %if control&explist # 0
// 803 np = np0
NP = 3255;
// 804 %end
return;
} /* end of COMPILE */
// ?TO unused
// ?FROM unused
// 805 %routine compile entry
void COMPILEENTRY(void) {
// 806 %end
return;
} /* end of COMPILEENTRY */
// 807 %routine compile end
void COMPILEEND(void) {
// 808 %end; !compile end
return;
} /* end of COMPILEEND */
// 809 !!!!!!!!!!!!!!! end of Code Generation !!!!!!!!!!!!!!!!!!!!!!!
// 810 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 811
// 812 %routine PUT3(%integer act,x,y)
void PUT3(int ACT, int X, int Y) {
// 813 ! exp(np)_act = act; exp(np)_x = x; exp(np)_y = y
// 814 ! np = np+1
// 815 %end
return;
} /* end of PUT3 */
// ?Y unused
// ?X unused
// ?ACT unused
// 816 !
// 817 %routine PUT2(%integer act,x)
void PUT2(int ACT, int X) {
// 818 %end
return;
} /* end of PUT2 */
// ?X unused
// ?ACT unused
// 819 !
// 820 %integerfn TEMPVAR
int TEMPVAR(void) {
// 821 %result = dlim
return DLIM;
// 822 %end
} /* end of TEMPVAR */
// 823
// 824 %routine OPEN BLOCK(%integer pidpos)
void OPENBLOCK(int PIDPOS) {
// 825 forget; !a bit extreme
FORGET();
// 826 croak("Too many levels") %if level = maxlevel
if (LEVEL != 16) goto L_003C;
CROAK(_imp_str_literal("Too many levels"));
L_003C:;
// 827 hold(level) = c; level = level+1
HOLD[LEVEL] = C;
LEVEL = LEVEL + 1;
// 828 c = 0
C = (struct BLOCKINF){0};
// 829 starts = 0; cycles = 0
STARTS = 0;
CYCLES = 0;
// 830 curlab = lab1; looplab = 0
CURLAB = 3235;
LOOPLAB = 0;
// 831 forget all
FORGETALL();
// 832 c_flags = 0; c_type = d_type
C.FLAGS = 0;
C.TYPE = D.TYPE;
// 833 c_pidpos = pidpos
C.PIDPOS = PIDPOS;
// 834 c_localdpos = dlim; c_parlim = dlim; c_localtext = charlim
C.LOCALDPOS = DLIM;
C.PARLIM = DLIM;
C.LOCALTEXT = CHARLIM;
// 835 c_localpc = pc; c_localspc = spc
C.LOCALPC = PC;
C.LOCALSPC = SPC;
// 836 c_access = 1
C.ACCESS = 1;
// 837 %end; !OPEN BLOCK
return;
} /* end of OPENBLOCK */
// 838
// 839 %routine CLOSE BLOCK
void CLOSEBLOCK(void) {
// 840 %integer i
int I;
// 841 %integer miss,dpos
int MISS;
int DPOS;
// 842 %integername p
int *P;
// 843 %record(identinfo)%name dp
struct IDENTINFO *DP;
// 844 !Check identifier usage
// 845 miss = 0; p == miss
MISS = 0;
P = (int *)/*?*/ &MISS;
// 846 dpos = c_localdpos
DPOS = C.LOCALDPOS;
// 847 %while dpos # dlim %cycle
L_003D:;
if (DPOS == DLIM) goto L_003E;
// 848 dp == dict(dpos)
DP = (struct IDENTINFO *)/*?*/ &DICT[DPOS - 2001];
// 849 ! %if (dp_xtype = ptrxtype %and dp_type = dpos)
// 850 %if dp_flags&(proc+lab) # 0 %and dp_flags&(ext+spec) = spec %start
if (DP->FLAGS & 4 + 2 == 0) goto L_003F;
if (DP->FLAGS & 32 + 16 != 16) goto L_003F;
// 851 p = dpos; p == dp_val; p = 0
*P = DPOS;
P = (int *)/*?*/ &DP->VAL;
*P = 0;
// 852 %finish
L_003F:;
// 853 ! %if hashindex(dp_spare) = dpos %start
// 854 ! dp_link = dict(dp_link)_link %while dp_link >= c_localdpos
// 855 ! hashindex(dp_spare) = dp_link
// 856 ! %finish
// 857 ! dpos = dp_xtype %if dp_type = 0 %and dp_xtype > dpos; !skip fields
// 858 dpos = dpos+1
DPOS = DPOS + 1;
// 859 %repeat
goto L_003D;
L_003E:;
// 860 report(idmissing,miss) %if miss # 0
if (MISS == 0) goto L_0040;
REPORT(42, MISS);
L_0040:;
// 861 compile end
COMPILEEND();
// 862 pc = c_localpc; spc = c_localspc
PC = C.LOCALPC;
SPC = C.LOCALSPC;
// 863 dlim = c_parlim; charlim = c_localtext
DLIM = C.PARLIM;
CHARLIM = C.LOCALTEXT;
// 864 %for i = 0,1,255 %cycle
// %for I = 0, 1, 255 %cycle
{
I = -1;
L_0041:
if (I == 255) goto L_0042;
I += 1;
// 865 hashindex(i) = dict(hashindex(i))_link %while hashindex(i) >= c_localdpos
L_0044:;
if (HASHINDEX[I] < C.LOCALDPOS) goto L_0045;
HASHINDEX[I] = DICT[HASHINDEX[I] - 2001].LINK;
goto L_0044;
L_0045:;
// 866 %repeat
goto L_0041;
}
L_0042:;
// 867 level = level-1; c = hold(level)
LEVEL = LEVEL - 1;
C = HOLD[LEVEL];
// 868 starts = 0; cycles = 0
STARTS = 0;
CYCLES = 0;
// 869 %end; !CLOSE BLOCK
return;
} /* end of CLOSEBLOCK */
// 870
// 871 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 872 !!!!!!!!!!!!!!!!!!!! Source input !!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 873 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 874 !
// 875 %routine SWITCH INPUT
void SWITCHINPUT(void) {
// 876 ! croak("Input ended") %if fp = main_lim2
// 877 %signal 12 %if fp = main_lim2
if (FP != MAIN->LIM2) goto L_0046;
_imp_signal(12, 0, 0, "");
L_0046:;
// 878 %if nonstop < 0 %start; !perming
if (NONSTOP >= 0) goto L_0047;
// 879 nonstop = nonstop+3; permlim = dlim
NONSTOP = NONSTOP + 3;
PERMLIM = DLIM;
// 880 c_localdpos = dlim; c_parlim = dlim
C.LOCALDPOS = DLIM;
C.PARLIM = DLIM;
// 881 statements = 0
STATEMENTS = 0;
// 882 %finish
L_0047:;
// 883 %if fp # main_lim1 %start
if (FP == MAIN->LIM1) goto L_0048;
// 884 nonstop = nonstop-1
NONSTOP = NONSTOP - 1;
// 885 fp = mainfp; line = mainline
FP = MAINFP;
LINE = MAINLINE;
// 886 curstart = main_start1; curlim = main_lim1
CURSTART = MAIN->START1;
CURLIM = MAIN->LIM1;
// 887 %finish %else fp = main_start2
goto L_0049;
L_0048:;
FP = MAIN->START2;
L_0049:;
// 888 %if main_start2 <= fp <= main_lim2 %start
{
// Double-sided test on FP (Part I)
int tmp;
if (MAIN->START2 > (tmp = FP)) goto L_004A;
// Double-sided test on FP (Part II)
if (tmp > MAIN->LIM2) goto L_004A;
}
// 889 curstart = main_start2; curlim = main_lim2
CURSTART = MAIN->START2;
CURLIM = MAIN->LIM2;
// 890 %finish
L_004A:;
// 891 modesym = ' '; sym = nl
MODESYM = 32;
SYM = 10;
// 892 %end
return;
} /* end of SWITCHINPUT */
// 893
// 894 %routine READ LINE
void READLINE(void) {
// 895 ! Read (or otherwise make available) the next source line
// 896 ! Skip remnant of previous line if SYM # NL *NB*
// 897 ! Set LINESTART to point to start of new line
// 898 report(faultnum,faultp) %if faultnum # 0
if (FAULTNUM == 0) goto L_004B;
REPORT(FAULTNUM, FAULTP);
L_004B:;
// 899 %while sym # nl %cycle; !Skip remnant
L_004C:;
if (SYM == 10) goto L_004D;
// 900 sym = byteinteger(fp); fp = fp+1
SYM = *_imp_BYTEINTEGER(FP);
FP = FP + 1;
// 901 %repeat
goto L_004C;
L_004D:;
// 902 %while fp = curlim %cycle
L_004E:;
if (FP != CURLIM) goto L_004F;
// 903 switch input
SWITCHINPUT();
// 904 %repeat
goto L_004E;
L_004F:;
// 905 line = line+1; linestart = fp
LINE = LINE + 1;
LINESTART = FP;
// 906 sym = 0
SYM = 0;
// 907 %end; !READ LINE
return;
} /* end of READLINE */
// 908 !
// 909 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 910 !!!!!!!!!!!!!!!!!!!! Lexical processing !!!!!!!!!!!!!!!!!!!!!!
// 911 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 912
// 913 %owninteger percent=0, subatom=0
static int PERCENT = 0;
static int SUBATOM = 0;
// 914 !
// 915 !Aliases:
// 916 %constinteger ARROW=resolve
// 917 %constinteger EXCLAM=logor, EXCLAM2=logxor, DOT=concat
// 918 %constinteger STAR=mult, SLASH=fdiv, SLASH2=idiv,
// 919+ AMPERSAND=logand
// 920 %constinteger BACKSLASH=fpower, BACKSLASH2=ipower,
// 921+ UPARROW=fpower, UPARROW2=ipower,
// 922+ TILDE=lognot
// 923 %constinteger LEFT=aref, UNDERLINE=recref, LEFTBRACKET=106
// 924
// 925 %constinteger SIMPLE=104, MAJOR=plus,
// 926+ SCOND=equals, COND=keyand
// 927 !
// 928 ! Type compatibility vectors:
// 929 %constinteger RECOK=1<<0, ARROK=1<<1, STRINGOK=1<<2,
// 930+ REALOK=1<<3, INTOK=1<<4, CHAROK=1<<5,
// 931+ BOOLOK=1<<6, ENUMOK=1<<7, SETOK=1<<8
// 932 %constinteger ZNOP=1<<9, REFONLY=1<<10, VARONLY=1<<11
// 933 %constinteger ARITHOK=intok+realok,
// 934+ ORDOK=intok+charok+boolok+enumok,
// 935+ ANY=realok+ordok+stringok+arrok+recok
// 936 !
// 937 %constintegerarray opbits(64:atommax) =
const int OPBITS[44] = {64, 64, 0, 0, 0, 0, 255, 255, 508, 252, 508, 252, 255, 255, 0,
4, 792, 792, 528, 528, 4, 0, 0, 0, 24, 24, 16, 16, 0, 0,
0, 0, 24, 16, 0, 0, 528, 528, 16, 0, 2, 1, 0, 0};
// 938+ {BOOLAND} boolok,
// 939+ {BOOLOR} boolok,
// 940+ 0, 0, 0, 0,
// 941+ {EQUALS} any,
// 942+ {NOTEQ} any,
// 943+ {LESSEQ} setok+stringok+ordok+realok,
// 944+ {LESS} stringok+ordok+realok,
// 945+ {GREATEQ} setok+stringok+ordok+realok,
// 946+ {GREATER} stringok+ordok+realok,
// 947+ any,
// 948+ any,
// 949+ 0,
// 950+ {RESOLVE} stringok,
// 951+ {PLUS} znop+setok+arithok,
// 952+ {MINUS} znop+setok+arithok,
// 953+ {LOGOR} znop+intok,
// 954+ {LOGXOR} znop+intok,
// 955+ {CONCAT} stringok,
// 956+ 0, 0, 0,
// 957+ {MULT} arithok,
// 958+ {FDIV} arithok,
// 959+ {IDIV} intok,
// 960+ {LOGAND} intok,
// 961+ 0, 0, 0, 0,
// 962+ {FPOWER} arithok,
// 963+ {IPOWER} intok,
// 964+ 0, 0,
// 965+ {LSHIFT} znop+intok,
// 966+ {RSHIFT} znop+intok,
// 967+ {LOGNOT} intok,
// 968+ 0,
// 969+ {AREF} arrok,
// 970+ {RECREF} recok,
// 971+ {} 0, 0
// 972 !
// 973 %integerfn NEXT ATOM
int NEXTATOM(void) {
// 974 !Encode next atom from source file
// 975 ![Time-critical]
// 976 %switch s(0:255)
int S_index;
int S_line;
char *S_file;
static const void *S[256] = {
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing};
// 977 %constinteger tab=9
// 978 %integer i,j,p,radix,digits
int I;
int J;
int P;
int RADIX;
int DIGITS;
// 979 %real rval
float RVAL;
// 980 %constbyteintegerarray map(0:127) =
const unsigned char MAP[128] = {[0 ... 47] = 0,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
0,
0,
0,
0,
0,
0,
0,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
0,
0,
0,
0,
0,
0,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
0,
0,
0,
0,
0};
// 981+ 0 ('0'),
// 982+ '0','1','2','3','4','5','6','7','8','9',
// 983+ 0, 0, 0, 0, 0, 0, 0,
// 984+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
// 985+ 'n','o','p','q','r','s','t','u','v','w','x','y','z',
// 986+ 0, 0, 0, 0, 0, 0,
// 987+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
// 988+ 'n','o','p','q','r','s','t','u','v','w','x','y','z',
// 989+ 0, 0, 0, 0, 0
// 990
// 991 %routine assemble real
void ASSEMBLEREAL(void) {
// 992 j = 0
J = 0;
// 993 %cycle
L_0050:;
// 994 %cycle
L_0051:;
// 995 sym = byteinteger(fp); fp = fp+1
SYM = *_imp_BYTEINTEGER(FP);
FP = FP + 1;
// 996 %repeat %until sym # ' '
if (SYM != 32) goto L_0052;
goto L_0051;
L_0052:;
// 997 i = sym-'0'
I = SYM - 48;
// 998 %return %unless 0 <= i < radix
{
// Double-sided test on I (Part I)
int tmp;
if (0 > (tmp = I)) goto L_0053;
// Double-sided test on I (Part II)
if (tmp < RADIX) goto L_0054;
}
L_0053:;
return;
L_0054:;
// 999 rval = rval*radix+i; j = j+1
RVAL = RVAL * RADIX + I;
J = J + 1;
// 1000 %repeat
goto L_0050;
// 1001 %end
} /* end of ASSEMBLEREAL */
// 1002
// 1003 ! atoms = atoms+1
// 1004 matched = 0
MATCHED = 0;
// 1005 again: s(tab):
U_1003:;
case_S_9:;
// 1006 read line %if sym = nl
if (SYM != 10) goto L_0056;
READLINE();
L_0056:;
// 1007 %cycle
L_0057:;
// 1008 sym = byteinteger(fp); fp = fp+1
SYM = *_imp_BYTEINTEGER(FP);
FP = FP + 1;
// 1009 %repeat %until sym # ' '
if (SYM != 32) goto L_0058;
goto L_0057;
L_0058:;
// 1010 atomp = fp; !(actually one after)
ATOMP = FP;
// 1011 -> s(sym)
S_line = __LINE__;
S_file = __FILE__;
S_index = SYM;
goto case_S_dispatch;
// 1012 linebreak: s(nl):
U_1004:;
case_S_10:;
// 1013 %result = terminator %if atom # comma
if (ATOM == 59) goto L_0059;
return 52;
L_0059:;
// 1014 -> again
goto U_1003;
// 1015
// 1016 s('{'):
case_S_123:;
// 1017 %cycle
L_005A:;
// 1018 sym = byteinteger(fp); fp = fp+1
SYM = *_imp_BYTEINTEGER(FP);
FP = FP + 1;
// 1019 -> linebreak %if sym = nl
if (SYM != 10) goto L_005B;
goto U_1004;
L_005B:;
// 1020 %repeat %until sym = '}'
if (SYM == 125) goto L_005C;
goto L_005A;
L_005C:;
// 1021 -> again
goto U_1003;
// 1022
// 1023 s('+'): %result = plus
case_S_43:;
return 80;
// 1024 s('-'): fp = fp+1 %and %result = arrow %if byteinteger(fp) = '>'
case_S_45:;
if (*_imp_BYTEINTEGER(FP) != 62) goto L_005D;
FP = FP + 1;
return 79;
L_005D:;
// 1025 -> again %if byteinteger(fp) = nl
if (*_imp_BYTEINTEGER(FP) != 10) goto L_005E;
goto U_1003;
L_005E:;
// 1026 %result = minus
return 81;
// 1027 s('*'): %result = star
case_S_42:;
return 88;
// 1028 s('/'): fp = fp+1 %and %result = slash2 %if byteinteger(fp) = '/'
case_S_47:;
if (*_imp_BYTEINTEGER(FP) != 47) goto L_005F;
FP = FP + 1;
return 90;
L_005F:;
// 1029 %result = slash
return 89;
// 1030 s('\'): fp = fp+1 %and %result = backslash2 %if byteinteger(fp) = '\'
case_S_92:;
if (*_imp_BYTEINTEGER(FP) != 92) goto L_0060;
FP = FP + 1;
return 97;
L_0060:;
// 1031 %result = backslash
return 96;
// 1032 s('^'): nonstandard(uparr)
case_S_94:;
NONSTANDARD(2);
// 1033 fp = fp+1 %and %result = uparrow2 %if byteinteger(fp) = '^'
if (*_imp_BYTEINTEGER(FP) != 94) goto L_0061;
FP = FP + 1;
return 97;
L_0061:;
// 1034 %result = uparrow
return 96;
// 1035 s('!'): fp = fp+1 %and %result = exclam2 %if byteinteger(fp) = '!'
case_S_33:;
if (*_imp_BYTEINTEGER(FP) != 33) goto L_0062;
FP = FP + 1;
return 83;
L_0062:;
// 1036 %result = exclam
return 82;
// 1037 s('&'): %result = ampersand
case_S_38:;
return 91;
// 1038 s('.'): %result = dot
case_S_46:;
return 84;
// 1039 s('='): fp = fp+1 %and %result = eqeq %if byteinteger(fp) = '='
case_S_61:;
if (*_imp_BYTEINTEGER(FP) != 61) goto L_0063;
FP = FP + 1;
return 76;
L_0063:;
// 1040 %result = equals
return 70;
// 1041 s('#'): fp = fp+1 %and %result = noteqeq %if byteinteger(fp) = '#'
case_S_35:;
if (*_imp_BYTEINTEGER(FP) != 35) goto L_0064;
FP = FP + 1;
return 77;
L_0064:;
// 1042 %result = noteq
return 71;
// 1043 s('<'): fp = fp+1 %and %result = lesseq %if byteinteger(fp) = '='
case_S_60:;
if (*_imp_BYTEINTEGER(FP) != 61) goto L_0065;
FP = FP + 1;
return 72;
L_0065:;
// 1044 fp = fp+1 %and %result = noteq %if byteinteger(fp) = '>'
if (*_imp_BYTEINTEGER(FP) != 62) goto L_0066;
FP = FP + 1;
return 71;
L_0066:;
// 1045 fp = fp+1 %and %result = lshift %if byteinteger(fp) = '<'
if (*_imp_BYTEINTEGER(FP) != 60) goto L_0067;
FP = FP + 1;
return 100;
L_0067:;
// 1046 %result = less
return 73;
// 1047 s('>'): fp = fp+1 %and %result = greateq %if byteinteger(fp) = '='
case_S_62:;
if (*_imp_BYTEINTEGER(FP) != 61) goto L_0068;
FP = FP + 1;
return 74;
L_0068:;
// 1048 fp = fp+1 %and %result = rshift %if byteinteger(fp) = '>'
if (*_imp_BYTEINTEGER(FP) != 62) goto L_0069;
FP = FP + 1;
return 101;
L_0069:;
// 1049 %result = greater
return 75;
// 1050 s('_'): %result = underline
case_S_95:;
return 56;
// 1051 s(':'): %result = colon
case_S_58:;
return 58;
// 1052 s(','): %result = comma
case_S_44:;
return 59;
// 1053 s(';'): %result = terminator
case_S_59:;
return 52;
// 1054 s('('): %result = left
case_S_40:;
return 55;
// 1055 s(')'): %result = right
case_S_41:;
return 60;
// 1056 s('|'): %result = modsign
case_S_124:;
return 57;
// 1057
// 1058 s('E'): s('e'):
case_S_69:;
case_S_101:;
// 1059 fp = fp+1 %and -> stringconst %if byteinteger(fp) = '"'
if (*_imp_BYTEINTEGER(FP) != 34) goto L_006A;
FP = FP + 1;
goto U_1005;
L_006A:;
// 1060 s('M'): s('m'): s('C'): s('c'):
case_S_77:;
case_S_109:;
case_S_67:;
case_S_99:;
// 1061 fp = fp+1 %and -> charconst %if byteinteger(fp) = ''''
if (*_imp_BYTEINTEGER(FP) != 39) goto L_006B;
FP = FP + 1;
goto U_1006;
L_006B:;
// 1062 s('A'):s('B'):s('D'):s('F'):s('G'):s('H'):
case_S_65:;
case_S_66:;
case_S_68:;
case_S_70:;
case_S_71:;
case_S_72:;
// 1063 s('I'):s('J'):s('K'):s('L'):s('N'):s('O'):s('P'):
case_S_73:;
case_S_74:;
case_S_75:;
case_S_76:;
case_S_78:;
case_S_79:;
case_S_80:;
// 1064 s('Q'):s('R'):s('S'):s('T'):s('U'):s('V'):s('W'):s('X'):
case_S_81:;
case_S_82:;
case_S_83:;
case_S_84:;
case_S_85:;
case_S_86:;
case_S_87:;
case_S_88:;
// 1065 s('Y'):s('Z'):s('a'):s('b'):s('d'):s('f'):
case_S_89:;
case_S_90:;
case_S_97:;
case_S_98:;
case_S_100:;
case_S_102:;
// 1066 s('g'):s('h'):s('i'):s('j'):s('k'):s('l'):s('n'):
case_S_103:;
case_S_104:;
case_S_105:;
case_S_106:;
case_S_107:;
case_S_108:;
case_S_110:;
// 1067 s('o'):s('p'):s('q'):s('r'):s('s'):s('t'):s('u'):s('v'):
case_S_111:;
case_S_112:;
case_S_113:;
case_S_114:;
case_S_115:;
case_S_116:;
case_S_117:;
case_S_118:;
// 1068 s('w'):s('x'):s('y'):s('z'):
case_S_119:;
case_S_120:;
case_S_121:;
case_S_122:;
// 1069 -> keyword %if percent # 0
if (PERCENT == 0) goto L_006C;
goto U_1007;
L_006C:;
// 1070 ! identatoms = identatoms+1
// 1071 newlen = charlim+1; hash = sym!casebit; !lower-case (if letter)
NEWLEN = CHARLIM + 1;
HASH = SYM | 32;
// 1072 byteinteger(newlen) = hash
*_imp_BYTEINTEGER(NEWLEN) = HASH;
// 1073 %cycle
L_006D:;
// 1074 sym = byteinteger(fp); fp = fp+1
SYM = *_imp_BYTEINTEGER(FP);
FP = FP + 1;
// 1075 %repeat %until sym # ' '
if (SYM != 32) goto L_006E;
goto L_006D;
L_006E:;
// 1076 !$IF AMDAHL
// 1077 { %if sym = '''' %start
// 1078 { radix = 16 %and -> ibm %if hash = 'x'
// 1079 { radix = 8 %and -> ibm %if hash = 'k'
// 1080 { radix = 2 %and -> ibm %if hash = 'b'
// 1081 { %finish
// 1082 !$FINISH
// 1083 sym = map(sym)
SYM = MAP[SYM];
// 1084 %if sym # 0 %start
if (SYM == 0) goto L_006F;
// 1085 %cycle
L_0070:;
// 1086 newlen = newlen+1; byteinteger(newlen) = sym
NEWLEN = NEWLEN + 1;
*_imp_BYTEINTEGER(NEWLEN) = SYM;
// 1087 hash = hash<<1!!sym
HASH = HASH << 1 ^ SYM;
// 1088 %cycle
L_0071:;
// 1089 sym = byteinteger(fp); fp = fp+1
SYM = *_imp_BYTEINTEGER(FP);
FP = FP + 1;
// 1090 %repeat %until sym # ' '
if (SYM != 32) goto L_0072;
goto L_0071;
L_0072:;
// 1091 sym = map(sym)
SYM = MAP[SYM];
// 1092 %repeat %until sym = 0
if (SYM == 0) goto L_0073;
goto L_0070;
L_0073:;
// 1093 %finish
L_006F:;
// 1094 fp = fp-1
FP = FP - 1;
// 1095 newlen = newlen-charlim; byteinteger(charlim) = newlen
NEWLEN = NEWLEN - CHARLIM;
*_imp_BYTEINTEGER(CHARLIM) = NEWLEN;
// 1096 head == hashindex(hash&255)
HEAD = (int *)/*?*/ &HASHINDEX[HASH & 255];
// 1097 item = head
ITEM = *HEAD;
// 1098 %if item > 0 %start
if (ITEM <= 0) goto L_0074;
// 1099 %cycle
L_0075:;
// 1100 %result = ident %if item <= 0
if (ITEM > 0) goto L_0076;
return 54;
L_0076:;
// 1101 ditem == dict(item)
DITEM = (struct IDENTINFO *)/*?*/ &DICT[ITEM - 2001];
// 1102 %exit %if string(ditem_text+charbase) = string(charlim)
if (_imp_strcmp((_imp_string *)_imp_STRING(DITEM->TEXT + CHARBASE), (_imp_string *)_imp_STRING(CHARLIM)) != 0)
goto L_0077;
goto L_0078;
L_0077:;
// 1103 ! misses = misses+1
// 1104 item = ditem_link
ITEM = DITEM->LINK;
// 1105 %repeat %until item <= 0
if (ITEM <= 0) goto L_0078;
goto L_0075;
L_0078:;
// 1106 %finish
L_0074:;
// 1107 %result = ident
return 54;
// 1108
// 1109 s('%'):
case_S_37:;
// 1110 sym = byteinteger(fp)
SYM = *_imp_BYTEINTEGER(FP);
// 1111 -> again %unless 'a' <= sym!casebit <= 'z'
{
// Double-sided test on SYM | 32 (Part I)
int tmp;
if (97 > (tmp = SYM | 32)) goto L_0043;
// Double-sided test on SYM | 32 (Part II)
if (tmp <= 122) goto L_0079;
}
L_0043:;
goto U_1003;
L_0079:;
// 1112 fp = fp+1
FP = FP + 1;
// 1113 keyword:
U_1007:;
// 1114 percent = 0
PERCENT = 0;
// 1115 p = syminit(sym!casebit)
P = SYMINIT[(SYM | 32) - 97];
// 1116 %cycle
L_007A:;
// 1117 ! %cycle
// 1118 ! sym = byteinteger(fp)!casebit
// 1119 ! %exit %if symbol(p) # sym
// 1120 %while symbol(p) = byteinteger(fp)!casebit %cycle
L_007B:;
if (SYMBOL[P - 1] != *_imp_BYTEINTEGER(FP) | 32) goto L_007C;
// 1121 p = p+1; fp = fp+1
P = P + 1;
FP = FP + 1;
// 1122 %repeat
goto L_007B;
L_007C:;
// 1123 %exit %if symbol(p) >= 128
if (SYMBOL[P - 1] < 128) goto L_007D;
goto L_007E;
L_007D:;
// 1124 atom = altdisp(p)
ATOM = ALTDISP[P - 1];
// 1125 %if atom = 0 %start
if (ATOM != 0) goto L_007F;
// 1126 %result = dud %unless sym!casebit = 'c' %and byteinteger(fp) = nl
if (SYM | 32 != 99) goto L_0080;
if (*_imp_BYTEINTEGER(FP) == 10) goto L_0081;
L_0080:;
return 63;
L_0081:;
// 1127 read line
READLINE();
// 1128 ->again
goto U_1003;
// 1129 %finish
L_007F:;
// 1130 p = p+atom
P = P + ATOM;
// 1131 %repeat
goto L_007A;
L_007E:;
// 1132 percent = 1 %if 'a' <= byteinteger(fp)!casebit <= 'z'
{
// Double-sided test on *_imp_BYTEINTEGER(FP) | 32 (Part I)
unsigned char tmp;
if (97 > (tmp = *_imp_BYTEINTEGER(FP) | 32)) goto L_0082;
// Double-sided test on *_imp_BYTEINTEGER(FP) | 32 (Part II)
if (tmp > 122) goto L_0082;
}
PERCENT = 1;
L_0082:;
// 1133 subatom = altdisp(p)
SUBATOM = ALTDISP[P - 1];
// 1134 atom = symbol(p)-128
ATOM = SYMBOL[P - 1] - 128;
// 1135 %result = dud %if atom = 0
if (ATOM != 0) goto L_0083;
return 63;
L_0083:;
// 1136 %result = atom
return ATOM;
// 1137
// 1138 !$IF AMDAHL
// 1139 {ibm:
// 1140 { nonstandard(ibmhex)
// 1141 { item = -1; t_val = 0
// 1142 { -> ibm1
// 1143 !$FINISH
// 1144 s('0'):s('1'):s('2'):s('3'):s('4'):s('5'):s('6'):s('7'):s('8'):s('9'):
case_S_48:;
case_S_49:;
case_S_50:;
case_S_51:;
case_S_52:;
case_S_53:;
case_S_54:;
case_S_55:;
case_S_56:;
case_S_57:;
// 1145 item = 0; t_type = inty
ITEM = 0;
T.TYPE = 2046;
// 1146 radix = 10; t_val = sym-'0'
RADIX = 10;
T.VAL = SYM - 48;
// 1147 ibm1:
U_1008:;
// 1148 %cycle
L_0084:;
// 1149 %cycle
L_0085:;
// 1150 %cycle
L_0086:;
// 1151 sym = byteinteger(fp); fp = fp+1
SYM = *_imp_BYTEINTEGER(FP);
FP = FP + 1;
// 1152 %repeat %until sym # ' '
if (SYM != 32) goto L_0087;
goto L_0086;
L_0087:;
// 1153 i = sym-'0'
I = SYM - 48;
// 1154 %if radix = 10 %start
if (RADIX != 10) goto L_0088;
// 1155 %exit %if i < 0 %or i >= 10
if (I < 0) goto L_0089;
if (I < 10) goto L_008A;
L_0089:;
goto L_008B;
L_008A:;
// 1156 %if t_val > max10 %or (t_val=max10 %and i > maxdig) %start
if (T.VAL > 214748364) goto L_008C;
if (T.VAL != 214748364) goto L_008D;
if (I <= 7) goto L_008D;
L_008C:;
// 1157 t_type = realy; rval = t_val
T.TYPE = 2045;
RVAL = T.VAL;
// 1158 assemble real
ASSEMBLEREAL();
// 1159 %exit
goto L_008B;
// 1160 %finish
L_008D:;
// 1161 t_val = t_val*10+i
T.VAL = T.VAL * 10 + I;
// 1162 %finish %else %start
goto L_008E;
L_0088:;
// 1163 i = sym!casebit-'a'+10 %if i >= 10
if (I < 10) goto L_008F;
I = (SYM | 32) - 97 + 10;
L_008F:;
// 1164 %exit %if i < 0 %or i >= radix
if (I < 0) goto L_0090;
if (I < RADIX) goto L_0091;
L_0090:;
goto L_008B;
L_0091:;
// 1165 j = radix
J = RADIX;
// 1166 %cycle
L_0092:;
// 1167 i = i+t_val %if j&1 # 0
if (J & 1 == 0) goto L_0093;
I = I + T.VAL;
L_0093:;
// 1168 t_val = t_val<<1; j = j>>1
T.VAL = T.VAL << 1;
J = (unsigned int)J >> 1;
// 1169 %repeat %until j = 0
if (J == 0) goto L_0094;
goto L_0092;
L_0094:;
// 1170 t_val = i
T.VAL = I;
// 1171 %finish
L_008E:;
// 1172 %repeat
goto L_0085;
L_008B:;
// 1173 %exit %unless sym = '_'
if (SYM == 95) goto L_0095;
goto L_0096;
L_0095:;
// 1174 radix = t_val
RADIX = T.VAL;
// 1175 %result = dud %if radix = 0
if (RADIX != 0) goto L_0097;
return 63;
L_0097:;
// 1176 t_val = 0
T.VAL = 0;
// 1177 %repeat
goto L_0084;
L_0096:;
// 1178 %if sym = '.' %start
if (SYM != 46) goto L_0098;
// 1179 t_type = realy %and rval = t_val %if t_type = inty
if (T.TYPE != 2046) goto L_0099;
T.TYPE = 2045;
RVAL = T.VAL;
L_0099:;
// 1180 assemble real
ASSEMBLEREAL();
// 1181 %result = dud %if j = 0
if (J != 0) goto L_009A;
return 63;
L_009A:;
// 1182 rval = rval/radix\j
RVAL = (double)(RVAL / (_imp_REXP(RADIX, J)));
// 1183 %finish
L_0098:;
// 1184 ! %if t_type = realy %start; !vax->ieee
// 1185 ! t_val = integer(addr(rval))
// 1186 ! t_val = t_val<<16+t_val>>16-16_01000000
// 1187 ! %finish
// 1188 ! numatoms = numatoms+1
// 1189 !$IF AMDAHL
// 1190 { %if item < 0 %start
// 1191 { %result = dud %if sym # ''''
// 1192 { item = 0
// 1193 { %finish %else %start
// 1194 { fp = fp-1; sym = 0
// 1195 { %finish
// 1196 !$IF VAX OR APM
// 1197 fp = fp-1; sym = 0
FP = FP - 1;
SYM = 0;
// 1198 !$FINISH
// 1199 %result = const
return 53;
// 1200
// 1201 s(''''):
case_S_39:;
// 1202 charconst:
U_1006:;
// 1203 item = 0; t_type = inty
ITEM = 0;
T.TYPE = 2046;
// 1204 t_val = 0
T.VAL = 0;
// 1205 %cycle
L_009B:;
// 1206 sym = byteinteger(fp); fp = fp+1
SYM = *_imp_BYTEINTEGER(FP);
FP = FP + 1;
// 1207 %result = dud %if sym = nl; !?allow
if (SYM != 10) goto L_009C;
return 63;
L_009C:;
// 1208 %if sym = '''' %start
if (SYM != 39) goto L_009D;
// 1209 %exit %unless byteinteger(fp) = ''''
if (*_imp_BYTEINTEGER(FP) == 39) goto L_009E;
goto L_009F;
L_009E:;
// 1210 fp = fp+1
FP = FP + 1;
// 1211 %finish
L_009D:;
// 1212 t_val = t_val<<8+sym
T.VAL = (T.VAL << 8) + SYM;
// 1213 %repeat
goto L_009B;
L_009F:;
// 1214 %result = const %if t_val # 0
if (T.VAL == 0) goto L_00A0;
return 53;
L_00A0:;
// 1215 %result = dud
return 63;
// 1216
// 1217 s('"'):
case_S_34:;
// 1218 stringconst:
U_1005:;
// 1219 item = 0; t_type = stringy
ITEM = 0;
T.TYPE = 2044;
// 1220 stringp = atomp; !for include
STRINGP = ATOMP;
// 1221 t_val = 0
T.VAL = 0;
// 1222 i = line; j = linestart
I = LINE;
J = LINESTART;
// 1223 %cycle
L_00A1:;
// 1224 sym = byteinteger(fp); fp = fp+1
SYM = *_imp_BYTEINTEGER(FP);
FP = FP + 1;
// 1225 %if sym = '"' %start
if (SYM != 34) goto L_00A2;
// 1226 %exit %if byteinteger(fp) # '"'
if (*_imp_BYTEINTEGER(FP) == 34) goto L_00A3;
goto L_00A4;
L_00A3:;
// 1227 fp = fp+1
FP = FP + 1;
// 1228 %finish
L_00A2:;
// 1229 t_val = t_val+1
T.VAL = T.VAL + 1;
// 1230 %if t_val > 255 %start
if (T.VAL <= 255) goto L_00A5;
// 1231 sym = 0
SYM = 0;
// 1232 fp = atomp; linestart = j
FP = ATOMP;
LINESTART = J;
// 1233 %result = dud
return 63;
// 1234 %finish
L_00A5:;
// 1235 read line %if sym = nl
if (SYM != 10) goto L_00A6;
READLINE();
L_00A6:;
// 1236 %repeat
goto L_00A1;
L_00A4:;
// 1237 %result = const
return 53;
// 1238
// 1239 s(*):
case_S_default:;
// 1240 %result = dud
return 63;
// 1241 %end;
case_S_dispatch:
if (S_index < 0 || S_index > 255)
_imp_signalf(6, 3, S_index, "->S(%d) out of bounds at %s line %d", S_index, S_file, S_line);
goto *S[S_index - 0];
case_S_missing:
_imp_signalf(8, 2, S_index, "switch jump to undefined label S(%d): at %s line %d", S_index, S_file, S_line);
} /* end of NEXTATOM */
// ?IBM1 unused
// ?DIGITS unused
// 1242 ; !NEXT ATOM
// 1242
// 1243 %routine LOOKUP FIELD IDENT(%integer list)
void LOOKUPFIELDIDENT(int LIST) {
// 1244 item = list; %return %if item = 0
ITEM = LIST;
if (ITEM != 0) goto L_00A7;
return;
L_00A7:;
// 1245 %cycle
L_00A8:;
// 1246 ditem == dict(item)
DITEM = (struct IDENTINFO *)/*?*/ &DICT[ITEM - 2001];
// 1247 %if ditem_flags&typeid = 0 %start
if (DITEM->FLAGS & 256 != 0) goto L_00A9;
// 1248 %return %if string(ditem_text+charbase) = string(charlim)
if (_imp_strcmp((_imp_string *)_imp_STRING(DITEM->TEXT + CHARBASE), (_imp_string *)_imp_STRING(CHARLIM)) != 0)
goto L_00AA;
return;
L_00AA:;
// 1249 %exit %if ditem_flags&more = 0
if (DITEM->FLAGS & 128 != 0) goto L_00AB;
goto L_00AC;
L_00AB:;
// 1250 %finish
L_00A9:;
// 1251 item = item+1; !misses = misses+1
ITEM = ITEM + 1;
// 1252 %repeat
goto L_00A8;
L_00AC:;
// 1253 item = 0
ITEM = 0;
// 1254 %end
return;
} /* end of LOOKUPFIELDIDENT */
// 1255
// 1256 %predicate A (%integer k)
int A(int K) {
// 1257 !Basic atom-testing predicate
// 1258 atom = next atom %if matched # 0
if (MATCHED == 0) goto L_00AD;
ATOM = NEXTATOM();
L_00AD:;
// 1259 %false %if k # atom
if (K == ATOM) goto L_00AE;
return 0 /*FALSE*/;
L_00AE:;
// 1260 matched = 1
MATCHED = 1;
// 1261 %true
return 1 /*TRUE*/;
// 1262 %end
} /* end of A */
// 1263
// 1264 %routine GET(%integer k)
void GET(int K) {
// 1265 atom = next atom %if matched # 0
if (MATCHED == 0) goto L_00AF;
ATOM = NEXTATOM();
L_00AF:;
// 1266 matched = 1
MATCHED = 1;
// 1267 %return %if atom = k
if (ATOM != K) goto L_00B0;
return;
L_00B0:;
// 1268 syntax error %if atom = dud
if (ATOM != 63) goto L_00B1;
SYNTAXERROR();
L_00B1:;
// 1269 faultp = atomp; report(formerr+point,-k)
FAULTP = ATOMP;
REPORT(0 + 64, -K);
// 1270 %signal 14
_imp_signal(14, 0, 0, "");
// 1271 %end
return;
} /* end of GET */
// 1272
// 1273 %routine ALLOW(%integer k)
void ALLOW(int K) {
// 1274 %if a(k) %start
if (!(A(K))) goto L_00B2;
// 1275 %finish
L_00B2:;
// 1276 %end
return;
} /* end of ALLOW */
// 1277
// 1278 %routine DECLARE
void DECLARE(void) {
// 1279 %if speccing = 0 %start; !not within spec params
if (SPECCING != 0) goto L_00B3;
// 1280 %if item >= c_localdpos %start; !there already
if (ITEM < C.LOCALDPOS) goto L_00B4;
// 1281 %if d_flags&spec = 0 %and d_flags+spec = ditem_flags %c
if (D.FLAGS & 16 != 0) goto L_00B5;
if (D.FLAGS + 16 != DITEM->FLAGS) goto L_00B5;
if (DITEM->TYPE != D.TYPE) goto L_00B5;
// 1282+ %and ditem_type = d_type %start
// 1283 ditem_flags = ditem_flags-spec
DITEM->FLAGS = DITEM->FLAGS - 16;
// 1284 %return
return;
// 1285 %finish
L_00B5:;
// 1286 fault(duperr+point)
FAULT(7 + 64);
// 1287 %finish
L_00B4:;
// 1288 d_link = head; head = dlim; !insert in list
D.LINK = *HEAD;
*HEAD = DLIM;
// 1289 ! d_spare = hash&255
// 1290 %if item > 0 %then d_text = ditem_text %c
if (ITEM <= 0) goto L_00B6;
D.TEXT = DITEM->TEXT;
goto L_00B7;
L_00B6:;
// 1291+ %else %start
// 1292 d_text = charlim-charbase; charlim = charlim+newlen+1
D.TEXT = CHARLIM - CHARBASE;
CHARLIM = CHARLIM + NEWLEN + 1;
// 1293 croak("Identifier space exhausted") %if charlim+80 >= charmin
if (CHARLIM + 80 < CHARMIN) goto L_00B8;
CROAK(_imp_str_literal("Identifier space exhausted"));
L_00B8:;
// 1294 %finish
L_00B7:;
// 1295 %finish %else d_text = 0
goto L_00B9;
L_00B3:;
D.TEXT = 0;
L_00B9:;
// 1296 item = dlim; ditem == dict(item)
ITEM = DLIM;
DITEM = (struct IDENTINFO *)/*?*/ &DICT[ITEM - 2001];
// 1297 ditem = d
*DITEM = D;
// 1298 dlim = dlim+1; croak("Too many identifiers") %if dlim >= dmin
DLIM = DLIM + 1;
if (DLIM < DMIN) goto L_00BA;
CROAK(_imp_str_literal("Too many identifiers"));
L_00BA:;
// 1299 %end; !DECLARE
return;
} /* end of DECLARE */
// 1300
// 1301 %routine DECLARE ANON
void DECLAREANON(void) {
// 1302 d_text = 0; d_link = 0
D.TEXT = 0;
D.LINK = 0;
// 1303 dict(dlim) = d
DICT[DLIM - 2001] = D;
// 1304 dlim = dlim+1; croak("Too many identifiers") %if dlim >= dmin
DLIM = DLIM + 1;
if (DLIM < DMIN) goto L_00BB;
CROAK(_imp_str_literal("Too many identifiers"));
L_00BB:;
// 1305 %end
return;
} /* end of DECLAREANON */
// 1306
// 1307 %owninteger jammy
static int JAMMY;
// 1308 %predicate A ASSOP
int AASSOP(void) {
// 1309 atom = next atom %if matched # 0
if (MATCHED == 0) goto L_00BC;
ATOM = NEXTATOM();
L_00BC:;
// 1310 %if atom # equals %and atom # eqeq %start
if (ATOM == 70) goto L_00BD;
if (ATOM == 76) goto L_00BD;
// 1311 %false %unless atom = less %and byteinteger(fp) = '-'
if (ATOM != 73) goto L_00BE;
if (*_imp_BYTEINTEGER(FP) == 45) goto L_00BF;
L_00BE:;
return 0 /*FALSE*/;
L_00BF:;
// 1312 jammy = 2; fp = fp+1
JAMMY = 2;
FP = FP + 1;
// 1313 %finish %else jammy = 0
goto L_00C0;
L_00BD:;
JAMMY = 0;
L_00C0:;
// 1314 matched = 1
MATCHED = 1;
// 1315 %true
return 1 /*TRUE*/;
// 1316 %end
} /* end of AASSOP */
// 1317
// 1318 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 1319 !!!!!!!!!!!!!!!!!!!! Expressions !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 1320 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 1321
// 1322 %owninteger literal=0
static int LITERAL = 0;
auto void GETEXPRESSION(int RANK, int CONTROL);
// 1323 %routinespec get EXPRESSION(%integer rank,control)
// 1324
// 1325 %integerfn COMPAT(%integer control)
int COMPAT(int CONTROL) {
// 1326 %if t_type = inty %start
if (T.TYPE != 2046) goto L_00C1;
// 1327 %if control&intok = 0 %and control&realok # 0 %start
if (CONTROL & 16 != 0) goto L_00C2;
if (CONTROL & 8 == 0) goto L_00C2;
// 1328 item = floated(item)
ITEM = FLOATED(ITEM);
// 1329 t_type = realy
T.TYPE = 2045;
// 1330 %finish
L_00C2:;
// 1331 %result = control&(intok+realok)
return CONTROL & 16 + 8;
// 1332 %finish
L_00C1:;
// 1333 %result = control&(boolok>>(booltype-t_type)) %if t_type <= booltype
if (T.TYPE > 2048) goto L_00C3;
return CONTROL & (unsigned int)64 >> 2048 - T.TYPE;
L_00C3:;
// 1334 %result = control&enumok %if t_type < direct
if (T.TYPE >= 8192) goto L_00C4;
return CONTROL & 128;
L_00C4:;
// 1335 %result = control&arrok
return CONTROL & 2;
// 1336 %end
} /* end of COMPAT */
// 1337 !
// 1338 %integerfn LISTMATCH(%integer alist,blist)
int LISTMATCH(int ALIST, int BLIST) {
// 1339 %record(identinfo)%name ap,bp
struct IDENTINFO *AP;
struct IDENTINFO *BP;
// 1340 %result = 1 %if alist = blist
if (ALIST != BLIST) goto L_00C5;
return 1;
L_00C5:;
// 1341 %result = 0 %if alist < dictmin %or blist < dictmin
if (ALIST < 2041) goto L_00C6;
if (BLIST >= 2041) goto L_00C7;
L_00C6:;
return 0;
L_00C7:;
// 1342 %cycle
L_00C8:;
// 1343 ap == dict(alist); bp == dict(blist)
AP = (struct IDENTINFO *)/*?*/ &DICT[ALIST - 2001];
BP = (struct IDENTINFO *)/*?*/ &DICT[BLIST - 2001];
// 1344 %result = 0 %if ap_type # bp_type; !for now
if (AP->TYPE == BP->TYPE) goto L_00C9;
return 0;
L_00C9:;
// 1345 alist = alist+1; blist = blist+1
ALIST = ALIST + 1;
BLIST = BLIST + 1;
// 1346 %repeat %until ap_flags&bp_flags&more = 0
if (AP->FLAGS & BP->FLAGS & 128 == 0) goto L_00CA;
goto L_00C8;
L_00CA:;
// 1347 %result = 0 %if ap_flags&more # 0 %or bp_flags&more # 0; !for now
if (AP->FLAGS & 128 != 0) goto L_00CB;
if (BP->FLAGS & 128 == 0) goto L_00CC;
L_00CB:;
return 0;
L_00CC:;
// 1348 %result = 1
return 1;
// 1349 %end
} /* end of LISTMATCH */
// 1350 !
// 1351 %routine GET REFERENCE(%integer reftype)
void GETREFERENCE(int REFTYPE) {
// 1352 %integer type,temp
int TYPE;
int TEMP;
// 1353 get EXPRESSION(simple,refonly+any)
GETEXPRESSION(104, 1024 + 255);
// 1354 type = ditem_type&puretype; reftype = reftype&puretype
TYPE = DITEM->TYPE & 8191;
REFTYPE = REFTYPE & 8191;
// 1355 %return %if reftype = type
if (REFTYPE != TYPE) goto L_00CD;
return;
L_00CD:;
// 1356 %if type < reftype %start
if (TYPE >= REFTYPE) goto L_00CE;
// 1357 temp = type; type = reftype; reftype = temp
TEMP = TYPE;
TYPE = REFTYPE;
REFTYPE = TEMP;
// 1358 %finish
L_00CE:;
// 1359 %return %if reftype = nulltype; !untyped %name
if (REFTYPE != 2041) goto L_00CF;
return;
L_00CF:;
// 1360 type = dict(type)_type
TYPE = DICT[TYPE - 2001].TYPE;
// 1361 %return %if type <= inty %and type = reftype
if (TYPE > 2046) goto L_00D0;
if (TYPE != REFTYPE) goto L_00D0;
return;
L_00D0:;
// 1362 %return %if type >= direct %and type = dict(reftype)_type; !aname
if (TYPE < 8192) goto L_00D1;
if (TYPE != DICT[REFTYPE - 2001].TYPE) goto L_00D1;
return;
L_00D1:;
// 1363 expfault(typerr+point)
EXPFAULT(6 + 64);
// 1364 %end
return;
} /* end of GETREFERENCE */
// 1365 !
// 1366 %routine GET VALUE(%integer valtype)
void GETVALUE(int VALTYPE) {
// 1367 %record(identinfo)%name dp,p
struct IDENTINFO *DP;
struct IDENTINFO *P;
// 1368 get EXPRESSION(major,any)
GETEXPRESSION(80, 255);
// 1369 valtype = valtype&puretype
VALTYPE = VALTYPE & 8191;
// 1370 dp == dict(valtype)
DP = (struct IDENTINFO *)/*?*/ &DICT[VALTYPE - 2001];
// 1371 %if t_type # dp_type %start; !base types differ
if (T.TYPE == DP->TYPE) goto L_00D2;
// 1372 %return %if item = 0 = t_val; !zero
{
// Double-sided test on 0 (Part I)
int tmp;
if (ITEM != (tmp = 0)) goto L_00D3;
// Double-sided test on 0 (Part II)
if (tmp != T.VAL) goto L_00D3;
}
return;
L_00D3:;
// 1373 %if dp_type = realy %and t_type = inty %start
if (DP->TYPE != 2045) goto L_00D4;
if (T.TYPE != 2046) goto L_00D4;
// 1374 !float
// 1375 t_type = realy
T.TYPE = 2045;
// 1376 %return
return;
// 1377 %finish
L_00D4:;
// 1378 %else %if t_type >= inty; !scalar
goto L_00D5;
L_00D2:;
if (T.TYPE < 2046) goto L_00D6;
// 1379 %if item = 0 %start
if (ITEM != 0) goto L_00D7;
// 1380 %return %if dp_low <= t_val <= dp_val
{
// Double-sided test on T.VAL (Part I)
int tmp;
if (DP->LOW > (tmp = T.VAL)) goto L_00D8;
// Double-sided test on T.VAL (Part II)
if (tmp > DP->VAL) goto L_00D8;
}
return;
L_00D8:;
// 1381 jammy = jammy!1 %if jammy >= 0
if (JAMMY < 0) goto L_00D9;
JAMMY = JAMMY | 1;
L_00D9:;
// 1382 %finish %else %start
goto L_00DA;
L_00D7:;
// 1383 %if t_low >= dp_low %start
if (T.LOW < DP->LOW) goto L_00DB;
// 1384 %return %if t_val <= dp_val
if (T.VAL > DP->VAL) goto L_00DC;
return;
L_00DC:;
// 1385 jammy = jammy!1 %if jammy >= 0
if (JAMMY < 0) goto L_00DD;
JAMMY = JAMMY | 1;
L_00DD:;
// 1386 %return %if t_low <= dp_val
if (T.LOW > DP->VAL) goto L_00DE;
return;
L_00DE:;
// 1387 %finish %else %start
goto L_00DF;
L_00DB:;
// 1388 jammy = jammy!1 %if jammy >= 0
if (JAMMY < 0) goto L_00E0;
JAMMY = JAMMY | 1;
L_00E0:;
// 1389 %return %if t_val >= dp_low
if (T.VAL < DP->LOW) goto L_00E1;
return;
L_00E1:;
// 1390 %finish
L_00DF:;
// 1391 %finish
L_00DA:;
// 1392 expfault(rangerr+point) %if jammy < 2
if (JAMMY >= 2) goto L_00E2;
EXPFAULT(12 + 64);
L_00E2:;
// 1393 %return
return;
// 1394 %else %if t_type = stringy
L_00D6:;
if (T.TYPE != 2044) goto L_00E3;
// 1395 %if t_val > dp_val %start; !VALUE = LENGTH*
if (T.VAL <= DP->VAL) goto L_00E4;
// 1396 jammy = jammy!1 %if jammy >= 0
if (JAMMY < 0) goto L_00E5;
JAMMY = JAMMY | 1;
L_00E5:;
// 1397 expfault(rangerr+point) %if item = 0 %and jammy < 2
if (ITEM != 0) goto L_00E6;
if (JAMMY >= 2) goto L_00E6;
EXPFAULT(12 + 64);
L_00E6:;
// 1398 %finish
L_00E4:;
// 1399 %return
return;
// 1400 %else %if t_type = recy
L_00E3:;
if (T.TYPE != 2042) goto L_00E7;
// 1401 %return %if t_extra = dp_extra
if (T.EXTRA != DP->EXTRA) goto L_00E8;
return;
L_00E8:;
// 1402 jammy = jammy!1 %and %return %if jammy >= 2
if (JAMMY < 2) goto L_00E9;
JAMMY = JAMMY | 1;
return;
L_00E9:;
// 1403 !partial assignment?
// 1404 %else %if t_type = realy
goto L_00D5;
L_00E7:;
if (T.TYPE != 2045) goto L_00EA;
// 1405 %return
return;
// 1406 %finish
L_00EA:;
L_00D5:;
// 1407 expfault(typerr+point)
EXPFAULT(6 + 64);
// 1408 %end;
return;
} /* end of GETVALUE */
// ?P unused
// 1409 ; !GET VALUE
// 1409 !
// 1410 %routine GET LITERAL(%integer littype)
void GETLITERAL(int LITTYPE) {
// 1411 literal = literal+1
LITERAL = LITERAL + 1;
// 1412 get VALUE(littype)
GETVALUE(LITTYPE);
// 1413 literal = literal-1
LITERAL = LITERAL - 1;
// 1414 %end
return;
} /* end of GETLITERAL */
// 1415 !
// 1416 %routine GET LITINT
void GETLITINT(void) {
// 1417 literal = literal+1
LITERAL = LITERAL + 1;
// 1418 get EXPRESSION(major,intok)
GETEXPRESSION(80, 16);
// 1419 literal = literal-1
LITERAL = LITERAL - 1;
// 1420 %end
return;
} /* end of GETLITINT */
// 1421 !
// 1422 %routine GET LITSTRING
void GETLITSTRING(void) {
// 1423 %integer holditem
int HOLDITEM;
// 1424 !Must be quoted string (for %alias and %include)
// 1425 holditem = item; !preserve
HOLDITEM = ITEM;
// 1426 get(const)
GET(53);
// 1427 error(typerr+point) %if t_type # stringy
if (T.TYPE == 2044) goto L_00EB;
ERROR(6 + 64);
L_00EB:;
// 1428 item = holditem; !restore
ITEM = HOLDITEM;
// 1429 %end
return;
} /* end of GETLITSTRING */
// 1430 !
// 1431 %routine GET PARMLIST
void GETPARMLIST(void) {
// 1432 %record(identinfo)%name hp,dp
struct IDENTINFO *HP;
struct IDENTINFO *DP;
// 1433 %integer i,j,headitem,headact,dpos,case,procnp,first
int I;
int J;
int HEADITEM;
int HEADACT;
int DPOS;
int CASE;
int PROCNP;
int FIRST;
// 1434 headitem = item; hp == ditem
HEADITEM = ITEM;
HP = (struct IDENTINFO *)DITEM;
// 1435 headact = rcall
HEADACT = 109;
// 1436 !stack procedure ident
// 1437 ! procnp = np; put3(headact,headitem,0)
// 1438 i = 0; first = 1
I = 0;
FIRST = 1;
// 1439 dpos = headitem; dp == hp
DPOS = HEADITEM;
DP = (struct IDENTINFO *)HP;
// 1440 %cycle
L_00EC:;
// 1441 !Set up expression state from formal param details
// 1442 error(toomany+point) %if dp_flags&more = 0
if (DP->FLAGS & 128 != 0) goto L_00ED;
ERROR(32 + 64);
L_00ED:;
// 1443 dpos = dpos+1 %and dp == dict(dpos) %until dp_flags&parm # 0
L_00EE:;
DPOS = DPOS + 1;
DP = (struct IDENTINFO *)/*?*/ &DICT[DPOS - 2001];
if (DP->FLAGS & 64 != 0) goto L_00EF;
goto L_00EE;
L_00EF:;
// 1444 %if dp_flags&proc # 0 %start
if (DP->FLAGS & 4 == 0) goto L_00F0;
// 1445 get(ident)
GET(54);
// 1446 name error %if item <= 0
if (ITEM > 0) goto L_00F1;
NAMEERROR();
L_00F1:;
// 1447 fault(typerr+point) %if ditem_flags&proc = 0; !for now
if (DITEM->FLAGS & 4 != 0) goto L_00F2;
FAULT(6 + 64);
L_00F2:;
// 1448 fault(caterr+point) %if item > headitem
if (ITEM <= HEADITEM) goto L_00F3;
FAULT(3 + 64);
L_00F3:;
// 1449 %else %if dp_type < indirect; !value
goto L_00F4;
L_00F0:;
if (DP->TYPE >= 16384) goto L_00F5;
// 1450 ! %if pp_type&numericmask # 0 %then case = i&7 %and i = i+1 %c
// 1451 ! %else case = i>>3+8 %and i = i+8
// 1452 case = i&7; i = i+1
CASE = I & 7;
I = I + 1;
// 1453 get VALUE(dp_type)
GETVALUE(DP->TYPE);
// 1454 %finish %else %start; !name or proc
goto L_00F4;
L_00F5:;
// 1455 case = i>>3+8; i = i+8
CASE = ((unsigned int)I >> 3) + 8;
I = I + 8;
// 1456 get REFERENCE(dp_type)
GETREFERENCE(DP->TYPE);
// 1457 %finish
L_00F4:;
// 1458 ! case = case<<8+headact
// 1459 ! item = litref(t_val) %if item = 0
// 1460 ! j = np-1
// 1461 ! %if first = 0 %start
// 1462 ! j = np
// 1463 ! !NB Don't re-order parameters for implicits
// 1464 ! %if item >= expmin %and headitem > dnewline %start
// 1465 ! %while j > procnp %and exp(j-1)_y < expmin %cycle
// 1466 ! exp(j)_act = exp(j-1)_act; exp(j)_y = exp(j-1)_y
// 1467 ! j = j-1
// 1468 ! %repeat
// 1469 ! %finish
// 1470 ! exp(np)_x = 0; np = np+1
// 1471 ! %finish
// 1472 ! exp(j)_act = case; exp(j)_y = item
// 1473 ! first = 0
// 1474 %repeat %until %not a(comma)
if (!(A(59))) goto L_00F6;
goto L_00EC;
L_00F6:;
// 1475 ! %if hp_type # nulltype %start
// 1476 ! i = explo
// 1477 ! %while i <= expmax %cycle
// 1478 ! %if exp(i)_x = headitem %start; ![enough?]
// 1479 ! item = i; j = procnp
// 1480 ! %cycle
// 1481 ! %exit %if exp(i)_y # exp(j)_y
// 1482 ! i = i+1; j = j+1
// 1483 ! ->okf %if j >= np
// 1484 ! %repeat
// 1485 ! %finish
// 1486 ! i = i+1
// 1487 ! %repeat
// 1488 ! %cycle
// 1489 ! explo = explo-1; np = np-1
// 1490 ! exp(explo) = exp(np)
// 1491 ! %repeat %until np = procnp
// 1492 item = explo
ITEM = EXPLO;
// 1493 !okf:np = procnp
// 1494 ! %finish
// 1495 %end;
return;
} /* end of GETPARMLIST */
// ?PROCNP unused
// ?J unused
// 1496 ; !get PARMLIST
// 1496
// 1497 %routine GET RESOLUTION
void GETRESOLUTION(void) {
// 1498 %if %not a(left) %start
if (A(55)) goto L_00F7;
// 1499 get REFERENCE(anystringvar)
GETREFERENCE(18428);
// 1500 get(dot)
GET(84);
// 1501 get(left)
GET(55);
// 1502 %finish
L_00F7:;
// 1503 get VALUE(anystring)
GETVALUE(10236);
// 1504 get(right)
GET(60);
// 1505 %if a(dot) %start
if (!(A(84))) goto L_00F8;
// 1506 get REFERENCE(anystringvar)
GETREFERENCE(18428);
// 1507 %finish
L_00F8:;
// 1508 %end
return;
} /* end of GETRESOLUTION */
// 1509 !
// 1510 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 1511 !
// 1512 %routine GET EXPRESSION(%integer rank,control)
void GETEXPRESSION(int RANK, int CONTROL) {
// 1513 !Main expression recognition routine
// 1514 !To bring together the treatment of all binary operators
// 1515 ! and ensure fast recognition of simple expressions,
// 1516 ! expressions of different levels are handled by
// 1517 ! precedence techniques rather than syntactically
// 1518 !CONTROL defines acceptability
// 1519 %integer type,f,opok,c1,op,atomp1,item1
int TYPE;
int F;
int OPOK;
int C1;
int OP;
int ATOMP1;
int ITEM1;
// 1520 %record(objinfo) t1
struct OBJINFO T1;
// 1521 %record(identinfo)%name dp
struct IDENTINFO *DP;
// 1522
// 1523 %integerfn litval
int LITVAL(void) {
// 1524 %switch lit(64:atommax)
int LIT_index;
int LIT_line;
char *LIT_file;
static const void *LIT[44] = {
&&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing,
&&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing,
&&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing,
&&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing,
&&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing,
&&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing,
&&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing,
&&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing,
&&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing, &&case_LIT_missing};
// 1525 -> lit(op)
LIT_line = __LINE__;
LIT_file = __FILE__;
LIT_index = OP;
goto case_LIT_dispatch;
// 1526 lit(plus): %result = t1_val+t_val
case_LIT_80:;
return T1.VAL + T.VAL;
// 1527 lit(minus): %result = t1_val-t_val
case_LIT_81:;
return T1.VAL - T.VAL;
// 1528 lit(mult): %result = t1_val*t_val
case_LIT_88:;
return T1.VAL * T.VAL;
// 1529 lit(idiv): %result = t1_val//t_val %if t_val # 0
case_LIT_90:;
if (T.VAL == 0) goto L_00FA;
return ((long)T1.VAL / (long)T.VAL);
L_00FA:;
// 1530 fault(rangerr)
FAULT(12);
// 1531 %result = 0
return 0;
// 1532 lit(logand):
case_LIT_91:;
// 1533 lit(booland): %result = t1_val&t_val
case_LIT_64:;
return T1.VAL & T.VAL;
// 1534 lit(logor):
case_LIT_82:;
// 1535 lit(boolor): %result = t1_val!t_val
case_LIT_65:;
return T1.VAL | T.VAL;
// 1536 lit(logxor): %result = t1_val!!t_val
case_LIT_83:;
return T1.VAL ^ T.VAL;
// 1537 lit(lshift): %result = t1_val<<t_val
case_LIT_100:;
return T1.VAL << T.VAL;
// 1538 lit(rshift): %result = t1_val>>t_val
case_LIT_101:;
return (unsigned int)T1.VAL >> T.VAL;
// 1539 lit(boolnot): %result = t_val!!true
case_LIT_66:;
return T.VAL ^ 1;
// 1540 lit(lognot): %result = \t_val
case_LIT_102:;
return (~T.VAL);
// 1541 !lit(negate): %result = -t_val
// 1542 lit(equals): %result = true %if t1_val = t_val
case_LIT_70:;
if (T1.VAL != T.VAL) goto L_00FB;
return 1;
L_00FB:;
// 1543 %result = false
return 0;
// 1544 lit(noteq): %result = true %if t1_val # t_val
case_LIT_71:;
if (T1.VAL == T.VAL) goto L_00FC;
return 1;
L_00FC:;
// 1545 %result = false
return 0;
// 1546 lit(lesseq): %result = true %if t1_val <= t_val
case_LIT_72:;
if (T1.VAL > T.VAL) goto L_00FD;
return 1;
L_00FD:;
// 1547 %result = false
return 0;
// 1548 lit(less): %result = true %if t1_val < t_val
case_LIT_73:;
if (T1.VAL >= T.VAL) goto L_00FE;
return 1;
L_00FE:;
// 1549 %result = false
return 0;
// 1550 lit(greateq): %result = true %if t1_val >= t_val
case_LIT_74:;
if (T1.VAL < T.VAL) goto L_00FF;
return 1;
L_00FF:;
// 1551 %result = false
return 0;
// 1552 lit(greater): %result = true %if t1_val > t_val
case_LIT_75:;
if (T1.VAL <= T.VAL) goto L_0100;
return 1;
L_0100:;
// 1553 %result = false
return 0;
// 1554 lit(concat): %result = t1_val+t_val
case_LIT_84:;
return T1.VAL + T.VAL;
// 1555 lit(*): !report(notwhat,-op)
case_LIT_default:;
// 1556 %result = 1
return 1;
// 1557 %end
case_LIT_dispatch:
if (LIT_index < 64 || LIT_index > 107)
_imp_signalf(6, 3, LIT_index, "->LIT(%d) out of bounds at %s line %d", LIT_index, LIT_file, LIT_line);
goto *LIT[LIT_index - 64];
case_LIT_missing:
_imp_signalf(8, 2, LIT_index, "switch jump to undefined label LIT(%d): at %s line %d", LIT_index, LIT_file,
LIT_line);
} /* end of LITVAL */
// 1558
// 1559 !Get leading operand
// 1560 atom = next atom %if matched # 0
if (MATCHED == 0) goto L_0101;
ATOM = NEXTATOM();
L_0101:;
// 1561 atomp1 = atomp; !note position for reports
ATOMP1 = ATOMP;
// 1562 %if atom = ident %start
if (ATOM != 54) goto L_0102;
// 1563 matched = 1
MATCHED = 1;
// 1564 name error %if item <= 0
if (ITEM > 0) goto L_0103;
NAMEERROR();
L_0103:;
// 1565 fault(selfref+point) %if item >= dlim0
if (ITEM < DLIM0) goto L_0104;
FAULT(38 + 64);
L_0104:;
// 1566 type = ditem_type
TYPE = DITEM->TYPE;
// 1567 %if control&(refonly+varonly) # 0 %start
if (CONTROL & 1024 + 2048 == 0) goto L_0105;
// 1568 error(nonvar+point) %if control&varonly # 0 %and f&var = 0
if (CONTROL & 2048 == 0) goto L_0106;
if (F & 1 != 0) goto L_0106;
ERROR(30 + 64);
L_0106:;
// 1569 error(nonref+point) %if type < direct
if (TYPE >= 8192) goto L_0107;
ERROR(31 + 64);
L_0107:;
// 1570 %finish
L_0105:;
// 1571 f = ditem_flags
F = DITEM->FLAGS;
// 1572 %if inty <= type <= booltype %and f&proc = 0 %start; !literal
{
// Double-sided test on TYPE (Part I)
int tmp;
if (2046 > (tmp = TYPE)) goto L_0108;
// Double-sided test on TYPE (Part II)
if (tmp > 2048) goto L_0108;
}
if (F & 4 != 0) goto L_0108;
// 1573 item = 0; t = ditem_details
ITEM = 0;
T = DITEM->DETAILS;
// 1574 %else
goto L_0109;
L_0108:;
// 1575 fault(nonliteral+point) %if literal > 0
if (LITERAL <= 0) goto L_010A;
FAULT(13 + 64);
L_010A:;
// 1576 %if f&proc # 0 %start
if (F & 4 == 0) goto L_010B;
// 1577 ditem == dict(type) %and type = ditem_type %if f&parm # 0
if (F & 64 == 0) goto L_010C;
DITEM = (struct IDENTINFO *)/*?*/ &DICT[TYPE - 2001];
TYPE = DITEM->TYPE;
L_010C:;
// 1578 error(caterr+point) %if type = nulltype; !routine
if (TYPE != 2041) goto L_010D;
ERROR(3 + 64);
L_010D:;
// 1579 %if a(left) %start
if (!(A(55))) goto L_010E;
// 1580 dp == ditem
DP = (struct IDENTINFO *)DITEM;
// 1581 get PARMLIST; get(right)
GETPARMLIST();
GET(60);
// 1582 ditem == dp
DITEM = (struct IDENTINFO *)DP;
// 1583 %else
goto L_010F;
L_010E:;
// 1584 error(toofew+point) %if ditem_flags&more # 0
if (DITEM->FLAGS & 128 == 0) goto L_0110;
ERROR(33 + 64);
L_0110:;
// 1585 item = explo;!expref(f&var+fcall,item,0)
ITEM = EXPLO;
// 1586 %finish
L_010F:;
// 1587 %finish
L_010B:;
// 1588 %cycle
L_0111:;
// 1589 dp == dict(type&puretype); t = dp_details
DP = (struct IDENTINFO *)/*?*/ &DICT[(TYPE & 8191) - 2001];
T = DP->DETAILS;
// 1590 atom = next atom %if matched # 0
if (MATCHED == 0) goto L_0112;
ATOM = NEXTATOM();
L_0112:;
// 1591 %exit %if atom # underline %and atom # left
if (ATOM == 56) goto L_0113;
if (ATOM == 55) goto L_0113;
goto L_0114;
L_0113:;
// 1592 matched = 1
MATCHED = 1;
// 1593 item1 = item
ITEM1 = ITEM;
// 1594 %if atom = left %start
if (ATOM != 55) goto L_0115;
// 1595 %cycle
L_0116:;
// 1596 syntax error %if t_type < direct; !element type
if (T.TYPE >= 8192) goto L_0117;
SYNTAXERROR();
L_0117:;
// 1597 type = t_type
TYPE = T.TYPE;
// 1598 get VALUE(t_val); !index
GETVALUE(T.VAL);
// 1599 item = explo;!expref(aref,item1,item,t_val)
ITEM = EXPLO;
// 1600 ditem == dp
DITEM = (struct IDENTINFO *)DP;
// 1601 %exit %if %not a(comma)
if (A(59)) goto L_0118;
goto L_0119;
L_0118:;
// 1602 dp == dict(type&puretype); t = dp_details
DP = (struct IDENTINFO *)/*?*/ &DICT[(TYPE & 8191) - 2001];
T = DP->DETAILS;
// 1603 item1 = item
ITEM1 = ITEM;
// 1604 %repeat
goto L_0116;
L_0119:;
// 1605 get(right)
GET(60);
// 1606 %else; !rec subfield
goto L_011A;
L_0115:;
// 1607 syntax error %if t_type # recy
if (T.TYPE == 2042) goto L_011B;
SYNTAXERROR();
L_011B:;
// 1608 get(ident)
GET(54);
// 1609 lookup field ident(t_extra)
LOOKUPFIELDIDENT(T.EXTRA);
// 1610 error(namerr+point) %if item <= 0
if (ITEM > 0) goto L_011C;
ERROR(2 + 64);
L_011C:;
// 1611 type = ditem_type
TYPE = DITEM->TYPE;
// 1612 item = explo;!expref(recref,item,item1)
ITEM = EXPLO;
// 1613 %finish
L_011A:;
// 1614 %repeat
goto L_0111;
L_0114:;
// 1615 -> final %if control&(varonly+refonly) # 0
if (CONTROL & 2048 + 1024 == 0) goto L_011D;
goto U_1009;
L_011D:;
// 1616 %finish
L_0109:;
// 1617 %else
goto L_011E;
L_0102:;
// 1618 error(nonvar+point) %if control&varonly # 0
if (CONTROL & 2048 == 0) goto L_011F;
ERROR(30 + 64);
L_011F:;
// 1619 error(nonref+point) %if control&refonly # 0
if (CONTROL & 1024 == 0) goto L_0120;
ERROR(31 + 64);
L_0120:;
// 1620 %if a(const) %start
if (!(A(53))) goto L_0121;
// 1621 %else %if atom = minus; !leave unmatched
goto L_0122;
L_0121:;
if (ATOM != 81) goto L_0123;
// 1622 item = 0; t = 0; t_type = inty
ITEM = 0;
T = (struct OBJINFO){0};
T.TYPE = 2046;
// 1623 %else %if a(left)
goto L_0122;
L_0123:;
if (!(A(55))) goto L_0124;
// 1624 %if rank < major %start; !condition
if (RANK >= 80) goto L_0125;
// 1625 get EXPRESSION(cond,any)
GETEXPRESSION(64, 255);
// 1626 %finish %else %start
goto L_0126;
L_0125:;
// 1627 jammy = jammy-4
JAMMY = JAMMY - 4;
// 1628 c1 = control; c1 = c1!intok %if c1&realok # 0
C1 = CONTROL;
if (C1 & 8 == 0) goto L_0127;
C1 = C1 | 16;
L_0127:;
// 1629 get EXPRESSION(major,c1)
GETEXPRESSION(80, C1);
// 1630 jammy = jammy+4
JAMMY = JAMMY + 4;
// 1631 %finish
L_0126:;
// 1632 get(right)
GET(60);
// 1633 %else %if a(keynot)
goto L_0122;
L_0124:;
if (!(A(47))) goto L_0128;
// 1634 syntax error %if rank >= major
if (RANK < 80) goto L_0129;
SYNTAXERROR();
L_0129:;
// 1635 get EXPRESSION(scond,any)
GETEXPRESSION(70, 255);
// 1636 %if item = 0 %then t_val = t_val!!true %c
if (ITEM != 0) goto L_012A;
T.VAL = T.VAL ^ 1;
goto L_012B;
L_012A:;
ITEM = EXPLO;
L_012B:;
// 1637+ %else item = explo;!expref(boolnot,item,0)
// 1638 %else %if atom = backslash
goto L_0122;
L_0128:;
if (ATOM != 96) goto L_012C;
// 1639 item = 0; t = 0; t_type = inty
ITEM = 0;
T = (struct OBJINFO){0};
T.TYPE = 2046;
// 1640 atom = tilde
ATOM = 102;
// 1641 %else %if a(modsign)
goto L_0122;
L_012C:;
if (!(A(57))) goto L_012D;
// 1642 fault(typerr+point) %if control&arithok = 0
if (CONTROL & 24 != 0) goto L_012E;
FAULT(6 + 64);
L_012E:;
// 1643 get EXPRESSION(major,arithok)
GETEXPRESSION(80, 24);
// 1644 get(modsign)
GET(57);
// 1645 %if item = 0 %start
if (ITEM != 0) goto L_012F;
// 1646 %if t_val < 0 %start
if (T.VAL >= 0) goto L_0130;
// 1647 %if t_val # minint %then t_val = -t_val %else expfault(rangerr)
if (T.VAL == -2147483648) goto L_0131;
T.VAL = -T.VAL;
goto L_0132;
L_0131:;
EXPFAULT(12);
L_0132:;
// 1648 %finish
L_0130:;
// 1649 %else %if t_type = inty
goto L_0133;
L_012F:;
if (T.TYPE != 2046) goto L_0134;
// 1650 item = explo;!expref(imod,item,0)
ITEM = EXPLO;
// 1651 %else %if t_type = realy
goto L_0133;
L_0134:;
if (T.TYPE != 2045) goto L_0135;
// 1652 item = explo;!expref(fmod,item,0)
ITEM = EXPLO;
// 1653 %else
goto L_0133;
L_0135:;
// 1654 error(typerr)
ERROR(6);
// 1655 %finish
L_0133:;
// 1656 %else
goto L_0122;
L_012D:;
// 1657 syntax error
SYNTAXERROR();
// 1658 %finish
L_0122:;
// 1659 %finish
L_011E:;
// 1660 atom = next atom %if matched # 0
if (MATCHED == 0) goto L_0136;
ATOM = NEXTATOM();
L_0136:;
// 1661 %while atom >= rank %cycle
L_0137:;
if (ATOM < RANK) goto L_0138;
// 1662 op = atom; matched = 1
OP = ATOM;
MATCHED = 1;
// 1663 opok = opbits(op); c1 = compat(opok); ![may change ITEM,T_TYPE]
OPOK = OPBITS[OP - 64];
C1 = COMPAT(OPOK);
// 1664 fault(typerr+point) %if c1 = 0
if (C1 != 0) goto L_0139;
FAULT(6 + 64);
L_0139:;
// 1665 item1 = item; t1 = t
ITEM1 = ITEM;
T1 = T;
// 1666 %if op >= major %start; !non-conditional
if (OP < 80) goto L_013A;
// 1667 %if op = dot %then get EXPRESSION(dot,stringok) {right-associate} %c
if (OP != 84) goto L_013B;
GETEXPRESSION(84, 4);
goto L_013C;
L_013B:;
GETEXPRESSION((OP & (~7)) + 8, C1);
L_013C:;
// 1668+ %else get EXPRESSION(op&(\7)+8,c1)
// 1669 %if t_type = realy %and t1_type = inty %start
if (T.TYPE != 2045) goto L_013D;
if (T1.TYPE != 2046) goto L_013D;
// 1670 item1 = floated(item1); t1_type = realy
ITEM1 = FLOATED(ITEM1);
T1.TYPE = 2045;
// 1671 %finish
L_013D:;
// 1672 ! op = op+? %if t_type = realy %and opok&intok # 0
// 1673 %else
goto L_013E;
L_013A:;
// 1674 %if op = resolve %start
if (OP != 79) goto L_013F;
// 1675 get RESOLUTION
GETRESOLUTION();
// 1676 %else %if op >= eqeq
goto L_0140;
L_013F:;
if (OP < 76) goto L_0141;
// 1677 get EXPRESSION(simple,any+refonly)
GETEXPRESSION(104, 255 + 1024);
// 1678 %else %if op >= equals
goto L_0140;
L_0141:;
if (OP < 70) goto L_0142;
// 1679 get EXPRESSION(major,c1)
GETEXPRESSION(80, C1);
// 1680 %if equals <= atom < eqeq %start
{
// Double-sided test on ATOM (Part I)
int tmp;
if (70 > (tmp = ATOM)) goto L_0143;
// Double-sided test on ATOM (Part II)
if (tmp >= 76) goto L_0143;
}
// 1681 op = atom; matched = 1
OP = ATOM;
MATCHED = 1;
// 1682 get EXPRESSION(major,c1)
GETEXPRESSION(80, C1);
// 1683 %finish
L_0143:;
// 1684 %if t_type = realy %and t1_type = inty %start
if (T.TYPE != 2045) goto L_0144;
if (T1.TYPE != 2046) goto L_0144;
// 1685 item1 = floated(item1); t1_type = realy
ITEM1 = FLOATED(ITEM1);
T1.TYPE = 2045;
// 1686 %finish
L_0144:;
// 1687 %else
goto L_0140;
L_0142:;
// 1688 get EXPRESSION(scond,any)
GETEXPRESSION(70, 255);
// 1689 %if atom >= cond %start
if (ATOM < 64) goto L_0145;
// 1690 syntax error %if atom # op
if (ATOM == OP) goto L_0146;
SYNTAXERROR();
L_0146:;
// 1691 %finish
L_0145:;
// 1692 %finish
L_0140:;
// 1693 t_type = booltype
T.TYPE = 2048;
// 1694 t_low = 0 %and t_val = 1 %if item # 0
if (ITEM == 0) goto L_0147;
T.LOW = 0;
T.VAL = 1;
L_0147:;
// 1695 %finish
L_013E:;
// 1696 %if item1 = 0 %start; !first operand literal
if (ITEM1 != 0) goto L_0148;
// 1697 %if item = 0 %start; !both literal
if (ITEM != 0) goto L_0149;
// 1698 t_val = litval
T.VAL = LITVAL();
// 1699 %continue %if item = 0
if (ITEM != 0) goto L_014A;
goto L_014B;
L_014A:;
// 1700 ! item1 = litref(t1_val)
// 1701 ! %else %if inverse(op) # 0; !invertable
// 1702 ! op = inverse(op)
// 1703 ! temp = t; t = t1; t1 = temp; !standardise order
// 1704 ! item1 = item; item = 0
// 1705 %else
goto L_014C;
L_0149:;
// 1706 ! item1 = litref(t1_val)
// 1707 %finish
L_014C:;
// 1708 %finish
L_0148:;
// 1709 %if item = 0 %start; !second operand literal
if (ITEM != 0) goto L_014D;
// 1710 %if op = minus %and t_type = inty %start; !standardise
if (OP != 81) goto L_014E;
if (T.TYPE != 2046) goto L_014E;
// 1711 t_val = -t_val %if t_val # minint; op = plus
if (T.VAL == -2147483648) goto L_014F;
T.VAL = -T.VAL;
L_014F:;
OP = 80;
// 1712 %finish
L_014E:;
// 1713 item = item1 %and %continue %if t_val = 0 %and opok&znop # 0
if (T.VAL != 0) goto L_0150;
if (OPOK & 512 == 0) goto L_0150;
ITEM = ITEM1;
goto L_014B;
L_0150:;
// 1714 %finish
L_014D:;
// 1715 item = explo;!expref(op,item1,item,t_val)
ITEM = EXPLO;
// 1716 t_low = minint; t_val = maxint; !?real
T.LOW = -2147483648;
T.VAL = 2147483647;
// 1717 %repeat
L_014B:;
goto L_0137;
L_0138:;
// 1718 final:
U_1009:;
// 1719 expp = atomp1; !restore to start
EXPP = ATOMP1;
// 1720 expfault(typerr) %if compat(control) = 0
if (COMPAT(CONTROL) != 0) goto L_0151;
EXPFAULT(6);
L_0151:;
// 1721 %end; !get EXPRESSION
return;
} /* end of GETEXPRESSION */
// 1722
// 1723 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 1724 !!!!!!!!!!!!!!!!!!!! Conditions and loops !!!!!!!!!!!!!!!!!!!!
// 1725 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 1726 !
// 1727 %routine GET CONDITION
void GETCONDITION(void) {
// 1728 %integer polarity
int POLARITY;
// 1729 polarity = subatom
POLARITY = SUBATOM;
// 1730 condnp = np
CONDNP = NP;
// 1731 get EXPRESSION(cond,any)
GETEXPRESSION(64, 255);
// 1732 ! put3(jump+polarity,item,0)
// 1733 %end; !get CONDITION
return;
} /* end of GETCONDITION */
// 1734
// 1735 %routine GET STATEMENTS(%integer stopper)
void GETSTATEMENTS(int STOPPER) {
// 1736 %integer holdnp,holdlooplab
int HOLDNP;
int HOLDLOOPLAB;
// 1737 %switch initial(0:atommax)
int INITIAL_index;
int INITIAL_line;
char *INITIAL_file;
static const void *INITIAL[108] = {
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing,
&&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing, &&case_INITIAL_missing};
// 1738
// 1739 %routine GET INSTRUCTION
void GETINSTRUCTION(void) {
// 1740 %integer item1,hold,act
int ITEM1;
int HOLD;
int ACT;
// 1741 %record(identinfo)%name ditem1
struct IDENTINFO *DITEM1;
// 1742 %routine putact
void PUTACT(void) {
// 1743 ! put3(act,t_val,hold)
// 1744 %end
return;
} /* end of PUTACT */
// 1745 !
// 1746 %if c_flags < hadinst %start; !first in block
if (C.FLAGS >= 32) goto L_0152;
// 1747 c_flags = c_flags+hadinst
C.FLAGS = C.FLAGS + 32;
// 1748 fault(ordererr) %if level <= outerlevel
if (LEVEL > 0) goto L_0153;
FAULT(10);
L_0153:;
// 1749 %finish
L_0152:;
// 1750 instnp = np
INSTNP = NP;
// 1751 %cycle
L_0154:;
// 1752 %if a(ident) %start
if (!(A(54))) goto L_0155;
// 1753 name error %if item <= 0
if (ITEM > 0) goto L_0156;
NAMEERROR();
L_0156:;
// 1754 %if ditem_flags&var # 0 %start
if (DITEM->FLAGS & 1 == 0) goto L_0157;
// 1755 matched = 0
MATCHED = 0;
// 1756 get EXPRESSION(simple,any)
GETEXPRESSION(104, 255);
// 1757 item1 = item; ditem1 == ditem
ITEM1 = ITEM;
DITEM1 = (struct IDENTINFO *)DITEM;
// 1758 %if a(equals) %start
if (!(A(70))) goto L_0158;
// 1759 get VALUE(ditem1_type)
GETVALUE(DITEM1->TYPE);
// 1760 ! put2(assign,item1)
// 1761 %else %if a(eqeq)
goto L_0159;
L_0158:;
if (!(A(76))) goto L_015A;
// 1762 syntax error %if ditem1_type < indirect
if (DITEM1->TYPE >= 16384) goto L_015B;
SYNTAXERROR();
L_015B:;
// 1763 get REFERENCE(ditem1_type)
GETREFERENCE(DITEM1->TYPE);
// 1764 item = item+ad %if item # 0
if (ITEM == 0) goto L_015C;
ITEM = ITEM + 16384;
L_015C:;
// 1765 ! put2(assign,item1+ad)
// 1766 %else %if atom = less %and byteinteger(fp) = '-'
goto L_0159;
L_015A:;
if (ATOM != 73) goto L_015D;
if (*_imp_BYTEINTEGER(FP) != 45) goto L_015D;
// 1767 fp = fp+1; matched = 1
FP = FP + 1;
MATCHED = 1;
// 1768 jammy = 2
JAMMY = 2;
// 1769 get VALUE(ditem1_type)
GETVALUE(DITEM1->TYPE);
// 1770 ! put2(jamassign,item1)
// 1771 %else
goto L_0159;
L_015D:;
// 1772 syntax error %if %not a(arrow)
if (A(79)) goto L_015E;
SYNTAXERROR();
L_015E:;
// 1773 get RESOLUTION
GETRESOLUTION();
// 1774 ! put2(resolve,item1)
// 1775 %finish
L_0159:;
// 1776 %else
goto L_015F;
L_0157:;
// 1777 error(caterr+point) %if ditem_flags&proc = 0
if (DITEM->FLAGS & 4 != 0) goto L_0160;
ERROR(3 + 64);
L_0160:;
// 1778 ditem == dict(ditem_type) %if ditem_flags&parm # 0
if (DITEM->FLAGS & 64 == 0) goto L_0161;
DITEM = (struct IDENTINFO *)/*?*/ &DICT[DITEM->TYPE - 2001];
L_0161:;
// 1779 error(caterr+point) %if ditem_type # nulltype
if (DITEM->TYPE == 2041) goto L_0162;
ERROR(3 + 64);
L_0162:;
// 1780 %if a(left) %start
if (!(A(55))) goto L_0163;
// 1781 get PARMLIST; get(right)
GETPARMLIST();
GET(60);
// 1782 %else; !parameterless routine
goto L_0164;
L_0163:;
// 1783 error(toofew+point) %if ditem_flags&more # 0
if (DITEM->FLAGS & 128 == 0) goto L_0165;
ERROR(33 + 64);
L_0165:;
// 1784 ! put3(rcall,item,0)
// 1785 %finish
L_0164:;
// 1786 %finish
L_015F:;
// 1787 %finish %else %start
goto L_0166;
L_0155:;
// 1788 act = atom; hold = subatom; t_val = 0
ACT = ATOM;
HOLD = SUBATOM;
T.VAL = 0;
// 1789 c_access = 0
C.ACCESS = 0;
// 1790 %if a(monitor) %start
if (!(A(13))) goto L_0167;
// 1791 c_access = 1
C.ACCESS = 1;
// 1792 ! fault(monitor<<8)
// 1793 %else %if a(exit); !%exit, %continue
goto L_0168;
L_0167:;
if (!(A(6))) goto L_0169;
// 1794 %if looplab = 0 %then fault(notinloop+point) %c
if (LOOPLAB != 0) goto L_016A;
FAULT(16 + 64);
goto L_016B;
L_016A:;
T.VAL = LOOPLAB;
PUTACT();
L_016B:;
// 1795+ %else t_val = looplab %and putact
// 1796 %exit
goto L_016C;
// 1797 %else %if a(return)
L_0169:;
if (!(A(7))) goto L_016D;
// 1798 %if c_type # nulltype %then fault(notinrout+point) %c
if (C.TYPE == 2041) goto L_016E;
FAULT(17 + 64);
goto L_016F;
L_016E:;
PUTACT();
L_016F:;
// 1799+ %else putact
// 1800 %exit
goto L_016C;
// 1801 %else %if a(result)
L_016D:;
if (!(A(9))) goto L_0170;
// 1802 error(notinfun+point) %if c_type <= nulltype
if (C.TYPE > 2041) goto L_0171;
ERROR(18 + 64);
L_0171:;
// 1803 syntax error %if %not a assop
if (AASSOP()) goto L_0172;
SYNTAXERROR();
L_0172:;
// 1804 %if c_type < direct %start; !function
if (C.TYPE >= 8192) goto L_0173;
// 1805 fault(caterr+point) %if atom = eqeq
if (ATOM != 76) goto L_0174;
FAULT(3 + 64);
L_0174:;
// 1806 get VALUE(c_type)
GETVALUE(C.TYPE);
// 1807 ! put2(result,0)
// 1808 %else; !map
goto L_0175;
L_0173:;
// 1809 fault(caterr+point) %if atom # eqeq
if (ATOM == 76) goto L_0176;
FAULT(3 + 64);
L_0176:;
// 1810 get REFERENCE(c_type+(indirect-direct))
GETREFERENCE(C.TYPE + (16384 - 8192));
// 1811 ! put2(result,0)
// 1812 %finish
L_0175:;
// 1813 %exit
goto L_016C;
// 1814 %else %if a(tf); !%true, %false
L_0170:;
if (!(A(8))) goto L_0177;
// 1815 %if c_type # booltype %then fault(notinpred+point) %c
if (C.TYPE == 2048) goto L_0178;
FAULT(19 + 64);
goto L_0179;
L_0178:;
PUTACT();
L_0179:;
// 1816+ %else putact
// 1817 %exit
goto L_016C;
// 1818 %else %if a(arrow) %or a(goto)
L_0177:;
if (A(79)) goto L_017A;
if (!(A(11))) goto L_017B;
L_017A:;
// 1819 nonstandard(kgoto) %if atom = goto
if (ATOM != 11) goto L_017C;
NONSTANDARD(128);
L_017C:;
// 1820 get(ident)
GET(54);
// 1821 %if byteinteger(fp) # '(' %start
if (*_imp_BYTEINTEGER(FP) == 40) goto L_017D;
// 1822 %if item < c_localdpos %or ditem_flags&lab = 0 %c
if (ITEM < C.LOCALDPOS) goto L_017E;
if (DITEM->FLAGS & 2 == 0) goto L_017E;
if (DITEM->TYPE == 2041) goto L_017F;
L_017E:;
// 1823+ %or ditem_type # nulltype %start
// 1824 d_flags = spec+lab; d_type = nulltype
D.FLAGS = 16 + 2;
D.TYPE = 2041;
// 1825 declare
DECLARE();
// 1826 %finish
L_017F:;
// 1827 ! put3(jump,item,0)
// 1828 %finish %else %start
goto L_0180;
L_017D:;
// 1829 name error %if item < c_localdpos
if (ITEM >= C.LOCALDPOS) goto L_0181;
NAMEERROR();
L_0181:;
// 1830 syntax error %if ditem_flags&lab = 0 %or ditem_type = nulltype
if (DITEM->FLAGS & 2 == 0) goto L_0182;
if (DITEM->TYPE != 2041) goto L_0183;
L_0182:;
SYNTAXERROR();
L_0183:;
// 1831 get(left)
GET(55);
// 1832 get VALUE(ditem_type); !index
GETVALUE(DITEM->TYPE);
// 1833 get(right)
GET(60);
// 1834 %finish
L_0180:;
// 1835 %exit
goto L_016C;
// 1836 %else %if a(stop)
L_017B:;
if (!(A(10))) goto L_0184;
// 1837 putact
PUTACT();
// 1838 %exit
goto L_016C;
// 1839 %else %if a(signal)
L_0184:;
if (!(A(12))) goto L_0185;
// 1840 c_access = 1
C.ACCESS = 1;
// 1841 allow(keyevent)
ALLOW(44);
// 1842 get LITINT
GETLITINT();
// 1843 expfault(rangerr+point) %unless 0 <= t_val <= 15
{
// Double-sided test on T.VAL (Part I)
int tmp;
if (0 > (tmp = T.VAL)) goto L_0186;
// Double-sided test on T.VAL (Part II)
if (tmp <= 15) goto L_0187;
}
L_0186:;
EXPFAULT(12 + 64);
L_0187:;
// 1844 hold = t_val; t_val = 0
HOLD = T.VAL;
T.VAL = 0;
// 1845 get LITINT %if a(comma)
if (!(A(59))) goto L_0188;
GETLITINT();
L_0188:;
// 1846 hold = t_val<<4+hold
HOLD = (T.VAL << 4) + HOLD;
// 1847 item = 0; t_val = 0
ITEM = 0;
T.VAL = 0;
// 1848 get VALUE(anyint) %if a(comma)
if (!(A(59))) goto L_0189;
GETVALUE(10238);
L_0189:;
// 1849 ! put2(act,hold)
// 1850 %exit
goto L_016C;
// 1851 %else
L_0185:;
// 1852 syntax error
SYNTAXERROR();
// 1853 %finish
L_0168:;
// 1854 %finish
L_0166:;
// 1855 %repeat %until %not a(keyand)
if (!(A(64))) goto L_016C;
goto L_0154;
L_016C:;
// 1856 %end; !GET INSTRUCTION
return;
} /* end of GETINSTRUCTION */
// 1857
// 1858 %routine GET FOR CLAUSE
void GETFORCLAUSE(void) {
// 1859 %integer loopvar,k,s,start,sval,i,inc,ival,e,n,temp
int LOOPVAR;
int K;
int S;
int START;
int SVAL;
int I;
int INC;
int IVAL;
int E;
int N;
int TEMP;
// 1860 %integer eval
int EVAL;
// 1861 %record(identinfo)%name dp
struct IDENTINFO *DP;
// 1862 holdnp = np; temp = 0
HOLDNP = NP;
TEMP = 0;
// 1863 dict(curlab)_val = 1; !dummy
DICT[CURLAB - 2001].VAL = 1;
// 1864 condnp = np
CONDNP = NP;
// 1865 get(ident)
GET(54);
// 1866 name error %if item <= 0
if (ITEM > 0) goto L_018A;
NAMEERROR();
L_018A:;
// 1867 fault(typerr+point) %if dict(ditem_type&puretype)_type # inty
if (DICT[(DITEM->TYPE & 8191) - 2001].TYPE == 2046) goto L_018B;
FAULT(6 + 64);
L_018B:;
// 1868 fault(caterr+point+warn) %if ditem_type # direct+inttype
if (DITEM->TYPE == 8192 + 2051) goto L_018C;
FAULT(3 + 64 + 128);
L_018C:;
// 1869 loopvar = item; dp == ditem
LOOPVAR = ITEM;
DP = (struct IDENTINFO *)DITEM;
// 1870 get(equals)
GET(70);
// 1871 get VALUE(ditem_type)
GETVALUE(DITEM->TYPE);
// 1872 start = item; sval = t_val
START = ITEM;
SVAL = T.VAL;
// 1873 get(comma)
GET(59);
// 1874 get VALUE(anyint)
GETVALUE(10238);
// 1875 inc = item; ival = t_val
INC = ITEM;
IVAL = T.VAL;
// 1876 expfault(rangerr+point) %and ival = 1 %if inc = 0 = ival
{
// Double-sided test on 0 (Part I)
int tmp;
if (INC != (tmp = 0)) goto L_018D;
// Double-sided test on 0 (Part II)
if (tmp != IVAL) goto L_018D;
}
EXPFAULT(12 + 64);
IVAL = 1;
L_018D:;
// 1877 get(comma)
GET(59);
// 1878 get VALUE(ditem_type)
GETVALUE(DITEM->TYPE);
// 1879 !Deal with INC and replace START by START-INC
// 1880 ! k = undef
// 1881 ! k = exp(start)_y %if start >= expmin %and exp(start)_act = plus
// 1882 %if inc = 0 %start; !literal increment
if (INC != 0) goto L_018E;
// 1883 i = 1; !litref(ival)
I = 1;
// 1884 %if start = 0 %start; !START and INC both literal
if (START != 0) goto L_018F;
// 1885 sval = sval-ival; s = 1; !litref(sval)
SVAL = SVAL - IVAL;
S = 1;
// 1886 ! %else %if k <= litmax; !START is x+lit
// 1887 ! k = ival-litval(k)
// 1888 ! s = exp(start)_x; s = explo;!expref(plus,s,litref(k)) %if k # 0
// 1889 %else
goto L_0190;
L_018F:;
// 1890 s = explo;!expref(plus,start,litref(-ival))
S = EXPLO;
// 1891 %finish
L_0190:;
// 1892 %finish %else %start; !allocate temp var
goto L_0191;
L_018E:;
// 1893 ! i = tempvar; put3(assign,i,inc); temp = temp-4
// 1894 ! %if start = inc %start; !identical
// 1895 ! s = 0; sval = 0
// 1896 ! %else %if k = inc; !START is x+INC
// 1897 ! s = exp(start)_x
// 1898 ! %else
// 1899 ! s = start; s = litref(sval) %if s = 0
// 1900 s = explo;!expref(minus,s,i)
S = EXPLO;
// 1901 ! %finish
// 1902 %finish
L_0191:;
// 1903 ! %if item = 0 %start; !literal end-value
// 1904 ! e = litref(t_val); eval = t_val
// 1905 ! %finish %else %start
// 1906 ! e = tempvar; put3(assign,e,item); temp = temp-4
// 1907 ! %finish
// 1908 ! put3(assign,loopvar,s)
// 1909 ! put3(label,curlab,0)
// 1910 %if start!inc!item = 0 %start; !all literal
if (START | INC | ITEM != 0) goto L_0192;
// 1911 k = t_val-sval; n = k//ival
K = T.VAL - SVAL;
N = ((long)K / (long)IVAL);
// 1912 fault(boundserr) %if n < 0
if (N >= 0) goto L_0193;
FAULT(14);
L_0193:;
// 1913 fault(unending) %if n*ival # k
if (N * IVAL == K) goto L_0194;
FAULT(37);
L_0194:;
// 1914 ! %if 0 <= t_val <= 32767 %start
// 1915 ! temp = loopvar
// 1916 ! %finish
// 1917 %finish
L_0192:;
// 1918 ! %if temp <= 0 %start
// 1919 ! c_fortemps = c_fortemps-temp; !ie increment
// 1920 ! put3(compare,loopvar,e)
// 1921 ! put3(eq,0,curlab+1)
// 1922 ! %finish
// 1923 ! put3(plusass,loopvar,i)
// 1924 ! compile(holdnp,np)
// 1925 %end;
return;
} /* end of GETFORCLAUSE */
// ?EVAL unused
// ?E unused
// 1926 ; !get FORCLAUSE
// 1926
// 1927 %routine GET SWITCH INDEX
void GETSWITCHINDEX(void) {
// 1928 %integer item1
int ITEM1;
// 1929 %record(identinfo)%name dp
struct IDENTINFO *DP;
// 1930 item1 = item; dp == ditem
ITEM1 = ITEM;
DP = (struct IDENTINFO *)DITEM;
// 1931 get(left)
GET(55);
// 1932 item = 1
ITEM = 1;
// 1933 %if a(star) %start
if (!(A(88))) goto L_0195;
// 1934 fault(duperr+point) %if dp_spare # 0
if (DP->SPARE == 0) goto L_0196;
FAULT(7 + 64);
L_0196:;
// 1935 dp_spare = 1
DP->SPARE = 1;
// 1936 %else
goto L_0197;
L_0195:;
// 1937 get LITERAL(dp_type)
GETLITERAL(DP->TYPE);
// 1938 !beware faulty declaration or index
// 1939 %if dp_type > inttype %and faultnum = 0 %start
if (DP->TYPE <= 2051) goto L_0198;
if (FAULTNUM != 0) goto L_0198;
// 1940 t_val = t_val-dict(dp_type)_low+dp_val
T.VAL = T.VAL - DICT[DP->TYPE - 2001].LOW + DP->VAL;
// 1941 expfault(duperr+point) %if final(t_val) # 0
if (FINAL[T.VAL] == 0) goto L_0199;
EXPFAULT(7 + 64);
L_0199:;
// 1942 ! define jumps(final(t_val)); !in case of lit jumps
// 1943 final(t_val) = 1
FINAL[T.VAL] = 1;
// 1944 %finish
L_0198:;
// 1945 %finish
L_0197:;
// 1946 get(right)
GET(60);
// 1947 c_access = 1
C.ACCESS = 1;
// 1948 %end
return;
} /* end of GETSWITCHINDEX */
// 1949
// 1950 ![unsure of efficiency implications of trapping overflow lower down]
// 1951 %on %event 1,14 %start
if (!_imp_on_event(1, 14)) goto L_019A;
// 1952 !$IF VAX
// 1953 report(rangerr,0) %if event_event = 1
if (_imp_EVENT().EVENT != 1) goto L_019B;
REPORT(12, 0);
L_019B:;
// 1954 !$IF AMDAHL
// 1955 { report(rangerr,0) %if eventinf>>8 = 1
// 1956 !$FINISH
// 1957 -> skip
goto U_100A;
// 1958 %finish
L_019A:;
// 1959 !!!!!!!!!!!!!!!!!!! Start of new statement !!!!!!!!!!!!!!!!!!!
// 1960 next:
U_100B:;
// 1961 statements = statements+1
STATEMENTS = STATEMENTS + 1;
// 1962 next1:
U_100C:;
// 1963 report(faultnum,faultp) %if faultnum # 0
if (FAULTNUM == 0) goto L_019C;
REPORT(FAULTNUM, FAULTP);
L_019C:;
// 1964 d = 0; declmode = 0; dsize = 0
D = (struct IDENTINFO){0};
DECLMODE = 0;
DSIZE = 0;
// 1965 dlim0 = dlim; elements = 0
DLIM0 = DLIM;
ELEMENTS = 0;
// 1966 speccing = 0; mcoding = 0
SPECCING = 0;
MCODING = 0;
// 1967 literal = 0; jammy = 0
LITERAL = 0;
JAMMY = 0;
// 1968 dict(curlab)_val = 0; dict(curlab+1)_val = 0
DICT[CURLAB - 2001].VAL = 0;
DICT[CURLAB + 1 - 2001].VAL = 0;
// 1969 np = np0; instnp = np0; condnp = np0
NP = 3255;
INSTNP = 3255;
CONDNP = 3255;
// 1970 ! constad == finalad; constbound = purebound
// 1971 %if explo < expmin+50 %or litpos > litmax-50 %start
if (EXPLO < 3255 + 50) goto L_019D;
if (LITPOS <= 2000 - 50) goto L_019E;
L_019D:;
// 1972 !zaps = zaps+1; zaps = zaps+999 %if litpos > litmax-50
// 1973 forget all
FORGETALL();
// 1974 %finish
L_019E:;
// 1975 t_val = 0
T.VAL = 0;
// 1976 !
// 1977 initial(terminator):
case_INITIAL_52:;
// 1978 atom = next atom; matched = 1
ATOM = NEXTATOM();
MATCHED = 1;
// 1979 -> initial(atom)
INITIAL_line = __LINE__;
INITIAL_file = __FILE__;
INITIAL_index = ATOM;
goto case_INITIAL_dispatch;
// 1980 initial(star): initial(exclam): initial(exclam2):
case_INITIAL_88:;
case_INITIAL_82:;
case_INITIAL_83:;
// 1981 read line
READLINE();
// 1982 -> next1
goto U_100C;
// 1983 term:
U_1009:;
// 1984 get(terminator)
GET(52);
// 1985 -> next
goto U_100B;
// 1986
// 1987 skip:
U_100A:;
// 1988 c_access = -1
C.ACCESS = -1;
// 1989 %if atom # terminator %start
if (ATOM == 52) goto L_01A0;
// 1990 %cycle
L_01A1:;
// 1991 subatom = atom; atom = next atom
SUBATOM = ATOM;
ATOM = NEXTATOM();
// 1992 %repeat %until atom = terminator
if (ATOM == 52) goto L_01A2;
goto L_01A1;
L_01A2:;
// 1993 starts = starts+1 %if subatom = start
if (SUBATOM != 21) goto L_01A3;
STARTS = STARTS + 1;
L_01A3:;
// 1994 cycles = cycles+1 %if subatom = cycle
if (SUBATOM != 22) goto L_01A4;
CYCLES = CYCLES + 1;
L_01A4:;
// 1995 %finish
L_01A0:;
// 1996 -> next
goto U_100B;
// 1997
// 1998 initial(dud):
case_INITIAL_63:;
// 1999 syntax error; !ie atom error
SYNTAXERROR();
// 2000
// 2001 initial(*):
case_INITIAL_default:;
// 2002 error(nonstarter+point)
ERROR(29 + 64);
// 2003
// 2004 initial(ident):
case_INITIAL_54:;
// 2005 %if byteinteger(fp) = ':' %start; !simple label
if (*_imp_BYTEINTEGER(FP) != 58) goto L_01A5;
// 2006 fp = fp+1
FP = FP + 1;
// 2007 d_flags = lab; d_type = nulltype
D.FLAGS = 2;
D.TYPE = 2041;
// 2008 declare
DECLARE();
// 2009 set user label(item)
SETUSERLABEL(ITEM);
// 2010 ->next
goto U_100B;
// 2011 %finish
L_01A5:;
// 2012 name error %if item <= 0
if (ITEM > 0) goto L_01A6;
NAMEERROR();
L_01A6:;
// 2013 %if ditem_flags&lab # 0 %start
if (DITEM->FLAGS & 2 == 0) goto L_01A7;
// 2014 get SWITCH INDEX
GETSWITCHINDEX();
// 2015 get(colon)
GET(58);
// 2016 ->next
goto U_100B;
// 2017 %finish
L_01A7:;
// 2018 initial(return): initial(result): initial(tf):
case_INITIAL_7:;
case_INITIAL_9:;
case_INITIAL_8:;
// 2019 initial(stop): initial(signal): initial(monitor):
case_INITIAL_10:;
case_INITIAL_12:;
case_INITIAL_13:;
// 2020 initial(exit): initial(goto): initial(arrow):
case_INITIAL_6:;
case_INITIAL_11:;
case_INITIAL_79:;
// 2021 matched = 0
MATCHED = 0;
// 2022 get INSTRUCTION
GETINSTRUCTION();
// 2023 -> next %if a(terminator)
if (!(A(52))) goto L_01A8;
goto U_100B;
L_01A8:;
// 2024 c_access = 1
C.ACCESS = 1;
// 2025 %if a(iu) %start
if (!(A(16))) goto L_01A9;
// 2026 holdnp = np
HOLDNP = NP;
// 2027 get CONDITION
GETCONDITION();
// 2028 ! compile(holdnp,np)
// 2029 %else %if a(while)
goto L_01AA;
L_01A9:;
if (!(A(17))) goto L_01AB;
// 2030 holdnp = np
HOLDNP = NP;
// 2031 ! put3(label,curlab,0)
// 2032 get CONDITION
GETCONDITION();
// 2033 ! compile(holdnp,np)
// 2034 ! put3(jump,curlab,0)
// 2035 ! put3(label,curlab+1,0)
// 2036 %else %if a(for)
goto L_01AA;
L_01AB:;
if (!(A(19))) goto L_01AC;
// 2037 get FOR CLAUSE
GETFORCLAUSE();
// 2038 ! put3(jump,curlab,0)
// 2039 ! put3(label,curlab+1,0)
// 2040 %else
goto L_01AA;
L_01AC:;
// 2041 syntax error %if %not a(until)
if (A(18)) goto L_01AD;
SYNTAXERROR();
L_01AD:;
// 2042 get CONDITION
GETCONDITION();
// 2043 %finish
L_01AA:;
// 2044 -> term
goto U_1009;
// 2045
// 2046 initial(iu): !%if, %unless
case_INITIAL_16:;
// 2047 %cycle
L_01AE:;
// 2048 holdnp = np
HOLDNP = NP;
// 2049 get CONDITION
GETCONDITION();
// 2050 ! compile(holdnp,np)
// 2051 %if a(then) %start
if (!(A(20))) goto L_01AF;
// 2052 -> fudge %if a(start)
if (!(A(21))) goto L_01B0;
goto U_100D;
L_01B0:;
// 2053 get INSTRUCTION
GETINSTRUCTION();
// 2054 %finish %else %start
goto L_01B1;
L_01AF:;
// 2055 get(start)
GET(21);
// 2056 fudge:
U_100D:;
// 2057 %cycle
L_01B2:;
// 2058 get(terminator)
GET(52);
// 2059 curlab = curlab+2
CURLAB = CURLAB + 2;
// 2060 get STATEMENTS(else)
GETSTATEMENTS(4);
// 2061 curlab = curlab-2
CURLAB = CURLAB - 2;
// 2062 %exit %if atom # else; !%finish ->
if (ATOM == 4) goto L_01B3;
goto L_01B4;
L_01B3:;
// 2063 get CONDITION %if a(iu)
if (!(A(16))) goto L_01B5;
GETCONDITION();
L_01B5:;
// 2064 %repeat
goto L_01B2;
L_01B4:;
// 2065 %return %if atom # finish
if (ATOM == 3) goto L_01B6;
return;
L_01B6:;
// 2066 %finish
L_01B1:;
// 2067 %exit %if %not a(else)
if (A(4)) goto L_01B7;
goto L_01B8;
L_01B7:;
// 2068 -> fudge %if a(start)
if (!(A(21))) goto L_01B9;
goto U_100D;
L_01B9:;
// 2069 get INSTRUCTION %and %exit %if %not a(iu)
if (A(16)) goto L_01BA;
GETINSTRUCTION();
goto L_01B8;
L_01BA:;
// 2070 %repeat
goto L_01AE;
L_01B8:;
// 2071 -> term
goto U_1009;
// 2072
// 2073 initial(cycle):
case_INITIAL_22:;
// 2074 %if a(terminator) %start
if (!(A(52))) goto L_01BB;
// 2075 holdlooplab = looplab; looplab = curlab
HOLDLOOPLAB = LOOPLAB;
LOOPLAB = CURLAB;
// 2076 curlab = curlab+2
CURLAB = CURLAB + 2;
// 2077 get STATEMENTS(repeat)
GETSTATEMENTS(2);
// 2078 curlab = curlab-2; looplab = holdlooplab
CURLAB = CURLAB - 2;
LOOPLAB = HOLDLOOPLAB;
// 2079 %return %if atom # repeat
if (ATOM == 2) goto L_01BC;
return;
L_01BC:;
// 2080 get CONDITION %if a(until)
if (!(A(18))) goto L_01BD;
GETCONDITION();
L_01BD:;
// 2081 -> term
goto U_1009;
// 2082 %finish
L_01BB:;
// 2083 nonstandard(oldcycle)
NONSTANDARD(4096);
// 2084 get FOR CLAUSE
GETFORCLAUSE();
// 2085 -> for1
goto U_100E;
// 2086 initial(while):
case_INITIAL_17:;
// 2087 holdnp = np
HOLDNP = NP;
// 2088 ! put3(label,curlab,0)
// 2089 get CONDITION
GETCONDITION();
// 2090 ! compile(holdnp,np)
// 2091 get(cycle)
GET(22);
// 2092 get(terminator)
GET(52);
// 2093 holdlooplab = looplab; looplab = curlab
HOLDLOOPLAB = LOOPLAB;
LOOPLAB = CURLAB;
// 2094 curlab = curlab+2
CURLAB = CURLAB + 2;
// 2095 get STATEMENTS(repeat)
GETSTATEMENTS(2);
// 2096 curlab = curlab-2; looplab = holdlooplab
CURLAB = CURLAB - 2;
LOOPLAB = HOLDLOOPLAB;
// 2097 %return %if atom # repeat
if (ATOM == 2) goto L_01BE;
return;
L_01BE:;
// 2098 nonstandard(loop2) %and get CONDITION %if a(until)
if (!(A(18))) goto L_01BF;
NONSTANDARD(8192);
GETCONDITION();
L_01BF:;
// 2099 ! put3(jump,curlab,0)
// 2100 ! put3(label,curlab+1,0)
// 2101 ->term
goto U_1009;
// 2102 initial(for):
case_INITIAL_19:;
// 2103 get FOR CLAUSE
GETFORCLAUSE();
// 2104 get(cycle)
GET(22);
// 2105 for1:
U_100E:;
// 2106 get(terminator)
GET(52);
// 2107 holdlooplab = looplab; looplab = curlab
HOLDLOOPLAB = LOOPLAB;
LOOPLAB = CURLAB;
// 2108 curlab = curlab+2
CURLAB = CURLAB + 2;
// 2109 get STATEMENTS(repeat)
GETSTATEMENTS(2);
// 2110 curlab = curlab-2; looplab = holdlooplab
CURLAB = CURLAB - 2;
LOOPLAB = HOLDLOOPLAB;
// 2111 %return %if atom # repeat
if (ATOM == 2) goto L_01C0;
return;
L_01C0:;
// 2112 ! put3(repeat,0,0)
// 2113 -> term
goto U_1009;
// 2114
// 2115 initial(on):
case_INITIAL_15:;
// 2116 fault(ordererr+point) %if c_flags >= hadon %or level <= outerlevel
if (C.FLAGS >= 16) goto L_01C1;
if (LEVEL > 0) goto L_01C2;
L_01C1:;
FAULT(10 + 64);
L_01C2:;
// 2117 c_flags = c_flags!hadon
C.FLAGS = C.FLAGS | 16;
// 2118 matched = 1
MATCHED = 1;
// 2119 allow(keyevent)
ALLOW(44);
// 2120 %cycle
L_01C3:;
// 2121 get LITINT
GETLITINT();
// 2122 expfault(rangerr+point) %unless 0 <= t_val <= 15
{
// Double-sided test on T.VAL (Part I)
int tmp;
if (0 > (tmp = T.VAL)) goto L_01C4;
// Double-sided test on T.VAL (Part II)
if (tmp <= 15) goto L_01C5;
}
L_01C4:;
EXPFAULT(12 + 64);
L_01C5:;
// 2123 c_events = c_events!1<<t_val
C.EVENTS = C.EVENTS | 1 << T.VAL;
// 2124 %repeat %until %not a(comma)
if (!(A(59))) goto L_01C6;
goto L_01C3;
L_01C6:;
// 2125 get(start)
GET(21);
// 2126 ! put3(on,0,0)
// 2127 curlab = curlab+2
CURLAB = CURLAB + 2;
// 2128 get STATEMENTS(finish)
GETSTATEMENTS(3);
// 2129 curlab = curlab-2
CURLAB = CURLAB - 2;
// 2130 %return %if atom # finish
if (ATOM == 3) goto L_01C7;
return;
L_01C7:;
// 2131 -> term
goto U_1009;
// 2132 !
// 2133 initial(else):
case_INITIAL_4:;
// 2134 -> skip %if starts # 0
if (STARTS == 0) goto L_01C8;
goto U_100A;
L_01C8:;
// 2135 %return %if stopper = else
if (STOPPER != 4) goto L_01C9;
return;
L_01C9:;
// 2136 error(noif) %if stopper = finish
if (STOPPER != 3) goto L_01CA;
ERROR(21);
L_01CA:;
// 2137 initial(finish):
case_INITIAL_3:;
// 2138 starts = starts-1 %and -> skip %if starts # 0
if (STARTS == 0) goto L_01CB;
STARTS = STARTS - 1;
goto U_100A;
L_01CB:;
// 2139 %return %if stopper = finish %or stopper = else
if (STOPPER == 3) goto L_01CC;
if (STOPPER != 4) goto L_01CD;
L_01CC:;
return;
L_01CD:;
// 2140 error(nostart)
ERROR(8);
// 2141 initial(repeat):
case_INITIAL_2:;
// 2142 cycles = cycles-1 %and -> skip %if cycles # 0
if (CYCLES == 0) goto L_01CE;
CYCLES = CYCLES - 1;
goto U_100A;
L_01CE:;
// 2143 %return %if stopper = repeat
if (STOPPER != 2) goto L_01CF;
return;
L_01CF:;
// 2144 error(nocycle)
ERROR(9);
// 2145
// 2146 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 2147 !!!!!!!!!!!!!!!!!!!! Declarations !!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 2148 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 2149 !
// 2150 %integerfn NEWATYPE(%integer eltype,xtype)
int NEWATYPE(int ELTYPE, int XTYPE) {
// 2151 %integer dpos
int DPOS;
// 2152 %record(identinfo)%name dp
struct IDENTINFO *DP;
// 2153 %ownrecord(identinfo) d=0
static struct IDENTINFO D = {0};
// 2154 dpos = dictmin
DPOS = 2041;
// 2155 %cycle
L_01D0:;
// 2156 dp == dict(dpos)
DP = (struct IDENTINFO *)/*?*/ &DICT[DPOS - 2001];
// 2157 %result = dpos+direct %if dp_flags&typeid # 0 %c
if (DP->FLAGS & 256 == 0) goto L_01D1;
if (DP->TYPE != ELTYPE) goto L_01D1;
if (DP->VAL != XTYPE) goto L_01D1;
return DPOS + 8192;
L_01D1:;
// 2158+ %and dp_type = eltype %and dp_val = xtype
// 2159 dpos = dpos+1
DPOS = DPOS + 1;
// 2160 %repeat %until dpos = dlim
if (DPOS == DLIM) goto L_01D2;
goto L_01D0;
L_01D2:;
// 2161 d_flags = typeid; d_type = eltype; d_val = xtype
D.FLAGS = 256;
D.TYPE = ELTYPE;
D.VAL = XTYPE;
// 2162 dict(dpos) = d
DICT[DPOS - 2001] = D;
// 2163 dlim = dlim+1; croak("Too many identifers") %if dlim >= dmin
DLIM = DLIM + 1;
if (DLIM < DMIN) goto L_01D3;
CROAK(_imp_str_literal("Too many identifers"));
L_01D3:;
// 2164 %result = dpos+direct
return DPOS + 8192;
// 2165 %end
} /* end of NEWATYPE */
// 2166 !
// 2167 %integerfn NEWSTYPE(%integer max)
int NEWSTYPE(int MAX) {
// 2168 %integer dpos
int DPOS;
// 2169 %record(identinfo)%name dp
struct IDENTINFO *DP;
// 2170 %ownrecord(identinfo) d=0
static struct IDENTINFO D = {0};
// 2171 dpos = dictmin
DPOS = 2041;
// 2172 %cycle
L_01D4:;
// 2173 dp == dict(dpos)
DP = (struct IDENTINFO *)/*?*/ &DICT[DPOS - 2001];
// 2174 %result = dpos %if dp_type = stringy %and dp_val = max
if (DP->TYPE != 2044) goto L_01D5;
if (DP->VAL != MAX) goto L_01D5;
return DPOS;
L_01D5:;
// 2175 dpos = dpos+1
DPOS = DPOS + 1;
// 2176 %repeat %until dpos = dlim
if (DPOS == DLIM) goto L_01D6;
goto L_01D4;
L_01D6:;
// 2177 d_flags = typeid; d_type = stringy
D.FLAGS = 256;
D.TYPE = 2044;
// 2178 d_val = max
D.VAL = MAX;
// 2179 dict(dpos) = d
DICT[DPOS - 2001] = D;
// 2180 dlim = dlim+1; croak("Too many identifers") %if dlim >= dmin
DLIM = DLIM + 1;
if (DLIM < DMIN) goto L_01D7;
CROAK(_imp_str_literal("Too many identifers"));
L_01D7:;
// 2181 %result = dpos
return DPOS;
// 2182 %end
} /* end of NEWSTYPE */
// 2183 !
// 2184 %integerfn NEWRANGE(%integer type,lower,upper)
int NEWRANGE(int TYPE, int LOWER, int UPPER) {
// 2185 %integer dpos
int DPOS;
// 2186 %record(identinfo)%name dp
struct IDENTINFO *DP;
// 2187 %ownrecord(identinfo) d=0
static struct IDENTINFO D = {0};
// 2188 fault(boundserr) %and upper = lower %if lower > upper
if (LOWER <= UPPER) goto L_01D8;
FAULT(14);
UPPER = LOWER;
L_01D8:;
// 2189 elements = maxint
ELEMENTS = 2147483647;
// 2190 elements = upper-lower %if upper!!lower >= 0 %c
if (UPPER ^ LOWER >= 0) goto L_01D9;
if ((-2147483648) + UPPER - LOWER >= 0) goto L_01DA;
L_01D9:;
ELEMENTS = UPPER - LOWER;
L_01DA:;
// 2191+ %or minint+upper-lower < 0
// 2192 elements = elements+1 %if elements # maxint
if (ELEMENTS == 2147483647) goto L_01DB;
ELEMENTS = ELEMENTS + 1;
L_01DB:;
// 2193 dpos = dictmin
DPOS = 2041;
// 2194 %cycle
L_01DC:;
// 2195 dp == dict(dpos)
DP = (struct IDENTINFO *)/*?*/ &DICT[DPOS - 2001];
// 2196 %result = dpos %if dp_flags = typeid %and dp_type = type %c
if (DP->FLAGS != 256) goto L_01DD;
if (DP->TYPE != TYPE) goto L_01DD;
if (DP->LOW != LOWER) goto L_01DD;
if (DP->VAL != UPPER) goto L_01DD;
return DPOS;
L_01DD:;
// 2197+ %and dp_low = lower %and dp_val = upper
// 2198 dpos = dpos+1
DPOS = DPOS + 1;
// 2199 %repeat %until dpos = dlim
if (DPOS == DLIM) goto L_01DE;
goto L_01DC;
L_01DE:;
// 2200 d_flags = typeid; d_type = type
D.FLAGS = 256;
D.TYPE = TYPE;
// 2201 d_low = lower; d_val = upper
D.LOW = LOWER;
D.VAL = UPPER;
// 2202 dict(dpos) = d
DICT[DPOS - 2001] = D;
// 2203 dlim = dlim+1; croak("Too many identifers") %if dlim >= dmin
DLIM = DLIM + 1;
if (DLIM < DMIN) goto L_01DF;
CROAK(_imp_str_literal("Too many identifers"));
L_01DF:;
// 2204 %result = dpos
return DPOS;
// 2205 %end
} /* end of NEWRANGE */
// 2206
// 2207 %routine GET LITBOUNDS
void GETLITBOUNDS(void) {
// 2208 %integer lower
int LOWER;
// 2209 get(left)
GET(55);
// 2210 get LITINT; lower = t_val
GETLITINT();
LOWER = T.VAL;
// 2211 get(colon)
GET(58);
// 2212 get LITINT;
GETLITINT();
// 2213 get(right)
GET(60);
// 2214 t_low = lower
T.LOW = LOWER;
// 2215 item = newrange(inty,t_low,t_val); !always integer at present
ITEM = NEWRANGE(2046, T.LOW, T.VAL);
// 2216 %end
return;
} /* end of GETLITBOUNDS */
// 2217
// 2218 %routine GET IDENT
void GETIDENT(void) {
// 2219 dlim0 = dlim
DLIM0 = DLIM;
// 2220 get(ident)
GET(54);
// 2221 declare
DECLARE();
// 2222 get LITSTRING %if d_flags&ext # 0 %and a(alias)
if (D.FLAGS & 32 == 0) goto L_01E0;
if (!(A(46))) goto L_01E0;
GETLITSTRING();
L_01E0:;
// 2223 %end
return;
} /* end of GETIDENT */
// 2224
// 2225 %routine GET IDENTLIST
void GETIDENTLIST(void) {
// 2226 dlim0 = dlim
DLIM0 = DLIM;
// 2227 %cycle
L_01E1:;
// 2228 get(ident)
GET(54);
// 2229 declare
DECLARE();
// 2230 get LITSTRING %if d_flags&ext # 0 %and a(alias)
if (D.FLAGS & 32 == 0) goto L_01E2;
if (!(A(46))) goto L_01E2;
GETLITSTRING();
L_01E2:;
// 2231 %repeat %until %not a(comma)
if (!(A(59))) goto L_01E3;
goto L_01E1;
L_01E3:;
// 2232 %end
return;
} /* end of GETIDENTLIST */
// 2233
// 2234 %routine GET TYPE(%integer flags)
void GETTYPE(int FLAGS) {
// 2235 %owninteger fbase
static int FBASE;
// 2236 %ownrecord(identinfo)%name formp,fieldp
static struct IDENTINFO *FORMP;
static struct IDENTINFO *FIELDP;
// 2237 !
// 2238 %routine GET FORMATDEF; !(%integername base)
void GETFORMATDEF(void) {
// 2239 %integer disp,max,base
int DISP;
int MAX;
int BASE;
// 2240 %routine GET FIELD IDENT
void GETFIELDIDENT(void) {
// 2241 get(ident)
GET(54);
// 2242 %if item > 0 %then d_text = ditem_text %c
if (ITEM <= 0) goto L_01E4;
D.TEXT = DITEM->TEXT;
goto L_01E5;
L_01E4:;
// 2243+ %else %start
// 2244 d_text = charlim-charbase; charlim = charlim+newlen+1
D.TEXT = CHARLIM - CHARBASE;
CHARLIM = CHARLIM + NEWLEN + 1;
// 2245 croak("Identifier space exhausted") %if charlim+80 >= charmin
if (CHARLIM + 80 < CHARMIN) goto L_01E6;
CROAK(_imp_str_literal("Identifier space exhausted"));
L_01E6:;
// 2246 %finish
L_01E5:;
// 2247 ditem == dict(dlim); fieldp == ditem
DITEM = (struct IDENTINFO *)/*?*/ &DICT[DLIM - 2001];
FIELDP = (struct IDENTINFO *)DITEM;
// 2248 ditem = d
*DITEM = D;
// 2249 %if formp_extra = 0 %then formp_extra = dlim %c
if (FORMP->EXTRA != 0) goto L_01E7;
FORMP->EXTRA = DLIM;
goto L_01E8;
L_01E7:;
// 2250+ %else %start
// 2251 ! lookup field ident(formp_extra)
// 2252 ! fault(duperr+point) %and item = dlim %if item # dlim
// 2253 %finish
L_01E8:;
// 2254 dlim = dlim+1; croak("Too many identifiers") %if dlim >= dmin
DLIM = DLIM + 1;
if (DLIM < DMIN) goto L_01E9;
CROAK(_imp_str_literal("Too many identifiers"));
L_01E9:;
// 2255 %end
return;
} /* end of GETFIELDIDENT */
// 2256 %routine get UNIT
void GETUNIT(void) {
// 2257 %cycle
L_01EA:;
// 2258 %if a(left) %start
if (!(A(55))) goto L_01EB;
// 2259 get FORMATDEF; get(right)
GETFORMATDEF();
GET(60);
// 2260 %return %if %not a(comma)
if (A(59)) goto L_01EC;
return;
L_01EC:;
// 2261 %else
goto L_01ED;
L_01EB:;
// 2262 get TYPE(static+more)
GETTYPE(8 + 128);
// 2263 %if d_flags&parm = 0 %start; !not array
if (D.FLAGS & 64 != 0) goto L_01EE;
// 2264 %cycle
L_01EF:;
// 2265 disp = disp+1 %if disp&1 # 0 %and dsize # 1
if (DISP & 1 == 0) goto L_01F0;
if (DSIZE == 1) goto L_01F0;
DISP = DISP + 1;
L_01F0:;
// 2266 d_val = disp
D.VAL = DISP;
// 2267 disp = disp+dsize
DISP = DISP + DSIZE;
// 2268 get FIELD IDENT
GETFIELDIDENT();
// 2269 %return %if %not a(comma)
if (A(59)) goto L_01F1;
return;
L_01F1:;
// 2270 atom = next atom
ATOM = NEXTATOM();
// 2271 %repeat %until atom # ident
if (ATOM != 54) goto L_01F2;
goto L_01EF;
L_01F2:;
// 2272 %else; !array
goto L_01F3;
L_01EE:;
// 2273 d_flags = d_flags-parm
D.FLAGS = D.FLAGS - 64;
// 2274 disp = disp+1 %if disp&1 # 0; d_val = disp
if (DISP & 1 == 0) goto L_01F4;
DISP = DISP + 1;
L_01F4:;
D.VAL = DISP;
// 2275 get FIELD IDENT
GETFIELDIDENT();
// 2276 get LITBOUNDS
GETLITBOUNDS();
// 2277 fieldp_type = newatype(d_type,item)
FIELDP->TYPE = NEWATYPE(D.TYPE, ITEM);
// 2278 disp = disp+dsize*elements
DISP = DISP + DSIZE * ELEMENTS;
// 2279 %return %if %not a(comma)
if (A(59)) goto L_01F5;
return;
L_01F5:;
// 2280 %finish
L_01F3:;
// 2281 %finish
L_01ED:;
// 2282 %repeat
goto L_01EA;
// 2283 %end
} /* end of GETUNIT */
// 2284 max = 0; base = 0
MAX = 0;
BASE = 0;
// 2285 %cycle
L_01F6:;
// 2286 disp = base
DISP = BASE;
// 2287 get UNIT
GETUNIT();
// 2288 max = disp %if max < disp
if (MAX >= DISP) goto L_01F7;
MAX = DISP;
L_01F7:;
// 2289 %repeat %until %not a(keyor)
if (!(A(65))) goto L_01F8;
goto L_01F6;
L_01F8:;
// 2290 base = max
BASE = MAX;
// 2291 %end; !get FORMATDEF
return;
} /* end of GETFORMATDEF */
// 2292
// 2293 dsize = 0; d_mode = 0; d_val = 0
DSIZE = 0;
D.MODE = 0;
D.VAL = 0;
// 2294 d_type = nulltype
D.TYPE = 2041;
// 2295 %if a(rpred) %start; !%routine,(%integerfn)
if (!(A(33))) goto L_01F9;
// 2296 flags = flags&(\static) %if flags&ext # 0
if (FLAGS & 32 == 0) goto L_01FA;
FLAGS = FLAGS & (~8);
L_01FA:;
// 2297 syntax error %if flags&static # 0
if (FLAGS & 8 == 0) goto L_01FB;
SYNTAXERROR();
L_01FB:;
// 2298 nonstandard(pred) %and d_type = booltype %if subatom # 0
if (SUBATOM == 0) goto L_01FC;
NONSTANDARD(1);
D.TYPE = 2048;
L_01FC:;
// 2299 d_flags = flags+proc; declmode = declmode+pcmode
D.FLAGS = FLAGS + 4;
DECLMODE = DECLMODE + 58;
// 2300 %return
return;
// 2301 %finish
L_01F9:;
// 2302 %if a(krange) %start; !%byte,%short,%half,%mite
if (!(A(25))) goto L_01FD;
// 2303 d_type = inttype+subatom; dsize = 1
D.TYPE = 2051 + SUBATOM;
DSIZE = 1;
// 2304 dsize = 2 %if d_type = shorttype %or d_type = halftype
if (D.TYPE == 2052) goto L_01FE;
if (D.TYPE != 2053) goto L_01FF;
L_01FE:;
DSIZE = 2;
L_01FF:;
// 2305 nonstandard(ranges) %if d_type >= mitetype
if (D.TYPE < 2055) goto L_0200;
NONSTANDARD(16);
L_0200:;
// 2306 allow(keyinteger)
ALLOW(27);
// 2307 %else %if a(keyinteger); !%integer
goto L_0201;
L_01FD:;
if (!(A(27))) goto L_0202;
// 2308 d_type = inttype; dsize = 4
D.TYPE = 2051;
DSIZE = 4;
// 2309 atom = next atom
ATOM = NEXTATOM();
// 2310 %if atom = left %start
if (ATOM != 55) goto L_0203;
// 2311 get LITBOUNDS
GETLITBOUNDS();
// 2312 d_type = item
D.TYPE = ITEM;
// 2313 dsize = 2 %if elements <= 65536 %and t_low >= -32768
if (ELEMENTS > 65536) goto L_0204;
if (T.LOW < -32768) goto L_0204;
DSIZE = 2;
L_0204:;
// 2314 dsize = 1 %if elements <= 256 %and t_low >= -128
if (ELEMENTS > 256) goto L_0205;
if (T.LOW < -128) goto L_0205;
DSIZE = 1;
L_0205:;
// 2315 %finish
L_0203:;
// 2316 %else %if a(keylong); !%long
goto L_0201;
L_0202:;
if (!(A(26))) goto L_0206;
// 2317 d_type = longinttype; dsize = 8
D.TYPE = 2057;
DSIZE = 8;
// 2318 d_type = longrealtype %and get(keyreal) %if %not a(keyinteger)
if (A(27)) goto L_0207;
D.TYPE = 2059;
GET(28);
L_0207:;
// 2319 %else %if a(keyreal); !%real
goto L_0201;
L_0206:;
if (!(A(28))) goto L_0208;
// 2320 d_type = realtype; dsize = 4
D.TYPE = 2058;
DSIZE = 4;
// 2321 %else %if a(keystring); !%string
goto L_0201;
L_0208:;
if (!(A(29))) goto L_0209;
// 2322 d_type = stringy
D.TYPE = 2044;
// 2323 t_val = 255; dsize = 256
T.VAL = 255;
DSIZE = 256;
// 2324 %if a(left) %start
if (!(A(55))) goto L_020A;
// 2325 t_val = 0
T.VAL = 0;
// 2326 %if %not a(star) %start
if (A(88)) goto L_020B;
// 2327 get LITINT
GETLITINT();
// 2328 expfault(rangerr+point) %and t_val = 255 %unless 0 < t_val <= 255
{
// Double-sided test on T.VAL (Part I)
int tmp;
if (0 >= (tmp = T.VAL)) goto L_020C;
// Double-sided test on T.VAL (Part II)
if (tmp <= 255) goto L_020D;
}
L_020C:;
EXPFAULT(12 + 64);
T.VAL = 255;
L_020D:;
// 2329 %finish
L_020B:;
// 2330 get(right)
GET(60);
// 2331 %finish %else nonstandard(nolength)
goto L_020E;
L_020A:;
NONSTANDARD(32);
L_020E:;
// 2332 %if t_val # 0 %start
if (T.VAL == 0) goto L_020F;
// 2333 d_type = newstype(t_val)
D.TYPE = NEWSTYPE(T.VAL);
// 2334 dsize = (t_val+2)&(\1); !+1 & evened up
DSIZE = T.VAL + 2 & (~1);
// 2335 %finish
L_020F:;
// 2336 %else %if a(keyrecord); !%record
goto L_0201;
L_0209:;
if (!(A(30))) goto L_0210;
// 2337 d_type = recy
D.TYPE = 2042;
// 2338 %if a(keyformat) %start
if (!(A(31))) goto L_0211;
// 2339 syntax error %if flags&(static+ext) # 0
if (FLAGS & 8 + 32 == 0) goto L_0212;
SYNTAXERROR();
L_0212:;
// 2340 %if a(keyspec) %start
if (!(A(34))) goto L_0213;
// 2341 d_flags = typeid+spec
D.FLAGS = 256 + 16;
// 2342 get IDENT
GETIDENT();
// 2343 %finish %else %start
goto L_0214;
L_0213:;
// 2344 d_flags = typeid
D.FLAGS = 256;
// 2345 get IDENT
GETIDENT();
// 2346 formp == ditem
FORMP = (struct IDENTINFO *)DITEM;
// 2347 get(left)
GET(55);
// 2348 fbase = 0
FBASE = 0;
// 2349 get FORMATDEF
GETFORMATDEF();
// 2350 fieldp_flags = fieldp_flags-more
FIELDP->FLAGS = FIELDP->FLAGS - 128;
// 2351 get(right)
GET(60);
// 2352 %finish
L_0214:;
// 2353 d_flags = typeid
D.FLAGS = 256;
// 2354 %return
return;
// 2355 %finish
L_0211:;
// 2356 get(left)
GET(55);
// 2357 %if %not a(star) %start
if (A(88)) goto L_0215;
// 2358 %if %not a(ident) %start
if (A(54)) goto L_0216;
// 2359 get FORMATDEF
GETFORMATDEF();
// 2360 fieldp_flags = fieldp_flags-more
FIELDP->FLAGS = FIELDP->FLAGS - 128;
// 2361 get(right)
GET(60);
// 2362 d_flags = typeid
D.FLAGS = 256;
// 2363 declare anon
DECLAREANON();
// 2364 %finish
L_0216:;
// 2365 name error %if item <= 0
if (ITEM > 0) goto L_0217;
NAMEERROR();
L_0217:;
// 2366 syntax error %if ditem_type # recy
if (DITEM->TYPE == 2042) goto L_0218;
SYNTAXERROR();
L_0218:;
// 2367 d_type = item; dsize = ditem_val
D.TYPE = ITEM;
DSIZE = DITEM->VAL;
// 2368 %finish
L_0215:;
// 2369 get(right)
GET(60);
// 2370 %else
goto L_0201;
L_0210:;
// 2371 syntax error %if atom # keyname; !untyped %name
if (ATOM == 36) goto L_0219;
SYNTAXERROR();
L_0219:;
// 2372 %finish
L_0201:;
// 2373 !End of basic type info: set item size in DECLMODE
// 2374 %if dsize <= 4 %start
if (DSIZE > 4) goto L_021A;
// 2375 %if dsize <= 2 %then declmode = dsize<<sizeshift %c
if (DSIZE > 2) goto L_021B;
DECLMODE = DSIZE << 6;
goto L_021C;
L_021B:;
DECLMODE = 3 << 6;
L_021C:;
// 2376+ %else declmode = longsize<<sizeshift
// 2377 %finish
L_021A:;
// 2378 !Appendages
// 2379 %if a(fnmap) %start; !%fn, %map
if (!(A(32))) goto L_021D;
// 2380 flags = flags&(\static) %if flags&ext # 0
if (FLAGS & 32 == 0) goto L_021E;
FLAGS = FLAGS & (~8);
L_021E:;
// 2381 syntax error %if flags&static # 0
if (FLAGS & 8 == 0) goto L_021F;
SYNTAXERROR();
L_021F:;
// 2382 flags = flags+var %and d_type = d_type+direct %if subatom # 0; !map
if (SUBATOM == 0) goto L_0220;
FLAGS = FLAGS + 1;
D.TYPE = D.TYPE + 8192;
L_0220:;
// 2383 d_flags = flags+proc; declmode = declmode+pcmode
D.FLAGS = FLAGS + 4;
DECLMODE = DECLMODE + 58;
// 2384 %return
return;
// 2385 %finish
L_021D:;
// 2386 d_type = d_type+direct
D.TYPE = D.TYPE + 8192;
// 2387 %while a(keyarray) %or a(keyname) %cycle
L_0221:;
if (A(35)) goto L_0222;
if (!(A(36))) goto L_0223;
L_0222:;
// 2388 %if atom = keyarray %start; !%array
if (ATOM != 35) goto L_0224;
// 2389 nonstandard(naming) %if d_type >= indirect
if (D.TYPE < 16384) goto L_0225;
NONSTANDARD(512);
L_0225:;
// 2390 %if %not a(keyname) %start
if (A(36)) goto L_0226;
// 2391 syntax error %if flags&parm # 0
if (FLAGS & 64 == 0) goto L_0227;
SYNTAXERROR();
L_0227:;
// 2392 flags = flags+parm; !as indic
FLAGS = FLAGS + 64;
// 2393 %exit
goto L_0223;
// 2394 %finish
L_0226:;
// 2395 d_type = newatype(d_type,inty)
D.TYPE = NEWATYPE(D.TYPE, 2046);
// 2396 %finish
L_0224:;
// 2397 syntax error %if d_type >= indirect
if (D.TYPE < 16384) goto L_0228;
SYNTAXERROR();
L_0228:;
// 2398 d_type = d_type+(indirect-direct)
D.TYPE = D.TYPE + (16384 - 8192);
// 2399 dsize = 4
DSIZE = 4;
// 2400 %repeat
goto L_0221;
L_0223:;
// 2401 d_flags = flags!!var
D.FLAGS = FLAGS ^ 1;
// 2402 %end; !GET TYPE
return;
} /* end of GETTYPE */
// 2403 !
// 2404 %routine GET OWN ARRAY DECLARATION
void GETOWNARRAYDECLARATION(void) {
// 2405 %integer holdval,dpos
int HOLDVAL;
int DPOS;
// 2406 %record(identinfo)%name dp
struct IDENTINFO *DP;
// 2407 ! constad = constad+1 %if constad&1 # 0
// 2408 ! d_val = constad
// 2409 ! d_val = d_val-ownbase %if d_val >= ownbase
// 2410 get IDENT
GETIDENT();
// 2411 dpos = item; dp == ditem
DPOS = ITEM;
DP = (struct IDENTINFO *)DITEM;
// 2412 get LITBOUNDS
GETLITBOUNDS();
// 2413 dp_type = newatype(d_type,item)
DP->TYPE = NEWATYPE(D.TYPE, ITEM);
// 2414 %if a assop %start
if (!(AASSOP())) goto L_0229;
// 2415 allow(terminator)
ALLOW(52);
// 2416 %cycle
L_022A:;
// 2417 get LITERAL(d_type)
GETLITERAL(D.TYPE);
// 2418 faultnum = rangerr+point+warn %if faultnum = rangerr+point
if (FAULTNUM != 12 + 64) goto L_022B;
FAULTNUM = 12 + 64 + 128;
L_022B:;
// 2419 holdval = t_val
HOLDVAL = T.VAL;
// 2420 t_val = 1
T.VAL = 1;
// 2421 %if a(left) %start
if (!(A(55))) goto L_022C;
// 2422 t_val = elements
T.VAL = ELEMENTS;
// 2423 get LITINT %if %not a(star)
if (A(88)) goto L_022D;
GETLITINT();
L_022D:;
// 2424 get(right)
GET(60);
// 2425 %finish
L_022C:;
// 2426 ! plant const(holdval,t_val)
// 2427 elements = elements-t_val
ELEMENTS = ELEMENTS - T.VAL;
// 2428 %repeat %until %not a(comma)
if (!(A(59))) goto L_022E;
goto L_022A;
L_022E:;
// 2429 report(counterr,dpos) %if elements # 0 %and faultnum = 0
if (ELEMENTS == 0) goto L_022F;
if (FAULTNUM != 0) goto L_022F;
REPORT(45, DPOS);
L_022F:;
// 2430 %finish
L_0229:;
// 2431 ! plant const(0,elements) %if elements > 0
// 2432 %end; !get OWN ADECL
return;
} /* end of GETOWNARRAYDECLARATION */
// 2433
// 2434 %routine GET ARRAY DECLARATION
void GETARRAYDECLARATION(void) {
// 2435 !ie get IDENTLISTS and BOUNDS
// 2436 %integer i,dlim1,hold,holdval,type
int I;
int DLIM1;
int HOLD;
int HOLDVAL;
int TYPE;
// 2437
// 2438 !%routine put bound pair
// 2439 ! hold = litref(holdval) %if hold = 0
// 2440 ! item = litref(t_val) %if item = 0
// 2441 ! put3(r,hold,item); !(range),lower,upper
// 2442 !%end
// 2443
// 2444 %routine GET BOUNDS
void GETBOUNDS(void) {
// 2445 %integer range
int RANGE;
// 2446 get VALUE(anyint)
GETVALUE(10238);
// 2447 hold = item; t_val = minint %if hold # 0
HOLD = ITEM;
if (HOLD == 0) goto L_0230;
T.VAL = -2147483648;
L_0230:;
// 2448 holdval = t_val
HOLDVAL = T.VAL;
// 2449 get(colon)
GET(58);
// 2450 get VALUE(anyint)
GETVALUE(10238);
// 2451 t_val = maxint %if item # 0
if (ITEM == 0) goto L_0231;
T.VAL = 2147483647;
L_0231:;
// 2452 range = newrange(inty,holdval,t_val)
RANGE = NEWRANGE(2046, HOLDVAL, T.VAL);
// 2453 GET BOUNDS %if a(comma)
if (!(A(59))) goto L_0232;
GETBOUNDS();
L_0232:;
// 2454 type = newatype(type,range)
TYPE = NEWATYPE(TYPE, RANGE);
// 2455 %end
return;
} /* end of GETBOUNDS */
// 2456
// 2457 %cycle
L_0233:;
// 2458 type = d_type
TYPE = D.TYPE;
// 2459 get IDENTLIST
GETIDENTLIST();
// 2460 dlim1 = dlim
DLIM1 = DLIM;
// 2461 get(left)
GET(55);
// 2462 GET BOUNDS
GETBOUNDS();
// 2463 get(right)
GET(60);
// 2464 ! %if hold = 0 = item {both literal} %and np = np0 {1-dim} %c
// 2465 ! %and elements <= 32767 {safe to multiply?} %c
// 2466 ! %and (elements*dsize*(dlim-dpos))<<1-c_sp-c_delta <= 32000 %start
// 2467 ! d_par = parref(inty,0,r,0)
// 2468 ! %finish %else %start
// 2469 ! put bound pair
// 2470 ! d_par = 0
// 2471 ! i = np
// 2472 ! %while i # np0 %cycle
// 2473 ! i = i-1
// 2474 ! d_par = parref(inty,0,exp(i)_act,d_par)
// 2475 ! %repeat
// 2476 ! exp(np0)_act = adecl
// 2477 ! %finish
// 2478 ! i = np
// 2479 %while dlim0 # dlim1 %cycle
L_0234:;
if (DLIM0 == DLIM1) goto L_0235;
// 2480 ! %if i = np0 %start
// 2481 ! c_delta = c_delta-elements*dsize
// 2482 ! c_delta = c_delta-1 %if c_delta&1 # 0
// 2483 ! dict(dlim0)_flags = dict(dlim0)_flags!static
// 2484 ! %finish %else %start
// 2485 ! np = i; compile(np0,np0)
// 2486 ! c_flags = c_flags!dynarray
// 2487 ! %finish
// 2488 ! dict(dlim0)_val = c_sp+c_delta
// 2489 dict(dlim0)_type = type
DICT[DLIM0 - 2001].TYPE = TYPE;
// 2490 dlim0 = dlim0+1
DLIM0 = DLIM0 + 1;
// 2491 %repeat
goto L_0234;
L_0235:;
// 2492 %repeat %until %not a(comma)
if (!(A(59))) goto L_0236;
goto L_0233;
L_0236:;
// 2493 %end;
return;
} /* end of GETARRAYDECLARATION */
// ?I unused
// 2494 ; !get BOUNDS
// 2494
// 2495 %routine GET PARMDEF
void GETPARMDEF(void) {
// 2496 %integer headitem,dpos,dlim1
int HEADITEM;
int DPOS;
int DLIM1;
// 2497 %record(identinfo)%name headditem,dp
struct IDENTINFO *HEADDITEM;
struct IDENTINFO *DP;
// 2498 %integerfn PARMMATCH(%integer apos)
int PARMMATCH(int APOS) {
// 2499 %integer bpos
int BPOS;
// 2500 %record(identinfo)%name ap,bp
struct IDENTINFO *AP;
struct IDENTINFO *BP;
// 2501 bpos = dlim1
BPOS = DLIM1;
// 2502 ap == dict(apos)
AP = (struct IDENTINFO *)/*?*/ &DICT[APOS - 2001];
// 2503 %while bpos # dlim %cycle
L_0237:;
if (BPOS == DLIM) goto L_0238;
// 2504 %result = 0 %if ap_flags&more = 0
if (AP->FLAGS & 128 != 0) goto L_0239;
return 0;
L_0239:;
// 2505 apos = apos+1 %and ap == dict(apos) %until ap_flags&parm # 0
L_023A:;
APOS = APOS + 1;
AP = (struct IDENTINFO *)/*?*/ &DICT[APOS - 2001];
if (AP->FLAGS & 64 != 0) goto L_023B;
goto L_023A;
L_023B:;
// 2506 bp == dict(bpos)
BP = (struct IDENTINFO *)/*?*/ &DICT[BPOS - 2001];
// 2507 %result = 0 %if ap_type # bp_type; !for now
if (AP->TYPE == BP->TYPE) goto L_023C;
return 0;
L_023C:;
// 2508 bpos = bpos+1
BPOS = BPOS + 1;
// 2509 %repeat
goto L_0237;
L_0238:;
// 2510 %result = 1 %if ap_flags&more = 0
if (AP->FLAGS & 128 != 0) goto L_023D;
return 1;
L_023D:;
// 2511 %result = 0
return 0;
// 2512 %end
} /* end of PARMMATCH */
// 2513 !
// 2514 headitem = item; headditem == ditem
HEADITEM = ITEM;
HEADDITEM = (struct IDENTINFO *)DITEM;
// 2515 dlim1 = dlim
DLIM1 = DLIM;
// 2516 %if a(left) %start
if (!(A(55))) goto L_023E;
// 2517 %cycle
L_023F:;
// 2518 get TYPE(parm!more) %if atom # ident
if (ATOM == 54) goto L_0240;
GETTYPE(64 | 128);
L_0240:;
// 2519 %if d_flags&proc = 0 %start
if (D.FLAGS & 4 != 0) goto L_0241;
// 2520 get IDENT
GETIDENT();
// 2521 %exit %if %not a(comma) %and atom = right
if (A(59)) goto L_0242;
if (ATOM != 60) goto L_0242;
goto L_0243;
L_0242:;
// 2522 %if atom # comma %then nonstandard(nocomma) %c
if (ATOM == 59) goto L_0244;
NONSTANDARD(4);
goto L_0245;
L_0244:;
ATOM = NEXTATOM();
L_0245:;
// 2523+ %else atom = next atom
// 2524 %finish %else %start
goto L_0246;
L_0241:;
// 2525 get IDENT
GETIDENT();
// 2526 speccing = speccing+2
SPECCING = SPECCING + 2;
// 2527 get PARMDEF
GETPARMDEF();
// 2528 speccing = speccing-2
SPECCING = SPECCING - 2;
// 2529 %exit %if %not a(comma)
if (A(59)) goto L_0247;
goto L_0243;
L_0247:;
// 2530 %finish
L_0246:;
// 2531 %repeat
goto L_023F;
L_0243:;
// 2532 dict(dlim-1)_flags = dict(dlim-1)_flags-more
DICT[DLIM - 1 - 2001].FLAGS = DICT[DLIM - 1 - 2001].FLAGS - 128;
// 2533 get(right)
GET(60);
// 2534 %finish
L_023E:;
// 2535 %if speccing >= 2 %start
if (SPECCING < 2) goto L_0248;
// 2536 dpos = dictmin
DPOS = 2041;
// 2537 %cycle
L_0249:;
// 2538 dp == dict(dpos)
DP = (struct IDENTINFO *)/*?*/ &DICT[DPOS - 2001];
// 2539 %if dp_flags&proc # 0 %and dp_type = headditem_type %start
if (DP->FLAGS & 4 == 0) goto L_024A;
if (DP->TYPE != HEADDITEM->TYPE) goto L_024A;
// 2540 %if parmmatch(dpos) # 0 %start
if (PARMMATCH(DPOS) == 0) goto L_024B;
// 2541 headditem_type = dpos; dlim = dlim1
HEADDITEM->TYPE = DPOS;
DLIM = DLIM1;
// 2542 %return
return;
// 2543 %finish
L_024B:;
// 2544 %finish
L_024A:;
// 2545 dpos = dpos+1
DPOS = DPOS + 1;
// 2546 %repeat %until dpos >= headitem
if (DPOS >= HEADITEM) goto L_024C;
goto L_0249;
L_024C:;
// 2547 fault(caterr); dlim = dlim1
FAULT(3);
DLIM = DLIM1;
// 2548 %return
return;
// 2549 %finish
L_0248:;
// 2550 %if speccing = 0 %and headditem_flags&spec # 0 %start
if (SPECCING != 0) goto L_024D;
if (HEADDITEM->FLAGS & 16 == 0) goto L_024D;
// 2551 headditem_flags = headditem_flags-spec
HEADDITEM->FLAGS = HEADDITEM->FLAGS - 16;
// 2552 fault(matcherr) %if parmmatch(headitem) = 0
if (PARMMATCH(HEADITEM) != 0) goto L_024E;
FAULT(11);
L_024E:;
// 2553 %else
goto L_024F;
L_024D:;
// 2554 headditem_flags = headditem_flags!more %if dlim # dlim1
if (DLIM == DLIM1) goto L_0250;
HEADDITEM->FLAGS = HEADDITEM->FLAGS | 128;
L_0250:;
// 2555 %finish
L_024F:;
// 2556 %end; !get PARMDEF
return;
} /* end of GETPARMDEF */
// 2557
// 2558 initial(keylabel): nonstandard(klabel)
case_INITIAL_23:;
NONSTANDARD(1024);
// 2559 d_flags = lab+spec; d_type = nulltype
D.FLAGS = 2 + 16;
D.TYPE = 2041;
// 2560 get IDENTLIST
GETIDENTLIST();
// 2561 -> term
goto U_1009;
// 2562
// 2563 initial(prefix):
case_INITIAL_24:;
// 2564 d_flags = subatom; ! !wflag!okflag
D.FLAGS = SUBATOM;
// 2565 ! fault(prefix<<8) %if d_flags&extmask # 0
// 2566 atom = next atom
ATOM = NEXTATOM();
// 2567 initial(krange): initial(keylong):
case_INITIAL_25:;
case_INITIAL_26:;
// 2568 initial(keyinteger): initial(keyreal):
case_INITIAL_27:;
case_INITIAL_28:;
// 2569 initial(keystring): initial(keyrecord):
case_INITIAL_29:;
case_INITIAL_30:;
// 2570 initial(rpred):
case_INITIAL_33:;
// 2571 matched = 0
MATCHED = 0;
// 2572 get TYPE(d_flags)
GETTYPE(D.FLAGS);
// 2573 %if a(keyspec) %start
if (!(A(34))) goto L_0251;
// 2574 %if a(left) %start
if (!(A(55))) goto L_0252;
// 2575 get LITINT; get(right)
GETLITINT();
GET(60);
// 2576 declmode = declmode&sizemask+absmode
DECLMODE = (DECLMODE & 192) + 56;
// 2577 d_val = t_val
D.VAL = T.VAL;
// 2578 get IDENT
GETIDENT();
// 2579 speccing = 1 %and get PARMDEF %if d_flags&proc # 0
if (D.FLAGS & 4 == 0) goto L_0253;
SPECCING = 1;
GETPARMDEF();
L_0253:;
// 2580 -> term
goto U_1009;
// 2581 %finish
L_0252:;
// 2582 d_flags = d_flags+spec
D.FLAGS = D.FLAGS + 16;
// 2583 get IDENTLIST %and -> term %if d_flags&proc = 0
if (D.FLAGS & 4 != 0) goto L_0254;
GETIDENTLIST();
goto U_1009;
L_0254:;
// 2584 %finish
L_0251:;
// 2585 %if d_flags&proc # 0 %start
if (D.FLAGS & 4 == 0) goto L_0255;
// 2586 get(ident)
GET(54);
// 2587 %if item >= c_localdpos %and ditem_type = d_type %c
if (ITEM < C.LOCALDPOS) goto L_0256;
if (DITEM->TYPE != D.TYPE) goto L_0256;
if (DITEM->FLAGS & 4 == 0) goto L_0256;
// 2588+ %and ditem_flags&proc # 0 %start
// 2589 %if ditem_flags&spec = 0 %or d_flags&spec # 0 %start
if (DITEM->FLAGS & 16 == 0) goto L_0257;
if (D.FLAGS & 16 == 0) goto L_0258;
L_0257:;
// 2590 item = 0; d_flags = d_flags+alt
ITEM = 0;
D.FLAGS = D.FLAGS + 2048;
// 2591 declare
DECLARE();
// 2592 %finish
L_0258:;
// 2593 %finish %else declare
goto L_0259;
L_0256:;
DECLARE();
L_0259:;
// 2594 get LITSTRING %if d_flags&ext # 0 %and a(alias)
if (D.FLAGS & 32 == 0) goto L_025A;
if (!(A(46))) goto L_025A;
GETLITSTRING();
L_025A:;
// 2595 %if d_flags&spec # 0 %start
if (D.FLAGS & 16 == 0) goto L_025B;
// 2596 speccing = 1
SPECCING = 1;
// 2597 get PARMDEF
GETPARMDEF();
// 2598 %finish %else %start
goto L_025C;
L_025B:;
// 2599 open block(item)
OPENBLOCK(ITEM);
// 2600 get PARMDEF
GETPARMDEF();
// 2601 c_parlim = dlim
C.PARLIM = DLIM;
// 2602 compile entry
COMPILEENTRY();
// 2603 get(terminator)
GET(52);
// 2604 get STATEMENTS(end)
GETSTATEMENTS(1);
// 2605 ! %if c_access > 0 %start
// 2606 ! report(noresult,0) %if c_type > nulltype; !fn/map/pred
// 2607 ! %finish
// 2608 close block
CLOSEBLOCK();
// 2609 %finish
L_025C:;
// 2610 %else %if d_flags = typeid {dealt with}
goto L_025D;
L_0255:;
if (D.FLAGS != 256) goto L_025E;
// 2611 %else %if d_flags&parm # 0; !array
goto L_025D;
L_025E:;
if (D.FLAGS & 64 == 0) goto L_025F;
// 2612 d_flags = d_flags-parm
D.FLAGS = D.FLAGS - 64;
// 2613 %if d_flags&static # 0 %start
if (D.FLAGS & 8 == 0) goto L_0260;
// 2614 get OWN ARRAY DECLARATION
GETOWNARRAYDECLARATION();
// 2615 %finish %else %start
goto L_0261;
L_0260:;
// 2616 %if d_flags&static = 0 %and c_flags >= hadon %start
if (D.FLAGS & 8 != 0) goto L_0262;
if (C.FLAGS < 16) goto L_0262;
// 2617 fault(ordererr); c_flags = c_flags&(\(hadon+hadinst))
FAULT(10);
C.FLAGS = C.FLAGS & ~(16 + 32);
// 2618 %finish
L_0262:;
// 2619 get ARRAY DECLARATION
GETARRAYDECLARATION();
// 2620 %finish
L_0261:;
// 2621 %else %if d_flags = static {const}
goto L_025D;
L_025F:;
if (D.FLAGS != 8) goto L_0263;
// 2622 d_type = dict(d_type&puretype)_type
D.TYPE = DICT[(D.TYPE & 8191) - 2001].TYPE;
// 2623 d_type = d_type+direct %if d_type = recy %or d_type = stringy
if (D.TYPE == 2042) goto L_0264;
if (D.TYPE != 2044) goto L_0265;
L_0264:;
D.TYPE = D.TYPE + 8192;
L_0265:;
// 2624 %cycle
L_0266:;
// 2625 get IDENT
GETIDENT();
// 2626 syntax error %if %not a assop
if (AASSOP()) goto L_0267;
SYNTAXERROR();
L_0267:;
// 2627 get LITERAL(d_type)
GETLITERAL(D.TYPE);
// 2628 faultnum = rangerr+point+warn %if faultnum = rangerr+point
if (FAULTNUM != 12 + 64) goto L_0268;
FAULTNUM = 12 + 64 + 128;
L_0268:;
// 2629 dict(dlim-1)_val = t_val
DICT[DLIM - 1 - 2001].VAL = T.VAL;
// 2630 %repeat %until %not a(comma)
if (!(A(59))) goto L_0269;
goto L_0266;
L_0269:;
// 2631 %else %if d_flags&static # 0 {own}
goto L_025D;
L_0263:;
if (D.FLAGS & 8 == 0) goto L_026A;
// 2632 ! constad == ownad; constbound = finalbound
// 2633 declmode = declmode+ownmode
DECLMODE = DECLMODE + 46;
// 2634 %cycle
L_026B:;
// 2635 ! constad = constad+1 %if constad&1 # 0 %and dsize # 1
// 2636 ! t_val = constad-ownbase
// 2637 get IDENT
GETIDENT();
// 2638 t_val = 0
T.VAL = 0;
// 2639 %if a assop %start
if (!(AASSOP())) goto L_026C;
// 2640 ! %if d_flags&direct = 0
// 2641 get LITERAL(d_type)
GETLITERAL(D.TYPE);
// 2642 faultnum = rangerr+point+warn %if faultnum = rangerr+point
if (FAULTNUM != 12 + 64) goto L_026D;
FAULTNUM = 12 + 64 + 128;
L_026D:;
// 2643 %finish
L_026C:;
// 2644 elements = 1
ELEMENTS = 1;
// 2645 ! plant const(t_val,1)
// 2646 %repeat %until %not a(comma)
if (!(A(59))) goto L_026E;
goto L_026B;
L_026E:;
// 2647 %else; !dynamic variable
goto L_025D;
L_026A:;
// 2648 ! declmode = declmode+dispmode+level
// 2649 %if d_flags&static = 0 %and c_flags >= hadon %start
if (D.FLAGS & 8 != 0) goto L_026F;
if (C.FLAGS < 16) goto L_026F;
// 2650 fault(ordererr); c_flags = c_flags&(\(hadon+hadinst))
FAULT(10);
C.FLAGS = C.FLAGS & ~(16 + 32);
// 2651 %finish
L_026F:;
// 2652 %cycle
L_0270:;
// 2653 !problematic c_delta = c_delta-1 %if c_delta&1 # 0 %and dsize # 1
// 2654 c_delta = c_delta-dsize
C.DELTA = C.DELTA - DSIZE;
// 2655 c_delta = c_delta-1 %if c_delta&1 # 0
if (C.DELTA & 1 == 0) goto L_0271;
C.DELTA = C.DELTA - 1;
L_0271:;
// 2656 t_val = c_sp+c_delta
T.VAL = C.SP + C.DELTA;
// 2657 get IDENT
GETIDENT();
// 2658 %if a assop %start
if (!(AASSOP())) goto L_0272;
// 2659 nonstandard(initass)
NONSTANDARD(64);
// 2660 %if d_type >= indirect %start
if (D.TYPE < 16384) goto L_0273;
// 2661 fault(caterr+point) %if atom # eqeq
if (ATOM == 76) goto L_0274;
FAULT(3 + 64);
L_0274:;
// 2662 get REFERENCE(d_type)
GETREFERENCE(D.TYPE);
// 2663 item = item+ad %if item # 0
if (ITEM == 0) goto L_0275;
ITEM = ITEM + 16384;
L_0275:;
// 2664 ! put3(assign,dlim-1+ad,item)
// 2665 %finish %else %start
goto L_0276;
L_0273:;
// 2666 fault(caterr+point) %if atom = eqeq
if (ATOM != 76) goto L_0277;
FAULT(3 + 64);
L_0277:;
// 2667 get VALUE(d_type)
GETVALUE(D.TYPE);
// 2668 ! put2(assign,dlim-1)
// 2669 %finish
L_0276:;
// 2670 ! compile(np0,np0)
// 2671 %finish
L_0272:;
// 2672 %repeat %until %not a(comma)
if (!(A(59))) goto L_0278;
goto L_0270;
L_0278:;
// 2673 %finish
L_025D:;
// 2674 -> term
goto U_1009;
// 2675
// 2676 %routine GET SWITCH DECLARATION
void GETSWITCHDECLARATION(void) {
// 2677 %integer i,j,dlim1
int I;
int J;
int DLIM1;
// 2678 matched = 1
MATCHED = 1;
// 2679 %cycle
L_0279:;
// 2680 d_flags = lab; d_type = nulltype
D.FLAGS = 2;
D.TYPE = 2041;
// 2681 declmode = pcmode+wordsize<<sizeshift
DECLMODE = 58 + (2 << 6);
// 2682 get IDENTLIST
GETIDENTLIST();
// 2683 dlim1 = dlim
DLIM1 = DLIM;
// 2684 get LITBOUNDS
GETLITBOUNDS();
// 2685 %cycle; !For each ident in group
L_027A:;
// 2686 %exit %if spc-elements <= 0; !ignore if too many
if (SPC - ELEMENTS > 0) goto L_027B;
goto L_027C;
L_027B:;
// 2687 %for i = 1,1,elements %cycle
// %for I = 1, 1, ELEMENTS %cycle
{
int _final = ELEMENTS;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, ELEMENTS");
I = 0;
L_027D:
if (I == _final) goto L_027E;
I += 1;
// 2688 spc = spc-1; final(spc) = 0
SPC = SPC - 1;
FINAL[SPC] = 0;
// 2689 %repeat
goto L_027D;
}
L_027E:;
// 2690 dict(dlim0)_val = spc
DICT[DLIM0 - 2001].VAL = SPC;
// 2691 dict(dlim0)_type = item
DICT[DLIM0 - 2001].TYPE = ITEM;
// 2692 dlim0 = dlim0+1
DLIM0 = DLIM0 + 1;
// 2693 %repeat %until dlim0 = dlim1
if (DLIM0 == DLIM1) goto L_027C;
goto L_027A;
L_027C:;
// 2694 %repeat %until %not a(comma)
if (!(A(59))) goto L_0280;
goto L_0279;
L_0280:;
// 2695 %end
return;
} /* end of GETSWITCHDECLARATION */
// ?J unused
// 2696 initial(keyswitch):
case_INITIAL_37:;
// 2697 get SWITCH DECLARATION
GETSWITCHDECLARATION();
// 2698 ->term
goto U_1009;
// 2699
// 2700 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 2701 !!!!!!!!!!!!!!! Control statements !!!!!!!!!!!!!!!!!!!!!!!!!!!
// 2702 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 2703 !
// 2704 initial(keycontrol):
case_INITIAL_42:;
// 2705 get LITINT
GETLITINT();
// 2706 control = 0 %if t_val = 0
if (T.VAL != 0) goto L_0281;
CONTROL = 0;
L_0281:;
// 2707 control = control!!t_val
CONTROL = CONTROL ^ T.VAL;
// 2708 ->term
goto U_1009;
// 2709
// 2710 initial(include):
case_INITIAL_45:;
// 2711 get LITSTRING
GETLITSTRING();
// 2712 extra_name = ""
_imp_strncpy(/*?*/ &EXTRA.NAME, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 2713 %while t_val > 0 %cycle
L_0282:;
if (T.VAL <= 0) goto L_0283;
// 2714 extra_name = extra_name.tostring(byteinteger(atomp))
_imp_strncpy(/*?*/ &EXTRA.NAME, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &EXTRA.NAME, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(*_imp_BYTEINTEGER(ATOMP));
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 2715 atomp = atomp+1; t_val = t_val-1
ATOMP = ATOMP + 1;
T.VAL = T.VAL - 1;
// 2716 %repeat
goto L_0282;
L_0283:;
// 2717 get(terminator)
GET(52);
// 2718 %if faultnum = 0 %start
if (FAULTNUM != 0) goto L_0284;
// 2719 connect edfile(extra)
CONNECTEDFILE(/*?*/ &EXTRA);
// 2720 nonstop = -999 %and %signal 12 %if extra_flag # 0
if (EXTRA.FLAG == 0) goto L_0285;
NONSTOP = -999;
_imp_signal(12, 0, 0, "");
L_0285:;
// 2721 mainfp = fp; mainline = line
MAINFP = FP;
MAINLINE = LINE;
// 2722 line = 0; sym = nl
LINE = 0;
SYM = 10;
// 2723 fp = extra_start2; curstart = fp; curlim = extra_lim2
FP = EXTRA.START2;
CURSTART = FP;
CURLIM = EXTRA.LIM2;
// 2724 modesym = '&'; nonstop = nonstop+1
MODESYM = 38;
NONSTOP = NONSTOP + 1;
// 2725 %finish
L_0284:;
// 2726 ->next
goto U_100B;
// 2727
// 2728 initial(keylist):
case_INITIAL_41:;
// 2729 ->term
goto U_1009;
// 2730
// 2731 initial(begin):
case_INITIAL_5:;
// 2732 c_sp = -8
C.SP = -8;
// 2733 get(terminator)
GET(52);
// 2734 open block(0)
OPENBLOCK(0);
// 2735 get STATEMENTS(0)
GETSTATEMENTS(0);
// 2736 close block
CLOSEBLOCK();
// 2737 -> term %if stopper >= 0
if (STOPPER < 0) goto L_0286;
goto U_1009;
L_0286:;
// 2738 %return
return;
// 2739
// 2740 initial(end):
case_INITIAL_1:;
// 2741 %if %not a(of) %start
if (A(38)) goto L_0287;
// 2742 fault(nofinish) %if stopper = else %or stopper = finish
if (STOPPER == 4) goto L_0288;
if (STOPPER != 3) goto L_0289;
L_0288:;
FAULT(43);
L_0289:;
// 2743 fault(norepeat) %if stopper = repeat
if (STOPPER != 2) goto L_028A;
FAULT(44);
L_028A:;
// 2744 %return %if stopper >= 0
if (STOPPER < 0) goto L_028B;
return;
L_028B:;
// 2745 fault(nobegin)
FAULT(41);
// 2746 ->term
goto U_1009;
// 2747 %finish
L_0287:;
// 2748 %if a(keylist) %start
if (!(A(41))) goto L_028C;
// 2749 ->term
goto U_1009;
// 2750 %finish
L_028C:;
// 2751 %if a(keyfile) %start
if (!(A(39))) goto L_028D;
// 2752 %if curlim = extra_lim2 %start
if (CURLIM != EXTRA.LIM2) goto L_028E;
// 2753 switch input
SWITCHINPUT();
// 2754 ->next
goto U_100B;
// 2755 %finish
L_028E:;
// 2756 %finish %else get(program)
goto L_028F;
L_028D:;
GET(40);
L_028F:;
// 2757 %end; !GET STATEMENTS
return;
case_INITIAL_dispatch:
if (INITIAL_index < 0 || INITIAL_index > 107)
_imp_signalf(6, 3, INITIAL_index, "->INITIAL(%d) out of bounds at %s line %d", INITIAL_index, INITIAL_file,
INITIAL_line);
goto *INITIAL[INITIAL_index - 0];
case_INITIAL_missing:
_imp_signalf(8, 2, INITIAL_index, "switch jump to undefined label INITIAL(%d): at %s line %d", INITIAL_index,
INITIAL_file, INITIAL_line);
} /* end of GETSTATEMENTS */
// 2758
// 2759 %routine INIT(%integer t,l,h)
void INIT(int T, int L, int H) {
// 2760 d_flags = typeid; d_type = t; d_low = l; d_val = h
D.FLAGS = 256;
D.TYPE = T;
D.LOW = L;
D.VAL = H;
// 2761 dict(dlim) = d; dlim = dlim+1
DICT[DLIM - 2001] = D;
DLIM = DLIM + 1;
// 2762 %end
return;
} /* end of INIT */
// 2763
// 2764 %on %event 12 %start
if (!_imp_on_event(12)) goto L_0290;
// 2765 -> printout %if fp = main_lim2
if (FP != MAIN->LIM2) goto L_0291;
goto U_100F;
L_0291:;
// 2766 -> ended %if main_flag < 0 %or nonstop = -999; !abandon or CROAK
if (MAIN->FLAG < 0) goto L_0292;
if (NONSTOP != -999) goto L_0293;
L_0292:;
goto U_1010;
L_0293:;
// 2767 change = main_change
CHANGE = MAIN->CHANGE;
// 2768 %finish
L_0290:;
// 2769
// 2770 printstring(" IMP Checker "); newline
PRINTSTRING(_imp_str_literal(" IMP Checker "));
NEWLINE();
// 2771 hashindex(i) = 0 %for i = 0,1,255; !hash table empty
// %for I = 0, 1, 255 %cycle
{
I = -1;
L_0294:
if (I == 255) goto L_0295;
I += 1;
HASHINDEX[I] = 0;
goto L_0294;
}
L_0295:;
// 2772 charbase = addr(char(0)); byteinteger(charbase) = 0; !for anon ident
CHARBASE = _imp_ADDR(/*?*/ &CHAR[0]);
*_imp_BYTEINTEGER(CHARBASE) = 0;
// 2773 charlim = charbase+1
CHARLIM = CHARBASE + 1;
// 2774 charmin = charlim+charbound; !(1 over top)
CHARMIN = CHARLIM + 6000;
// 2775 dict(i)_val = 0 %for i = d0,1,labmax
// %for I = 2001, 1, 3254 %cycle
{
I = 2000;
L_0297:
if (I == 3254) goto L_0298;
I += 1;
DICT[I - 2001].VAL = 0;
goto L_0297;
}
L_0298:;
// 2776 d_flags = typeid; d_low = minint; d_val = maxint
D.FLAGS = 256;
D.LOW = -2147483648;
D.VAL = 2147483647;
// 2777 dmin = dictmax-1; dlim = dictmin
DMIN = 3233 - 1;
DLIM = 2041;
// 2778 %cycle
L_0299:;
// 2779 d_type = dlim; dict(dlim) = d
D.TYPE = DLIM;
DICT[DLIM - 2001] = D;
// 2780 dlim = dlim+1
DLIM = DLIM + 1;
// 2781 %repeat %until dlim > booltype
if (DLIM > 2048) goto L_029A;
goto L_0299;
L_029A:;
// 2782 d_flags = 0
D.FLAGS = 0;
// 2783 init(booltype,0,0)
INIT(2048, 0, 0);
// 2784 init(booltype,0,1)
INIT(2048, 0, 1);
// 2785 d_flags = typeid
D.FLAGS = 256;
// 2786 init(inty,minint,maxint)
INIT(2046, -2147483648, 2147483647);
// 2787 init(inty,-32768,32767)
INIT(2046, -32768, 32767);
// 2788 init(inty,0,65535)
INIT(2046, 0, 65535);
// 2789 init(inty,0,255)
INIT(2046, 0, 255);
// 2790 init(inty,-128,127)
INIT(2046, -128, 127);
// 2791 init(inty,0,1)
INIT(2046, 0, 1);
// 2792 init(inty,minint,maxint)
INIT(2046, -2147483648, 2147483647);
// 2793 init(realy,minint,maxint)
INIT(2045, -2147483648, 2147483647);
// 2794 init(realy,minint,maxint)
INIT(2045, -2147483648, 2147483647);
// 2795 c = 0; c_localdpos = dlim; c_parlim = dlim
C = (struct BLOCKINF){0};
C.LOCALDPOS = DLIM;
C.PARLIM = DLIM;
// 2796 level = outerlevel
LEVEL = 0;
// 2797 spc = finalbound
SPC = 8192;
// 2798 faults = 0; line = 0; mainline = 0
FAULTS = 0;
LINE = 0;
MAINLINE = 0;
// 2799 !
// 2800 mainfp = main_start1
MAINFP = MAIN->START1;
// 2801 extra_name = permfile
_imp_strncpy(/*?*/ &EXTRA.NAME, ({
__typeof__(_imp_string13) tmp; /*B*/
tmp = PERMFILE;
(void *)&tmp;
}),
/*max:*/ 255);
// 2802 connect edfile(extra)
CONNECTEDFILE(/*?*/ &EXTRA);
// 2803 nonstop = -999 %and %signal 12 %if extra_flag # 0
if (EXTRA.FLAG == 0) goto L_029B;
NONSTOP = -999;
_imp_signal(12, 0, 0, "");
L_029B:;
// 2804 fp = extra_start2; curstart = fp; curlim = extra_lim2
FP = EXTRA.START2;
CURSTART = FP;
CURLIM = EXTRA.LIM2;
// 2805 nonstop = -2; nonstop = -1 %if main_flag = 'I'
NONSTOP = -2;
if (MAIN->FLAG != 73) goto L_029C;
NONSTOP = -1;
L_029C:;
// 2806 sym = nl
SYM = 10;
// 2807 get STATEMENTS(-1)
GETSTATEMENTS(-1);
// 2808 ! report(noend,0) %if level < mainlevel
// 2809 ! report(nobegin,0) %if level > mainlevel
// 2810 ! compile end %while level >= mainlevel
// 2811 printout:
U_100F:;
// 2812 ! time2 = cputime
// 2813 %if faults = 0 %start
if (FAULTS != 0) goto L_029D;
// 2814 write(statements,1)
WRITE(STATEMENTS, 1);
// 2815 print string(" statements checked ")
PRINTSTRING(_imp_str_literal(" statements checked "));
// 2816 %finish %else %start
goto L_029E;
L_029D:;
// 2817 write(faults,1)
WRITE(FAULTS, 1);
// 2818 print string(" fault")
PRINTSTRING(_imp_str_literal(" fault"));
// 2819 put sym('s') %if faults > 1
if (FAULTS <= 1) goto L_029F;
PUTSYM(115);
L_029F:;
// 2820 print string(" reported ")
PRINTSTRING(_imp_str_literal(" reported "));
// 2821 %finish
L_029E:;
// 2822 newline
NEWLINE();
// 2823 ended:
U_1010:;
// 2824 newline; !*for now to ensure message not erased*
NEWLINE();
// 2825 ! %if control&logbit # 0 %start
// 2826 !! write(zaps,1); print symbol('Z')
// 2827 ! write(statements,1); print symbol('S')
// 2828 ! statements = 1 %if statements = 0
// 2829 ! atoms = atoms+statements
// 2830 ! print(atoms/statements,1,1); print symbol('A')
// 2831 ! print(numatoms/statements,1,1); print symbol('N')
// 2832 ! print(identatoms/statements,1,1); print symbol('I')
// 2833 ! print(misses/identatoms,1,2); print symbol('H')
// 2834 ! print((time2-time1)/statements,3,3); print symbol('M')
// 2835 !! write(finalad,1); print symbol('B')
// 2836 !! write(ownad-ownbase,1); print symbol('O')
// 2837 ! newline
// 2838 ! %finish
// 2839
// 2840 %end;
return;
} /* end of ECCECI */
// ?LISTMATCH unused
// ?LEFTBRACKET unused
// ?TEMPVAR unused
// ?PUT2 unused
// ?PUT3 unused
// ?COMPILE unused
// ?SETLABEL unused
// ?IBMHEX unused
// ?HYPHEN unused
// ?OVERLOAD unused
// ?LISTOUT unused
// ?CHARS unused
// ?PROLINE unused
// ?DIAGLINE unused
// ?CASEMASK unused
// ?OWNAD unused
// ?FINALAD unused
// ?DYNARRAY unused
// ?NONLOCALREF unused
// ?WRONGCC unused
// ?IREADENTRY unused
// ?INDEXENTRY unused
// ?AGETENTRY unused
// ?BOUNDENTRY unused
// ?SCOMPENTRY unused
// ?SIGENTRY unused
// ?DNEWLINE unused
// ?DREAD unused
// ?DPRINTSTR unused
// ?DOUBLE unused
// ?CS unused
// ?CC unused
// ?GE unused
// ?LT unused
// ?LE unused
// ?GT unused
// ?NE unused
// ?EQ unused
// ?ACTMAX unused
// ?ADECL unused
// ?LABEL unused
// ?JUMP unused
// ?COMPARE unused
// ?PLUSASS unused
// ?JAMASSIGN unused
// ?ASSIGN unused
// ?SWGOTO unused
// ?FCALL unused
// ?FMOD unused
// ?IMOD unused
// ?FLOAT unused
// ?RIGHTBRACKET unused
// ?COMMENT unused
// ?WFLAG unused
// ?RFLAG unused
// ?OKFLAG unused
// ?LITMODE unused
// ?INDEXMODE unused
// ?PREMODE unused
// ?POSTMODE unused
// ?INDMODE unused
// ?AMODE unused
// ?DMODE unused
// ?BYTESIZE unused
// ?LITSTORE unused
// ?SLITPOS unused
// ?DICTSHOWN unused
// ?ANYNAME unused
// ?ANYINTVAR unused
// ?FALSECONST unused
// ?FREE unused
// ?A2B unused
// ?A1B unused
// ?A0B unused
// ?D2B unused
// ?D1B unused
// ?D0B unused
// ?MAXAREG unused
// ?MAXDREG unused
// ?UNDEF unused
// ?PREA7 unused
// ?POSTA7 unused
// ?A7 unused
// ?A6 unused
// ?A1 unused
// ?D7 unused
// ?D6 unused
// ?D2 unused
// ?D1 unused
// ?SMALLMIN unused
// ?EXTRANAME unused
// 2841 ; !of ECCECI
// 2841
// 2842 %BEGIN
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2843 %END
_imp_stop(0);
return 0;
end_0:;
}
// 2844
// 2845 %endoffile