326 <SETG PLUSINF <CHTYPE <MIN> FIX>>
328 <SETG MINUSINF <CHTYPE <MAX> FIX>>
330 "Type specification for NODE."
371 "Offsets into pass 1 structure entities and functions to create same."
373 <SETG NODE-TYPE <OFFSET 1 NODE>>
375 ;"Code specifying the node type."
377 <SETG PARENT <OFFSET 2 NODE>>
379 ;"Pointer to parent node."
381 <SETG RESULT-TYPE <OFFSET 3 NODE>>
383 ;"Type expression for result returned by code
384 generated by this node."
386 <SETG NODE-NAME <OFFSET 4 NODE>>
388 ;"Usually name of SUBR associated with this node."
390 <SETG KIDS <OFFSET 5 NODE>>
392 ;"List of sub-nodes for this node."
394 <SETG STACKS <OFFSET 6 NODE>>
396 ;"Amount of stack needed by this node."
398 <SETG SEGS <OFFSET 7 NODE>>
400 ;"Predicate: any segments among kids?"
402 <SETG TYPE-INFO <OFFSET 8 NODE>>
404 ;"Points to transient type info for this node."
406 <SETG SIDE-EFFECTS <OFFSET 9 NODE>>
408 ;"General info about side effects (format not yet firm.)"
410 <SETG RSUBR-DECLS <OFFSET 10 NODE>>
412 ;"Function only: final rsubr decls."
414 <SETG BINDING-STRUCTURE <OFFSET 11 NODE>>
416 ;"Partially compiled arg list."
418 <SETG SPECS-START <OFFSET 12 NODE>>
420 ;"Offset to 1st special."
422 <SETG SYMTAB <OFFSET 13 NODE>>
424 ;"Pointer to local symbol table."
426 <SETG SSLOTS <OFFSET 14 NODE>>
428 ;"Number of specials."
430 <SETG USLOTS <OFFSET 15 NODE>>
432 ;"Number of unspecials."
434 <SETG ACTIVATED <OFFSET 16 NODE>>
436 ;"Predicate: any named activation?"
438 <SETG TMPLS <OFFSET 17 NODE>>
440 ;"Offset to unamed temps."
442 <SETG PRE-ALLOC <OFFSET 18 NODE>>
444 ;"Variable slots allocated in advance."
446 <SETG STK-B <OFFSET 19 NODE>>
448 ;"Base of stack at entry."
450 <SETG BTP-B <OFFSET 20 NODE>>
452 ;"Base of stack after bindings."
454 <SETG SPCS-X <OFFSET 21 NODE>>
456 ;"Predicate: any specials bound?"
458 <SETG DST <OFFSET 22 NODE>>
460 ;"Destination spec for value of node."
462 <SETG CDST <OFFSET 23 NODE>>
464 ;"Current destination used."
466 <SETG ATAG <OFFSET 24 NODE>>
468 ;"Label for local againing."
470 <SETG RTAG <OFFSET 25 NODE>>
472 ;"Label for local Returning."
474 <SETG ASSUM <OFFSET 26 NODE>>
476 ;"Node type assumptions."
478 <SETG AGND <OFFSET 27 NODE>>
480 ;"Predicate: Again possible?"
482 <SETG ACS <OFFSET 28 NODE>>
484 ;"Predicate: AC call possible? (if not false
487 <SETG TOTARGS <OFFSET 29 NODE>>
489 ;"Total number of args (including optional)."
491 <SETG REQARGS <OFFSET 30 NODE>>
493 ;"Required arguemnts."
495 <SETG LOOP-VARS <OFFSET 31 NODE>>
497 "Variables kept in acs thru loop."
499 <SETG AGAIN-STATES <OFFSET 32 NODE>>
503 <SETG RETURN-STATES <OFFSET 33 NODE>>
507 <SETG PROG-VARS <OFFSET 34 NODE>>
509 "Vars handled in this prog/repeat."
511 ;"Information used for merging states with prog-nodes"
513 <SETG CLAUSES <OFFSET <INDEX ,KIDS> NODE>>
517 <SETG NODE-SUBR <OFFSET <INDEX ,RSUBR-DECLS> NODE>>
519 ;"For many nodes, the SUBR (not its name)."
521 <SETG PREDIC <OFFSET <INDEX ,NODE-NAME> NODE>>
523 ;"For cond clause nodes, the predicate."
525 <SETG ACCUM-TYPE <OFFSET <INDEX ,DST> NODE>>
527 ;"Accumulated type from all returns etc."
529 <SETG DEAD-VARS <OFFSET <INDEX ,CDST> NODE>>
531 <SETG LIVE-VARS <OFFSET <INDEX ,TYPE-INFO> NODE>>
533 <SETG VSPCD <OFFSET <INDEX ,ATAG> NODE>>
535 <SETG INIT-DECL-TYPE <OFFSET <INDEX ,RTAG> NODE>>
537 " Definitions associated with compiler symbol tables."
539 "Offsets for variable description blocks"
543 '<VECTOR <PRIMTYPE VECTOR>
555 <OR FALSE DATUM LIST>
563 <SETG NEXT-SYM <OFFSET 1 SYMTAB>>
565 ;"Pointer to next symbol table entry."
567 <SETG NAME-SYM <OFFSET 2 SYMTAB>>
571 <SETG SPEC-SYM <OFFSET 3 SYMTAB>>
573 ;"Predicate: special?"
575 <SETG CODE-SYM <OFFSET 4 SYMTAB>>
577 ;"Code specifying whether AUX, OPTIONAL etc."
579 <SETG ARGNUM-SYM <OFFSET 5 SYMTAB>>
581 ;"If an argument, which one."
583 <SETG PURE-SYM <OFFSET 6 SYMTAB>>
585 ;"Predicate: unchanged in function?"
587 <SETG DECL-SYM <OFFSET 7 SYMTAB>>
589 ;"Decl for this variable."
591 <SETG ADDR-SYM <OFFSET 8 SYMTAB>>
595 <SETG INIT-SYM <OFFSET 9 SYMTAB>>
597 ;"Predicate: initial value? if so what."
599 <SETG FRMNO <OFFSET 10 SYMTAB>>
603 <SETG RET-AGAIN-ONLY <OFFSET 11 SYMTAB>>
605 ;"Predicate: used only in AGAIN/RETURN?"
607 <SETG ASS? <OFFSET 12 SYMTAB>>
609 ;"Predicate: used in ASSIGNED?"
611 <SETG INACS <OFFSET 13 SYMTAB>>
613 ;"Predicate: currently in some AC?"
615 <SETG STORED <OFFSET 14 SYMTAB>>
617 ;"Predicate: stored in slot?"
619 <SETG USED-AT-ALL <OFFSET 15 SYMTAB>>
621 ;"Predicate: symbolused at all."
623 <SETG DEATH-LIST <OFFSET 16 SYMTAB>>
625 ;"List of info associated with life time."
627 <SETG CURRENT-TYPE <OFFSET 17 SYMTAB>>
629 ;"Current decl determined by analysis"
631 <SETG COMPOSIT-TYPE <OFFSET 18 SYMTAB>>
633 <SETG USAGE-SYM <OFFSET 19 SYMTAB>>
635 "How a variable is used in a loop."
637 <SETG PROG-AC <OFFSET <INDEX ,CURRENT-TYPE> SYMTAB>>
639 <SETG NUM-SYM <OFFSET <INDEX ,COMPOSIT-TYPE> SYMTAB>>
641 <SETG POTLV <OFFSET <INDEX ,USED-AT-ALL> SYMTAB>>
644 "Slot used to store information for variables in loops."
646 ;"Type as figured out by all uses of symbol."
648 <DEFINE NODE1 (TYP PAR RES-TYP NAME KID)
649 <CHTYPE [.TYP .PAR .RES-TYP .NAME .KID 0 <>] NODE>>
651 "Create a function node with all its hair."
653 <DEFINE NODEF (TYP PAR RES-TYP NAME KID RSD BST HAT VTB ACS? TRG RQRG)
654 <CHTYPE [.TYP .PAR .RES-TYP .NAME .KID 0 <> () <> .RSD .BST 0 .VTB 0
655 0 <> <MAKE:TAG "FRM"> <> () () <> <> <> <> .RES-TYP <> <>
656 .ACS? .TRG .RQRG] NODE>>
658 "Create a PROG/REPEAT node with nearly as much hair."
660 <DEFINE NODEPR (TYP PAR RES-TYP NAME KID VL BST HAT VTB)
697 "Create a COND node."
699 <DEFINE NODECOND (TYP PAR RES-TYP NAME CLAU)
700 <CHTYPE [.TYP .PAR .RES-TYP .NAME .CLAU 0 <> () <>] NODE>>
702 "Create a node for a COND clause."
704 <DEFINE NODEB (TYP PAR RES-TYP PRED CLAU)
705 <CHTYPE [.TYP .PAR .RES-TYP .PRED .CLAU 0 <> () <>] NODE>>
707 "Create a node for a SUBR call etc."
709 <DEFINE NODEFM (TYP PAR RES-TYP NAME KID SUB)
710 <CHTYPE [.TYP .PAR .RES-TYP .NAME .KID 0 <> () <> .SUB] NODE>>
713 <DEFINE ADDVAR (NAM SPEC CODE ARGNUM PURE DCL ADDR INIT)
714 <SET VARTBL <CHTYPE [.VARTBL .NAM .SPEC .CODE .ARGNUM .PURE .DCL .ADDR .INIT 0 <>
715 <> <> T <> () <> ANY 0] SYMTAB>>>
718 "Some specialized decl stuff."
722 #DECL ((VARTBL) <SPECIAL ANY>)
723 <ADDVAR OBLIST T -1 0 T '(<OR LIST OBLIST>) <> <>>
724 <ADDVAR OUTCHAN T -1 0 T '(CHANNEL) <> <>>
725 <ADDVAR INCHAN T -1 0 T '(CHANNEL) <> <>>
728 <PUT CHANNEL DECL '<CHANNEL FIX [11 ANY] [5 FIX]>>
730 <PUT STRING DECL '<STRING [REST CHARACTER]>>
732 <PUT OBLIST DECL '<UVECTOR [REST <LIST [REST <OR ATOM LINK>]>]>>
734 "Codes for the node types in the tree built by pass1 and modified by
737 "Give symbolic codes arbitrary increasing values."
742 <FUNCTION (ATM) <SETG .ATM .N> <SET N <+ .N 1>> .ATM>
835 <SETG COMP-TYPES .N>>
840 "Build a dispatch table based on node types."
842 <DEFINE DISPATCH (DEFAULT "TUPLE" PAIRS
843 "AUX" (TT <IVECTOR ,COMP-TYPES '.DEFAULT>))
844 #DECL ((PAIRS) <TUPLE [REST <LIST FIX ANY>]>
846 <REPEAT ((PAIR '(1 1))) #DECL ((PAIR) <LIST FIX ANY>)
847 <COND (<EMPTY? .PAIRS><RETURN .TT>)>
848 <PUT .TT <1 <SET PAIR <1 .PAIRS>>> <2 .PAIR>>
849 <SET PAIRS <REST .PAIRS>>>>
851 <SETG PREDV <IUVECTOR ,COMP-TYPES 0>>
854 <FUNCTION (N) <PUT ,PREDV .N 1>>
874 "Predicate: does this type have special predicate code?"
878 '<LIST [5 <LIST [REST SYMTAB DATUM <OR FALSE ATOM> <OR ATOM FALSE>]>]>>
880 <PUT SYMBOL DECL '<OR SYMTAB TEMP COMMON>>
882 <NEWTYPE TEMP VECTOR '<VECTOR SCL <OR FALSE DATUM>>>
888 <OR FALSE <LIST [REST SYMBOL]>>
889 [REST <LIST SYMBOL [3 ANY]>]>]>>
891 <SETG TMPNO <OFFSET 1 TEMP>>
893 <SETG TMPAC <OFFSET 2 TEMP>>
895 <SETG DATTYP <OFFSET 1 DATUM>>
897 <SETG DATVAL <OFFSET 2 DATUM>>
899 <SETG ADDRSYM <OFFSET 1 AC>>
901 <SETG ACSYM <OFFSET 2 AC>>
903 <SETG ACLINK <OFFSET 3 AC>>
905 <SETG ACAGE <OFFSET 4 AC>>
907 <SETG ACNUM <OFFSET 5 AC>>
909 <SETG ACPROT <OFFSET 6 AC>>
911 <SETG AC1SYM <OFFSET 7 AC>>
913 <SETG ACRESIDUE <OFFSET 8 AC>>
915 <SETG ACPREF <OFFSET 9 AC>>
919 '<<PRIMTYPE VECTOR> <PRIMTYPE WORD>
921 <OR <LIST [REST DATUM]> FALSE>
931 '<<PRIMTYPE LIST> <OR ATOM <PRIMTYPE LIST> <PRIMTYPE VECTOR>>
932 <OR ATOM <PRIMTYPE LIST> <PRIMTYPE VECTOR>>>>
934 <NEWTYPE OFFPTR LIST '<<PRIMTYPE LIST> FIX DATUM ATOM>>
938 <NEWTYPE IRSUBR LIST>
940 "A TOKEN GIVES INFORMATION TO CUP"
942 <NEWTYPE TOKEN VECTOR '<<PRIMTYPE VECTOR> FIX>>
944 <NEWTYPE ADDRESS:PAIR LIST>
946 <NEWTYPE ADDRESS:C LIST>
950 <FUNCTION (N1 N2 N N+1 NAME "AUX" THISAC)
951 <SETG .NAME <SET THISAC <CHTYPE [.N1 .N2 <> 0 .N <> .N+1 <> <>] AC>>>
952 <EVAL <FORM GDECL (.NAME) AC>> .THISAC>
953 ![`A `B `C `D `E `F `TVP `SP!]
954 ![`A* `B* `C* `D* `E* `F* `TVP* `SP*!]
956 ![`B* `C* `D* `E* `F* `TVP* `SP* `AB*!]
957 ![AC-A AC-B AC-C AC-D AC-E AC-F AC-G AC-H!]>>
959 <SETG NUMACS <LENGTH ,ALLACS>>
963 <SETG LAST-AC-1 ,AC-G>
972 <PUT .AC ,ACRESIDUE <>>
973 <PUT .AC ,ACPREF <>>>
978 <GDECL (ALLACS) !<UVECTOR [8 AC]> (ATIME REGS) FIX (LAST-AC LAST-AC-1 AC0) AC>
980 <MANIFEST SS-SYM-SLOT SS-DAT-SLOT SS-STORED-SLOT SS-POTENT-SLOT>
982 <MANIFEST TMPFRM TMPNO THOME TUSERS DATTYP DATVAL ADDRSYM ACSYM ACLINK ACAGE
983 ACNUM ACPROT AC1SYM ACRESIDUE ACPREF ACINUSE TMPAC COMMON-DATUM
986 <MAPF <> ,MANIFEST ,CODVEC>
988 <MANIFEST TOT-MODES RESTS RMODES COMP-TYPES
989 GDECL-SYM GNAME-SYM GNEXT-SYM FRMNO INIT-SYM ADDR-SYM TOTARGS REQARGS
990 DECL-SYM PURE-SYM ARGNUM-SYM CODE-SYM SPEC-SYM NAME-SYM NEXT-SYM PREDIC
991 NODE-SUBR CLAUSES ACS TMPLS ACTIVATED USLOTS SSLOTS SYMTAB SPECS-START
992 BINDING-STRUCTURE RSUBR-DECLS SEGS STACKS KIDS NODE-NAME RESULT-TYPE PARENT
993 NODE-TYPE SIDE-EFFECTS RET-AGAIN-ONLY ASS? INACS STORED DST CDST ACCUM-TYPE
994 INIT-DECL-TYPE VSPCD AGND ASSUM RTAG ATAG SPCS-X BTP-B STK-B PRE-ALLOC
995 USED-AT-ALL CURRENT-TYPE DEATH-LIST COMPOSIT-TYPE AGAIN-STATES RETURN-STATES
996 PROG-VARS LOOP-VARS PROG-AC NUM-SYM TYPE-INFO USAGE-SYM LIVE-VARS
1003 <SETG NO-RESIDUE 10000000>
1005 <SETG STORED-RESIDUE 1000000>
1007 <SETG NOT-STORED-RESIDUE 100000>
1009 <SETG NOT-PREF 10000>
1011 <SETG P-N-CLEAN 1000>
1013 <SETG P-N-STO-RES 100>
1015 <SETG P-N-NO-STO-RES 10>
1029 <SETG ACO <CHTYPE [`O* `O* <> 0 0 <> `A* <> <>] AC>>
1031 <SETG SS-SYM-SLOT 1>
1035 <SETG SS-DAT-SLOT 2>
1037 "DATUM OF THE SYMBOL"
1039 <SETG SS-STORED-SLOT 3>
1041 "IS THE SYMBOL STORED"
1043 <SETG SS-POTENT-SLOT 4>
1045 "IS THE SYMBOL POTENTIAL"
1047 <MANIFEST SS-SYM-SLOT SS-DAT-SLOT SS-STORED-SLOT SS-POTENT-SLOT>
1049 "MANIFESTS FOR PROG-AC"
1053 <SETG NUM-SYM-SLOT 2>
1055 <SETG STORED-SLOT 3>
1059 "MANIFESTED VARIABLES FOR SLOT STORE IN PROG-VARS"
1063 <SETG SAVED-NUM-SYM-SLOT 2>
1065 <SETG SAVED-PROG-AC-SLOT 3>
1067 <SETG SAVED-POTLV-SLOT 4>
1069 <SETG LENGTH-PROG-VARS 4>
1071 "MANIFESTS FOR AGAIN AND RETURN STATES"
1073 <SETG SAVED-AC-STATE 1>
1075 <SETG SAVED-CODE:PTR 2>
1077 <SETG SAVED-STACK-STATE 3>
1079 <SETG SAVED-RET-FLAG 4>
1081 <SETG LENGTH-CONTROL-STATE 4>
1083 "OFFSETS FOR STACK:INFO"
1089 <SETG SAVED-NTSLOTS 3>
1093 "SLOTS FOR SAVED-AC-SLOT"
1097 <SETG CINACS-SLOT 2>
1099 <SETG CSTORED-SLOT 3>
1101 <SETG CPOTLV-SLOT 4>
1103 <SETG LENGTH-CSTATE 4>
1105 "SLOTS FOR LOOP-VARS"
1109 <SETG LINACS-SLOT 2>
1111 <SETG LOOPVARS-LENGTH 2>
1113 <MANIFEST NUM-SYM-SLOT
1134 LENGTH-CONTROL-STATE
1142 '<<PRIMTYPE VECTOR> ATOM <OR COMMON SYMTAB> FIX ANY <PRIMTYPE LIST>>>
1144 <SETG COMMON-TYPE <OFFSET 1 COMMON>>
1146 "TYPE OF COMMON (ATOM)"
1148 <SETG COMMON-SYMT <OFFSET 2 COMMON>>
1150 "POINTER TO OR COMMON SYMTAB"
1152 <SETG COMMON-ITEM <OFFSET 3 COMMON>>
1154 "3RD ARGUMENT TO NTH,REST,PUT ETC."
1156 <SETG COMMON-PRIMTYPE <OFFSET 4 COMMON>>
1158 "PRIMTYPE OF OBJECT IN COMMON"
1160 <SETG COMMON-DATUM <OFFSET 5 COMMON>>
1162 "DATUM FOR THIS COMMON"
1164 <MANIFEST COMMON-TYPE COMMON-SYMTAB COMMON-ITEM COMMON-PRIMTYPE COMMON-DATUM>
1168 '<<PRIMTYPE VECTOR> NODE <UVECTOR [7 FIX]> <UVECTOR [7 FIX]>>>
1170 <DEFINE MESSAGE (SEVERITY STR "TUPLE" TEXT)
1171 <AND <GASSIGNED? DEBUGSW> <ERROR .SEVERITY .STR>>
1174 #DECL ((ATM SEV) ATOM)
1175 <COND (<==? .SEV .SEVERITY>
1176 <AND <ASSIGNED? .ATM> <SET .ATM T>>
1178 '(ERROR NOTE WARNING INCONSISTANCY INCONSISTENCY)
1179 '(ERRS NOTES WARNS INCONS INCONS)>
1181 <PRINC .SEVERITY> ;"Typically NOTE, WARNING, ERROR, or INCONSISTANCY"
1185 <COND (<EMPTY? .TEXT> <RETURN 0>)
1186 (<==? <TYPE <1 .TEXT>> ATOM> <PRINC <1 .TEXT>>)
1187 (<TYPE? <1 .TEXT> NODE>
1188 <COND (<GASSIGNED? NODE-COMPLAIN>
1190 <NODE-COMPLAIN <1 .TEXT>>
1192 (ELSE <PRIN1 <1 .TEXT>>)>
1193 <PRINC " "> ;"Space"
1194 <SET TEXT <REST .TEXT>>>
1196 <COND (<==? .SEVERITY ERROR> <RETURN " COMPILATION ABORTED " .COMPILER>)
1197 (<OR <==? .SEVERITY INCONSISTANCY> <==? .SEVERITY INCONSISTENCY>>
1198 <RETURN " INFORM BKD; OR CLR; " .COMPILER>)>
1201 <SETG INSTRUCTION ,FORM>