PROPOSED FUNCTIONAL SPECIFICATION FOR HARDWARE / SOFTWARE INTERFACE ON TAMARIN LISP PROCESSOR Aug 12, 1987 Copyright (c) 1987 Xerox Corporation All Rights Reserved Xerox Internal use Only This document describes internal data structures and opcode specifications used in the AIS Tamarin Lisp Processor. Its primary purpose is to illustrate the direction Tamarin is going, and is subject to change and input. This is being circulated for comments. Please send all comments in writing to Alan Bell and Bob Krivacic via email on TamarinCore^. Your comments will be incorporated to form the final version. TAMARIN ARCHITECTURE The Tamarin chip is a CMOS VLSI processor with specialized opcodes to run LISP efficiently. Some of the features which make this chip suitable to run Lisp are: tag bits, parallel type checking, parallel operand fetching, parallel stack manipulation, internal register & stack cache, binding stack operations, garbage collection primitives, and CDR coding. The combination of these features make it possible to implement most Lisp opcodes with one microinstruction, which gives the Tamarin chip a competative edge in speed and flexability. INTERNAL REGISTER CACHE The Tamarin chip contains several (4-8) internal register caches which are used to hold the equivalent of a function activation. Each register cache (or stack frame) contains the function parameters, local variables, special registers (such as stack pointer, program counter, flags, and other special pointers), and the current computational stack. Since these registers are contained in the processor, memory accesses are not required to perform many of the simple variable access & stack instructions. When the function depth exceeds the capacity of the internal frame cache, the processor pushes out the oldest frame into main memory at a high band width, to free up the frame for the new function call. The frame is not read back into the processor until being returned to, thus reducing the possibility of thrashing stack frames. The Tamarin also contains an extra frame which is called the global frame. These registers contain special global values used by the processor, along with a few global registers which are available to the Lisp system for storage of extremely critical variables. WORD FORMAT The Tamarin word size is 40 bits, with the following fields defined: ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;2" VERSION 3 PRIRANGE (152 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 188.0 (PRI 3)) (BOX (-68.0 -312.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 5)) (WIRE ((-32 . -272) (-32 . -312)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 6)) (TEXT (-16.0 . -296.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-23.0 -299.0 14 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((0 . -272) (0 . -312)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (156.0 . -296.0) ("Data Value") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((121.0 -299.0 70 12)) BLACK)) ((0.05 12.0 (PRI 120)) (TEXT (-53.0 . -297.0) ("CDR") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-63.5 -300.0 21 12)) BLACK)) ((0.05 12.0 (PRI 125)) (TEXT (155.0 . -264.0) ("34") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.0 -267.0 14 12)) BLACK)) ((0.05 12.0 (PRI 127)) (TEXT (-16.0 . -264.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-19.5 -267.0 7 12)) BLACK)) ((0.05 12.0 (PRI 128)) (TEXT (-48.0 . -264.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-51.5 -267.0 7 12)) BLACK))) (-68.0 -313.0 376.0 58.0) 1.0 4 GC - Garbage Collection Information. These bits contain the garbage collection information. CDR - CDR Coding. These bits contain the CDR coding information for List cells. DATA FORMAT The four major data representations in the Tamarin Processor are as follows: FIXNUMS / Fix ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;2" VERSION 3 PRIRANGE (155 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 154.0 (PRI 3)) (BOX (0.0 -436.0 308.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (20.0 . -420.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((9.5 -423.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((40 . -396) (40 . -436)) (ROUND 1 BLACK) NIL NIL 1 (39 -437 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (168.0 . -420.0) ("32 bit 2's Complement Integer") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((66.5 -423.0 203 12)) BLACK)) ((0.05 12.0 (PRI 125)) (TEXT (165.0 . -388.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((158.0 -391.0 14 12)) BLACK)) ((0.05 12.0 (PRI 126)) (TEXT (25.0 . -389.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((21.5 -392.0 7 12)) BLACK))) (-5.0 -436.0 319.0 57.0) 1.0 4 Integers are implemented as 32 bit 2's complement integers. The integer values are immediate in the datum item so that there is no need to "box" large integers (although larger integers such as Bignums must still be boxed). FLOATING POINT / Float ((SKETCH a% figure% from% a% document VERSION 3 PRIRANGE (261 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 154.0 (PRI 138)) (BOX (0.0 -512.0 308.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 141)) (TEXT (20.0 . -496.0) ("Float") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((2.5 -499.0 35 12)) BLACK)) ((0.0 20.0 (PRI 142)) (WIRE ((40.0 . -472.0) (40.0 . -512.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 143)) (TEXT (168.0 . -496.0) ("32 bit IEEE Floating Point") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((77.0 -499.0 182 12)) BLACK)) ((0.05 12.0 (PRI 144)) (TEXT (165.0 . -464.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((158.0 -467.0 14 12)) BLACK)) ((0.05 12.0 (PRI 145)) (TEXT (25.0 . -465.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((21.5 -468.0 7 12)) BLACK))) (-3.0 -514.0 314.0 59.0) 1.0 4 Thirty two bit Floating point numbers are directly representable with immediate values in the Tamarin word. These are standard IEEE formats, with floating point operations being performed by an external floating point chip. POINTERS / Ptr ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;4" VERSION 3 PRIRANGE (259 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 154.0 (PRI 3)) (BOX (0.0 -376.0 308.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (20.0 . -360.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((9.5 -363.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((40 . -336) (40 . -376)) (ROUND 1 BLACK) NIL NIL 1 (39 -377 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (200.0 . -360.0) ("28 bit Pointer / Immediate") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((109.0 -363.0 182 12)) BLACK)) ((0.05 12.0 (PRI 126)) (TEXT (25.0 . -329.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((21.5 -332.0 7 12)) BLACK)) ((0.05 12.0 (PRI 131)) (TEXT (68.0 . -360.0) ("SUBTYPE") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((43.5 -363.0 49 12)) BLACK)) ((0.0 4.0 (PRI 132)) (WIRE ((92 . -376) (92 . -376)) (ROUND 1 BLACK) NIL NIL 1 (91 -377 2 2) NIL)) ((0.0 20.0 (PRI 133)) (WIRE ((96 . -376) (96 . -336)) (ROUND 1 BLACK) NIL NIL 1 (95 -377 2 42) NIL)) ((0.05 12.0 (PRI 134)) (TEXT (200.0 . -328.0) ("28") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((193.0 -331.0 14 12)) BLACK)) ((0.05 12.0 (PRI 135)) (TEXT (72.0 . -328.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((68.5 -331.0 7 12)) BLACK))) (-4.0 -377.0 316.0 58.0) 1.0 4 Pointers types are used to point to data objects in memory. They consist of a 28 bit word pointer which points to the object, and a subtype field which indicates the general type of the object being pointed to. There is also a special subset of pointers which are used to indicate immediate values. They have the same basic format of pointers, except that there is a restricted subtype field, and the data value is a 28 bit immediate instead of a pointer. The table on the next page will show the relationship between the different data types and the Tag fields. IMMEDIATES / Imm ((SKETCH a% figure% from% a% document VERSION 3 PRIRANGE (261 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 152.0 (PRI 3)) (BOX (4.0 -572.0 304.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (20.0 . -556.0) ("Imm") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((9.5 -559.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((40 . -532) (40 . -572)) (ROUND 1 BLACK) NIL NIL 1 (39 -573 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (200.0 . -556.0) ("28 bit Immediate") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((144.0 -559.0 112 12)) BLACK)) ((0.05 12.0 (PRI 126)) (TEXT (25.0 . -525.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((21.5 -528.0 7 12)) BLACK)) ((0.05 12.0 (PRI 131)) (TEXT (68.0 . -556.0) ("SUBTYPE") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((43.5 -559.0 49 12)) BLACK)) ((0.0 20.0 (PRI 133)) (WIRE ((96 . -572) (96 . -532)) (ROUND 1 BLACK) NIL NIL 1 (95 -573 2 42) NIL)) ((0.05 12.0 (PRI 134)) (TEXT (200.0 . -524.0) ("28") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((193.0 -527.0 14 12)) BLACK)) ((0.05 12.0 (PRI 135)) (TEXT (72.0 . -524.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((68.5 -527.0 7 12)) BLACK))) (0.0 -573.0 311.0 58.0) 1.0 4 Immediate fields (which is a subset of the general pointer format), have a similar format to that of pointer objects except that the word contains the actual data instead of a pointer to the data. Special data objects (such as characters) are stored in this immediate format. TAG & SUBTYPE ASSIGNMENTS ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;8" VERSION 3 PRIRANGE (544 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL) VIEWS ((home 1.953125 (140.625 . -0.9765626)))) ((0.05 12.0 (PRI 184)) (TEXT (-48.0 . 744.0) ("Immediates") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-83.0 741.0 70 12)) BLACK)) ((0.05 12.0 (PRI 333)) (TEXT (-49.0 . 447.0) ("Pointers") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-77.0 444.0 56 12)) BLACK)) ((0.0 320.0 (PRI 384)) (WIRE ((8 . 512) (8 . 1152)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 76.0 (PRI 386)) (WIRE ((-264 . 592) (-112 . 592)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 136.0 (PRI 388)) (WIRE ((-264 . 192) (8 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 144.0 (PRI 389)) (WIRE ((8 . 832) (8 . 544)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 390)) (TEXT (64.0 . 783.0) ("100 0xx") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.5 780.0 49 12)) BLACK)) ((0.05 12.0 (PRI 391)) (TEXT (64.0 . 624.0) ("101 0xx") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.5 621.0 49 12)) BLACK)) ((0.05 12.0 (PRI 392)) (TEXT (64.0 . 552.0) ("101 1xx") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.5 549.0 49 12)) BLACK)) ((0.05 12.0 (PRI 393)) (TEXT (64.0 . 472.0) ("110 0xx" "(NumberP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.5 475.0 49 12) (32.5 463.0 63 12)) BLACK)) ((0.05 12.0 (PRI 394)) (TEXT (64.0 . 304.0) ("111 0xx") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.5 301.0 49 12)) BLACK)) ((0.0 160.0 (PRI 395)) (WIRE ((112 . 832) (112 . 512)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 56.0 (PRI 397)) (WIRE ((-264 . 192) (-376 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 399)) (TEXT (-320.0 . 272.0) ("Wrapped") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-344.5 269.0 49 12)) BLACK)) ((0.05 12.0 (PRI 402)) (TEXT (-184.0 . 856.0) ("Non Ref Counted") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-236.5 853.0 105 12)) BLACK)) ((0.05 12.0 (PRI 403)) (TEXT (-184.0 . 392.0) ("Ref Counted") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-222.5 389.0 77 12)) BLACK)) ((0.0 52.0 (PRI 404)) (WIRE ((8 . 832) (112 . 832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 52.0 (PRI 405)) (WIRE ((8 . 352) (112 . 352)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 52.0 (PRI 406)) (WIRE ((8 . 592) (112 . 592)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 52.0 (PRI 407)) (WIRE ((8 . 672) (112 . 672)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 413)) (TEXT (-48.0 . 760.0) ("Typed") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-65.5 757.0 35 12)) BLACK)) ((0.0 60.0 (PRI 425)) (WIRE ((-112 . 832) (8 . 832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 60.0 (PRI 426)) (WIRE ((-112 . 672) (8 . 672)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 430)) (TEXT (-320.0 . 768.0) ("Non Wrapped" "(Get Type" "From Wrapper" "Table)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-358.5 783.0 77 12) (-351.5 771.0 63 12) (-362.0 759.0 84 12) (-341.0 747.0 42 12)) BLACK)) ((0.0 60.0 (PRI 431)) (WIRE ((-112 . 592) (8 . 592)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 434)) (TEXT (-24.0 . 128.0) ("Tag & Subtype Breakdown") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-104.5 125.0 161 12)) BLACK)) ((0.05 12.0 (PRI 436)) (TEXT (128.0 . 809.0) ("100 000 Unbound") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 806.0 105 12)) BLACK)) ((0.05 12.0 (PRI 438)) (TEXT (128.0 . 792.0) ("100 001 Characters") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 789.0 126 12)) BLACK)) ((0.05 12.0 (PRI 439)) (TEXT (128.0 . 648.0) ("101 000 UnTyped Ptr") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 645.0 133 12)) BLACK)) ((0.05 12.0 (PRI 440)) (TEXT (128.0 . 632.0) ("101 001 Invisible Ptr") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 629.0 147 12)) BLACK)) ((0.05 12.0 (PRI 441)) (TEXT (128.0 . 616.0) ("101 010 Binding Stack Ptr") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 613.0 175 12)) BLACK)) ((0.05 12.0 (PRI 442)) (TEXT (128.0 . 600.0) ("101 011 Non Ref Counted SymbolP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 597.0 217 12)) BLACK)) ((0.05 12.0 (PRI 443)) (TEXT (128.0 . 568.0) ("101 100 Short ConsP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 565.0 133 12)) BLACK)) ((0.05 12.0 (PRI 444)) (TEXT (128.0 . 552.0) ("101 101 Long ConsP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 549.0 126 12)) BLACK)) ((0.05 12.0 (PRI 445)) (TEXT (128.0 . 536.0) ("101 110 ") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 533.0 56 12)) BLACK)) ((0.05 12.0 (PRI 446)) (TEXT (128.0 . 520.0) ("101 111 Ref Counted SymbolP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 517.0 189 12)) BLACK)) ((0.05 12.0 (PRI 452)) (TEXT (128.0 . 408.0) ("110 100 CCodeP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 405.0 98 12)) BLACK)) ((0.05 12.0 (PRI 453)) (TEXT (128.0 . 392.0) ("110 101 ClosureP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 389.0 112 12)) BLACK)) ((0.05 12.0 (PRI 454)) (TEXT (128.0 . 376.0) ("110 110 MethodP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 373.0 105 12)) BLACK)) ((0.05 12.0 (PRI 455)) (TEXT (128.0 . 328.0) ("111 000 InstanceP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128 325.0 119 12)) BLACK)) ((0.0 120.0 (PRI 461)) (WIRE ((112 . 672) (352 . 672)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 462)) (WIRE ((352 . 672) (352 . 832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 120.0 (PRI 464)) (WIRE ((112 . 512) (352 . 512)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 465)) (WIRE ((352 . 512) (352 . 672)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 120.0 (PRI 466)) (WIRE ((112 . 352) (352 . 352)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 467)) (WIRE ((352 . 352) (352 . 512)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 469)) (TEXT (128.0 . 488.0) ("110 000 BinNumP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 485.0 105 12)) BLACK)) ((0.05 12.0 (PRI 470)) (TEXT (128.0 . 472.0) ("110 001 LongFloatP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 469.0 126 12)) BLACK)) ((0.05 12.0 (PRI 471)) (TEXT (128.0 . 456.0) ("110 010 RatioP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 453.0 98 12)) BLACK)) ((0.05 12.0 (PRI 472)) (TEXT (128.0 . 440.0) ("110 011 ComplexP") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 437.0 112 12)) BLACK)) ((0.0 52.0 (PRI 473)) (WIRE ((8 . 512) (112 . 512)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 475)) (WIRE ((112 . 512) (112 . 352)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 120.0 (PRI 476)) (WIRE ((112 . 432) (352 . 432)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 320.0 (PRI 477)) (WIRE ((-376 . 832) (-376 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 480.0 (PRI 479)) (WIRE ((-264 . 192) (-264 . 1152)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 480.0 (PRI 480)) (WIRE ((-112 . 1152) (-112 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 481)) (WIRE ((8 . 512) (8 . 352)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 120.0 (PRI 482)) (WIRE ((112 . 832) (352 . 832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 483)) (TEXT (64.0 . 384.0) ("110 1xx") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.5 381.0 49 12)) BLACK)) ((0.0 120.0 (PRI 484)) (WIRE ((112 . 592) (352 . 592)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 485)) (TEXT (128.0 . 360.0) ("110 111 ") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128 357.0 56 12)) BLACK)) ((0.0 136.0 (PRI 486)) (WIRE ((-264 . 192) (8 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 52.0 (PRI 487)) (WIRE ((8 . 192) (112 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 488)) (WIRE ((8 . 352) (8 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 52.0 (PRI 489)) (WIRE ((8 . 192) (112 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 120.0 (PRI 490)) (WIRE ((112 . 192) (352 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 491)) (WIRE ((112 . 352) (112 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 492)) (WIRE ((352 . 352) (352 . 192)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 120.0 (PRI 493)) (WIRE ((112 . 272) (352 . 272)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 494)) (TEXT (64.0 . 224.0) ("111 1xx") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.5 221.0 49 12)) BLACK)) ((0.05 12.0 (PRI 495)) (TEXT (128.0 . 312.0) ("111 001 Wrapper NumberP ") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128 309.0 168 12)) BLACK)) ((0.05 12.0 (PRI 496)) (TEXT (128.0 . 296.0) ("111 010 ") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128 293.0 56 12)) BLACK)) ((0.05 12.0 (PRI 497)) (TEXT (128.0 . 280.0) ("111 011 ") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128 277.0 56 12)) BLACK)) ((0.05 12.0 (PRI 498)) (TEXT (128.0 . 248.0) ("111 100 ") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128 245.0 56 12)) BLACK)) ((0.05 12.0 (PRI 499)) (TEXT (128.0 . 232.0) ("111 101 ") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 229.0 56 12)) BLACK)) ((0.05 12.0 (PRI 500)) (TEXT (128.0 . 216.0) ("111 110 ") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 213.0 56 12)) BLACK)) ((0.05 12.0 (PRI 501)) (TEXT (128.0 . 200.0) ("111 111 ") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 197.0 56 12)) BLACK)) ((0.0 52.0 (PRI 502)) (WIRE ((112 . 432) (8 . 432)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 52.0 (PRI 503)) (WIRE ((112 . 272) (8 . 272)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 136.0 (PRI 504)) (WIRE ((8 . 352) (-264 . 352)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 56.0 (PRI 505)) (WIRE ((-264 . 352) (-376 . 352)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 52.0 (PRI 506)) (WIRE ((8 . 672) (112 . 672)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 52.0 (PRI 507)) (WIRE ((8 . 672) (112 . 672)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 120.0 (PRI 508)) (WIRE ((112 . 672) (352 . 672)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 509)) (WIRE ((112 . 832) (112 . 672)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 120.0 (PRI 510)) (WIRE ((112 . 752) (352 . 752)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 52.0 (PRI 511)) (WIRE ((112 . 752) (8 . 752)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 512)) (TEXT (64.0 . 704.0) ("100 1xx") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.5 701.0 49 12)) BLACK)) ((0.0 160.0 (PRI 513)) (WIRE ((-376 . 1152) (-376 . 832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 160.0 (PRI 515)) (WIRE ((352 . 1152) (352 . 832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 519)) (WIRE ((112 . 992) (112 . 1152)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 521)) (WIRE ((112 . 832) (112 . 992)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 364.0 (PRI 528)) (WIRE ((352 . 1152) (-376 . 1152)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 529)) (TEXT (-48.0 . 1065.0) ("FixNums") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-72.5 1062.0 49 12)) BLACK)) ((0.05 12.0 (PRI 530)) (TEXT (-49.0 . 905.0) ("Floats") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-70.0 902.0 42 12)) BLACK)) ((0.0 232.0 (PRI 533)) (WIRE ((352 . 992) (-112 . 992)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 534)) (TEXT (64.0 . 1064.0) ("00x xxx") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.5 1061.0 49 12)) BLACK)) ((0.05 12.0 (PRI 535)) (TEXT (64.0 . 904.0) ("01x xxx") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.5 901.0 49 12)) BLACK)) ((0.05 12.0 (PRI 536)) (TEXT (128.0 . 1064.0) ("00x xxx FixNums") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 1061.0 105 12)) BLACK)) ((0.05 12.0 (PRI 537)) (TEXT (128.0 . 904.0) ("01x xxx Floats") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128 901.0 98 12)) BLACK)) ((0.05 12.0 (PRI 540)) (TEXT (65.0 . 1175.0) ("Tag &" "Subtype") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((47.5 1178.0 35 12) (40.5 1166.0 49 12)) BLACK)) ((0.05 12.0 (PRI 541)) (TEXT (128.0 . 1176.0) ("Data Type") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((128.0 1173.0 63 12)) BLACK)) ((0.05 12.0 (PRI 542)) (TEXT (-48.0 . 1176.0) ("Major" "Type") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-65.5 1179.0 35 12) (-62.0 1167.0 28 12)) BLACK)) ((0.05 12.0 (PRI 543)) (TEXT (-185.0 . 1176.0) ("Reference " "Count Info") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-220.0 1179.0 70 12) (-220.0 1167.0 70 12)) BLACK)) ((0.05 12.0 (PRI 544)) (TEXT (-328.0 . 1176.0) ("Typing" "Info") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-349.0 1179.0 42 12) (-342.0 1167.0 28 12)) BLACK))) (-398.4375 115.234375 775.3906 1085.9375) 1.953125 8 OBJECT REPRESENTATION The object format for user defined data types consists of a garbage collection word, a wrapper pointer, and the data slots of the object. The garbage collection word contains the reference count & other garbage collection flags for the garbage collector. The Wrapper Pointer points to the wrapper for this object, which is how the object's type is determined. (It is currently under discussion wether this field should be removed for special objects such as symblos & large cons cells. For now it is shown with all object types). The following words contain the value slots for the object. A pictural view of an object would be as follows: ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;8" VERSION 3 PRIRANGE (262 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 188.0 (PRI 3)) (BOX (20.0 -684.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (20.0 -724.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (20.0 -764.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (20.0 -804.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (20.0 -844.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 5)) (WIRE ((56 . -644) (56 . -684)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 6)) (TEXT (72.0 . -668.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((65.0 -671.0 14 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -644) (88 . -684)) (ROUND 1 BLACK) NIL NIL 1 (87 -685 2 42) NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -684) (88 . -724)) (ROUND 1 BLACK) NIL NIL 1 (87 -725 2 42) NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -724) (88 . -764)) (ROUND 1 BLACK) NIL NIL 1 (87 -765 2 42) NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -764) (88 . -804)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -804) (88 . -844)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -668.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -671.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -748.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -751.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -788.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -791.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -828.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -831.0 21 12)) BLACK)) ((0.012 113.25 (PRI 9)) (GROUP (36.5 -635.0 226.5 12.0) (((0.05 12.0 (PRI 18)) (TEXT (40.0 . -632.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((36.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 19)) (TEXT (72.0 . -632.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((68.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 20)) (TEXT (108.0 . -632.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((104.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 21)) (TEXT (256.0 . -632.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((249.0 -635.0 14 12)) BLACK))) (148 . -628))) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -644) (128 . -684)) (ROUND 1 BLACK) NIL NIL 1 (127 -685 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -684) (128 . -724)) (ROUND 1 BLACK) NIL NIL 1 (127 -725 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -724) (128 . -764)) (ROUND 1 BLACK) NIL NIL 1 (127 -765 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -764) (128 . -804)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -804) (128 . -844)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 12)) (TEXT (260.0 . -708.0) ("WRAPPER POINTER") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((207.5 -711.0 105 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -748.0) ("Pointer / Value") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((203.5 -751.0 105 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -788.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((228.0 -791.0 56 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -828.0) ("Pointer / Value") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((203.5 -831.0 105 12)) BLACK)) ((0.002 33.0 (PRI 24)) (GROUP (-53 -665 66 2) (((0.0 32.0 (PRI 106)) (WIRE ((-52 . -664) (12 . -664)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((12 . -664) ((8 . -665) (4.3915486 . -666.4721)) ((8 . -663) (4.3915486 . -661.5279))))))) (-20 . -664))) ((0.05 12.0 (PRI 164)) (TEXT (256.0 . -668.0) ("Garbage Collector Info") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((179.0 -671.0 154 12)) BLACK)) ((0.05 12.0 (PRI 262)) (TEXT (108.0 . -708.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -711.0 21 12)) BLACK))) (-49.0 -854.0 445.0 231.0) 1.0 4 An alternative object representation would replace the wrapper pointers with type indexes, and combine the garbage collector info along with the type information. This would end up saving one word per cell, but cost more to get to the real type information since an access into a type table would be necessary. The number of available types would also be limited to the type index size, and type indicies would not be re-usable. For comparison, this type of representation would look like this: ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;8" VERSION 3 PRIRANGE (262 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 188.0 (PRI 3)) (BOX (20.0 -724.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (20.0 -764.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (20.0 -804.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (20.0 -844.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 5)) (WIRE ((56 . -684) (56 . -724)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 6)) (TEXT (72.0 . -708.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((65.0 -711.0 14 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -684) (88 . -724)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -724) (88 . -764)) (ROUND 1 BLACK) NIL NIL 1 (87 -765 2 42) NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -764) (88 . -804)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -804) (88 . -844)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -708.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -711.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -748.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -751.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -788.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -791.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -828.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -831.0 21 12)) BLACK)) ((0.012 113.25 (PRI 9)) (GROUP (36.5 -675.0 226.5 12.0) (((0.05 12.0 (PRI 18)) (TEXT (40.0 . -672.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((36.5 -675.0 7 12)) BLACK)) ((0.05 12.0 (PRI 19)) (TEXT (72.0 . -672.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((68.5 -675.0 7 12)) BLACK)) ((0.05 12.0 (PRI 20)) (TEXT (108.0 . -672.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((104.5 -675.0 7 12)) BLACK)) ((0.05 12.0 (PRI 21)) (TEXT (256.0 . -672.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((249.0 -675.0 14 12)) BLACK))) (148 . -668))) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -684) (128 . -724)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -724) (128 . -764)) (ROUND 1 BLACK) NIL NIL 1 (127 -765 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -764) (128 . -804)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -804) (128 . -844)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -748.0) ("Pointer / Value") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((203.5 -751.0 105 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -788.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((228.0 -791.0 56 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -828.0) ("Pointer / Value") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((203.5 -831.0 105 12)) BLACK)) ((0.002 33.0 (PRI 24)) (GROUP (-53 -705 66 2) (((0.0 32.0 (PRI 106)) (WIRE ((-52 . -704) (12 . -704)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((12 . -704) ((8 . -705) (4.3915486 . -706.4721)) ((8 . -703) (4.3915486 . -701.5279))))))) (-20 . -704))) ((0.05 12.0 (PRI 164)) (TEXT (256.0 . -708.0) ("GC Info | Type Index") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((186.0 -711.0 140 12)) BLACK))) (-49.0 -850.0 445.0 189.0) 1.0 4 SHORT CONS CELLS Short Cons cells are stored in a special consing data area, and Consed with a special primitive which indicates the size of the list being created. The word ponted to by the pointer is the CAR and CDR is found via the CDR code: ((SKETCH NIL VERSION 3 PRIRANGE (152 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.058 188.0 (PRI 129)) (GROUP (-68.0 -313 376.0 58.0) (((0.04 188.0 (PRI 3)) (BOX (-68.0 -312.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 5)) (WIRE ((-32 . -272) (-32 . -312)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 6)) (TEXT (-16.0 . -296.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-23.0 -299.0 14 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((0 . -272) (0 . -312)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (20.0 . -296.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((9.5 -299.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((40 . -272) (40 . -312)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (168.0 . -296.0) ("Pointer / Value") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((115.5 -299.0 105 12)) BLACK)) ((0.05 12.0 (PRI 120)) (TEXT (-53.0 . -297.0) ("CDR") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-63.5 -300.0 21 12)) BLACK)) ((0.05 12.0 (PRI 125)) (TEXT (165.0 . -264.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((158.0 -267.0 14 12)) BLACK)) ((0.05 12.0 (PRI 126)) (TEXT (25.0 . -265.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((21.5 -268.0 7 12)) BLACK)) ((0.05 12.0 (PRI 127)) (TEXT (-16.0 . -264.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-19.5 -267.0 7 12)) BLACK)) ((0.05 12.0 (PRI 128)) (TEXT (-48.0 . -264.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-51.5 -267.0 7 12)) BLACK))) (120 . -284)))) (-68.0 -313.0 376.0 58.0) 1.0 4 The CDR code is as follows: 00 - CDR is NIL 01 - CDR is Prev Cell 10 - CDR is Next Cell 11 - CDR indirect (Pointer to a long CONS cell) LONG CONS CELLS Long Cons cells contain both the CAR & CDR fields of the list cell. For definition sake, we shall assume that they are 4 words long, & represented as normal objects with a reference count & wrapper word at the beginning of them (until it is decided to remove the wrapper pointers from selected object types). ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;2" VERSION 3 PRIRANGE (280 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.012 113.25 (PRI 9)) (GROUP (36.5 -635.0 226.5 12.0) (((0.05 12.0 (PRI 18)) (TEXT (40.0 . -632.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((36.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 19)) (TEXT (72.0 . -632.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((68.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 20)) (TEXT (108.0 . -632.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((104.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 21)) (TEXT (256.0 . -632.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((249.0 -635.0 14 12)) BLACK))) (148 . -628))) ((0.002 33.0 (PRI 24)) (GROUP (-49 -669 66 2) (((0.0 32.0 (PRI 106)) (WIRE ((-48 . -668) (16 . -668)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((16 . -668) ((12 . -669) (8.391548 . -670.4721)) ((12 . -667) (8.391548 . -665.5279))))))) (-16 . -668))) ((0.042 188.0 (PRI 269)) (GROUP (20.0 -725 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -724.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -684) (88 . -724)) (ROUND 1 BLACK) NIL NIL 1 (87 -725 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -684) (128 . -724)) (ROUND 1 BLACK) NIL NIL 1 (127 -725 2 42) NIL)) ((0.05 12.0 (PRI 12)) (TEXT (260.0 . -708.0) ("WRAPPER POINTER") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((207.5 -711.0 105 12)) BLACK)) ((0.05 12.0 (PRI 262)) (TEXT (108.0 . -708.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -711.0 21 12)) BLACK))) (208 . -704))) ((0.042 188.0 (PRI 278)) (GROUP (20.0 -765 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -764.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -724) (88 . -764)) (ROUND 1 BLACK) NIL NIL 1 (87 -765 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -748.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -751.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -724) (128 . -764)) (ROUND 1 BLACK) NIL NIL 1 (127 -765 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -748.0) ("CAR") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((245.5 -751.0 21 12)) BLACK))) (208 . -744))) ((0.042 188.0 (PRI 279)) (GROUP (20.0 -805 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -804.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -764) (88 . -804)) (ROUND 1 BLACK) NIL NIL 1 (87 -805 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -788.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -791.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -764) (128 . -804)) (ROUND 1 BLACK) NIL NIL 1 (127 -805 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -788.0) ("CDR") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((245.5 -791.0 21 12)) BLACK))) (208 . -784))) ((0.042 188.0 (PRI 280)) (GROUP (20.0 -685 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -684.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 5)) (WIRE ((60 . -644) (60 . -684)) (ROUND 1 BLACK) NIL NIL 1 (59 -685 2 42) NIL)) ((0.05 12.0 (PRI 6)) (TEXT (76.0 . -668.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((69.0 -671.0 14 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -644) (88 . -684)) (ROUND 1 BLACK) NIL NIL 1 (87 -685 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -668.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -671.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -644) (128 . -684)) (ROUND 1 BLACK) NIL NIL 1 (127 -685 2 42) NIL)) ((0.05 12.0 (PRI 164)) (TEXT (256.0 . -668.0) ("Garbage Collector Info") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((179.0 -671.0 154 12)) BLACK))) (208 . -664)))) (-49.0 -824.0 445.0 201.0) 1.0 4 Other cons encodings could be: - having a CDR in Next cdr code. Thus only one type of cons cell (how do you RPLAD a CDR is Next?) - having only 2 word cons cells, a car & cdr. (i.e. no cdr coding) SYMBOLS To provide a large symbol space, all symbols are referenced by 4 bytes in the code stream. This will provide additional symbol space over the 64k limit in the current D-machine implementation. Symbols will be implemented as a standard object, with a special subtype associated with this kind of object. Some advantages of this method are that symbols can be alocated as needed using the normal system routines for handling objects, more entries can easily be added for symbols, and the possiblity of garbage collecting them exists. The basic format for a symbol under this method would be: ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;2" VERSION 3 PRIRANGE (277 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 188.0 (PRI 3)) (BOX (20.0 -684.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 5)) (WIRE ((60 . -644) (60 . -684)) (ROUND 1 BLACK) NIL NIL 1 (59 -685 2 42) NIL)) ((0.05 12.0 (PRI 6)) (TEXT (76.0 . -668.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((69.0 -671.0 14 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -644) (88 . -684)) (ROUND 1 BLACK) NIL NIL 1 (87 -685 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -668.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -671.0 21 12)) BLACK)) ((0.012 113.25 (PRI 9)) (GROUP (36.5 -635.0 226.5 12.0) (((0.05 12.0 (PRI 18)) (TEXT (40.0 . -632.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((36.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 19)) (TEXT (72.0 . -632.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((68.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 20)) (TEXT (108.0 . -632.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((104.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 21)) (TEXT (256.0 . -632.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((249.0 -635.0 14 12)) BLACK))) (148 . -628))) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -644) (128 . -684)) (ROUND 1 BLACK) NIL NIL 1 (127 -685 2 42) NIL)) ((0.002 33.0 (PRI 24)) (GROUP (-49 -669 66 2) (((0.0 32.0 (PRI 106)) (WIRE ((-48 . -668) (16 . -668)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((16 . -668) ((12 . -669) (8.391548 . -670.4721)) ((12 . -667) (8.391548 . -665.5279))))))) (-16 . -668))) ((0.05 12.0 (PRI 164)) (TEXT (256.0 . -668.0) ("Garbage Collector Info") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((179.0 -671.0 154 12)) BLACK)) ((0.042 188.0 (PRI 269)) (GROUP (20.0 -725 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -724.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -684) (88 . -724)) (ROUND 1 BLACK) NIL NIL 1 (87 -725 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -684) (128 . -724)) (ROUND 1 BLACK) NIL NIL 1 (127 -725 2 42) NIL)) ((0.05 12.0 (PRI 12)) (TEXT (260.0 . -708.0) ("WRAPPER POINTER") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((207.5 -711.0 105 12)) BLACK)) ((0.05 12.0 (PRI 262)) (TEXT (108.0 . -708.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -711.0 21 12)) BLACK))) (208 . -704))) ((0.042 188.0 (PRI 271)) (GROUP (20.0 -925 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -924.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -884) (88 . -924)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -908.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -911.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -884) (128 . -924)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -908.0) ("Package Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((217.5 -911.0 77 12)) BLACK))) (208 . -904))) ((0.042 188.0 (PRI 272)) (GROUP (20.0 -885 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -884.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -844) (88 . -884)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -868.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -871.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -844) (128 . -884)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -868.0) ("PName Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((224.5 -871.0 63 12)) BLACK))) (208 . -864))) ((0.042 188.0 (PRI 273)) (GROUP (20.0 -845 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -844.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 6)) (TEXT (72.0 . -828.0) (" ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((68.5 -831.0 7 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -804) (88 . -844)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -828.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -831.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -804) (128 . -844)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -828.0) ("Property List ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((207.0 -831.0 98 12)) BLACK))) (208 . -824))) ((0.042 188.0 (PRI 274)) (GROUP (20.0 -805 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -804.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -764) (88 . -804)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -788.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -791.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -764) (128 . -804)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -788.0) ("Function Definition Cell") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((172.0 -791.0 168 12)) BLACK))) (208 . -784))) ((0.042 188.0 (PRI 276)) (GROUP (20.0 -765 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -764.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -724) (88 . -764)) (ROUND 1 BLACK) NIL NIL 1 (87 -765 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -748.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -751.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -724) (128 . -764)) (ROUND 1 BLACK) NIL NIL 1 (127 -765 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -748.0) ("Value Cell") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((221.0 -751.0 70 12)) BLACK))) (208 . -744)))) (-49.0 -969.0 445.0 346.0) 1.0 4 Value Cell The current value of the atom if defined, else Unboundp. Function Cell A CCodeP pointer or Pointer to Expr if the function has a definition, else NIL. PropertyList A ListP if the atom has a property list, else NIL. Pname Ptr Pointer to the print name of the atom. Package Ptr Pointer to the package this symbol is defined in. OBJECT REPRESENTATION Still needs explination. ((SKETCH a% figure% from% a% document VERSION 3 PRIRANGE (234 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NEITHER (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL) VIEWS ((home 1.5625 (321.875 . 288.2813)))) ((0.05 12.0 (PRI 45)) (TEXT (-232.0 . 672.0) ("instance--class") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-284.5 669.0 105 12)) BLACK)) ((0.05 12.0 (PRI 51)) (TEXT (-16.0 . 672.0) ("wrapper") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-40.5 669.0 49 12)) BLACK)) ((0.05 12.0 (PRI 69)) (TEXT (224.0 . 672.0) ("class-class") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((185.5 669.0 77 12)) BLACK)) ((0.05 12.0 (PRI 71)) (TEXT (696.0 . 672.0) ("metaclass-class") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((643.5 669.0 105 12)) BLACK)) ((0.026 29.0 (PRI 108)) (GROUP (847 119 58 26) (((0.0 16.0 (PRI 85)) (WIRE ((848 . 144) (880 . 144)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 16.0 (PRI 85)) (WIRE ((848 . 144) (880 . 144)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 86)) (WIRE ((880 . 144) (880 . 120)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 86)) (WIRE ((880 . 144) (880 . 120)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 87)) (WIRE ((904 . 120) (880 . 120)) (ROUND 1 BLACK) ((CURVE 18.0 8) NIL) NIL 1 NIL (((904 . 120) ((900 . 119) (896.3916 . 117.5279)) ((900 . 121) (896.3916 . 122.4721))) NIL)))) (880 . 136))) ((0.026 29.0 (PRI 109)) (GROUP (847 575 58 26) (((0.0 16.0 (PRI 85)) (WIRE ((848 . 600) (880 . 600)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 16.0 (PRI 85)) (WIRE ((848 . 600) (880 . 600)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 86)) (WIRE ((880 . 600) (880 . 576)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 86)) (WIRE ((880 . 600) (880 . 576)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 87)) (WIRE ((904 . 576) (880 . 576)) (ROUND 1 BLACK) ((CURVE 18.0 8) NIL) NIL 1 NIL (((904 . 576) ((900 . 575) (896.3916 . 573.5279)) ((900 . 577) (896.3916 . 578.4721))) NIL)))) (880 . 592))) ((0.05 12.0 (PRI 121)) (TEXT (-223.0 . 216.0) ("instance--structure") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-289.5 213.0 133 12)) BLACK)) ((0.05 12.0 (PRI 122)) (TEXT (232.0 . 216.0) ("structure--class") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((176.0 213.0 112 12)) BLACK)) ((0.05 12.0 (PRI 123)) (TEXT (704.0 . 216.0) ("metaclass-structure") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((637.5 213.0 133 12)) BLACK)) ((0.05 10.0 (PRI 147)) (TEXT (792.0 . 656.0) ("(The class named class)") 1 (CENTER BASELINE) (GACHA 8 (MEDIUM REGULAR REGULAR)) ((734.5 653.0 115 10)) BLACK)) ((0.05 10.0 (PRI 148)) (TEXT (320.0 . 656.0) ("(A class of class class)") 1 (CENTER BASELINE) (GACHA 8 (MEDIUM REGULAR REGULAR)) ((260.0 653.0 120 10)) BLACK)) ((0.05 10.0 (PRI 149)) (TEXT (-137.0 . 200.0) ("(An instance of structure)") 1 (CENTER BASELINE) (GACHA 8 (MEDIUM REGULAR REGULAR)) ((-202.0 197.0 130 10)) BLACK)) ((0.05 10.0 (PRI 150)) (TEXT (320.0 . 200.0) ("(A class of class structure)") 1 (CENTER BASELINE) (GACHA 8 (MEDIUM REGULAR REGULAR)) ((250.0 197.0 140 10)) BLACK)) ((0.05 10.0 (PRI 151)) (TEXT (784.0 . 200.0) ("(The class named structure)") 1 (CENTER BASELINE) (GACHA 8 (MEDIUM REGULAR REGULAR)) ((716.5 197.0 135 10)) BLACK)) ((0.05 10.0 (PRI 152)) (TEXT (-136.0 . 656.0) ("(An instance of class)") 1 (CENTER BASELINE) (GACHA 8 (MEDIUM REGULAR REGULAR)) ((-191.0 653.0 110 10)) BLACK)) ((0.05 14.0 (PRI 153)) (TEXT (296.0 . 712.0) ("Instance of Class") 1 (CENTER BASELINE) (GACHA 12 (BOLD REGULAR REGULAR)) ((228.0 708.0 136 14)) BLACK)) ((0.05 14.0 (PRI 154)) (TEXT (296.0 . 248.0) ("Instance of Structure") 1 (CENTER BASELINE) (GACHA 12 (BOLD REGULAR REGULAR)) ((212.0 244.0 168 14)) BLACK)) ((0.4484376 364.0625 (PRI 193)) (BOX (-279.6875 -79.68751 448.4376 728.1251) (ROUND 1 BLACK) (2 4) 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 194)) (TEXT (-47.0 . -48.0) ("Microcode uses this Information" "when determining Class" "and fetching slots") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-155.5 -39.0 217 12) (-124.0 -51.0 154 12) (-110.0 -63.0 126 12)) BLACK)) ((0.018 21.0 (PRI 200)) (GROUP (-273 623 18 42) (((0.0 8.0 (PRI 195)) (WIRE ((-256 . 624) (-272 . 624)) (ROUND 1 BLACK) ((CURVE 18.0 8) NIL) NIL 1 (-273 623 18 2) (((-256 . 624) ((-260 . 623) (-263.60846 . 621.5279)) ((-260 . 625) (-263.60846 . 626.4721))) NIL))) ((0.0 20.0 (PRI 196)) (WIRE ((-272 . 664) (-272 . 624)) (ROUND 1 BLACK) NIL NIL 1 (-273 623 2 42) NIL))) (-264 . 640))) ((0.018 21.0 (PRI 201)) (GROUP (-273 167 18 42) (((0.0 8.0 (PRI 195)) (WIRE ((-256 . 168) (-272 . 168)) (ROUND 1 BLACK) ((CURVE 18.0 8) NIL) NIL 1 NIL (((-256 . 168) ((-260 . 167) (-263.60846 . 165.52786)) ((-260 . 169) (-263.60846 . 170.47214))) NIL))) ((0.0 20.0 (PRI 196)) (WIRE ((-272 . 208) (-272 . 168)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (-264 . 184))) ((0.10050012 91.0 (PRI 202)) (GROUP (-259 541 182 100.50012) (((0.05 12.0 (PRI 28)) (TEXT (-168.0 . 624.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-203.0 621.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((-256 . 616) (-80 . 616)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 615 178 2) NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((-256 . 592) (-80 . 592)) (ROUND 1 BLACK) NIL NIL 1 (-257 591 178 2) NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((-256 . 568) (-80 . 568)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 567 178 2) NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((-256 . 544) (-80 . 544)) (ROUND 3 BLACK) NIL NIL 1 (-259 541 182 6) NIL)) ((0.09625002 88.12502 (PRI 41)) (BOX (-256.0 544.2501 176.25 96.25002) (ROUND 3 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 42)) (TEXT (-168.0 . 576.0) ("SlotPtr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-192.5 573.0 49 12)) BLACK)) ((0.05 12.0 (PRI 44)) (TEXT (-168.0 . 552.0) ("PList") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-185.5 549.0 35 12)) BLACK)) ((0.0 4.0 (PRI 74)) (WIRE ((-169.0 . 592.0)) (ROUND 1 BLACK) NIL NIL 1 (-170.0 591.0 2.0 2.0) NIL)) ((0.05 12.0 (PRI 165)) (TEXT (-168.0 . 600.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-227.5 597.0 119 12)) BLACK))) (-168 . 592))) ((0.1675 89.0 (PRI 206)) (GROUP (-257 16.0 178 167.5) (((0.05 12.0 (PRI 28)) (TEXT (-168.0 . 168.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-203.0 165.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((-256 . 160) (-80 . 160)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 159 178 2) NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((-256 . 136) (-80 . 136)) (ROUND 1 BLACK) NIL NIL 1 (-257 135 178 2) NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((-256 . 112) (-80 . 112)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 111 178 2) NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((-256 . 88) (-80 . 88)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 87 178 2) NIL)) ((0.05 12.0 (PRI 57)) (TEXT (-168.0 . 120.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-171.5 117.0 7 12)) BLACK)) ((0.05 12.0 (PRI 58)) (TEXT (-168.0 . 96.0) ("L") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-171.5 93.0 7 12)) BLACK)) ((0.05 12.0 (PRI 59)) (TEXT (-168.0 . 72.0) ("O") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-171.5 69.0 7 12)) BLACK)) ((0.0 88.0 (PRI 60)) (WIRE ((-256 . 64) (-80 . 64)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 63 178 2) NIL)) ((0.0 88.0 (PRI 61)) (WIRE ((-256 . 40) (-80 . 40)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 39 178 2) NIL)) ((0.05 12.0 (PRI 62)) (TEXT (-168.0 . 49.0) ("T") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-171.5 46.0 7 12)) BLACK)) ((0.05 12.0 (PRI 63)) (TEXT (-168.0 . 24.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-171.5 21.0 7 12)) BLACK)) ((0.1675 88.12502 (PRI 64)) (BOX (-256.0 16.0 176.25 167.5) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 177)) (TEXT (-168.0 . 144.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-227.5 141.0 119 12)) BLACK))) (-168 . 96))) ((0.10050012 91.0 (PRI 213)) (GROUP (205 541 182 100.50012) (((0.05 12.0 (PRI 28)) (TEXT (296.0 . 624.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((261.0 621.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((208 . 616) (384 . 616)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((208 . 592) (384 . 592)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((208 . 568) (384 . 568)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((208 . 544) (384 . 544)) (ROUND 3 BLACK) NIL NIL 1 NIL NIL)) ((0.09625002 88.12502 (PRI 41)) (BOX (208.0 544.2501 176.25 96.25002) (ROUND 3 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 42)) (TEXT (296.0 . 576.0) ("SlotPtr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((271.5 573.0 49 12)) BLACK)) ((0.05 12.0 (PRI 44)) (TEXT (296.0 . 552.0) ("PList") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((278.5 549.0 35 12)) BLACK)) ((0.0 4.0 (PRI 74)) (WIRE ((295.0 . 592.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 165)) (TEXT (296.0 . 600.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((236.5 597.0 119 12)) BLACK))) (296 . 592))) ((0.10050012 91.0 (PRI 218)) (GROUP (205 85 182 100.50012) (((0.05 12.0 (PRI 28)) (TEXT (296.0 . 168.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((261.0 165.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((208 . 160) (384 . 160)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((208 . 136) (384 . 136)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((208 . 112) (384 . 112)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((208 . 88) (384 . 88)) (ROUND 3 BLACK) NIL NIL 1 NIL NIL)) ((0.09625002 88.12502 (PRI 41)) (BOX (208.0 88.25012 176.25 96.25002) (ROUND 3 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 42)) (TEXT (296.0 . 120.0) ("SlotPtr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((271.5 117.0 49 12)) BLACK)) ((0.05 12.0 (PRI 44)) (TEXT (296.0 . 96.0) ("PList") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((278.5 93.0 35 12)) BLACK)) ((0.0 4.0 (PRI 74)) (WIRE ((295.0 . 136.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 165)) (TEXT (296.0 . 144.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((236.5 141.0 119 12)) BLACK))) (296 . 136))) ((0.21 132.5 (PRI 223)) (GROUP (191 312.0 210 265.0) (((0.162 105.0 (PRI 221)) (GROUP (191 415 210 162) (((0.0 8.0 (PRI 94)) (WIRE ((384 . 576) (400 . 576)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 32.0 (PRI 95)) (WIRE ((400 . 512) (400 . 576)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 104.0 (PRI 96)) (WIRE ((400 . 512) (192 . 512)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 48.0 (PRI 97)) (WIRE ((192 . 512) (192 . 416)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 8.0 (PRI 98)) (WIRE ((192 . 416) (208 . 416)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((208 . 416) ((204 . 415) (200.39156 . 413.52786)) ((204 . 417) (200.39156 . 418.47214))))))) (296 . 496))) ((0.1675 89.0 (PRI 222)) (GROUP (207 312.0 178 167.5) (((0.05 12.0 (PRI 28)) (TEXT (296.0 . 464.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((261.0 461.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((208 . 456) (384 . 456)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((208 . 432) (384 . 432)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((208 . 408) (384 . 408)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((208 . 384) (384 . 384)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 57)) (TEXT (296.0 . 416.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((292.5 413.0 7 12)) BLACK)) ((0.05 12.0 (PRI 58)) (TEXT (296.0 . 392.0) ("L") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((292.5 389.0 7 12)) BLACK)) ((0.05 12.0 (PRI 59)) (TEXT (296.0 . 368.0) ("O") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((292.5 365.0 7 12)) BLACK)) ((0.0 88.0 (PRI 60)) (WIRE ((208 . 360) (384 . 360)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 61)) (WIRE ((208 . 336) (384 . 336)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 62)) (TEXT (296.0 . 345.0) ("T") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((292.5 342.0 7 12)) BLACK)) ((0.05 12.0 (PRI 63)) (TEXT (296.0 . 320.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((292.5 317.0 7 12)) BLACK)) ((0.1675 88.12502 (PRI 64)) (BOX (208.0 312.0 176.25 167.5) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 180)) (TEXT (296.0 . 441.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((236.5 438.0 119 12)) BLACK))) (296 . 400)))) (296 . 440))) ((0.21 132.5 (PRI 224)) (GROUP (-273 312.0 210 265.0) (((0.162 105.0 (PRI 187)) (GROUP (-273 415 210 162) (((0.0 8.0 (PRI 94)) (WIRE ((-80 . 576) (-64 . 576)) (ROUND 1 BLACK) NIL NIL 1 (-81 575 18 2) NIL)) ((0.0 32.0 (PRI 95)) (WIRE ((-64 . 512) (-64 . 576)) (ROUND 1 BLACK) NIL NIL 1 (-65 511 2 66) NIL)) ((0.0 104.0 (PRI 96)) (WIRE ((-64 . 512) (-272 . 512)) (ROUND 1 BLACK) NIL NIL 1 (-273 511 210 2) NIL)) ((0.0 48.0 (PRI 97)) (WIRE ((-272 . 512) (-272 . 416)) (ROUND 1 BLACK) NIL NIL 1 (-273 415 2 98) NIL)) ((0.0 8.0 (PRI 98)) (WIRE ((-272 . 416) (-256 . 416)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 (-273 415 18 2) (NIL ((-256 . 416) ((-260 . 415) (-263.6085 . 413.5279)) ((-260 . 417) (-263.6085 . 418.4721))))))) (-168 . 496))) ((0.1675 89.0 (PRI 205)) (GROUP (-257 312.0 178 167.5) (((0.05 12.0 (PRI 28)) (TEXT (-168.0 . 464.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-203.0 461.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((-256 . 456) (-80 . 456)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 455 178 2) NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((-256 . 432) (-80 . 432)) (ROUND 1 BLACK) NIL NIL 1 (-257 431 178 2) NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((-256 . 408) (-80 . 408)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 407 178 2) NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((-256 . 384) (-80 . 384)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 383 178 2) NIL)) ((0.05 12.0 (PRI 57)) (TEXT (-168.0 . 416.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-171.5 413.0 7 12)) BLACK)) ((0.05 12.0 (PRI 58)) (TEXT (-168.0 . 392.0) ("L") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-171.5 389.0 7 12)) BLACK)) ((0.05 12.0 (PRI 59)) (TEXT (-168.0 . 368.0) ("O") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-171.5 365.0 7 12)) BLACK)) ((0.0 88.0 (PRI 60)) (WIRE ((-256 . 360) (-80 . 360)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 359 178 2) NIL)) ((0.0 88.0 (PRI 61)) (WIRE ((-256 . 336) (-80 . 336)) (ROUND 1 BLACK) NIL (2 4) 1 (-257 335 178 2) NIL)) ((0.05 12.0 (PRI 62)) (TEXT (-168.0 . 345.0) ("T") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-171.5 342.0 7 12)) BLACK)) ((0.05 12.0 (PRI 63)) (TEXT (-168.0 . 320.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-171.5 317.0 7 12)) BLACK)) ((0.1675 88.12502 (PRI 64)) (BOX (-256.0 312.0 176.25 167.5) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 180)) (TEXT (-168.0 . 441.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-227.5 438.0 119 12)) BLACK))) (-168 . 400)))) (-168 . 440))) ((0.21 132.5 (PRI 225)) (GROUP (191 -144.0 210 265.0) (((0.162 105.0 (PRI 221)) (GROUP (191 -41 210 162) (((0.0 8.0 (PRI 94)) (WIRE ((384 . 120) (400 . 120)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 32.0 (PRI 95)) (WIRE ((400 . 56) (400 . 120)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 104.0 (PRI 96)) (WIRE ((400 . 56) (192 . 56)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 48.0 (PRI 97)) (WIRE ((192 . 56) (192 . -40)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 8.0 (PRI 98)) (WIRE ((192 . -40) (208 . -40)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((208 . -40) ((204 . -41) (200.39156 . -42.472137)) ((204 . -39) (200.39156 . -37.527863))))))) (296 . 40))) ((0.1675 89.0 (PRI 222)) (GROUP (207 -144.0 178 167.5) (((0.05 12.0 (PRI 28)) (TEXT (296.0 . 8.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((261.0 5.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((208 . 0) (384 . 0)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((208 . -24) (384 . -24)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((208 . -48) (384 . -48)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((208 . -72) (384 . -72)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 57)) (TEXT (296.0 . -40.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((292.5 -43.0 7 12)) BLACK)) ((0.05 12.0 (PRI 58)) (TEXT (296.0 . -64.0) ("L") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((292.5 -67.0 7 12)) BLACK)) ((0.05 12.0 (PRI 59)) (TEXT (296.0 . -88.0) ("O") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((292.5 -91.0 7 12)) BLACK)) ((0.0 88.0 (PRI 60)) (WIRE ((208 . -96) (384 . -96)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 61)) (WIRE ((208 . -120) (384 . -120)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 62)) (TEXT (296.0 . -111.0) ("T") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((292.5 -114.0 7 12)) BLACK)) ((0.05 12.0 (PRI 63)) (TEXT (296.0 . -136.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((292.5 -139.0 7 12)) BLACK)) ((0.1675 88.12502 (PRI 64)) (BOX (208.0 -144.0 176.25 167.5) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 180)) (TEXT (296.0 . -15.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((236.5 -18.0 119 12)) BLACK))) (296 . -56)))) (296 . -16))) ((0.21 132.5 (PRI 226)) (GROUP (655 -144.0 210 265.0) (((0.162 105.0 (PRI 221)) (GROUP (655 -41 210 162) (((0.0 8.0 (PRI 94)) (WIRE ((848 . 120) (864 . 120)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 32.0 (PRI 95)) (WIRE ((864 . 56) (864 . 120)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 104.0 (PRI 96)) (WIRE ((864 . 56) (656 . 56)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 48.0 (PRI 97)) (WIRE ((656 . 56) (656 . -40)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 8.0 (PRI 98)) (WIRE ((656 . -40) (672 . -40)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((672 . -40) ((668 . -41) (664.39154 . -42.472137)) ((668 . -39) (664.39154 . -37.527863))))))) (760 . 40))) ((0.1675 89.0 (PRI 222)) (GROUP (671 -144.0 178 167.5) (((0.05 12.0 (PRI 28)) (TEXT (760.0 . 8.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((725.0 5.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((672 . 0) (848 . 0)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((672 . -24) (848 . -24)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((672 . -48) (848 . -48)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((672 . -72) (848 . -72)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 57)) (TEXT (760.0 . -40.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((756.5 -43.0 7 12)) BLACK)) ((0.05 12.0 (PRI 58)) (TEXT (760.0 . -64.0) ("L") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((756.5 -67.0 7 12)) BLACK)) ((0.05 12.0 (PRI 59)) (TEXT (760.0 . -88.0) ("O") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((756.5 -91.0 7 12)) BLACK)) ((0.0 88.0 (PRI 60)) (WIRE ((672 . -96) (848 . -96)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 61)) (WIRE ((672 . -120) (848 . -120)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 62)) (TEXT (760.0 . -111.0) ("T") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((756.5 -114.0 7 12)) BLACK)) ((0.05 12.0 (PRI 63)) (TEXT (760.0 . -136.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((756.5 -139.0 7 12)) BLACK)) ((0.1675 88.12502 (PRI 64)) (BOX (672.0 -144.0 176.25 167.5) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 180)) (TEXT (760.0 . -15.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((700.5 -18.0 119 12)) BLACK))) (760 . -56)))) (760 . -16))) ((0.21 132.5 (PRI 227)) (GROUP (655 312.0 210 265.0) (((0.162 105.0 (PRI 221)) (GROUP (655 415 210 162) (((0.0 8.0 (PRI 94)) (WIRE ((848 . 576) (864 . 576)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 32.0 (PRI 95)) (WIRE ((864 . 512) (864 . 576)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 104.0 (PRI 96)) (WIRE ((864 . 512) (656 . 512)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 48.0 (PRI 97)) (WIRE ((656 . 512) (656 . 416)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 8.0 (PRI 98)) (WIRE ((656 . 416) (672 . 416)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((672 . 416) ((668 . 415) (664.39154 . 413.52786)) ((668 . 417) (664.39154 . 418.47214))))))) (760 . 496))) ((0.1675 89.0 (PRI 222)) (GROUP (671 312.0 178 167.5) (((0.05 12.0 (PRI 28)) (TEXT (760.0 . 464.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((725.0 461.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((672 . 456) (848 . 456)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((672 . 432) (848 . 432)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((672 . 408) (848 . 408)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((672 . 384) (848 . 384)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 57)) (TEXT (760.0 . 416.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((756.5 413.0 7 12)) BLACK)) ((0.05 12.0 (PRI 58)) (TEXT (760.0 . 392.0) ("L") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((756.5 389.0 7 12)) BLACK)) ((0.05 12.0 (PRI 59)) (TEXT (760.0 . 368.0) ("O") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((756.5 365.0 7 12)) BLACK)) ((0.0 88.0 (PRI 60)) (WIRE ((672 . 360) (848 . 360)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 61)) (WIRE ((672 . 336) (848 . 336)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 62)) (TEXT (760.0 . 345.0) ("T") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((756.5 342.0 7 12)) BLACK)) ((0.05 12.0 (PRI 63)) (TEXT (760.0 . 320.0) ("S") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((756.5 317.0 7 12)) BLACK)) ((0.1675 88.12502 (PRI 64)) (BOX (672.0 312.0 176.25 167.5) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 180)) (TEXT (760.0 . 441.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((700.5 438.0 119 12)) BLACK))) (760 . 400)))) (760 . 440))) ((0.10050012 91.0 (PRI 228)) (GROUP (669 541 182 100.50012) (((0.05 12.0 (PRI 28)) (TEXT (760.0 . 624.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((725.0 621.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((672 . 616) (848 . 616)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((672 . 592) (848 . 592)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((672 . 568) (848 . 568)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((672 . 544) (848 . 544)) (ROUND 3 BLACK) NIL NIL 1 NIL NIL)) ((0.09625002 88.12502 (PRI 41)) (BOX (672.0 544.2501 176.25 96.25002) (ROUND 3 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 42)) (TEXT (760.0 . 576.0) ("SlotPtr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((735.5 573.0 49 12)) BLACK)) ((0.05 12.0 (PRI 44)) (TEXT (760.0 . 552.0) ("PList") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((742.5 549.0 35 12)) BLACK)) ((0.0 4.0 (PRI 74)) (WIRE ((759.0 . 592.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 165)) (TEXT (760.0 . 600.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((700.5 597.0 119 12)) BLACK))) (760 . 592))) ((0.10050012 91.0 (PRI 229)) (GROUP (669 85 182 100.50012) (((0.05 12.0 (PRI 28)) (TEXT (760.0 . 168.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((725.0 165.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((672 . 160) (848 . 160)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((672 . 136) (848 . 136)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((672 . 112) (848 . 112)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((672 . 88) (848 . 88)) (ROUND 3 BLACK) NIL NIL 1 NIL NIL)) ((0.09625002 88.12502 (PRI 41)) (BOX (672.0 88.25012 176.25 96.25002) (ROUND 3 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 42)) (TEXT (760.0 . 120.0) ("SlotPtr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((735.5 117.0 49 12)) BLACK)) ((0.05 12.0 (PRI 44)) (TEXT (760.0 . 96.0) ("PList") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((742.5 93.0 35 12)) BLACK)) ((0.0 4.0 (PRI 74)) (WIRE ((759.0 . 136.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 165)) (TEXT (760.0 . 144.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((700.5 141.0 119 12)) BLACK))) (760 . 136))) ((0.098 145.0 (PRI 231)) (GROUP (383 543 290 98) (((0.026 29.0 (PRI 214)) (GROUP (383 599 58 26) (((0.0 16.0 (PRI 85)) (WIRE ((384 . 600) (416 . 600)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 4.0 (PRI 86)) (WIRE ((416 . 600) (416 . 600)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 86)) (WIRE ((416 . 600) (416 . 624)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 87)) (WIRE ((440 . 624) (416 . 624)) (ROUND 1 BLACK) ((CURVE 18.0 8) NIL) NIL 1 NIL (((440 . 624) ((436 . 623) (432.39154 . 621.5279)) ((436 . 625) (432.39154 . 626.4721))) NIL))) ((0.002 17.0 (PRI 209)) (GROUP (383 599 34 2) (((0.0 16.0 (PRI 85)) (WIRE ((384 . 600) (416 . 600)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL)))) (400 . 600)))) (416 . 608))) ((0.058 33.0 (PRI 215)) (GROUP (615 575 58 66) (((0.0 12.0 (PRI 92)) (WIRE ((648 . 624) (672 . 624)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((672 . 624) ((668 . 623) (664.39154 . 621.5279)) ((668 . 625) (664.39154 . 626.4721)))))) ((0.0 4.0 (PRI 110)) (WIRE ((616 . 600) (624 . 600)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 111)) (WIRE ((624 . 600) (624 . 640)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((624 . 640) ((625 . 636) (626.4721 . 632.39154)) ((623 . 636) (621.5279 . 632.39154)))))) ((0.0 16.0 (PRI 211)) (WIRE ((616 . 576) (648 . 576)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 24.0 (PRI 212)) (WIRE ((648 . 576) (648 . 624)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (640 . 608))) ((0.09750012 89.0 (PRI 230)) (GROUP (439 543 178 97.50012) (((0.05 12.0 (PRI 28)) (TEXT (528.0 . 624.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((493.0 621.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((440 . 616) (616 . 616)) (ROUND 1 BLACK) NIL (2 4) 1 (439 615 178 2) NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((440 . 592) (616 . 592)) (ROUND 1 BLACK) NIL NIL 1 (439 591 178 2) NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((440 . 568) (616 . 568)) (ROUND 1 BLACK) NIL (2 4) 1 (439 567 178 2) NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((440 . 544) (616 . 544)) (ROUND 1 BLACK) NIL NIL 1 (439 543 178 2) NIL)) ((0.09625002 88.12502 (PRI 41)) (BOX (439.99997 544.2501 176.25 96.25002) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 49)) (TEXT (528.0 . 576.0) ("ClassPtr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((500.0 573.0 56 12)) BLACK)) ((0.05 12.0 (PRI 50)) (TEXT (528.0 . 552.0) ("Super Wrapper List") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((461.5 549.0 133 12)) BLACK)) ((0.05 12.0 (PRI 166)) (TEXT (536.0 . 600.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 597.0 119 12)) BLACK))) (528 . 592)))) (528 . 592))) ((0.098 145.0 (PRI 232)) (GROUP (-81 543 290 98) (((0.026 29.0 (PRI 214)) (GROUP (-81 599 58 26) (((0.0 16.0 (PRI 85)) (WIRE ((-80 . 600) (-48 . 600)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 4.0 (PRI 86)) (WIRE ((-48 . 600) (-48 . 600)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 86)) (WIRE ((-48 . 600) (-48 . 624)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 87)) (WIRE ((-24 . 624) (-48 . 624)) (ROUND 1 BLACK) ((CURVE 18.0 8) NIL) NIL 1 NIL (((-24 . 624) ((-28 . 623) (-31.608452 . 621.5279)) ((-28 . 625) (-31.608452 . 626.4721))) NIL))) ((0.002 17.0 (PRI 209)) (GROUP (-81 599 34 2) (((0.0 16.0 (PRI 85)) (WIRE ((-80 . 600) (-48 . 600)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL)))) (-64 . 600)))) (-48 . 608))) ((0.058 33.0 (PRI 215)) (GROUP (151 575 58 66) (((0.0 12.0 (PRI 92)) (WIRE ((184 . 624) (208 . 624)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((208 . 624) ((204 . 623) (200.39156 . 621.5279)) ((204 . 625) (200.39156 . 626.4721)))))) ((0.0 4.0 (PRI 110)) (WIRE ((152 . 600) (160 . 600)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 111)) (WIRE ((160 . 600) (160 . 640)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((160 . 640) ((161 . 636) (162.47214 . 632.39154)) ((159 . 636) (157.52786 . 632.39154)))))) ((0.0 16.0 (PRI 211)) (WIRE ((152 . 576) (184 . 576)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 24.0 (PRI 212)) (WIRE ((184 . 576) (184 . 624)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (176 . 608))) ((0.09750012 89.0 (PRI 230)) (GROUP (-25 543 178 97.50012) (((0.05 12.0 (PRI 28)) (TEXT (64.0 . 624.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((29.0 621.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((-24 . 616) (152 . 616)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((-24 . 592) (152 . 592)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((-24 . 568) (152 . 568)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((-24 . 544) (152 . 544)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.09625002 88.12502 (PRI 41)) (BOX (-24.00003 544.2501 176.25 96.25002) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 49)) (TEXT (64.0 . 576.0) ("ClassPtr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((36.0 573.0 56 12)) BLACK)) ((0.05 12.0 (PRI 50)) (TEXT (64.0 . 552.0) ("Super Wrapper List") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-2.5 549.0 133 12)) BLACK)) ((0.05 12.0 (PRI 166)) (TEXT (72.0 . 600.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((12.5 597.0 119 12)) BLACK))) (64 . 592)))) (64 . 592))) ((0.098 145.0 (PRI 233)) (GROUP (-81 87 290 98) (((0.026 29.0 (PRI 214)) (GROUP (-81 143 58 26) (((0.0 16.0 (PRI 85)) (WIRE ((-80 . 144) (-48 . 144)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 4.0 (PRI 86)) (WIRE ((-48 . 144) (-48 . 144)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 86)) (WIRE ((-48 . 144) (-48 . 168)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 87)) (WIRE ((-24 . 168) (-48 . 168)) (ROUND 1 BLACK) ((CURVE 18.0 8) NIL) NIL 1 NIL (((-24 . 168) ((-28 . 167) (-31.608452 . 165.52786)) ((-28 . 169) (-31.608452 . 170.47214))) NIL))) ((0.002 17.0 (PRI 209)) (GROUP (-81 143 34 2) (((0.0 16.0 (PRI 85)) (WIRE ((-80 . 144) (-48 . 144)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL)))) (-64 . 144)))) (-48 . 152))) ((0.058 33.0 (PRI 215)) (GROUP (151 119 58 66) (((0.0 12.0 (PRI 92)) (WIRE ((184 . 168) (208 . 168)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((208 . 168) ((204 . 167) (200.39156 . 165.52786)) ((204 . 169) (200.39156 . 170.47214)))))) ((0.0 4.0 (PRI 110)) (WIRE ((152 . 144) (160 . 144)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 111)) (WIRE ((160 . 144) (160 . 184)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((160 . 184) ((161 . 180) (162.47214 . 176.39156)) ((159 . 180) (157.52786 . 176.39156)))))) ((0.0 16.0 (PRI 211)) (WIRE ((152 . 120) (184 . 120)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 24.0 (PRI 212)) (WIRE ((184 . 120) (184 . 168)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (176 . 152))) ((0.09750012 89.0 (PRI 230)) (GROUP (-25 87 178 97.50012) (((0.05 12.0 (PRI 28)) (TEXT (64.0 . 168.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((29.0 165.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((-24 . 160) (152 . 160)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((-24 . 136) (152 . 136)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((-24 . 112) (152 . 112)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((-24 . 88) (152 . 88)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.09625002 88.12502 (PRI 41)) (BOX (-24.00003 88.25012 176.25 96.25002) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 49)) (TEXT (64.0 . 120.0) ("ClassPtr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((36.0 117.0 56 12)) BLACK)) ((0.05 12.0 (PRI 50)) (TEXT (64.0 . 96.0) ("Super Wrapper List") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-2.5 93.0 133 12)) BLACK)) ((0.05 12.0 (PRI 166)) (TEXT (72.0 . 144.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((12.5 141.0 119 12)) BLACK))) (64 . 136)))) (64 . 136))) ((0.098 145.0 (PRI 234)) (GROUP (383 87 290 98) (((0.026 29.0 (PRI 214)) (GROUP (383 143 58 26) (((0.0 16.0 (PRI 85)) (WIRE ((384 . 144) (416 . 144)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 4.0 (PRI 86)) (WIRE ((416 . 144) (416 . 144)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 86)) (WIRE ((416 . 144) (416 . 168)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL))) ((0.0 12.0 (PRI 87)) (WIRE ((440 . 168) (416 . 168)) (ROUND 1 BLACK) ((CURVE 18.0 8) NIL) NIL 1 NIL (((440 . 168) ((436 . 167) (432.39154 . 165.52786)) ((436 . 169) (432.39154 . 170.47214))) NIL))) ((0.002 17.0 (PRI 209)) (GROUP (383 143 34 2) (((0.0 16.0 (PRI 85)) (WIRE ((384 . 144) (416 . 144)) (ROUND 1 BLACK) (NIL NIL) NIL 1 NIL (NIL NIL)))) (400 . 144)))) (416 . 152))) ((0.058 33.0 (PRI 215)) (GROUP (615 119 58 66) (((0.0 12.0 (PRI 92)) (WIRE ((648 . 168) (672 . 168)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((672 . 168) ((668 . 167) (664.39154 . 165.52786)) ((668 . 169) (664.39154 . 170.47214)))))) ((0.0 4.0 (PRI 110)) (WIRE ((616 . 144) (624 . 144)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 111)) (WIRE ((624 . 144) (624 . 184)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((624 . 184) ((625 . 180) (626.4721 . 176.39156)) ((623 . 180) (621.5279 . 176.39156)))))) ((0.0 16.0 (PRI 211)) (WIRE ((616 . 120) (648 . 120)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 24.0 (PRI 212)) (WIRE ((648 . 120) (648 . 168)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (640 . 152))) ((0.09750012 89.0 (PRI 230)) (GROUP (439 87 178 97.50012) (((0.05 12.0 (PRI 28)) (TEXT (528.0 . 168.0) (" Ref count") 1.0 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((493.0 165.0 70.0 12.0)) BLACK)) ((0.0 88.0 (PRI 34)) (WIRE ((440 . 160) (616 . 160)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 35)) (WIRE ((440 . 136) (616 . 136)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 88.0 (PRI 36)) (WIRE ((440 . 112) (616 . 112)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 37)) (WIRE ((440 . 88) (616 . 88)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.09625002 88.12502 (PRI 41)) (BOX (439.99997 88.25012 176.25 96.25002) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 49)) (TEXT (528.0 . 120.0) ("ClassPtr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((500.0 117.0 56 12)) BLACK)) ((0.05 12.0 (PRI 50)) (TEXT (528.0 . 96.0) ("Super Wrapper List") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((461.5 93.0 133 12)) BLACK)) ((0.05 12.0 (PRI 166)) (TEXT (536.0 . 144.0) ("Class Wrapper Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 141.0 119 12)) BLACK))) (528 . 136)))) (528 . 136)))) (-305.17578 -139.16016 1198.7305 871.58203) 2.4414063 8 WRAPPER TABLE The wrapper of an item (which is used in determining type) is determined by either indexing into the wrapper table, or fetching the wrapper from the object header stored in memory. An entry is found in the wrapper table by taking the tag & subtype bits of the datum and using it as an index into the wrapper table, thus the size of the wrapper table is 2^6 entries. Entries in the table are one word pointers which point to the type information for that particular kind of datum. Entries which have Unbound in them indicate that a Ufn must be called to determine the object's type. Thus wrapper table format is something like this: ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;4" VERSION 3 PRIRANGE (408 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL) VIEWS ((home 1.953125 (140.625 . -0.9765626)))) ((0.2 324.0 (PRI 1)) (BOX (376.0 56.0 200.0 648.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 100.0 (PRI 2)) (WIRE ((376 . 448) (576 . 448)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 3)) (WIRE ((376 . 680) (576 . 680)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 4)) (WIRE ((376 . 400) (576 . 400)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 5)) (WIRE ((376 . 576) (576 . 576)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 6)) (WIRE ((376 . 576) (576 . 576)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 100.0 (PRI 7)) (WIRE ((376 . 552) (576 . 552)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 8)) (WIRE ((376 . 528) (576 . 528)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 9)) (WIRE ((376 . 424) (576 . 424)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 10)) (WIRE ((376 . 448) (576 . 448)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 100.0 (PRI 11)) (WIRE ((376 . 320) (576 . 320)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 100.0 (PRI 12)) (WIRE ((376 . 656) (576 . 656)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 13)) (WIRE ((376 . 600) (576 . 600)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 14)) (WIRE ((376 . 344) (576 . 344)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 15)) (WIRE ((376 . 472) (576 . 472)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (152.0 . 512.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 509.0 7 12)) BLACK)) ((0.05 12.0 (PRI 18)) (TEXT (152.0 . 552.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 549.0 7 12)) BLACK)) ((0.05 12.0 (PRI 19)) (TEXT (480.0 . 520.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 517.0 7 12)) BLACK)) ((0.05 12.0 (PRI 20)) (TEXT (152.0 . 640.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 637.0 7 12)) BLACK)) ((0.05 12.0 (PRI 21)) (TEXT (152.0 . 376.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 373.0 7 12)) BLACK)) ((0.05 12.0 (PRI 22)) (TEXT (480.0 . 648.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 645.0 7 12)) BLACK)) ((0.05 12.0 (PRI 23)) (TEXT (152.0 . 680.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 677.0 7 12)) BLACK)) ((0.05 12.0 (PRI 24)) (TEXT (480.0 . 512.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 509.0 7 12)) BLACK)) ((0.05 12.0 (PRI 26)) (TEXT (480.0 . 640.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 637.0 7 12)) BLACK)) ((0.05 12.0 (PRI 27)) (TEXT (152.0 . 672.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 669.0 7 12)) BLACK)) ((0.05 12.0 (PRI 28)) (TEXT (152.0 . 632.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 629.0 7 12)) BLACK)) ((0.05 12.0 (PRI 29)) (TEXT (152.0 . 544.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 541.0 7 12)) BLACK)) ((0.05 12.0 (PRI 30)) (TEXT (152.0 . 504.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 501.0 7 12)) BLACK)) ((0.05 12.0 (PRI 31)) (TEXT (152.0 . 368.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 365.0 7 12)) BLACK)) ((0.05 12.0 (PRI 32)) (TEXT (152.0 . 624.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 621.0 7 12)) BLACK)) ((0.05 12.0 (PRI 33)) (TEXT (480.0 . 632.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 629.0 7 12)) BLACK)) ((0.05 12.0 (PRI 34)) (TEXT (480.0 . 504.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 501.0 7 12)) BLACK)) ((0.05 12.0 (PRI 35)) (TEXT (152.0 . 664.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 661.0 7 12)) BLACK)) ((0.05 12.0 (PRI 36)) (TEXT (152.0 . 536.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 533.0 7 12)) BLACK)) ((0.05 12.0 (PRI 37)) (TEXT (152.0 . 496.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 493.0 7 12)) BLACK)) ((0.05 12.0 (PRI 39)) (TEXT (152.0 . 360.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 357.0 7 12)) BLACK)) ((0.05 12.0 (PRI 40)) (TEXT (480.0 . 624.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 621.0 7 12)) BLACK)) ((0.05 12.0 (PRI 41)) (TEXT (480.0 . 368.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 365.0 7 12)) BLACK)) ((0.05 12.0 (PRI 42)) (TEXT (152.0 . 488.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 485.0 7 12)) BLACK)) ((0.05 12.0 (PRI 43)) (TEXT (152.0 . 528.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 525.0 7 12)) BLACK)) ((0.05 12.0 (PRI 44)) (TEXT (152.0 . 656.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 653.0 7 12)) BLACK)) ((0.05 12.0 (PRI 46)) (TEXT (152.0 . 352.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 349.0 7 12)) BLACK)) ((0.05 12.0 (PRI 47)) (TEXT (480.0 . 496.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 493.0 7 12)) BLACK)) ((0.05 12.0 (PRI 48)) (TEXT (152.0 . 616.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 613.0 7 12)) BLACK)) ((0.05 12.0 (PRI 49)) (TEXT (480.0 . 360.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 357.0 7 12)) BLACK)) ((0.05 12.0 (PRI 50)) (TEXT (152.0 . 608.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 605.0 7 12)) BLACK)) ((0.05 12.0 (PRI 51)) (TEXT (480.0 . 616.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 613.0 7 12)) BLACK)) ((0.05 12.0 (PRI 52)) (TEXT (152.0 . 648.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 645.0 7 12)) BLACK)) ((0.05 12.0 (PRI 53)) (TEXT (152.0 . 520.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 517.0 7 12)) BLACK)) ((0.05 12.0 (PRI 54)) (TEXT (152.0 . 480.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 477.0 7 12)) BLACK)) ((0.05 12.0 (PRI 55)) (TEXT (152.0 . 344.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 341.0 7 12)) BLACK)) ((0.05 12.0 (PRI 57)) (TEXT (480.0 . 488.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 485.0 7 12)) BLACK)) ((0.05 12.0 (PRI 59)) (TEXT (480.0 . 480.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 477.0 7 12)) BLACK)) ((0.05 12.0 (PRI 60)) (TEXT (480.0 . 352.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 349.0 7 12)) BLACK)) ((0.05 12.0 (PRI 61)) (TEXT (480.0 . 608.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 605.0 7 12)) BLACK)) ((0.05 12.0 (PRI 62)) (TEXT (152.0 . 640.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 637.0 7 12)) BLACK)) ((0.05 12.0 (PRI 63)) (TEXT (152.0 . 600.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 597.0 7 12)) BLACK)) ((0.05 12.0 (PRI 64)) (TEXT (152.0 . 472.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 469.0 7 12)) BLACK)) ((0.05 12.0 (PRI 65)) (TEXT (152.0 . 512.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 509.0 7 12)) BLACK)) ((0.05 12.0 (PRI 66)) (TEXT (480.0 . 560.0) ("Class Wrapper (FloatP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((403.0 557.0 154 12)) BLACK)) ((0.05 12.0 (PRI 67)) (TEXT (480.0 . 536.0) ("Class Wrapper (FloatP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((403.0 533.0 154 12)) BLACK)) ((0.05 12.0 (PRI 68)) (TEXT (480.0 . 456.0) ("Class Wrapper (FloatP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((403.0 453.0 154 12)) BLACK)) ((0.05 12.0 (PRI 69)) (TEXT (480.0 . 584.0) ("Class Wrapper (FixP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((410.0 581.0 140 12)) BLACK)) ((0.05 12.0 (PRI 70)) (TEXT (480.0 . 664.0) ("Class Wrapper (FixP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((410.0 661.0 140 12)) BLACK)) ((0.05 12.0 (PRI 71)) (TEXT (480.0 . 688.0) ("Class Wrapper (FixP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((410.0 685.0 140 12)) BLACK)) ((0.05 12.0 (PRI 72)) (TEXT (336.0 . 688.0) ("0") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((332.5 685.0 7 12)) BLACK)) ((0.05 12.0 (PRI 73)) (TEXT (336.0 . 664.0) ("1") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((332.5 661.0 7 12)) BLACK)) ((0.05 12.0 (PRI 74)) (TEXT (336.0 . 584.0) ("15") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 581.0 14 12)) BLACK)) ((0.05 12.0 (PRI 75)) (TEXT (336.0 . 560.0) ("16") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 557.0 14 12)) BLACK)) ((0.05 12.0 (PRI 76)) (TEXT (336.0 . 536.0) ("17") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 533.0 14 12)) BLACK)) ((0.05 12.0 (PRI 77)) (TEXT (336.0 . 456.0) ("31") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 453.0 14 12)) BLACK)) ((0.05 12.0 (PRI 78)) (TEXT (336.0 . 432.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 429.0 14 12)) BLACK)) ((0.05 12.0 (PRI 80)) (TEXT (480.0 . 432.0) ("Class Wrapper (UnboundP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((396.0 429.0 168 12)) BLACK)) ((0.05 12.0 (PRI 81)) (TEXT (480.0 . 328.0) ("Class Wrapper") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((434.5 325.0 91 12)) BLACK)) ((0.05 12.0 (PRI 82)) (TEXT (336.0 . 328.0) ("39") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 325.0 14 12)) BLACK)) ((0.05 12.0 (PRI 83)) (TEXT (336.0 . 304.0) ("40") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 301.0 14 12)) BLACK)) ((0.0 100.0 (PRI 84)) (WIRE ((376 . 296) (576 . 296)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 85)) (WIRE ((376 . 272) (576 . 272)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 86)) (WIRE ((376 . 224) (576 . 224)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 87)) (TEXT (480.0 . 280.0) ("Class Wrapper (Inviz)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((406.5 277.0 147 12)) BLACK)) ((0.05 12.0 (PRI 92)) (TEXT (80.0 . 712.0) ("Tag:") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((66.0 709.0 28 12)) BLACK)) ((0.05 12.0 (PRI 93)) (TEXT (152.0 . 712.0) ("SubType:") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((124.0 709.0 56 12)) BLACK)) ((0.05 12.0 (PRI 94)) (TEXT (240.0 . 712.0) ("Class:") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((219.0 709.0 42 12)) BLACK)) ((0.05 12.0 (PRI 95)) (TEXT (80.0 . 688.0) ("00") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 685.0 14 12)) BLACK)) ((0.05 12.0 (PRI 96)) (TEXT (153.0 . 688.0) ("0000") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((139.0 685.0 28 12)) BLACK)) ((0.05 12.0 (PRI 97)) (TEXT (240.0 . 688.0) ("FixP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((226.0 685.0 28 12)) BLACK)) ((0.05 12.0 (PRI 98)) (TEXT (80.0 . 584.0) ("00") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 581.0 14 12)) BLACK)) ((0.05 12.0 (PRI 99)) (TEXT (152.0 . 584.0) ("1111") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 581.0 28 12)) BLACK)) ((0.05 12.0 (PRI 100)) (TEXT (240.0 . 584.0) ("FixP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((226.0 581.0 28 12)) BLACK)) ((0.05 12.0 (PRI 101)) (TEXT (80.0 . 560.0) ("01") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 557.0 14 12)) BLACK)) ((0.05 12.0 (PRI 102)) (TEXT (152.0 . 560.0) ("0000") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 557.0 28 12)) BLACK)) ((0.05 12.0 (PRI 103)) (TEXT (240.0 . 560.0) ("FloatP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((219.0 557.0 42 12)) BLACK)) ((0.05 12.0 (PRI 104)) (TEXT (80.0 . 456.0) ("01") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 453.0 14 12)) BLACK)) ((0.05 12.0 (PRI 105)) (TEXT (152.0 . 456.0) ("1111") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 453.0 28 12)) BLACK)) ((0.05 12.0 (PRI 106)) (TEXT (240.0 . 456.0) ("FloatP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((219.0 453.0 42 12)) BLACK)) ((0.05 12.0 (PRI 107)) (TEXT (80.0 . 432.0) ("10") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 429.0 14 12)) BLACK)) ((0.05 12.0 (PRI 108)) (TEXT (152.0 . 432.0) ("0000") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 429.0 28 12)) BLACK)) ((0.05 12.0 (PRI 109)) (TEXT (240.0 . 408.0) ("CharP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((222.5 405.0 35 12)) BLACK)) ((0.05 12.0 (PRI 110)) (TEXT (80.0 . 408.0) ("10") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 405.0 14 12)) BLACK)) ((0.05 12.0 (PRI 114)) (TEXT (152.0 . 408.0) ("0001") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 405.0 28 12)) BLACK)) ((0.05 12.0 (PRI 115)) (TEXT (240.0 . 432.0) ("UnboundP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((212.0 429.0 56 12)) BLACK)) ((0.05 12.0 (PRI 116)) (TEXT (80.0 . 328.0) ("10") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 325.0 14 12)) BLACK)) ((0.05 12.0 (PRI 118)) (TEXT (480.0 . 408.0) ("Class Wrapper (CharP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((406.5 405.0 147 12)) BLACK)) ((0.05 12.0 (PRI 119)) (TEXT (152.0 . 328.0) ("0111") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 325.0 28 12)) BLACK)) ((0.05 12.0 (PRI 120)) (TEXT (240.0 . 328.0) ("Other Immediate") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((187.5 325.0 105 12)) BLACK)) ((0.05 12.0 (PRI 121)) (TEXT (336.0 . 712.0) ("Index:") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((315.0 709.0 42 12)) BLACK)) ((0.05 12.0 (PRI 122)) (TEXT (80.0 . 280.0) ("10") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 277.0 14 12)) BLACK)) ((0.05 12.0 (PRI 122)) (TEXT (80.0 . 300.0) ("10") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 297.0 14 12)) BLACK)) ((0.05 12.0 (PRI 122)) (TEXT (80.0 . 256.0) ("10") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 253.0 14 12)) BLACK)) ((0.05 12.0 (PRI 122)) (TEXT (80.0 . 232.0) ("10") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 229.0 14 12)) BLACK)) ((0.05 12.0 (PRI 122)) (TEXT (80.0 . 152.0) ("11") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 149.0 14 12)) BLACK)) ((0.05 12.0 (PRI 123)) (TEXT (152.0 . 280.0) ("1001") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 277.0 28 12)) BLACK)) ((0.05 12.0 (PRI 123)) (TEXT (152.0 . 300.0) ("1000") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 297.0 28 12)) BLACK)) ((0.05 12.0 (PRI 123)) (TEXT (152.0 . 256.0) ("1010") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 253.0 28 12)) BLACK)) ((0.05 12.0 (PRI 123)) (TEXT (152.0 . 232.0) ("1011") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 229.0 28 12)) BLACK)) ((0.05 12.0 (PRI 123)) (TEXT (152.0 . 152.0) ("1000") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 149.0 28 12)) BLACK)) ((0.05 12.0 (PRI 124)) (TEXT (240.0 . 300.0) ("BlockP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((219.0 297.0 42 12)) BLACK)) ((0.0 100.0 (PRI 129)) (WIRE ((376 . 136) (576 . 136)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 332.0 (PRI 132)) (WIRE ((376 . 576) (-288 . 576)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 332.0 (PRI 133)) (WIRE ((376 . 448) (-288 . 448)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 332.0 (PRI 134)) (WIRE ((376 . 320) (-288 . 320)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 136)) (WIRE ((376 . 200) (376 . 200)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 160.0 (PRI 140)) (WIRE ((56 . 704) (376 . 704)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 100.0 (PRI 146)) (WIRE ((376 . 248) (576 . 248)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 324.0 (PRI 156)) (WIRE ((56 . 704) (56 . 56)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 100.0 (PRI 178)) (WIRE ((176 . 56) (376 . 56)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 232.0 (PRI 181)) (WIRE ((176 . 56) (-288 . 56)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 182)) (TEXT (-120.0 . 633.0) ("FixPs") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-137.5 630.0 35 12)) BLACK)) ((0.05 12.0 (PRI 183)) (TEXT (-120.0 . 512.0) ("Floats") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-141.0 509.0 42 12)) BLACK)) ((0.05 12.0 (PRI 184)) (TEXT (-120.0 . 384.0) ("Immediates") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-155.0 381.0 70 12)) BLACK)) ((0.0 100.0 (PRI 191)) (WIRE ((376.0 . 80.0) (576.0 . 80.0)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 100.0 (PRI 192)) (WIRE ((376.0 . 56.0) (576.0 . 56.0)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 212)) (TEXT (240.0 . 256.0) ("BindingP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((212.0 253.0 56 12)) BLACK)) ((0.05 12.0 (PRI 233)) (TEXT (480.0 . 152.0) ("Class Wrapper (InstanceP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((392.5 149.0 175 12)) BLACK)) ((0.05 12.0 (PRI 267)) (TEXT (480.0 . 256.0) ("Class Wrapper (BindingP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((396.0 253.0 168 12)) BLACK)) ((0.0 324.0 (PRI 329)) (WIRE ((-288 . 704) (-288 . 56)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 172.0 (PRI 330)) (WIRE ((-288 . 704) (56 . 704)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 333)) (TEXT (-111.0 . 199.0) ("Pointers") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-139.0 196.0 56 12)) BLACK)) ((0.05 12.0 (PRI 348)) (TEXT (336.0 . 280.0) ("41") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 277.0 14 12)) BLACK)) ((0.05 12.0 (PRI 350)) (TEXT (336.0 . 256.0) ("42") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 253.0 14 12)) BLACK)) ((0.05 12.0 (PRI 352)) (TEXT (336.0 . 232.0) ("43") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 229.0 14 12)) BLACK)) ((0.05 12.0 (PRI 360)) (TEXT (80.0 . 64.0) ("11") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((73.0 61.0 14 12)) BLACK)) ((0.05 12.0 (PRI 361)) (TEXT (152.0 . 64.0) ("1111") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((138.0 61.0 28 12)) BLACK)) ((0.05 12.0 (PRI 365)) (TEXT (336.0 . 64.0) ("63") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 61.0 14 12)) BLACK)) ((0.05 12.0 (PRI 366)) (TEXT (480.0 . 304.0) ("Class Wrapper (BlockP)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((403.0 301.0 154 12)) BLACK)) ((0.05 12.0 (PRI 369)) (TEXT (240.0 . 152.0) ("InstancegP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((205.0 149.0 70 12)) BLACK)) ((0.05 12.0 (PRI 373)) (TEXT (480.0 . 392.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 389.0 7 12)) BLACK)) ((0.05 12.0 (PRI 374)) (TEXT (480.0 . 384.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 381.0 7 12)) BLACK)) ((0.05 12.0 (PRI 375)) (TEXT (152.0 . 400.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 397.0 7 12)) BLACK)) ((0.05 12.0 (PRI 376)) (TEXT (152.0 . 392.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 389.0 7 12)) BLACK)) ((0.05 12.0 (PRI 377)) (TEXT (240.0 . 280.0) ("InvizP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((219.0 277.0 42 12)) BLACK)) ((0.05 12.0 (PRI 378)) (TEXT (240.0 . 232.0) ("Non Ref SymbolP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((187.5 229.0 105 12)) BLACK)) ((0.05 12.0 (PRI 379)) (TEXT (480.0 . 232.0) ("Class Wrapper (Symbol)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((403.0 229.0 154 12)) BLACK)) ((0.05 12.0 (PRI 380)) (TEXT (480.0 . 192.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 189.0 7 12)) BLACK)) ((0.05 12.0 (PRI 381)) (TEXT (480.0 . 184.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 181.0 7 12)) BLACK)) ((0.05 12.0 (PRI 382)) (TEXT (480.0 . 176.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 173.0 7 12)) BLACK)) ((0.05 12.0 (PRI 383)) (TEXT (480.0 . 216.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 213.0 7 12)) BLACK)) ((0.05 12.0 (PRI 384)) (TEXT (480.0 . 208.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 205.0 7 12)) BLACK)) ((0.05 12.0 (PRI 385)) (TEXT (480.0 . 200.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 197.0 7 12)) BLACK)) ((0.05 12.0 (PRI 386)) (TEXT (480.0 . 376.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 373.0 7 12)) BLACK)) ((0.05 12.0 (PRI 387)) (TEXT (152.0 . 384.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 381.0 7 12)) BLACK)) ((0.05 12.0 (PRI 388)) (TEXT (152.0 . 192.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 189.0 7 12)) BLACK)) ((0.05 12.0 (PRI 389)) (TEXT (152.0 . 184.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 181.0 7 12)) BLACK)) ((0.05 12.0 (PRI 390)) (TEXT (152.0 . 176.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 173.0 7 12)) BLACK)) ((0.05 12.0 (PRI 391)) (TEXT (152.0 . 216.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 213.0 7 12)) BLACK)) ((0.05 12.0 (PRI 392)) (TEXT (152.0 . 208.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 205.0 7 12)) BLACK)) ((0.05 12.0 (PRI 393)) (TEXT (152.0 . 200.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 197.0 7 12)) BLACK)) ((0.05 12.0 (PRI 394)) (TEXT (480.0 . 64.0) ("UnboundP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((452.0 61.0 56 12)) BLACK)) ((0.05 12.0 (PRI 395)) (TEXT (336.0 . 152.0) ("56") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((329.0 149.0 14 12)) BLACK)) ((0.0 100.0 (PRI 396)) (WIRE ((376 . 168) (576 . 168)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 397)) (TEXT (480.0 . 104.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 101.0 7 12)) BLACK)) ((0.05 12.0 (PRI 398)) (TEXT (480.0 . 96.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 93.0 7 12)) BLACK)) ((0.05 12.0 (PRI 399)) (TEXT (480.0 . 88.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 85.0 7 12)) BLACK)) ((0.05 12.0 (PRI 400)) (TEXT (480.0 . 128.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 125.0 7 12)) BLACK)) ((0.05 12.0 (PRI 401)) (TEXT (480.0 . 120.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 117.0 7 12)) BLACK)) ((0.05 12.0 (PRI 402)) (TEXT (480.0 . 112.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((476.5 109.0 7 12)) BLACK)) ((0.05 12.0 (PRI 403)) (TEXT (152.0 . 112.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 109.0 7 12)) BLACK)) ((0.05 12.0 (PRI 404)) (TEXT (152.0 . 104.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 101.0 7 12)) BLACK)) ((0.05 12.0 (PRI 405)) (TEXT (152.0 . 96.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 93.0 7 12)) BLACK)) ((0.05 12.0 (PRI 406)) (TEXT (152.0 . 136.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 133.0 7 12)) BLACK)) ((0.05 12.0 (PRI 407)) (TEXT (152.0 . 128.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 125.0 7 12)) BLACK)) ((0.05 12.0 (PRI 408)) (TEXT (152.0 . 120.0) (".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((148.5 117.0 7 12)) BLACK))) (-306.64063 41.015625 914.0625 687.5) 1.953125 8 INTERNAL STACK FRAME ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;14" VERSION 3 PRIRANGE (303 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 188.0 (PRI 3)) (BOX (516.0 -956.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (572.0 . -940.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -943.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -916) (624 . -956)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -940.0) ("Var 8 / Closure Environment") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((657.5 -943.0 189 12)) BLACK)) ((0.042 188.0 (PRI 188)) (GROUP (516.0 -757 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -756.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (572.0 . -740.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -743.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -716) (624 . -756)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -740.0) ("Var 0") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((734.5 -743.0 35 12)) BLACK))) (704 . -736))) ((0.042 188.0 (PRI 191)) (GROUP (516.0 -837 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -836.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -820.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -823.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -796) (624 . -836)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -820.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.0 -823.0 56 12)) BLACK))) (704 . -816))) ((0.042 188.0 (PRI 214)) (GROUP (516.0 -997 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -996.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -980.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -983.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -956) (624 . -996)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -980.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.0 -983.0 56 12)) BLACK))) (704 . -976))) ((0.042 188.0 (PRI 215)) (GROUP (516.0 -1037 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1036.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -1020.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -1023.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -996) (624 . -1036)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1020.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.0 -1023.0 56 12)) BLACK))) (704 . -1016))) ((0.042 188.0 (PRI 218)) (GROUP (516.0 -1277 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1276.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -1260.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -1263.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1236) (624 . -1276)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1260.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.0 -1263.0 56 12)) BLACK))) (704 . -1256))) ((0.042 188.0 (PRI 219)) (GROUP (516.0 -1317 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1316.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -1300.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -1303.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1276) (624 . -1316)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1300.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.0 -1303.0 56 12)) BLACK))) (704 . -1296))) ((0.042 188.0 (PRI 221)) (GROUP (516.0 -797 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -796.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (572.0 . -780.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -783.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -756) (624 . -796)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -780.0) ("Var 1") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((734.5 -783.0 35 12)) BLACK))) (704 . -776))) ((0.042 188.0 (PRI 225)) (GROUP (516.0 -1077 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1076.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (572.0 . -1060.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -1063.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1036) (624 . -1076)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1060.0) ("Var 15") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((731.0 -1063.0 42 12)) BLACK))) (704 . -1056))) ((0.042 188.0 (PRI 230)) (GROUP (516.0 -1357 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1356.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (572.0 . -1340.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -1343.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1316) (624 . -1356)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1340.0) ("Var n") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((734.5 -1343.0 35 12)) BLACK))) (704 . -1336))) ((0.05 12.0 (PRI 260)) (TEXT (752.0 . -625.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((745.0 -628.0 14 12)) BLACK)) ((0.05 12.0 (PRI 261)) (TEXT (576.0 . -625.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((572.5 -628.0 7 12)) BLACK)) ((0.042 188.0 (PRI 266)) (GROUP (516.0 -1157 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1156.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (572.0 . -1140.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -1143.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1116) (624 . -1156)) (ROUND 1 BLACK) NIL NIL 1 (623 -1157 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (784.0 . -1140.0) ("Function Header") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((731.5 -1143.0 105 12)) BLACK)) ((0.05 12.0 (PRI 131)) (TEXT (652.0 . -1140.0) ("CCodeP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((631.0 -1143.0 42 12)) BLACK)) ((0.0 4.0 (PRI 132)) (WIRE ((676 . -1156) (676 . -1156)) (ROUND 1 BLACK) NIL NIL 1 (675 -1157 2 2) NIL)) ((0.0 20.0 (PRI 133)) (WIRE ((680 . -1156) (680 . -1116)) (ROUND 1 BLACK) NIL NIL 1 (679 -1157 2 42) NIL))) (704 . -1136))) ((0.162 93.0 (PRI 279)) (GROUP (895 -897 186.0 162) (((0.05 12.0 (PRI 232)) (TEXT (948.0 . -820.0) ("Function Paramaters") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((948.0 -823.0 133 12)) BLACK)) ((0.0 12.0 (PRI 233)) (WIRE ((896 . -736) (920 . -736)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 12.0 (PRI 234)) (WIRE ((896 . -896) (920 . -896)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 80.0 (PRI 235)) (WIRE ((920 . -736) (920 . -896)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 8.0 (PRI 236)) (WIRE ((920 . -816) (936 . -816)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (988 . -816))) ((0.122 81.0 (PRI 280)) (GROUP (895 -1057 162.0 122) (((0.05 12.0 (PRI 237)) (TEXT (952.0 . -996.0) ("Local Variables") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((952.0 -999.0 105 12)) BLACK)) ((0.0 12.0 (PRI 238)) (WIRE ((896 . -936) (920 . -936)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 8.0 (PRI 241)) (WIRE ((920 . -992) (936 . -992)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 12.0 (PRI 242)) (WIRE ((896 . -1056) (920 . -1056)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 60.0 (PRI 243)) (WIRE ((920 . -936) (920 . -1056)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (976 . -996))) ((0.042 188.0 (PRI 283)) (GROUP (516.0 -1117 376.0 42) (((0.04 188.0 (PRI 198)) (BOX (516.0 -1116.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 199)) (TEXT (572.0 . -1100.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -1103.0 21 12)) BLACK)) ((0.0 20.0 (PRI 200)) (WIRE ((624 . -1076) (624 . -1116)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 201)) (TEXT (784.0 . -1100.0) ("Binding Stack Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.5 -1103.0 119 12)) BLACK)) ((0.05 12.0 (PRI 202)) (TEXT (652.0 . -1100.0) ("BindingP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((624.0 -1103.0 56 12)) BLACK)) ((0.0 4.0 (PRI 203)) (WIRE ((676 . -1116) (676 . -1116)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 204)) (WIRE ((680 . -1116) (680 . -1076)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (704 . -1096))) ((0.042 188.0 (PRI 284)) (GROUP (516.0 -1197 376.0 42) (((0.04 188.0 (PRI 198)) (BOX (516.0 -1196.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 199)) (TEXT (572.0 . -1180.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -1183.0 21 12)) BLACK)) ((0.0 20.0 (PRI 200)) (WIRE ((624 . -1156) (624 . -1196)) (ROUND 1 BLACK) NIL NIL 1 (623 -1197 2 42) NIL)) ((0.05 12.0 (PRI 201)) (TEXT (784.0 . -1180.0) ("Control Link") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((742.0 -1183.0 84 12)) BLACK)) ((0.05 12.0 (PRI 202)) (TEXT (652.0 . -1180.0) ("FrameP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((631.0 -1183.0 42 12)) BLACK)) ((0.0 4.0 (PRI 203)) (WIRE ((676 . -1196) (676 . -1196)) (ROUND 1 BLACK) NIL NIL 1 (675 -1197 2 2) NIL)) ((0.0 20.0 (PRI 204)) (WIRE ((680 . -1196) (680 . -1156)) (ROUND 1 BLACK) NIL NIL 1 (679 -1197 2 42) NIL))) (704 . -1176))) ((0.0 106.0 (PRI 286)) (WIRE ((1104 . -716) (892 . -716)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 36.0 (PRI 287)) (WIRE ((516 . -716) (444 . -716)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 288)) (TEXT (488.0 . -744.0) ("0") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((484.5 -747.0 7 12)) BLACK)) ((0.05 12.0 (PRI 289)) (TEXT (488.0 . -780.0) ("1") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((484.5 -783.0 7 12)) BLACK)) ((0.05 12.0 (PRI 290)) (TEXT (488.0 . -1064.0) ("15") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((481.0 -1067.0 14 12)) BLACK)) ((0.05 12.0 (PRI 291)) (TEXT (488.0 . -1104.0) ("16") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((481.0 -1107.0 14 12)) BLACK)) ((0.05 12.0 (PRI 292)) (TEXT (484.0 . -1348.0) ("n") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((480.5 -1351.0 7 12)) BLACK)) ((0.05 12.0 (PRI 293)) (TEXT (1008.0 . -729.0) ("Stack Frame Slots") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((948.5 -732.0 119 12)) BLACK)) ((0.05 12.0 (PRI 294)) (TEXT (1008.0 . -708.0) ("Machine Regs") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((966.0 -711.0 84 12)) BLACK)) ((0.042 188.0 (PRI 295)) (GROUP (516.0 -877 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -876.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (572.0 . -860.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -863.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -836) (624 . -876)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -860.0) ("(Ptr to Overflow Args) ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((671.5 -863.0 161 12)) BLACK))) (704 . -856))) ((0.042 188.0 (PRI 296)) (GROUP (516.0 -917 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -916.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (572.0 . -900.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -903.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -876) (624 . -916)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -900.0) ("(Ptr to CLOS Permutation Vector)") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((640.0 -903.0 224 12)) BLACK))) (704 . -896))) ((0.046 72.0 (PRI 297)) (GROUP (895 -701 144.0 46) (((0.0 12.0 (PRI 246)) (WIRE ((896 . -656) (920 . -656)) (ROUND 1 BLACK) NIL NIL 1 (895 -657 26 2) NIL)) ((0.0 12.0 (PRI 247)) (WIRE ((896 . -700) (920 . -700)) (ROUND 1 BLACK) NIL NIL 1 (895 -701 26 2) NIL)) ((0.0 22.0 (PRI 248)) (WIRE ((920 . -656) (920 . -700)) (ROUND 1 BLACK) NIL NIL 1 (919 -701 2 46) NIL)) ((0.0 8.0 (PRI 249)) (WIRE ((920 . -680) (936 . -680)) (ROUND 1 BLACK) NIL NIL 1 (919 -681 18 2) NIL)) ((0.05 12.0 (PRI 272)) (TEXT (948.0 . -684.0) ("Machine State") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((948.0 -687.0 91 12)) BLACK))) (960 . -680))) ((0.086 94.5 (PRI 298)) (GROUP (895 -1185 189.0 86) (((0.0 12.0 (PRI 246)) (WIRE ((896 . -1100) (920 . -1100)) (ROUND 1 BLACK) NIL NIL 1 (895 -1101 26 2) NIL)) ((0.0 12.0 (PRI 247)) (WIRE ((896 . -1184) (920 . -1184)) (ROUND 1 BLACK) NIL NIL 1 (895 -1185 26 2) NIL)) ((0.0 42.0 (PRI 248)) (WIRE ((920 . -1100) (920 . -1184)) (ROUND 1 BLACK) NIL NIL 1 (919 -1185 2 86) NIL)) ((0.0 8.0 (PRI 249)) (WIRE ((920 . -1136) (936 . -1136)) (ROUND 1 BLACK) NIL NIL 1 (919 -1137 18 2) NIL)) ((0.05 12.0 (PRI 250)) (TEXT (944.0 . -1140.0) ("Function Information") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((944.0 -1143.0 140 12)) BLACK))) (980 . -1140))) ((0.05 12.0 (PRI 299)) (TEXT (488.0 . -1224.0) ("19") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((481.0 -1227.0 14 12)) BLACK)) ((0.042 188.0 (PRI 300)) (GROUP (516.0 -1237 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1236.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (572.0 . -1220.0) ("TAG") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -1223.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1196) (624 . -1236)) (ROUND 1 BLACK) NIL NIL 1 (623 -1237 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1220.0) ("Var 19") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((731.0 -1223.0 42 12)) BLACK))) (704 . -1216))) ((0.042 188.0 (PRI 301)) (GROUP (516.0 -677 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -676.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (572.0 . -660.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -663.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -636) (624 . -676)) (ROUND 1 BLACK) NIL NIL 1 (623 -677 2 42) NIL)) ((0.05 12.0 (PRI 131)) (TEXT (696.0 . -660.0) ("Flags") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((678.5 -663.0 35 12)) BLACK)) ((0.0 20.0 (PRI 133)) (WIRE ((760 . -676) (760 . -636)) (ROUND 1 BLACK) NIL NIL 1 (759 -677 2 42) NIL)) ((0.05 12.0 (PRI 268)) (TEXT (828.0 . -660.0) ("Stack Pointer") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((782.5 -663.0 91 12)) BLACK))) (704 . -656))) ((0.042 188.0 (PRI 302)) (GROUP (516.0 -717 376.0 42) (((0.04 188.0 (PRI 198)) (BOX (516.0 -716.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 199)) (TEXT (572.0 . -700.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.5 -703.0 21 12)) BLACK)) ((0.0 20.0 (PRI 200)) (WIRE ((624 . -676) (624 . -716)) (ROUND 1 BLACK) NIL NIL 1 (623 -717 2 42) NIL)) ((0.05 12.0 (PRI 201)) (TEXT (760.0 . -700.0) ("Program Counter") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((707.5 -703.0 105 12)) BLACK))) (704 . -696))) ((0.122 91.5 (PRI 303)) (GROUP (895 -1337 183 122) (((0.0 12.0 (PRI 244)) (WIRE ((896 . -1336) (920 . -1336)) (ROUND 1 BLACK) NIL NIL 1 (895 -1337 26 2) NIL)) ((0.0 40.0 (PRI 245)) (WIRE ((920 . -1256) (920 . -1336)) (ROUND 1 BLACK) NIL NIL 1 (919 -1337 2 82) NIL)) ((0.0 12.0 (PRI 251)) (WIRE ((896 . -1216) (920 . -1216)) (ROUND 1 BLACK) NIL NIL 1 (895 -1217 26 2) NIL)) ((0.0 20.0 (PRI 252)) (WIRE ((920 . -1216) (920 . -1256)) (ROUND 1 BLACK) NIL NIL 1 (919 -1257 2 42) NIL)) ((0.0 8.0 (PRI 253)) (WIRE ((920.0 . -1276.0) (936.0 . -1276.0)) (ROUND 1 BLACK) NIL NIL 1 (919.0 -1277.0 18.0 2.0) NIL)) ((0.05 12.0 (PRI 254)) (TEXT (952.0 . -1276.0) ("Local Vars / Stack") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((952 -1279.0 126 12)) BLACK))) (980 . -1276)))) (446.25 -1361.25 686.25 746.25) 1.25 4 Flags - Special Flags Catch Frame This frame is a catch frame. Multiple Values The caller expects multiple values. Tail Call The caller's frame was re-used (This may go away). SP The Stack Pointer indicates the top item on the stack in the internal frame. Binding Stack. This field points to the current top of the binding stack (if we have one). Here is where variables are bound & Free variable lookup begins. No details on the format of the binding stack. NOTE: The binding stack, control link, and function header could be located at location 8, giving a smaller minimum stack size for frame dumping & loading. The tradeoff is load/dump time verses the # of local variable slots available with 1 byte opcodes. (8 slots or 5 slots). We need some stats to make this decision. Control Link. This field points to the previous frame in system memory. The control link field is only valid if the previous frame has been dumped into memory. That is why the control link instruction must dump the previous frame before returning a value. Function Header Points to the function header which contains the code for the function. Initialized when the stack frame header copied from function header. Vars section There are several areas in which variables can be stored. The function parameters are stored in locations 0 through 6. If more than 6 parameters are passed to a function, then variable cell 7 contains a pointer to the an overflow area, which contains the rest of the parameters. (The format for this area must be designed). The next 8 slots are reserved for local variables. These are located here so that they can be accessed with 1 byte opcodes. (As can the function parameters). The remaining (if any) local variables can be stored after the function information, along with the start of the execution stack. Stack section This section contains the working stack. The start of the stack is determined by the number of FVars, and PVars. The SP field indexes the current top of stack. In some computations it may be necessary to move part of the stack out to memory to keep the stack from overflowing. This is done by moving the lower portion of the stack frame and writing it out to the frame overflow area. BINDING STACK & FREE VARIABLE LOOKUP The binding stack holds the bindings for dynamic variables and free variable lookup is used to find the bindings. In order to allow spaghetti stack, the binding stack design allows chained binding stack segments. The binding stack format is that of simplicity, so the binding, unbinding, and lookup of variables is fast and efficient. The components of the binding stack are discussed further: Binding Stack Pointer. A slot of each stack frame is reserved to hold the current binding stack. It points to the current top of the binding stack. On a function call, the binding stack slot is always set to that of the preceeding frame's, so that the previous bindings will be known for free variable lookup. Variables then bound in the current context affect only the local binding stack pointer, so that on return the locally bound variables are automatically unbound, since the binding stack pointer returns to the value it had before the function call (that of the previous frame's). BindingStack. The binding stack consists of chained segments of fixed size (up to 256 words long). The first word after the header information contains a pointer to the previous binding stack. This link is used to continue searching back down the chained segments. The links point to the top of the previous binding stack so that the chained segments need not be full. The last segment of a binding stack has a link of UnboundP. Each variable binding will consist of a paired entry of name and value. The binding stack is considered part of the stack, and thus will not reference count. A sketch of the binding stack appears after the description. Binding. The operation of binding takes place by pushing the value & SymbolP of the variable being bound onto the binding stack. The only difficulty arises when the binding stack overflows. Since the binding stack is fixed size, it is easy for the microcode to determine when an overflow occurs, and Ufn to have another binding stack segment allocated. Note that when a new segment is allocated, a flag must be set in the frame so that the binding stack segment can be returned on function exit. This could cause problems if a function which required new segment allocation was called (& it returned) in a small loop, since Ufns would be required to allocate & de-allocate the chained binding stack segment. Free Variable Lookup. Free variable lookup proceeds by sequentially searching through the binding stack to find the matching SymbolP. The only tricky part is following the chained segments (which, due to the imposed size limitation is easy to detect). It should be possible to search the binding stack at a very high rate (could be as fast as 2 cycles per scan plus setup). If no match if found in the binding stack the global value cell is used as the referent. Unbind. There are two cases of unbinding, explicit and implicit. The implicit case is on a function return, where the binding stack is automaticall cut back to its origional state on function entry. This action takes place without any intervention since each frame has its top of binding stack pointer. Note that a Trap on Exit flag must be set when a binding stack segment must be released on funciton return. The other case is when the compiler emits code to unbind a certian number of variables (exit from a LET with the variables declared specials, for instance). In this case a certian number of variables are to be unbound. The binding stack is decremented by the appropriate amount and the variables are unbound. If the binding stack decrements off the end of a segment, then the unbind opcode will Ufn to handle de-allocation of the segment. Cached Bindings. It may still be desirable to cache the results of a free variable lookup, even with the fast lookup speed. One method has the code place the SymbolP of the desired variable in the local var slot. When a free variable access is made on that slot it is checked for a SymbolP or a BindingStackP. If it is a SymbolP then a free variable lookup must be performed (placing the correct pointer back into the var slot), otherwise the BindingStackP points to the value cell in either the binding stack or the Global value cell (we probably need BindingStackP & GlobalRefP to distinguish ref counting). Another option is to have the bind opcode also cache the value, but this only helps with local references. Binding Stack Segment Management. The binding stack segments are to be managed by Ufns. There can be a system wide (or process wide) pool of binding stack segments in which they are allocated from. The manager could have two linked lists (so that there is no need to cons), one for free segments, and one for used segments. Allocation & de-allocation would be a simple matter of moving the pointer into the appropriate lists. This also keeps references to the segments so that they are not garbage collected, since the binding stack pointers are not reference counted pointers. Opcodes. Bind to [Tos] Bind the indicated symbol to the value found at Tos. This is performed by pushing the value and symbol onto the binding stack, creating a new binding stack segment when necessart. Unbind Unbind the top n bindings from the binding stack, de-allocating any binding stack segments when necessary. FVar Free variable access. 1 - If var slot n contains a SymbolP, then perform a free variable lookup into the binding stack to find the binding of n, placing a pointer to its value into the var slot. 2- Push the value pointed to by the slot onto the stack, check for the value Unbound & Ufn if it is. FVar_^ Free variable store. 1 - If var slot n contains a SymbolP, then perform a free variable lookup into the binding stack to find the binding of n, placing a pointer to its value into the var slot. 2- Save the value found at TOS into the cell pointed to by the slot, and pop TOS. Binding Stack Format: ((SKETCH "figure from {PHYLUM}DOC>BINDINGSTACK.;1" VERSION 3 PRIRANGE (414 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.05 12.0 (PRI 332)) (TEXT (940.0 . -948.0) ("Paired Entrys") 1 (LEFT TOP) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((940.0 -959.0 91 12)) BLACK)) ((0.0 21.0 (PRI 338)) (WIRE ((464 . -1104) (506 . -1104)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((506 . -1104) ((502 . -1105) (498.39154 . -1106.4722)) ((502 . -1103) (498.39154 . -1101.5278)))))) ((0.05 12.0 (PRI 397)) (TEXT (430.0 . -1109.0) ("Binding" "Stack" "Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((405.5 -1100.0 49 12) (412.5 -1112.0 35 12) (419.5 -1124.0 21 12)) BLACK)) ((0.384 197.0 (PRI 403)) (GROUP (513 -1169 384 394.0) (((0.05 12.0 (PRI 125)) (TEXT (751.0 . -784.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((744.0 -787.0 14 12)) BLACK)) ((0.05 12.0 (PRI 126)) (TEXT (611.0 . -785.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((607.5 -788.0 7 12)) BLACK)) ((0.05 12.0 (PRI 127)) (TEXT (570.0 . -784.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((566.5 -787.0 7 12)) BLACK)) ((0.05 12.0 (PRI 128)) (TEXT (538.0 . -784.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((534.5 -787.0 7 12)) BLACK)) ((0.378 192.0 (PRI 396)) (GROUP (513 -1169 384 378) (((0.048 192.0 (PRI 367)) (GROUP (513 -1039 384 48) (((0.008 24.0 (PRI 362)) (GROUP (889 -1039 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((894 . -992) (894 . -1010)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((894 . -1020) (894 . -1038)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((890 . -1012) (896 . -1010)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((890 . -1020) (896 . -1018)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (894 . -1014))) ((0.008 24.0 (PRI 363)) (GROUP (513 -1039 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((518 . -992) (518 . -1010)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((518 . -1020) (518 . -1038)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((514 . -1012) (520 . -1010)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((514 . -1020) (520 . -1018)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (518 . -1014))) ((0.05 12.0 (PRI 364)) (TEXT (708.0 . -1016.0) ("." "." ".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((704.5 -1007.0 7 12) (704.5 -1019.0 7 12) (704.5 -1031.0 7 12)) BLACK))) (706 . -1016))) ((0.042 188.0 (PRI 379)) (GROUP (518.0 -873 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (518.0 -872.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((586 . -832) (586 . -872)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (606.0 . -856.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((595.5 -859.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((626 . -832) (626 . -872)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (754.0 . -856.0) ("Wrapper Pointer") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((701.5 -859.0 105 12)) BLACK))) (706 . -852))) ((0.042 188.0 (PRI 384)) (GROUP (518.0 -993 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (518.0 -992.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((586 . -952) (586 . -992)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (606.0 . -976.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((595.5 -979.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((626 . -952) (626 . -992)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (754.0 . -976.0) ("SymbolP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((729.5 -979.0 49 12)) BLACK))) (706 . -972))) ((0.042 188.0 (PRI 385)) (GROUP (518.0 -953 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (518.0 -952.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((586 . -912) (586 . -952)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (606.0 . -936.0) ("Tag") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((595.5 -939.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((626 . -912) (626 . -952)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (754.0 . -936.0) ("Value") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((736.5 -939.0 35 12)) BLACK))) (706 . -932))) ((0.042 188.0 (PRI 386)) (GROUP (518.0 -913 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (518.0 -912.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((586 . -872) (586 . -912)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (606.0 . -896.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((595.5 -899.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((626 . -872) (626 . -912)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (754.0 . -896.0) ("Previous BS Segment") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((687.5 -899.0 133 12)) BLACK))) (706 . -892))) ((0.042 188.0 (PRI 388)) (GROUP (518.0 -833 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (518.0 -832.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 5)) (WIRE ((554 . -792) (554 . -832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 6)) (TEXT (570.0 . -816.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((563.0 -819.0 14 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((586 . -792) (586 . -832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (606.0 . -816.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((595.5 -819.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((626 . -792) (626 . -832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (754.0 . -816.0) ("Garbage Collector Info") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((677.0 -819.0 154 12)) BLACK))) (706 . -812))) ((0.042 188.0 (PRI 391)) (GROUP (518.0 -1121 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (518.0 -1120.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((586 . -1080) (586 . -1120)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (606.0 . -1104.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((595.5 -1107.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((626 . -1080) (626 . -1120)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (754.0 . -1104.0) ("SymbolP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((729.5 -1107.0 49 12)) BLACK))) (706 . -1100))) ((0.042 188.0 (PRI 392)) (GROUP (518.0 -1081 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (518.0 -1080.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((586 . -1040) (586 . -1080)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (606.0 . -1064.0) ("Tag") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((595.5 -1067.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((626 . -1040) (626 . -1080)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (754.0 . -1064.0) ("Value") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((736.5 -1067.0 35 12)) BLACK))) (706 . -1060))) ((0.048 192.0 (PRI 393)) (GROUP (513 -1169 384 48) (((0.008 24.0 (PRI 362)) (GROUP (889 -1169 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((894 . -1122) (894 . -1140)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((894 . -1150) (894 . -1168)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((890 . -1142) (896 . -1140)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((890 . -1150) (896 . -1148)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (894 . -1144))) ((0.008 24.0 (PRI 363)) (GROUP (513 -1169 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((518 . -1122) (518 . -1140)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((518 . -1150) (518 . -1168)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((514 . -1142) (520 . -1140)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((514 . -1150) (520 . -1148)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (518 . -1144))) ((0.05 12.0 (PRI 364)) (TEXT (708.0 . -1146.0) ("." "." ".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((704.5 -1137.0 7 12) (704.5 -1149.0 7 12) (704.5 -1161.0 7 12)) BLACK))) (706 . -1146))) ((0.0 188.0 (PRI 395)) (WIRE ((518 . -1168) (894 . -1168)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (706 . -982)))) (704 . -968))) ((0.384 197.0 (PRI 405)) (GROUP (1129 -1169 384 394.0) (((0.05 12.0 (PRI 125)) (TEXT (1367.0 . -784.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1360.0 -787.0 14 12)) BLACK)) ((0.05 12.0 (PRI 126)) (TEXT (1227.0 . -785.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1223.5 -788.0 7 12)) BLACK)) ((0.05 12.0 (PRI 127)) (TEXT (1186.0 . -784.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1182.5 -787.0 7 12)) BLACK)) ((0.05 12.0 (PRI 128)) (TEXT (1154.0 . -784.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1150.5 -787.0 7 12)) BLACK)) ((0.378 192.0 (PRI 396)) (GROUP (1129 -1169 384 378) (((0.048 192.0 (PRI 367)) (GROUP (1129 -1039 384 48) (((0.008 24.0 (PRI 362)) (GROUP (1505 -1039 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((1510 . -992) (1510 . -1010)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((1510 . -1020) (1510 . -1038)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((1506 . -1012) (1512 . -1010)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((1506 . -1020) (1512 . -1018)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (1510 . -1014))) ((0.008 24.0 (PRI 363)) (GROUP (1129 -1039 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((1134 . -992) (1134 . -1010)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((1134 . -1020) (1134 . -1038)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((1130 . -1012) (1136 . -1010)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((1130 . -1020) (1136 . -1018)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (1134 . -1014))) ((0.05 12.0 (PRI 364)) (TEXT (1324.0 . -1016.0) ("." "." ".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1320.5 -1007.0 7 12) (1320.5 -1019.0 7 12) (1320.5 -1031.0 7 12)) BLACK))) (1322 . -1016))) ((0.042 188.0 (PRI 379)) (GROUP (1134.0 -873 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (1134.0 -872.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((1202 . -832) (1202 . -872)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (1222.0 . -856.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1211.5 -859.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((1242 . -832) (1242 . -872)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (1370.0 . -856.0) ("Wrapper Pointer") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1317.5 -859.0 105 12)) BLACK))) (1322 . -852))) ((0.042 188.0 (PRI 384)) (GROUP (1134.0 -993 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (1134.0 -992.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((1202 . -952) (1202 . -992)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (1222.0 . -976.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1211.5 -979.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((1242 . -952) (1242 . -992)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (1370.0 . -976.0) ("SymbolP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1345.5 -979.0 49 12)) BLACK))) (1322 . -972))) ((0.042 188.0 (PRI 385)) (GROUP (1134.0 -953 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (1134.0 -952.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((1202 . -912) (1202 . -952)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (1222.0 . -936.0) ("Tag") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1211.5 -939.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((1242 . -912) (1242 . -952)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (1370.0 . -936.0) ("Value") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1352.5 -939.0 35 12)) BLACK))) (1322 . -932))) ((0.042 188.0 (PRI 386)) (GROUP (1134.0 -913 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (1134.0 -912.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((1202 . -872) (1202 . -912)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (1222.0 . -896.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1211.5 -899.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((1242 . -872) (1242 . -912)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (1370.0 . -896.0) ("Previous BS Segment") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1303.5 -899.0 133 12)) BLACK))) (1322 . -892))) ((0.042 188.0 (PRI 388)) (GROUP (1134.0 -833 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (1134.0 -832.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 5)) (WIRE ((1170 . -792) (1170 . -832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 6)) (TEXT (1186.0 . -816.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1179.0 -819.0 14 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((1202 . -792) (1202 . -832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (1222.0 . -816.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1211.5 -819.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((1242 . -792) (1242 . -832)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (1370.0 . -816.0) ("Garbage Collector Info") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1293.0 -819.0 154 12)) BLACK))) (1322 . -812))) ((0.042 188.0 (PRI 391)) (GROUP (1134.0 -1121 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (1134.0 -1120.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((1202 . -1080) (1202 . -1120)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (1222.0 . -1104.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1211.5 -1107.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((1242 . -1080) (1242 . -1120)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (1370.0 . -1104.0) ("SymbolP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1345.5 -1107.0 49 12)) BLACK))) (1322 . -1100))) ((0.042 188.0 (PRI 392)) (GROUP (1134.0 -1081 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (1134.0 -1080.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((1202 . -1040) (1202 . -1080)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (1222.0 . -1064.0) ("Tag") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1211.5 -1067.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((1242 . -1040) (1242 . -1080)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (1370.0 . -1064.0) ("Value") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1352.5 -1067.0 35 12)) BLACK))) (1322 . -1060))) ((0.048 192.0 (PRI 393)) (GROUP (1129 -1169 384 48) (((0.008 24.0 (PRI 362)) (GROUP (1505 -1169 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((1510 . -1122) (1510 . -1140)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((1510 . -1150) (1510 . -1168)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((1506 . -1142) (1512 . -1140)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((1506 . -1150) (1512 . -1148)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (1510 . -1144))) ((0.008 24.0 (PRI 363)) (GROUP (1129 -1169 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((1134 . -1122) (1134 . -1140)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((1134 . -1150) (1134 . -1168)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((1130 . -1142) (1136 . -1140)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((1130 . -1150) (1136 . -1148)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (1134 . -1144))) ((0.05 12.0 (PRI 364)) (TEXT (1324.0 . -1146.0) ("." "." ".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1320.5 -1137.0 7 12) (1320.5 -1149.0 7 12) (1320.5 -1161.0 7 12)) BLACK))) (1322 . -1146))) ((0.0 188.0 (PRI 395)) (WIRE ((1134 . -1168) (1510 . -1168)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (1322 . -982)))) (1320 . -968))) ((0.0 68.0 (PRI 406)) (WIRE ((896 . -892) (1032 . -892)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 104.0 (PRI 407)) (WIRE ((1032 . -1100) (1032 . -892)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 50.0 (PRI 408)) (WIRE ((1132 . -1100) (1032 . -1100)) (ROUND 1 BLACK) ((CURVE 18.0 8) NIL) NIL 1 NIL (((1132 . -1100) ((1128 . -1101) (1124.3916 . -1102.4722)) ((1128 . -1099) (1124.3916 . -1097.5278))) NIL))) ((0.0 8.0 (PRI 409)) (WIRE ((900 . -932) (916 . -932)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 8.0 (PRI 410)) (WIRE ((900 . -972) (916 . -972)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 411)) (WIRE ((916 . -972) (916 . -932)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 8.0 (PRI 412)) (WIRE ((916 . -952) (932 . -952)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 18.0 (PRI 413)) (WIRE ((1516 . -892) (1552 . -892)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((1552 . -892) ((1548 . -893) (1544.3916 . -894.4721)) ((1548 . -891) (1544.3916 . -889.5279)))))) ((0.05 12.0 (PRI 414)) (TEXT (1556.0 . -896.0) ("Etc") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((1556.0 -899.0 21 12)) BLACK))) (361.32813 -1335.4492 1276.8555 644.53125) 2.4414063 8 FUNCTION HEADER The function header format also consists of a normal object header with the type index set to a "CCodep". The function definition cell of the atom contains a pointer to the function header: Function Definition Cell: Interpreted: ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;2" VERSION 3 PRIRANGE (262 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 152.0 (PRI 3)) (BOX (4.0 -376.0 304.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (20.0 . -360.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((9.5 -363.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((40 . -336) (40 . -376)) (ROUND 1 BLACK) NIL NIL 1 (39 -377 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (200.0 . -360.0) ("28 bit Pointer") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((151.0 -363.0 98 12)) BLACK)) ((0.05 12.0 (PRI 126)) (TEXT (25.0 . -329.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((21.5 -332.0 7 12)) BLACK)) ((0.0 4.0 (PRI 132)) (WIRE ((92 . -376) (92 . -376)) (ROUND 1 BLACK) NIL NIL 1 (91 -377 2 2) NIL)) ((0.0 20.0 (PRI 133)) (WIRE ((96 . -376) (96 . -336)) (ROUND 1 BLACK) NIL NIL 1 (95 -377 2 42) NIL)) ((0.05 12.0 (PRI 134)) (TEXT (200.0 . -328.0) ("28") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((193.0 -331.0 14 12)) BLACK)) ((0.05 12.0 (PRI 135)) (TEXT (72.0 . -328.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((68.5 -331.0 7 12)) BLACK)) ((0.05 12.0 (PRI 262)) (TEXT (68.0 . -360.0) ("ConsP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((50.5 -363.0 35 12)) BLACK))) (-22.0 -405.0 344.0 100.0) 1.0 4 Compiled: ((SKETCH a% figure% from% a% document VERSION 3 PRIRANGE (262 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 152.0 (PRI 3)) (BOX (4.0 -376.0 304.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (20.0 . -360.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((9.5 -363.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((40 . -336) (40 . -376)) (ROUND 1 BLACK) NIL NIL 1 (39 -377 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (200.0 . -360.0) ("28 bit Pointer") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((151.0 -363.0 98 12)) BLACK)) ((0.05 12.0 (PRI 126)) (TEXT (25.0 . -329.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((21.5 -332.0 7 12)) BLACK)) ((0.0 4.0 (PRI 132)) (WIRE ((92 . -376) (92 . -376)) (ROUND 1 BLACK) NIL NIL 1 (91 -377 2 2) NIL)) ((0.0 20.0 (PRI 133)) (WIRE ((96 . -376) (96 . -336)) (ROUND 1 BLACK) NIL NIL 1 (95 -377 2 42) NIL)) ((0.05 12.0 (PRI 134)) (TEXT (200.0 . -328.0) ("28") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((193.0 -331.0 14 12)) BLACK)) ((0.05 12.0 (PRI 135)) (TEXT (72.0 . -328.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((68.5 -331.0 7 12)) BLACK)) ((0.05 12.0 (PRI 262)) (TEXT (68.0 . -360.0) ("CType") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((50.5 -363.0 35 12)) BLACK))) (-22.0 -405.0 344.0 100.0) 1.0 4 NOTE: CType is either CCodeP, MethodP, or ClosureP. Function Header: This object contains the header and code for the function. CCodeP: ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;2" VERSION 3 PRIRANGE (330 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.04 188.0 (PRI 3)) (BOX (516.0 -836.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (516.0 -876.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (516.0 -916.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (516.0 -956.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (516.0 -1076.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (516.0 -1116.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (516.0 -1156.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (516.0 -1196.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -796) (584 . -836)) (ROUND 1 BLACK) NIL NIL 1 (583 -837 2 42) NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1036) (584 . -1076)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1076) (584 . -1116)) (ROUND 1 BLACK) NIL NIL 1 (583 -1117 2 42) NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -876) (584 . -916)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -916) (584 . -956)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -836) (584 . -876)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -820.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -823.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -860.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -863.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -900.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -903.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -940.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -943.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1060.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1063.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1100.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1103.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -796) (624 . -836)) (ROUND 1 BLACK) NIL NIL 1 (623 -837 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -836) (624 . -876)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -876) (624 . -916)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -916) (624 . -956)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1036) (624 . -1076)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1076) (624 . -1116)) (ROUND 1 BLACK) NIL NIL 1 (623 -1117 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1116) (624 . -1156)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1156) (624 . -1196)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -820.0) ("Flags & Initial SP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((689.0 -823.0 126 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -860.0) ("PC - 0") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((731.0 -863.0 42 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -900.0) ("PC - 1") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((731.0 -903.0 42 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -940.0) ("PC - 2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((731.0 -943.0 42 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1060.0) ("PC - 7") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((731.0 -1063.0 42 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1100.0) ("Name Table Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((703.0 -1103.0 98 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1140.0) ("Function Name ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((703.0 -1143.0 98 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1180.0) ("Code Size ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((717.0 -1183.0 70 12)) BLACK)) ((0.042 188.0 (PRI 214)) (GROUP (516.0 -997 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -996.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -980.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -983.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -956) (624 . -996)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -980.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.0 -983.0 56 12)) BLACK))) (704 . -976))) ((0.042 188.0 (PRI 215)) (GROUP (516.0 -1037 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1036.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -1020.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -1023.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -996) (624 . -1036)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1020.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.0 -1023.0 56 12)) BLACK))) (704 . -1016))) ((0.042 188.0 (PRI 282)) (GROUP (516.0 -1237 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1236.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -1220.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -1223.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1196) (624 . -1236)) (ROUND 1 BLACK) NIL NIL 1 (623 -1237 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1220.0) ("Code ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((734.5 -1223.0 35 12)) BLACK))) (704 . -1216))) ((0.042 188.0 (PRI 283)) (GROUP (516.0 -1277 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1276.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -1260.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -1263.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1236) (624 . -1276)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1260.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.0 -1263.0 56 12)) BLACK))) (704 . -1256))) ((0.042 188.0 (PRI 284)) (GROUP (516.0 -1317 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1316.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -1300.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -1303.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1276) (624 . -1316)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1300.0) (". . . . ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.0 -1303.0 56 12)) BLACK))) (704 . -1296))) ((0.042 188.0 (PRI 285)) (GROUP (516.0 -1357 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1356.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.05 12.0 (PRI 8)) (TEXT (576.0 . -1340.0) ("...") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((565.5 -1343.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1316) (624 . -1356)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1340.0) ("Code ") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((734.5 -1343.0 35 12)) BLACK))) (704 . -1336))) ((0.0 20.0 (PRI 310)) (WIRE ((584.0 . -1116.0) (584.0 . -1156.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 311)) (TEXT (604.0 . -1140.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1143.0 21 12)) BLACK)) ((0.0 20.0 (PRI 312)) (WIRE ((584.0 . -1156.0) (584.0 . -1196.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 313)) (TEXT (604.0 . -1180.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1183.0 21 12)) BLACK)) ((0.013 111.75 (PRI 314)) (GROUP (528.5 -708.0 223.5 13.0) (((0.05 12.0 (PRI 125)) (TEXT (745.0 . -704.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((738.0 -707.0 14 12)) BLACK)) ((0.05 12.0 (PRI 126)) (TEXT (605.0 . -705.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((601.5 -708.0 7 12)) BLACK)) ((0.05 12.0 (PRI 127)) (TEXT (564.0 . -704.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((560.5 -707.0 7 12)) BLACK)) ((0.05 12.0 (PRI 128)) (TEXT (532.0 . -704.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((528.5 -707.0 7 12)) BLACK))) (640 . -702))) ((0.042 188.0 (PRI 328)) (GROUP (516.0 -797.0 376.0 42.0) (((0.04 188.0 (PRI 315)) (BOX (516.0 -796.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 321)) (WIRE ((584.0 . -756.0) (584.0 . -796.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 322)) (TEXT (604.0 . -780.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -783.0 21 12)) BLACK)) ((0.0 20.0 (PRI 324)) (WIRE ((624.0 . -756.0) (624.0 . -796.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 326)) (TEXT (752.0 . -780.0) ("Wrapper Pointer") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((699.5 -783.0 105 12)) BLACK))) (704 . -776))) ((0.042 188.0 (PRI 329)) (GROUP (516.0 -757.0 376.0 42.0) (((0.04 188.0 (PRI 316)) (BOX (516.0 -756.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 318)) (WIRE ((552.0 . -716.0) (552.0 . -756.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 319)) (TEXT (568.0 . -740.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.0 -743.0 14 12)) BLACK)) ((0.0 20.0 (PRI 320)) (WIRE ((584.0 . -716.0) (584.0 . -756.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 323)) (TEXT (604.0 . -740.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -743.0 21 12)) BLACK)) ((0.0 20.0 (PRI 325)) (WIRE ((624.0 . -716.0) (624.0 . -756.0)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 327)) (TEXT (752.0 . -740.0) ("Garbage Collector Info") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((675.0 -743.0 154 12)) BLACK))) (704 . -736))) ((0.0 18.0 (PRI 330)) (WIRE ((512 . -736) (476 . -736)) (ROUND 1 BLACK) ((CURVE 18.0 8) NIL) NIL 1 NIL (((512 . -736) ((508 . -737) (504.39154 . -738.4721)) ((508 . -735) (504.39154 . -733.5279))) NIL)))) (466.25 -1363.75 428.75 677.5) 1.25 2 Function Name Pointer to the name or descriptor for this function. Code Size Size (in words) of the code object. SP - Stack Pointer This is the initial stack pointer location for the function, which is set to the last used variable slot in the frame. PC Entry Vector 0-7 This table indicates the different entry points for the function. Entries 0-6 are used if there are 0-6 parameters passed to the function, and entry 7 is used if 7 or more parameters are passed. Each entry contains the starting absolute PC of the entry code. Name Table Ptr Pointer to the function's name table for use by the debugging tools. CLOSURES Closures are represented as objects with 2 data slots, one being a pointer to the environment, and the other is a pointer to the compiled code object (CCodeP). Closures are stored as normal objects so a closure would look like this: ((SKETCH "figure from {PHYLUM}DOC>CLOSURES.;2" VERSION 3 PRIRANGE (285 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.012 113.25 (PRI 9)) (GROUP (36.5 -635.0 226.5 12.0) (((0.05 12.0 (PRI 18)) (TEXT (40.0 . -632.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((36.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 19)) (TEXT (72.0 . -632.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((68.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 20)) (TEXT (108.0 . -632.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((104.5 -635.0 7 12)) BLACK)) ((0.05 12.0 (PRI 21)) (TEXT (256.0 . -632.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((249.0 -635.0 14 12)) BLACK))) (148 . -628))) ((0.002 33.0 (PRI 24)) (GROUP (-49 -669 66 2) (((0.0 32.0 (PRI 106)) (WIRE ((-48 . -668) (16 . -668)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 NIL (NIL ((16 . -668) ((12 . -669) (8.391548 . -670.4721)) ((12 . -667) (8.391548 . -665.5279))))))) (-16 . -668))) ((0.042 188.0 (PRI 269)) (GROUP (20.0 -725 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -724.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -684) (88 . -724)) (ROUND 1 BLACK) NIL NIL 1 (87 -725 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -684) (128 . -724)) (ROUND 1 BLACK) NIL NIL 1 (127 -725 2 42) NIL)) ((0.05 12.0 (PRI 12)) (TEXT (260.0 . -708.0) ("WRAPPER POINTER") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((207.5 -711.0 105 12)) BLACK)) ((0.05 12.0 (PRI 262)) (TEXT (108.0 . -708.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -711.0 21 12)) BLACK))) (208 . -704))) ((0.042 188.0 (PRI 280)) (GROUP (20.0 -685 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -684.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 5)) (WIRE ((60 . -644) (60 . -684)) (ROUND 1 BLACK) NIL NIL 1 (59 -685 2 42) NIL)) ((0.05 12.0 (PRI 6)) (TEXT (76.0 . -668.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((69.0 -671.0 14 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -644) (88 . -684)) (ROUND 1 BLACK) NIL NIL 1 (87 -685 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -668.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -671.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -644) (128 . -684)) (ROUND 1 BLACK) NIL NIL 1 (127 -685 2 42) NIL)) ((0.05 12.0 (PRI 164)) (TEXT (256.0 . -668.0) ("Garbage Collector Info") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((179.0 -671.0 154 12)) BLACK))) (208 . -664))) ((0.042 188.0 (PRI 283)) (GROUP (20.0 -765 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -764.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -724) (88 . -764)) (ROUND 1 BLACK) NIL NIL 1 (87 -765 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -748.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -751.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -724) (128 . -764)) (ROUND 1 BLACK) NIL NIL 1 (127 -765 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -748.0) ("Ptr to Closure Environment") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((165.0 -751.0 182 12)) BLACK))) (208 . -744))) ((0.042 188.0 (PRI 284)) (GROUP (20.0 -805 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (20.0 -804.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((88 . -764) (88 . -804)) (ROUND 1 BLACK) NIL NIL 1 (87 -805 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (108.0 . -788.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((97.5 -791.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((128 . -764) (128 . -804)) (ROUND 1 BLACK) NIL NIL 1 (127 -805 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (256.0 . -788.0) ("Ptr to Code") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((217.5 -791.0 77 12)) BLACK))) (208 . -784)))) (-111.25 -848.75 556.25 251.25) 1.25 4 The function call mechanism detects a closure call be the type of the pointer in the definition cell of the symbol the function call is invoked with. When the definition cell contains a ClosureP, then a closure call is made. A closure call places the pointer to the closure environment (1st data slot of the closure) into var slot 8 of the callee's stack frame. The rest of the closure call proceeds as a normal function call by invoking the function call mechanism with the code pointer (2nd data slot of the closure) to complete the call. Thus a closure call is very similar to a normal function call except that: -The function definition cell contains a ClosureP. - The closure environment is placed into var slot 8 of the callee's stack frame. - The the code pointer is found in the ClosureP. It is believed that the code pointer must always be a CCodeP, but it is also possible to allow MethodPs in this slot. METHODS Methods discriminate what function gets called based on the types of the actual arguments passed. The function call mechanism detects a method call when the function definition cell contains a MethodP. A Method lookup is then performed to find the appropriate code to execute based on the type of the argument. Some details of a method lookup are as follows: 1 - The type index / wrapper for the next unprocessed argument (starting with arg 1) is found. This is performed by whatever means the type system is to work, either indexing into a type table or fetching the information from the header of the object. Type index will be used for the rest of this description although wrappers are shown in the sketch. 2 - Perform a shift & mask operation on the type index to get an index into the method hash table. The hash table will probably be fixed size, so that the hashing of the type index will be easier. It may be possible to read the shift & mask info from the MethodP, but that will depend on the size & # cycles required to do it. 3 - Index into the method hash table and compare with the argument's type index. If a match is found then goto 5. 4 - Sequentially search through the overflow area looking for either: a match with the type index, or NIL. If a match or NIL is found then goto 5, otherwise Ufn to perform the lookup. The overflow area will end with an NIL entry to siginify the end of the table. 5 - An appropriate entry was found. Get the corresponding code slot and check for a MethodP. If it is, then proceed to step 1 with the new MethodP to lookup the next argument. Otherwise get the Permutation Vector and place it into the callee's PV slot. Then proceed with a normal function call using the code pointer retrieved from the table. UnboundP in the code slot indicates that the code for the entry is not known, and a Ufn must be called to perform the discrimination. A default match is signified whenever the type index is NIL. This allows non-matched types to have default entries, and to have certian argument positions un-checked. Method lookup need not be performed on all of the arguments. Placing a CCodeP in the code slot of the last argument checked will skip method lookup of trailing arguments. The general format of a MethodP is as follows : ((SKETCH a% figure% from% a% document VERSION 3 PRIRANGE (383 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.05 12.0 (PRI 125)) (TEXT (749.0 . -788.0) ("32") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((742.0 -791.0 14 12)) BLACK)) ((0.05 12.0 (PRI 126)) (TEXT (609.0 . -789.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((605.5 -792.0 7 12)) BLACK)) ((0.05 12.0 (PRI 127)) (TEXT (568.0 . -788.0) ("4") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((564.5 -791.0 7 12)) BLACK)) ((0.05 12.0 (PRI 128)) (TEXT (536.0 . -788.0) ("2") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((532.5 -791.0 7 12)) BLACK)) ((0.0 88.0 (PRI 314)) (WIRE ((892 . -876) (1068 . -876)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.05 12.0 (PRI 332)) (TEXT (970.0 . -954.0) ("Paired Entrys") 1 (LEFT TOP) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((970.0 -965.0 91 12)) BLACK)) ((0.05 12.0 (PRI 333)) (TEXT (938.0 . -1364.0) ("Overflow Area") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((938.0 -1367.0 91 12)) BLACK)) ((0.05 12.0 (PRI 334)) (TEXT (940.0 . -1060.0) ("Wrapper Hash Table") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((940.0 -1063.0 126 12)) BLACK)) ((0.0 88.0 (PRI 335)) (WIRE ((896 . -1240) (1072 . -1240)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.0 88.0 (PRI 336)) (WIRE ((860 . -1606) (1036 . -1606)) (ROUND 1 BLACK) NIL (2 4) 1 NIL NIL)) ((0.082 188.0 (PRI 339)) (GROUP (516.0 -1323 376.0 82) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1282.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (516.0 -1322.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1242) (584 . -1282)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1282) (584 . -1322)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1266.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1269.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1306.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1309.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1242) (624 . -1282)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1282) (624 . -1322)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1266.0) ("Overflow Wrapper 1") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((689.0 -1269.0 126 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1306.0) ("MethodP, CCodeP, or UnboundP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((654.0 -1309.0 196 12)) BLACK))) (704 . -1282))) ((0.04 32.0 (PRI 342)) (GROUP (863 -1667 64 40) (((0.0 18.0 (PRI 326)) (WIRE ((864 . -1628) (900 . -1628)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 18.0 (PRI 327)) (WIRE ((864 . -1666) (900 . -1666)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 19.0 (PRI 328)) (WIRE ((902 . -1628) (902 . -1666)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 11.0 (PRI 329)) (WIRE ((904 . -1648) (926 . -1648)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (894 . -1646))) ((0.05 12.0 (PRI 343)) (TEXT (940.0 . -1650.0) ("End Marker") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((940.0 -1653.0 70 12)) BLACK)) ((0.162 188.0 (PRI 348)) (GROUP (516.0 -1037 376.0 162) (((0.082 188.0 (PRI 315)) (GROUP (516.0 -957 376.0 82) (((0.04 188.0 (PRI 3)) (BOX (516.0 -916.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.04 188.0 (PRI 3)) (BOX (516.0 -956.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -876) (584 . -916)) (ROUND 1 BLACK) NIL NIL 1 (583 -917 2 42) NIL)) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -916) (584 . -956)) (ROUND 1 BLACK) NIL NIL 1 (583 -957 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -900.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -903.0 21 12)) BLACK)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -940.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -943.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -876) (624 . -916)) (ROUND 1 BLACK) NIL NIL 1 (623 -917 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -916) (624 . -956)) (ROUND 1 BLACK) NIL NIL 1 (623 -957 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -900.0) ("Wrapper 1") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((720.5 -903.0 63 12)) BLACK)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -940.0) ("MethodP, CCodeP, or UnboundP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((654.0 -943.0 196 12)) BLACK))) (704 . -916))) ((0.042 188.0 (PRI 346)) (GROUP (516.0 -1037 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1036.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -996) (584 . -1036)) (ROUND 1 BLACK) NIL NIL 1 (583 -1037 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1020.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1023.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -996) (624 . -1036)) (ROUND 1 BLACK) NIL NIL 1 (623 -1037 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1020.0) ("unused") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((731.0 -1023.0 42 12)) BLACK))) (704 . -1016))) ((0.042 188.0 (PRI 347)) (GROUP (516.0 -997 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -996.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -956) (584 . -996)) (ROUND 1 BLACK) NIL NIL 1 (583 -997 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -980.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -983.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -956) (624 . -996)) (ROUND 1 BLACK) NIL NIL 1 (623 -997 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -980.0) ("Ptr to Permutation Vector") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((664.5 -983.0 175 12)) BLACK))) (704 . -976)))) (704 . -956))) ((0.06 60.0 (PRI 349)) (GROUP (903 -1017 60 120) (((0.0 18.0 (PRI 326)) (WIRE ((904 . -898) (940 . -898)) (ROUND 1 BLACK) NIL NIL 1 (903 -899 38 2) NIL)) ((0.0 18.0 (PRI 327)) (WIRE ((904 . -1016) (940 . -1016)) (ROUND 1 BLACK) NIL NIL 1 (903 -1017 38 2) NIL)) ((0.0 59.0 (PRI 328)) (WIRE ((940 . -898) (940 . -1016)) (ROUND 1 BLACK) NIL NIL 1 (939 -1017 2 120) NIL)) ((0.0 11.0 (PRI 329)) (WIRE ((940 . -958) (962 . -958)) (ROUND 1 BLACK) NIL NIL 1 (939 -959 24 2) NIL))) (932 . -956))) ((0.048 192.0 (PRI 367)) (GROUP (511 -1083 384 48) (((0.008 24.0 (PRI 362)) (GROUP (887 -1083 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((892 . -1036) (892 . -1054)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((892 . -1064) (892 . -1082)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((888 . -1056) (894 . -1054)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((888 . -1064) (894 . -1062)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (892 . -1058))) ((0.008 24.0 (PRI 363)) (GROUP (511 -1083 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((516 . -1036) (516 . -1054)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((516 . -1064) (516 . -1082)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((512 . -1056) (518 . -1054)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((512 . -1064) (518 . -1062)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (516 . -1058))) ((0.05 12.0 (PRI 364)) (TEXT (706.0 . -1060.0) ("." "." ".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((702.5 -1051.0 7 12) (702.5 -1063.0 7 12) (702.5 -1075.0 7 12)) BLACK))) (704 . -1060))) ((0.042 188.0 (PRI 373)) (GROUP (516.0 -1363 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1362.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1322) (584 . -1362)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1346.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1349.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1322) (624 . -1362)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1346.0) ("Ptr to Permutation Vector") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((664.5 -1349.0 175 12)) BLACK))) (704 . -1342))) ((0.162 188.0 (PRI 374)) (GROUP (516.0 -1243 376.0 162) (((0.042 188.0 (PRI 346)) (GROUP (516.0 -1243 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1242.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1202) (584 . -1242)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1226.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1229.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1202) (624 . -1242)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1226.0) ("unused") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((731.0 -1229.0 42 12)) BLACK))) (704 . -1222))) ((0.042 188.0 (PRI 347)) (GROUP (516.0 -1203 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1202.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1162) (584 . -1202)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1186.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1189.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1162) (624 . -1202)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1186.0) ("Ptr to Permutation Vector") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((664.5 -1189.0 175 12)) BLACK))) (704 . -1182))) ((0.042 188.0 (PRI 370)) (GROUP (516.0 -1163 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1162.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1122) (584 . -1162)) (ROUND 1 BLACK) NIL NIL 1 (583 -1163 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1146.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1149.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1122) (624 . -1162)) (ROUND 1 BLACK) NIL NIL 1 (623 -1163 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1146.0) ("MethodP, CCodeP, or UnboundP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((654.0 -1149.0 196 12)) BLACK))) (704 . -1142))) ((0.042 188.0 (PRI 371)) (GROUP (516.0 -1123 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1122.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1082) (584 . -1122)) (ROUND 1 BLACK) NIL NIL 1 (583 -1123 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1106.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1109.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1082) (624 . -1122)) (ROUND 1 BLACK) NIL NIL 1 (623 -1123 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1106.0) ("Wrapper n") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((720.5 -1109.0 63 12)) BLACK))) (704 . -1102)))) (704 . -1162))) ((0.048 192.0 (PRI 376)) (GROUP (511 -1409 384 48) (((0.008 24.0 (PRI 362)) (GROUP (887 -1409 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((892 . -1362) (892 . -1380)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((892 . -1390) (892 . -1408)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((888 . -1382) (894 . -1380)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((888 . -1390) (894 . -1388)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (892 . -1384))) ((0.008 24.0 (PRI 363)) (GROUP (511 -1409 8 48) (((0.0 9.0 (PRI 355)) (WIRE ((516 . -1362) (516 . -1380)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 9.0 (PRI 356)) (WIRE ((516 . -1390) (516 . -1408)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 357)) (WIRE ((512 . -1382) (518 . -1380)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 4.0 (PRI 359)) (WIRE ((512 . -1390) (518 . -1388)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL))) (516 . -1384))) ((0.05 12.0 (PRI 364)) (TEXT (706.0 . -1386.0) ("." "." ".") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((702.5 -1377.0 7 12) (702.5 -1389.0 7 12) (702.5 -1401.0 7 12)) BLACK))) (704 . -1386))) ((0.05 12.0 (PRI 377)) (TEXT (941.0 . -1430.0) ("Last entry is Ufn") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((941.0 -1433.0 119 12)) BLACK)) ((0.0 17.0 (PRI 378)) (WIRE ((932 . -1426) (898 . -1426)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.042 188.0 (PRI 379)) (GROUP (516.0 -877 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -876.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -836) (584 . -876)) (ROUND 1 BLACK) NIL NIL 1 (583 -877 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -860.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -863.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -836) (624 . -876)) (ROUND 1 BLACK) NIL NIL 1 (623 -877 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -860.0) ("Wrapper Pointer") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((699.5 -863.0 105 12)) BLACK))) (704 . -856))) ((0.042 214.5 (PRI 380)) (GROUP (463 -837 429.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -836.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 5)) (WIRE ((552 . -796) (552 . -836)) (ROUND 1 BLACK) NIL NIL 1 (551 -837 2 42) NIL)) ((0.05 12.0 (PRI 6)) (TEXT (568.0 . -820.0) ("GC") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((561.0 -823.0 14 12)) BLACK)) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -796) (584 . -836)) (ROUND 1 BLACK) NIL NIL 1 (583 -837 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -820.0) ("Fix") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -823.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -796) (624 . -836)) (ROUND 1 BLACK) NIL NIL 1 (623 -837 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -820.0) ("Garbage Collector Info") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((675.0 -823.0 154 12)) BLACK)) ((0.0 21.0 (PRI 338)) (WIRE ((464 . -816) (506 . -816)) (ROUND 1 BLACK) (NIL (CURVE 18.0 8)) NIL 1 (463 -817 44 2) (NIL ((506 . -816) ((502 . -817) (498.39154 . -818.4721)) ((502 . -815) (498.39154 . -813.5279))))))) (676 . -816))) ((0.042 188.0 (PRI 381)) (GROUP (516.0 -1489 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1488.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1448) (584 . -1488)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1472.0) ("Imm") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1475.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1448) (624 . -1488)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1472.0) ("UnboundP") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((724.0 -1475.0 56 12)) BLACK))) (704 . -1468))) ((0.042 188.0 (PRI 382)) (GROUP (516.0 -1449 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1448.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1408) (584 . -1448)) (ROUND 1 BLACK) NIL NIL 1 (583 -1449 2 42) NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1432.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1435.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1408) (624 . -1448)) (ROUND 1 BLACK) NIL NIL 1 (623 -1449 2 42) NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1432.0) ("Nil") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((741.5 -1435.0 21 12)) BLACK))) (704 . -1428))) ((0.042 188.0 (PRI 383)) (GROUP (516.0 -1529 376.0 42) (((0.04 188.0 (PRI 3)) (BOX (516.0 -1528.0 376.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((584 . -1488) (584 . -1528)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 8)) (TEXT (604.0 . -1512.0) ("Ptr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((593.5 -1515.0 21 12)) BLACK)) ((0.0 20.0 (PRI 9)) (WIRE ((624 . -1488) (624 . -1528)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 17)) (TEXT (752.0 . -1512.0) ("Ptr to Permutation Vector") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((664.5 -1515.0 175 12)) BLACK))) (704 . -1508)))) (457.8125 -1550.0 648.4375 787.5) 1.5625 2 VIRTUAL MEMORY The virtual memory address space is 2^28 words, with a virtual memory page size of 2^10 words per page. The first 2^22 words of the virtual memory address space will correspond to actual physical addresses, and thus not be mapped through the virtual memory TLB. This will allow access to the virtual memory table, and provide a means of booting the machine before the virtual memory table is set up. The maximum amount of real memory which can addressed is 2^22 words. There will be one entry in the virtual page map table for each page, with each entry being one word. Each entry will contain the physical translation address for the virtual address allong with 2 flags: valid, and write-protected. (This is under discussion). The software routines may define additional flags for other indications - dirty, accessed, etc. The software page fault routine will control these flags while the hardware will detect page faults on virtual accesses based on the valid and write-protected flags. The address breakdowns are as follows: ((SKETCH "figure from {PHYLUM}DOC>FUNCSPEC.TEDIT;10" VERSION 3 PRIRANGE (219 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.058 196.0 (PRI 165)) (GROUP (-84.0 -313 392.0 58.0) (((0.04 196.0 (PRI 3)) (BOX (-84.0 -312.0 392.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 7)) (WIRE ((-52 . -272) (-52 . -312)) (ROUND 1 BLACK) NIL NIL 1 (-53 -313 2 42) NIL)) ((0.0 20.0 (PRI 9)) (WIRE ((58 . -272) (58 . -312)) (ROUND 1 BLACK) NIL NIL 1 (57 -313 2 42) NIL)) ((0.05 12.0 (PRI 128)) (TEXT (-76.0 . -266.0) ("33") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-83.0 -269.0 14 12)) BLACK)) ((0.05 12.0 (PRI 153)) (TEXT (182.0 . -296.0) ("Real Memory Address") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((115.5 -299.0 133 12)) BLACK)) ((0.05 12.0 (PRI 154)) (TEXT (72.0 . -266.0) ("21") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((65.0 -269.0 14 12)) BLACK)) ((0.05 12.0 (PRI 155)) (TEXT (300.0 . -264.0) ("0") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((296.5 -267.0 7 12)) BLACK)) ((0.05 12.0 (PRI 156)) (TEXT (46.0 . -266.0) ("22") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((39.0 -269.0 14 12)) BLACK)) ((0.05 12.0 (PRI 157)) (TEXT (26.0 . -296.0) ("000000") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((5.0 -299.0 42 12)) BLACK)) ((0.0 20.0 (PRI 158)) (WIRE ((-4 . -272) (-4 . -312)) (ROUND 1 BLACK) NIL NIL 1 (-5 -313 2 42) NIL)) ((0.05 12.0 (PRI 161)) (TEXT (-10.0 . -266.0) ("28") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-17.0 -269.0 14 12)) BLACK)) ((0.05 12.0 (PRI 162)) (TEXT (-42.0 . -266.0) ("31") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-49.0 -269.0 14 12)) BLACK)) ((0.05 12.0 (PRI 163)) (TEXT (10.0 . -266.0) ("27") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((3.0 -269.0 14 12)) BLACK))) (112 . -286))) ((0.058 196.0 (PRI 179)) (GROUP (-84.0 -415 392.0 58.0) (((0.05 12.0 (PRI 166)) (TEXT (252.0 . -396.0) ("Page Offset") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((213.5 -399.0 77 12)) BLACK)) ((0.05 12.0 (PRI 167)) (TEXT (180.0 . -368.0) ("10") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((173.0 -371.0 14 12)) BLACK)) ((0.05 12.0 (PRI 168)) (TEXT (102.0 . -398.0) ("VM Table Addr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((56.5 -401.0 91 12)) BLACK)) ((0.05 12.0 (PRI 169)) (TEXT (198.0 . -368.0) ("9") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((194.5 -371.0 7 12)) BLACK)) ((0.04 196.0 (PRI 170)) (BOX (-84.0 -414.0 392.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 171)) (WIRE ((-52 . -374) (-52 . -414)) (ROUND 1 BLACK) NIL NIL 1 (-53 -415 2 42) NIL)) ((0.05 12.0 (PRI 172)) (TEXT (-76.0 . -368.0) ("33") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-83.0 -371.0 14 12)) BLACK)) ((0.05 12.0 (PRI 173)) (TEXT (300.0 . -366.0) ("0") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((296.5 -369.0 7 12)) BLACK)) ((0.0 20.0 (PRI 174)) (WIRE ((-4 . -374) (-4 . -414)) (ROUND 1 BLACK) NIL NIL 1 (-5 -415 2 42) NIL)) ((0.05 12.0 (PRI 175)) (TEXT (-10.0 . -368.0) ("28") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-17.0 -371.0 14 12)) BLACK)) ((0.05 12.0 (PRI 176)) (TEXT (-42.0 . -368.0) ("31") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-49.0 -371.0 14 12)) BLACK)) ((0.05 12.0 (PRI 177)) (TEXT (10.0 . -368.0) ("27") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((3.0 -371.0 14 12)) BLACK)) ((0.0 20.0 (PRI 178)) (WIRE ((190 . -374) (190 . -414)) (ROUND 1 BLACK) NIL NIL 1 (189 -415 2 42) NIL))) (112 . -388))) ((0.05 12.0 (PRI 180)) (TEXT (248.0 . -500.0) ("Physical Page Addr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((185.0 -503.0 126 12)) BLACK)) ((0.05 12.0 (PRI 181)) (TEXT (194.0 . -472.0) ("11") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((187.0 -475.0 14 12)) BLACK)) ((0.05 12.0 (PRI 182)) (TEXT (-63.5 . -500.0) ("Int") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-74.5 -503.0 21 12)) BLACK)) ((0.05 12.0 (PRI 183)) (TEXT (-24.5 . -500.0) ("Flags") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-41.5 -503.0 35 12)) BLACK)) ((0.04 196.0 (PRI 184)) (BOX (-82.0 -516.0 392.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 185)) (WIRE ((-50 . -476) (-50 . -516)) (ROUND 1 BLACK) NIL NIL 1 (-51 -517 2 42) NIL)) ((0.05 12.0 (PRI 186)) (TEXT (-74.0 . -470.0) ("33") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-81.0 -473.0 14 12)) BLACK)) ((0.05 12.0 (PRI 187)) (TEXT (302.0 . -468.0) ("0") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((298.5 -471.0 7 12)) BLACK)) ((0.0 20.0 (PRI 188)) (WIRE ((-2 . -476) (-2 . -516)) (ROUND 1 BLACK) NIL NIL 1 (-3 -517 2 42) NIL)) ((0.05 12.0 (PRI 189)) (TEXT (-8.0 . -470.0) ("28") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-15.0 -473.0 14 12)) BLACK)) ((0.05 12.0 (PRI 190)) (TEXT (-40.0 . -470.0) ("31") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-47.0 -473.0 14 12)) BLACK)) ((0.05 12.0 (PRI 191)) (TEXT (12.0 . -470.0) ("27") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((5.0 -473.0 14 12)) BLACK)) ((0.0 20.0 (PRI 192)) (WIRE ((182 . -476) (182 . -516)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.05 12.0 (PRI 193)) (TEXT (172.0 . -472.0) ("12") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((165.0 -475.0 14 12)) BLACK)) ((0.05 12.0 (PRI 212)) (TEXT (-108.0 . -250.0) ("Real (Non-Mapped) Address:") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-108.0 -253.0 182 12)) BLACK)) ((0.05 12.0 (PRI 213)) (TEXT (-110.0 . -348.0) ("Virtual (Mapped) Address:") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-110.0 -351.0 175 12)) BLACK)) ((0.05 12.0 (PRI 214)) (TEXT (-110.0 . -452.0) ("Virtual memory Table Entry:") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-110 -455.0 189 12)) BLACK)) ((0.05 12.0 (PRI 215)) (TEXT (-110.0 . -558.0) ("Resulting Mapped Physical Address") 1 (LEFT BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-110 -561.0 231 12)) BLACK)) ((0.058 196.0 (PRI 219)) (GROUP (-80.0 -623 392.0 58.0) (((0.05 12.0 (PRI 195)) (TEXT (130.0 . -606.0) ("Physical Page Addr") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((67.0 -609.0 126 12)) BLACK)) ((0.05 12.0 (PRI 196)) (TEXT (256.0 . -604.0) ("Page Offset") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((217.5 -607.0 77 12)) BLACK)) ((0.05 12.0 (PRI 197)) (TEXT (184.0 . -576.0) ("10") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((177.0 -579.0 14 12)) BLACK)) ((0.05 12.0 (PRI 198)) (TEXT (202.0 . -576.0) ("9") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((198.5 -579.0 7 12)) BLACK)) ((0.04 196.0 (PRI 199)) (BOX (-80.0 -622.0 392.0 40.0) (ROUND 1 BLACK) NIL 1 (NIL NIL NIL))) ((0.0 20.0 (PRI 200)) (WIRE ((-48 . -582) (-48 . -622)) (ROUND 1 BLACK) NIL NIL 1 (-49 -623 2 42) NIL)) ((0.05 12.0 (PRI 201)) (TEXT (304.0 . -574.0) ("0") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((300.5 -577.0 7 12)) BLACK)) ((0.0 20.0 (PRI 202)) (WIRE ((0 . -582) (0 . -622)) (ROUND 1 BLACK) NIL NIL 1 (-1 -623 2 42) NIL)) ((0.05 12.0 (PRI 203)) (TEXT (-6.0 . -576.0) ("28") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-13.0 -579.0 14 12)) BLACK)) ((0.05 12.0 (PRI 204)) (TEXT (-38.0 . -576.0) ("31") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-45.0 -579.0 14 12)) BLACK)) ((0.05 12.0 (PRI 205)) (TEXT (14.0 . -576.0) ("27") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((7.0 -579.0 14 12)) BLACK)) ((0.0 20.0 (PRI 206)) (WIRE ((194 . -582) (194 . -622)) (ROUND 1 BLACK) NIL NIL 1 (193 -623 2 42) NIL)) ((0.05 12.0 (PRI 207)) (TEXT (-72.0 . -576.0) ("33") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((-79.0 -579.0 14 12)) BLACK)) ((0.0 20.0 (PRI 208)) (WIRE ((62 . -582) (62 . -622)) (ROUND 1 BLACK) NIL NIL 1 (61 -623 2 42) NIL)) ((0.05 12.0 (PRI 209)) (TEXT (76.0 . -576.0) ("21") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((69.0 -579.0 14 12)) BLACK)) ((0.05 12.0 (PRI 210)) (TEXT (50.0 . -576.0) ("22") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((43.0 -579.0 14 12)) BLACK)) ((0.05 12.0 (PRI 211)) (TEXT (30.0 . -606.0) ("000000") 1 (CENTER BASELINE) (GACHA 10 (MEDIUM REGULAR REGULAR)) ((9.0 -609.0 42 12)) BLACK))) (116 . -596)))) (-116.0 -654.0 456.0 420.0) 1.0 2 GARBAGE COLLECTION The primary garbage collector is based on reference counting. A mark and sweep collector may also be implemented to collect circular structures more slowly and less often. The first cell of every object in memory contains a short (four-bit) reference count field in the high byte of the cell, which is manipulable by microcode. A baseline reference count and a set of flags (OnZeroCount, Finalizable) is located elsewhere. The actual reference count of an object is obtained by shifting the baseline count left by 3 and adding the short count. For most objects, the baseline count and flags are stored in the object's first cell; however, for specified short objects (currently only type CONS, but possibly also numbers), the information is stored in a separate hash table. In the common case where flags and baseline count are all zero, there is no hash table entry. The pointer tags should be allocated in such a way that it is easy to test whether the gc info is in the first cell or in the auxiliary table (unless CONSP suffices). When a pointer to an object is stored in a reference-countable location (ordinarily anywhere but the stack), the reference count of the pointer is incremented and that of the previous contents is decremented. When a reference-count operation would leave the short count zero (by incrementing a count of 15 or decrementing a count of 1), the microcode defers the reference count operation by calling a special ufn at the end of the current instruction. The ufn increments or decrements the pointer's baseline reference count by 1 and resets the short reference count to 8; thus at least 7 decrements or 8 increments will be required before the next such punt. If the baseline count was zero and the operation was decrement, then the total reference count is now zero. If the object's OnZeroCount flag is not set, the object is added to the zero count table and the flag is set. If the microcode attempts to decrement a short count of zero, it also calls the ufn. However, this case is an error (attempt to decrement count below zero). When an object is created, its reference count (both short and baseline) is set to zero, the OnZeroCount flag is set, and the object is added to the zero count table. A periodic reclamation occurs in two main steps: the stack is scanned to account for references from the stack, then the zero count table is scanned to reclaim truly free objects. In the first step, every stack frame in use is scanned, and each pointer found in the frame is noted as "found on stack". In the second step, each pointer in the zero count table is examined. If the pointer's full reference count is no longer zero, the OnZeroCount flag is cleared; otherwise, if the pointer was found on the stack, then the pointer is requeued on the zero count table; otherwise, if the object's Finalizable flag is set, then type-specific finalization is performed; otherwise, the object is reclaimed. Finalization must either increment the object's reference count or allow the object to be reclaimed (or requeue the object on the zero count table). The "found on stack" notation can either be done with another flag in each object, or by using Cedar's FOStable strategy%use an auxiliary hash table each of whose entries consists of the logical OR of all pointers that hash to that entry. The FOStable has the virtue of being (potentially) less disruptive of the working set and not requiring lots of new entries in the overflow hash table for CONSes. It has the disadvantage that pointers can appear to be on the stack when they aren't really, thereby not getting collected; one has to change the hash function on every reclaim so that pointers don't get stuck. Instructional support (these instructions are all infrequent and could be separate subcases of a single two-byte opcode): GETREFCOUNT Retrieve the short reference count bits from TOS and place them at TOS as an IntegerP. SETREFCOUNT Set the short reference count bits of TOS-1 from TOS and then pop TOS. If TOS is not an IntegerP then call the UFN. INCREFCOUNT Increment the short reference count of TOS. Call the UFN if count would overflow. DECREFCOUNT Decrement the short reference count of TOS. Call the UFN if count is currently 0 or 1. The first two opcodes are intended for use by the special refcount ufn. The last two are intended for use in Lisp code performing low-level pointer manipulation; e.g., the ufn for CONS. Unresolved issues. Non-reference-counted pointers. It is probably desirable to have some kinds of pointers that are never reference counted. There are two principal reasons not to reference count an object: (1) for performance and (2) to allow naked pointers to storage (since they can't be guaranteed to point to the start of an object). Case (1) is addressed by having a new pointer type for "raw pointer". Case (2) is most obviously interesting for symbols, many of which we know can never be reclaimed, e.g., all the external symbols in the LISP package. At the least, reference counting T and NIL would be a large waste of time. We thus have a subclass of SymbolP that is not ref-counted. Note, however, that one of the performance hits in reference counting is that it dirties memory that might otherwise remain clean (or more generally, references memory that otherwise could be untouched). In the case of symbols, the symbol object itself tends to be clean most of the time (stores into global variables and changes in the function cell are infrequent), and also frequently unreferenced. It is unclear to what extent other types of otherwise clean objects are commonly reference counted. Pagefault handling: Care must be taken in the microcode during instructions that reference count so that instruction restart due to pagefault does not result in inconsistencies. It is currently planned that the special ufn be called additionally in cases where the microcode detects that it would have to take a pagefault on the object in order to do the reference count operation (the traditional route is to have the microcode touch all the pages involved before it modifies any memory). This raises two concerns: 1. The ufn can't easily tell whether it was called because of short count overflow or because of pagefault (in fact, there could be one or more cases of each). Thus, the ufn's action has to be to fetch the old ref count, check for whether it is at a boundary; if yes, do the overflow action, else simply increment/decrement it (taking the pagefault along the way) and store it back. This is probably acceptable: it is merely a GETREFCOUNT plus comparison that would not have to be done if the ufn were called only in the overflow case. 2. More significantly, consideration must be given to pagefault and process switch in all Lisp code that tries to alter reference counts, so that reference counting of any particular object, and any access at all to shared structures, not step on each other from different processes. This suggests that process switch to user-level processes (any process that can reference count) not be permitted to occur while performing such an operation, either between a store and the INCREFCOUNT or during a ref count overflow action, such as updating the hash entry for a cons. The possibility of process switch during pagefault makes this problem more difficult. [The possibility of multiple processors makes it even more difficult.] One possible solution is to arrange that pagefaults taken while inside of an "uninterruptably" construct cannot switch control to another user-level process. This seems heavy-handed, but it is likely that other uses of "uninterruptably" will want the same semantics. Note that this all suggests that the process scheduler needs to avoid doing any reference counting. Interface to the ref count ufn. On the D machine, this ufn takes one arbitrary argument and returns it; the information about what reference counts to change and how are in a global table. On Tamarin, the existence of the RETNP instruction makes it easy to return no values, so one could instead pass the pointer(s) as additional arguments, in some fixed order indicating which are to be incremented, which decremented. Of the current instructions, RPLPTR and SETF-CAR/CDR have one increment, one decrement; RPLCONS has one increment; and CONS has two increments, one decrement. If we were, however, to add instructions that took advantage of cdr coding, such as LIST.N and LIST*.N, there would be an arbitrary number of increments (N, actually) and one decrement, which would be better accommodated by a table, even though that would be slower, due to memory references. Incidentally, it is slightly advantageous to do increments before decrements, so as not to needlessly go thru the zero count table in the case of storing a pointer into a location that already contains the pointer. Asynchronous collection. Reclamation can occur in parallel with other computation if we take care that on-stack information is taken into account. The problem that can arise is that an object not on the stack at the start of the reclamation pass gets transferred from memory to the stack, thereby decrementing its reference count. Together with the decrements performed by the reclaimer, this could cause an object not noted as being on the stack to have a count of zero and be incorrectly reclaimed. The solution taken by Cedar is to add another flag to each object, called MaybeOnStack, and one bit of global state "Collector is running". The stack scan phase is still performed atomically, then the collector starts. Whenever a reference count is decremented while the collector is running, the MaybeOnStack flag is set and the object is added to the zero count table. The collector ignores any object whose MaybeOnStack flag is set. At the end of the reclamation, the MaybeOnStack flag is cleared from every pointer that had been in the zero count table. On Tamarin, it is probably simplest to have the microcode always punt when it decrements a reference count when the collector is running ("collector running" can be part of the global frame). However, this substantially slows down approximately half of all reference count operations while the collector is active. An alternative is to replace one bit of the short reference count with the MaybeOnStack flag, and teach the microcode how to set the flag and insert entries in the zero count table. Of course, the smaller short reference count means that more references will punt; however, it is still probably the case that most objects never get a reference count bigger than 7, so wouldn't ever punt (except for being decremented to zero). GLOBAL REGISTERS A global register frame will store various system constants and temporaries. Most have pre-defined meanings, but some will be available for system use. The pre-defined registers areas follows: UfnBase This register contains a pointer to the base of thesystem ufn table. Undefined Fn This register contains a CCodeP pointer to the function called when a illegal function call is attempted. PageFault Fn This register contains a CCodeP pointer to the function called when a page fault is encountered. The page fault address is passed as the only parameter. Interrupt Fn This register contains a CCodeP pointer to the function called when an external interrupt is requested. Stack Overflow Fn This register contains a CCodeP pointer to the function called when the stack requires adjusting. Reference Count Fn This register contains a CCodeP pointer to the function called when a reference count operation requires theUfn logic. ConsInfo This register contains the next address used to make a new cons cell. It must be set by LISP using a IREGX_ opcode. INTERRUPT STRUCTURE (This is incomplete) Here's some information based on the current hardware: There are two external interrupt pins entering the tamarin processor, each having an associated flag bit & interrupt function. When the interrupt is requested, the flag bit for the associated interrupt is set, and the corresponding interrupt function is called. The function is called at the time that the next opcode would begin execution (i.e. microcode is not interrupted). The call is that of a normal function call with the exception being that further interrupts are disabled. The interrupt function is executed as if it were called from the currently executing process, thus is is run in the current context & stack frame. If a context switch is desired, the interrupt function must perform it explicitly. This allows the interrupt function to decide what type of processing is requested, and perform the appropriate actions without a context switch if so desired. The interrupt function must perform either a RETNP ("Return No Push") or a RETEI ("Return & Enable Interrupts") to return to the interrupted process, depending on what the interrupt routine has done with interrupt enable. There is currently only one global interrupt enable flag in the processor. This flag currently enables or disables both interrupts, but we might want one of the interrupts to be non-maskable. TAMARIN OPCODES This section describes the opcode set used by implemented by tamarin chip. It describes ONLY those actions which are performed by the microcode, therefore the ufn routines are not described in this section. Constants: 'T Push the constant T onto the stack. 'NIL Push the constant NIL onto the stack. '0 Push the integer constant 0 onto the stack. Optimization of SICX 0. '1 Pushes the integer constant 1 onto the stack. Optimization of SICX 1. 'UNBIND Pushes the funny constant UNBIND onto the stack (so that it can be copied into local-variable cells). SICX Pushes the non-negative integer constant found in alpha byte onto the stack. Optimization of SICXX. SICXX Pushes the non-negative integer constant found in next 2 bytes onto the stack. Optimization of ICONST. PCONST0 Push the pointer constant found in next 4 bytes onto the stack. The major type bits are set to 'pointerp'. (This sets the tag bits to the value which is shared with immediates, but typed immediates should use the IMMCONST opcode for codewalkers & loaders). PCONST1 Push the pointer constant found in next 4 bytes onto the stack. The major type bits are set to 'pointerp'. (This sets the tab bits to the value which is not shared with immediates). IMMCONST Push the 4 byte typed immediate constant made from next 4 bytes onto the stack. The tag bits are set to 'immediat', the value of which is shared with PCONTS0. Pointers should use the PCONST0 opcode for code walkers.. ICONST Push the (signed) integer constant found in the next 4 bytes onto the stack. The major type bits are set to 'fixp'. FCONST Push the floating point constant found in the next 4 bytes onto the stack. The major type bits are set to 'floatp'. SCONST Push an symbol constant made from the next 4 bytes onto the stack. Variable Access: VARX Push the value of the local variable indicated by the alpha byte. VARX_ Store TOS into the local variable indicated by the alpha byte. VARX_^ Store TOS into the local variable indicated by the alpha byte and pop. VARK (0-15) Push the value of the local variable indicated by the opcode. Optimized version of VARX. VARK_ (0-15) Store TOS into the local variable indicated by the opcode. Optimized version of VARX_. VARK_^ (0-15) Store TOS into the local variable indicated by the opcode. The stack is popped after the value is stored. Optimizaton of VARK_ + POP. GVAR Push the global variable value cell indicated by the next 4 bytes, which are the symbol number of the variable. Call the Ufn if the value cell of the symbol is unbound. GVAR_^ Store TOS into the global variable indicated by the next 4 bytes, which are the symbol number of the variable, and the proper reference counts can be adjusted (i.e. the object being smashed has its reference count decremented, and the object being stored has its reference count incremented). The reference count UFN will be called if the reference count operations overflow. The value being stored is popped from the stack. OVAR1.X Push the variable located at variable cell X, in the stack frame which is 1 frame back. If the previous frame is not in the processor then call the UFN. OVAR1.X_^ Store TOS into variable cell X, which is in the stack frame 1 frame back. If the previous frame is not in the processor then call the UFN. The value stored is popped from the stack. Binding Stack Operations: These need work: BIND Bind the symbol indicated by the next 4 bytes onto the binding stack, with the value popped from the stack. UNBIND.N Pop n symbols off the binding stack. This opcode will just subtrace n from the binding stack TOS pointer. FVARX Check the variable cell indicated by the alpha byte. If it contains a valid pointer to a value cell (i.e. NOT the constant Unbound) then push the value referenced by the cell, else lookup the symbol in the binding stack. The binding stack lookup proceeds by following the CLINK of the stack frame to the binding stack of the previous frame, looking for the symbol desired. If it is found then the cell in the stack frame is set to point to the corresponding value cell, and the value loaded. Otherwise the cell in the stack frame is set to reference the global value. FVARX_ Check the variable cell indicated by the alpha byte. If the cell contains Unbound, then the free variable lookup must be performed as in FVARX to find & set the cache value in the cell. Once the cell is set then store the value at TOS at the location referenced by the cell. If the reference count bit is set in the pointer then the reference counting operations are performed. Stack Modification: COPY Push a new copy of TOS back onto the stack. SWAP Swap the values at TOS and TOS-1. POP Pop the stack and discard the value. MOVETOS.N Save the value of the TOS cell. Next set the stack pointer to the value of N. Then set the TOS cell to the saved value. SETTOS.N Set the stack pointer to the value of N. Type Checking: FIXNUMP Set TOS to NIL if TOS is not an Fixp . Note Fixp is an item with tag bits = Fix. INTEGERP Set TOS to NIL if TOS is not an Integerp . Note IntegerP is an item with tag bits = Fix, or subtype = BignumP. FLOATP Set TOS to NIL if TOS is not a Floatp. POINTERP Set TOS to NIL if TOS is not a Pointerp. IMMEDIATEP Set TOS to NIL if TOS is not an ImmediateP. CONSP Set TOS to NIL if TOS is not a CONSP. Optimization of SUBTYPEP.N test. GETTYPEBITS Set TOS to the type bits of TOS (8 bits as a small nonnegative fixnum: 2 bits of type 4 of subtype, 2 bits of 0 ). GETPTRBITS Replace TOS with an integerp which has the value of the pointer bits of TOS. (i.e. clear the subtype bits of TOS and set the major type bits to integerp. If TOS is not a Pointerp then call the UFN. SUBTYPEBITSP.N Compare type bits (tag & subtype bits) of TOS with the alpha byte. Set TOS to NIL if no match. Call UFN if TOS is not a pointer. SETTYPE.N Set the type bits of TOS to the Fixnum value in the alpha byte. This sets only the major type bits (2 of them), and NOT the subtype bits of TOS. SETSUBTYPE Set the major, subtype bits of TOS-1. This sets the full 6 bits of the type bits to the Fixnum value at TOS. TYPEP (NEED HELP ON THIS ONE). Compare type of object at TOS-1 to see if it is EQ to the type symbol at TOS. The object's type index must be retrieved from the header word. The type index is used as an index into the type table, which contains a pointer to the type information. The symbol of the type is then compared to that of TOS. If they match then pop the operands and return T. Otherwise follow the supertype field of the type, and perform the test again. This continues until there is not a supertype, at which time the operands are popped and NIL is returned. UFNTYPEP Same as TypeP except UFN is called if a match is not found. Binary Ops: NOTE: The binary arighmetic operations operate on all types of Numbers (FixNums, Floats, etc), but only FixNums are to be performed in microcode unless otherwise noted. EQ Compare TOS with TOS-1. Pop TOS and place the result back onto the stack at the new TOS. EQL Perform an EQ. If EQ returns T then leave T at TOS, otherwise if both operands are NumberP with identical subtypes, then Ufn to determine the result, else return NIL. EQUAL Perform an EQ. If EQ returns T then leave T at TOS, otherwise if both operands are pointers, and neither is a SymbolP, then call the UFN routine, else return NIL. = If both operands are Fixnum or both are FloatP then perform an EQ, otherwise call the UFN to determine if arithmetic equal, or report an error if not NumberPs. GREATERP If both TOS and TOS-1 are fixnums then compute [TOS-1 greater than TOS], pop TOS , and place the result at the new TOS. Ufn if either TOS or TOS-1 are not fixnums. PLUS If both TOS & TOS-1 are fixnums, then compute [TOS-1 plus TOS]. If an overflow does not occur, then pop TOS , and place the result at the new TOS. If either TOS or TOS-1 are not fixnums or an overflow occurs then the UFN is called. PLUS.N If TOS is an fixnum, then compute [TOS + N] placing the result at TOS. If either TOS is not fixnum or an overflow occurs then the UFN is called. ADC If both TOS-2 & TOS-1 are fixnums, then if TOS is NIL compute [TOS-1 + TOS-2], else compute [TOS-1 + TOS-2 + 1]. Pop TOS , and place the result at the new TOS-1, and the carry (T or NIL) at the new TOS. Note that the overflow flag is ignored by this opcode. If either TOS-2 or TOS-1 are not fixnums then the UFN is called to determine if an addition is possible. DIFFERENCE If both TOS & TOS-1 are fixnums, then compute [TOS-1 minus TOS]. If an overflow does not occur, then pop TOS , and place the result at the new TOS. If either TOS or TOS-1 are not fixnums or an overflow occurs then the UFN is called. DIFFERENCE.N If TOS is an fixnum, then compute [TOS - N] placing the result at TOS. If either TOS is not fixnum or an overflow occurs then the UFN is called. SBC If both TOS-2 & TOS-1 are fixnums, then if TOS is NIL compute [TOS-1 - TOS-2 - 1], else compute [TOS-1 - TOS-2 ]. Pop TOS , and place the result at the new TOS-1, and the carry (T or NIL) at the new TOS. Note that the overflow flag is ignored by this opcode. If either TOS-2 or TOS-1 are not fixnums then the UFN is called to determine if a subtract is possible. TIMES If both TOS & TOS-1 are fixnums perform the multiplication, popping off the arguments and pushing the result. The UFN is called if the operands are illegal or an overflow occurs. / This must currently Ufn, which should return the quotient. TRUNCATE This must currently Ufn, which should return the integer quotient & remainder. LOGAND If both TOS & TOS-1 are fixnums, then compute [TOS-1 and TOS], pop TOS , and place the result at the new TOS. If either TOS or TOS-1 are not fixnums then the UFN is called. LOGOR If both TOS & TOS-1 are fixnums, then compute [TOS-1 or TOS], pop TOS , and place the result at the new TOS. If either TOS or TOS-1 are not fixnums occurs then the UFN is called. LOGXOR If both TOS & TOS-1 are fixnums, then compute [TOS-1 xor TOS], pop TOS , and place the result at the new TOS. If either TOS or TOS-1 are not fixnums occurs then the UFN is called. Unary Ops: NEG Negate the Fixnum at TOS. If TOS is not an Fixnum or an overflow occurs, then the UFN is called. LOGNOT Set TOS to the Logical NOT of the IntegerP at TOS. If TOS is not an Fixnum then the UFN is called. PRIORITY Set TOS to the bit position of the first one bit in TOS, starting with the most significant bit of the 32 bits of data, which is bit 31. Shift Operations: ASH If TOS and TOS-1 are Fixnums, and -32 < TOS < 32, then perform an Arithmetic Shift of TOS-1 by TOS, filling with 0's for a left shift and the sign bit on right shifts. The shift direction is determined by the sign of the shift amount, with a positive value being a left shift and a negative value a right shift. The sign bit of the shifted item is NOT affected by this operation as it is in the logical shift. If either operand is not an integer, or the shift amount is not -32 < shift amount < 32, or an overflow occurs, the UFN routine is called, otherwise the shift amount is popped from the stack and the result is left at the new TOS. LLSH.N If TOS is an Fixnum then Logical Left Shift TOS by N, filling with 0's on the right. If the operand is not an Fixnum the UFN routine is called. This is a logical shift, so no overflow is checked, and the sign bit is affected. LRSH.N If TOS is an Fixnum then Logical Right Shift of TOS by N, filling with 0's on the left into the sign bit. If the operand is not an Fixnum the UFN routine is called. NOTE: do we want a variable shift amount for the logical shifts? i.e. Shift Tos-1 by Tos instead or in addition to the .N shift amounts? BVM says no. No disagreements yet. What about record accessing functions which must pack & unpack packed fields? They could use the DLLSH.N opcode if we have variable shift amounts. DLLSH.N If TOS and TOS-1 are Fixnums then perform a logical left shift the 64 bit quantity of TOS & TOS-1 by N, filling with 0's on the right. TOS is the upper 32 bits & TOS-1 the lower. Returns the upper 32 bits of the resulting shift. If the operands are not Fixnums the UFN routine is called. This opcode may want the shift amount to come from the stack since it will be used in UFNs without probable variable shift amounts. Pointer manipulation & Memory Access: NOTE: These load & store opcodes only operate on the 34 data bits of the target memory cell and leave the upper 6 bits of the cell intact. (The RPLPTR opcode must of course manipulate the reference count bits of the referenced objects when appropriate). ADDBASE Add the Fixnum value at TOS to the pointer value at TOS-1 producing a new pointer as a result. The TOS operand is popped from the stack and the resulting pointer is placed at the new TOS. The type bits of the created pointer are those of the original type. If the TOS-1 operand is not a pointer or TOS is not an integer then the UFN routine is called. GETBASEPTR.N Add N to the pointer value at TOS producing a new pointer as a result. The old pointer is popped from the stack and the data pointed to by the new pointer is pushed back. If the TOS operand is not a pointer then the UFN routine is called. GETBASE.N Add N to the pointer value at TOS producing a new pointer as a result. The old pointer is popped from the stack and the data pointed to by the new pointer is pushed back; forcing the tag bits of the result to that of FixNum. If the TOS operand is not a pointer then the UFN routine is called. PUTBASEPTR.N Add N to the pointer value at TOS-1 producing a new pointer as a result. The data found at TOS is then stored at the location pointed to by the new pointer. The stored data is popped from the stack but the old pointer is left on the stack. No reference counts are affected by this opcode. If the pointer operand is not a pointer then the UFN routine is called. RPLPTR.N Add N to the pointer value at TOS-1 producing a new pointer (the result pointer) as a result. The data object located in the memory cell pointed to by the result pointer is read and saved for later reference count operations. The data value found at TOS is then stored into the referenced memory cell. The stored data is popped from the stack and saved for further reference count operations, but the old pointer is left on the stack. The two values saved for reference count operations are then reference counted by decrementing the reference count of the old data value, and incrementing the reference count of the new data value. If the pointer operand is not a pointer then the UFN routine is called, or if there is an overflow, underflow, or page fault from the reference count operations, the reference count UFN is called to finish the operation. SYMBOLCELL.N Add N to the symbol pointer at TOS producing a new pointer as a result. The data contained in the memory cell pointed to by the computed pointer [Tos + N] is returned as the result. If the TOS operand is not a SymbolP, then the UFN routine is called to report an error. Reference Counting INCREFCOUNT Retrieve the reference count bits pointed to by the pointer at TOS and increment them by one (mod 16). If the result is not zero, then store it, otherwise place NIL at TOS and let the code decide what to do about the overflow. DECREFCOUNT Retrieve the reference count bits pointed to by the pointer at TOS and decrement them by one (mod 16). If the current reference count, and the result are both not zero, then store the result, otherwise place NIL at TOS and let the code decide what to do about the underflow. CMPLREFCOUNT Complement the high-order bit in the reference count field of the word pointed at by (TOS). This is equivelent to adding (or subtracting) a reference count of 8. List Operators & CDR Coding CDR coding needs work, along with the associated opcodes. CONS A cell is created with the CDR field set to TOS and the CAR field set to TOS-1. Both operands must have their reference counts incremented. The operands are popped from the stack and a pointer to the created cell is pushed back. RPLCONS Create a new cons cell with TOS as the CAR and NIL as the CDR. Set the CDR of TOS-1 (which is a ConsP) to point the the new cons cell. The two operads are popped from the stack and a pointer to the new cons cell is pushed. Normal reference count operations must be performed. A UFN is called if TOS-1 is not a ConsP, or there are reference count overflows. CAR If TOS is NIL, then leave NIL on TOS, else fetch the CAR of the cell pointed to by TOS. TOS is replaced with the CAR value. The UFN is called when TOS is not a Listp. CDR If TOS is NIL, then leave NIL on TOS, else fetch the CDR of the cell pointed to by TOS. TOS is replaced with the CDR value. The UFN is called when TOS is not a Listp. SETF-CAR Replace the CAR field of TOS-1 with TOS, then pop TOS. If the reference count bit of TOS-1 is set then the reference count of the old CAR must be decremented, and the reference count of the new CAR object is incremented. The old TOS-1 is not changed. The UFN is called if TOS-1 is not a Listp. SETF-CDR Replace the CDR field of TOS-1 with TOS, then pop TOS. If the reference count bit of TOS-1 is set then the reference count of the old CDR must be decremented, and the reference count of the new CDR object is incremented. The old TOS-1 is not changed. The UFN is called if TOS-1 is not a Listp. GETCDRCODE Retrieve the CdrCode bits from TOS and place them at TOS as an InteterP. SETCDRCODE Set the CdrCode bits of TOS-1 from TOS and then pop TOS. If TOS is not an IntegerP then call the UFN. Jumps: Jumps need much work: Most of the Jump Opcodes are same page jumps. That is, you must jump to a location on the same page that you started. To cross page boundries you must use a JUMPABS or PAGEJUMPX opcode. NOP (0-4) Nop instructions can pretend to have up to 4 code stream argument bytes; the effect is a short forward jump of 0 to 4 bytes past the Nop instruction. JUMPK (5-15) Short forward jump. Jump offset is computed from the opcode minus the four least significant bits of the opcode. The jump offset is then added to the PC of the jump instruction plus 1, so the new address is: PC + 1 + offset. JUMPX Jump of up to +256 locations. The alpha byte is added to the PC of the next instruction following the jump instruction, to get the new PC, thus the new address is: PC + alpha + 2. JUMPXX Jump of up to 64K locations. The 2 bytes are added to the PC of the next instruction following the jump instruction to get the new PC, thus the new address is: PC + bytes + 2. JUMPABS Jump absolute to location indicated by the four data bytes in the code stream. This opcode allows across page jumps. PAGEJUMPX Jump of up to +256 locations. The alpha byte is added to the PC of the next instruction following the jump instruction, to get the new PC, thus the new address is: PC + alpha + 2. This opcode allows across page jumps. NJUMPX Negative jump of up to -256 locations. The alpha byte is subtracted from the PC of the next instruction following the jump instruction, to get the new PC, thus the new address is: PC - alpha + 2. NJUMPXX Negative jump of up to 64K locations. The 2 bytes are subtracted from the PC of the next instruction following the jump instruction to get the new PC, thus the new address is: PC - bytes + 2. FJUMPK (0-15) TOS is popped from the stack, and is compared to NIL. The jump is taken if TOS was NIL. The jump offset is computed in the same manner as for JUMPK. FJUMPX TOS is popped from the stack, and is compared to NIL. The jump is taken if TOS was NIL. The jump offset is computed in the same manner as for JUMPX. TJUMPK (0-15) TOS is popped from the stack, and is compared to NIL. The jump is taken if TOS was not NIL. The jump offset is computed in the same manner as for JUMPK(. TJUMPX TOS is popped from the stack, and is compared to NIL. The jump is taken if TOS was not NIL. The jump offset is computed in the same manner as for JUMPX. FJUMPN^X TOS is compared to NIL. The jump is taken if TOS was NIL. If the jump is not taken, then TOS is popped from the stack. The jump offset is computed as for JUMPX. TJUMPN^X TOS is compared to NIL. The jump is taken if TOS was not NIL. If the jump is not taken, then TOS is popped from the stack. The jump offset is computed as for JUMPX. Function Call & Return: When the definition cell of the symbol contains a CCodeP, then the function call proceeds as follows: First the new Stack Frame locations 0 through 7 are filled with NIL. Then up to 7 arguments are popped off the current stack and copied to the new stack frame with the 1st parameter going into slot 0, 2nd at slot 1, ... 7th at slot 6. The new binding stack pointer is set to the current binding stack. the current PC & Tos are saved, and the new Tos is set to 12. The PC is then set to the indicated entry address in the function header according to the number of parameters & the pc entry vector. The function then begins execution using the new stack frame. If the definition cell is a ClosureP, then the pointer to the closure is placed in variable slot 8 of the new frame, and a normal function call is made to the code object. If the definition cell is a MethodP, then a method lookup must be performed. (See Method Format for explination). If the symbol is not a CCodeP, ClosureP, or MethodP, then a UFN is called. The args to the undefined function along with the function name are passed to the UFN. TAILFN (0-7) Same as FN(0-7) except that the multiple value flag is set to the value of the caller's multiple value flag. REUSEFN (0-7) Same as FN(0-7) except that the multiple value flag is set to the value of the caller's multiple value flag, and the caller's frame is re-used. (It is not clear if both TAILFN & REUSEFN are needed). MVFN (0-7) Same as FN(0-7) except that the multiple value flag is set to indicate that multiple values are expected by the caller. (This opcode may not be needed if we can use APPLY instead). APPLYFN Call the function referenced at TOS with TOS-1 arguments (0 to 7). The n arguments for the function are from TOS-2 to TOS-(2+n-1), in exactly the same form they would be in from TOS to TOS-(n-1) if the function were being called with a FNn opcode. TOS-1 also contains three flags to indicate what type of APPLY is taking place: Normal, Tail, Reuse, or Multiple Value (as in the above fn(0-7) opcodes). We may want 4 different APPLY opcodes instead of using a flags from the # args. RETURN Return from a function. The CLINK is followed to find the previous stack frame (which is loaded if necessary). Execution continues at the PC indicated in the retrieved stack frame. This opcode will call the UFN routine when the slow return bit or the slow return to bit is set in the stack frame header. RETEI Return and enable interrupts, without pushing a result. Performs the same operation as the Return opcode except interrupts are enabled, and a result is not pushed onto the callers stack. Used by interrupt & trap routines where a result would invalidate the previous frame because the frame was not "called" by the normal function call mechanism, it was entered through an asynchronous event (such as an interrupt). Also used for ufns which do special "munching" of the previous stack frame. RETNP Return without pushing a result. Performs the same operation as the Return opcode except a result is not pushed onto the callers stack. Used by trap routines where a result would invalidate the previous frame because the frame was not "called" by the normal function call mechanism, it was entered through an asynchronous event (such as a page fault). MYCLINK Ensure that all previous frames are dumped out into memory, then push the CLINK of the current stack frame onto the stack. MYCLINK_^ Ensure that all previous frames are dumped out into memory, then set the CLINK of the current stack frame to the TOS value & pop. Array Accessing: What should these do?... ARRAYREAD TOS-2 is an pointer to a block of storage holding an array, TOS-1 is a type number indicating the size of the elements of the array, and TOS is an index in element units. Compute the address of the actual element being referenced, pop the three operands, and push the resulting element. UFN if the TOS index is not IntegerP or out of range. This may UFN on certain difficult cases. ARRAYWRITE TOS-3 is an pointer to a block of storage holding an array, TOS-2 is a type number indicating the size of the elements of the array, TOS-1 is an index in element units, and TOS is a value to store. Compute the address of the actual element being referenced & store the value. UFN if the TOS-1 index is not IntegerP or out of range, or if TOS is does not match the element type of the array. The value being stored is pushed back on the stack after the four operands are popped. This may UFN on certain difficult cases. ARRAYREF1 TOS-1 is a one dimensional ArrayP and TOS is an index. Compute the offset of the indicated array in element untis perform the array reference, popping the index & ArrayP and push the element referenced. UFN if the index is not IntegerP or the pointer is not a one dimensional ArrayP. This may UFN on certain difficult cases. ARRAYREF2 TOS-2 is a two dimensional ArrayP and TOS-1 & TOS are indexs. Compute the offset of the indicated array in element untis perform the array reference, popping the indexes & the ArrayP and push the element referenced. UFN if the indexes are not IntegerPs or the pointer is not a two dimensional ArrayP. This may UFN on certain difficult cases. ARRAYSET1 TOS-2 is a one dimensional ArrayP and TOS -1 is an index. Compute the offset of the indicated array in element untis perform the array reference and store TOS at the indicated array slot. Pop the index, ArrayP, & value from the stack; then push back the value stored. UFN if the index is not IntegerP or the pointer is not an ArrayP. This may UFN on certain difficult cases. ARRAYSET2 TOS-3 is a two dimensional ArrayP and TOS-2 & TOS-1 are indexs. Compute the offset of the indicated array in element untis perform the array reference and store TOS at the indicated array slot. Pop the indexes, ArrayP, & value from the stack; then push back the value stored. UFN if the indexes are not IntegerPs or the pointer is not an ArrayP. This may UFN on certain difficult cases. Special Purpose Instructions: SETPFLAGS.N Set the internal processor flags where 1 bits are in N. CLRPFLAGS.N Clear the internal processor flags where 1 bits are in N . TESTPFLAGS.N Test the internal processor flag where 1 bits are in N. SETFLAGS.N Set the frame flags (Multiple values, catch frame, etc) where 1 bits are in N. CLRFLAGS.N Clear the frame flags where 1 bits are in N . TESTFLAGS.N Test the frame flag where 1 bits are in N. IREGX Get Internal register X of the processor. This pushes the internal register (0-63), indicated by the alpha byte, of the "global" stack frame onto the current frame's stack.. IREGX_^ Set Internal register X of the processor. This stores TOS into the internal register (0-63), indicated by the alpha byte, of the "global" stack frame. WRITEOCT NIL.N Fill the 8 cells in the current stack frame beginning at N (where N must have bits 2 1 0 all 0) with NIL. WRITEOCTUNBOUND.N Fill the 8 cells in the current stack frame beginning at N (where N must have bits 2 1 0 all 0) with the constant Unbound. GETHIBYTE Return the 5th byte of the item at TOS as an IntegerP at TOS. SETHIBYTE Set the 5th byte of the item at TOS-1 to the integer value at TOS. UFN if TOS is not an IntegerP. Pop TOS operand off the stack. - X - / RAID On byte opcode which always Ufns. Can be used for RAID if we wish, or may want another opcode for RAID. CONDSTORE Conditional Store. Store the data at TOS into the memory location referenced by TOS-2, only if the current value in the memory location is EQ to the data at TOS-1. Always returns the data found in the referenced memory location. CLRTLB Clear the internal virtual memory TLB cache. Other Pending Opcodes: NARGS Returns the # arguments (0-7) which were passed to this function. NTHARG Returns the nth argument which was passed to this function. N is retrieved from TOS. This includes arguments which may reside in the argument overflow area. JUMPINX Jump to the PC contained in the table at IBufData (the 4 alpha bytes) plus the index at (TOS-1). TOS contains the maximum index allowed. or how about: Jump to the PC contained at TOS. Then GETBASE / ADDBASE etc could be used to do the indexing. CREATECELL How should this work? CONTEXTSWITCH Switch to the context indicated by the operand. This needs work. FINDKEY.N Search through the argument list starting at the nth argument, looking for the key indicated by TOS. Returns NIL if the item is not found, or the argument number of the if the argument is found. RESTLIST.N Create a list of the arguments starting at the nth argument. TOS-1 is a list to cons in front of, and TOS is the last argument number to cons. TOS and TOS-1 are popped and the constructed list is pushed onto the stack. This may UFN under certain conditions. SLOTACCESS.N Access slot N in the object pointed to by TOS. (This must go throuth the permutation vector & call a Ufn if the PV is not present or current). BLT Move TOS words from the cell(s) pointed to by TOS-2 to the cell(s) pointed to by TOS-1. This opcode must re-startable & interruptable. LINKFN (0-7) Call a function with 0-7 arguments. This is a linked funcion call, in which the 4 byte object in the code stream is the starting Pc for this function call (implies # arguments taken account of). It implies that the definition for the function cannot be changed (at least a change cannot be seen by any of the linked callers) unless someone keeps track of the linked calls. It may be possible to optionally have a SymbolP in the code stream and have the opcode replace the SymbolP with the Pc on the first call. Its use would be to provide a faster function call (could save 3 out of 8 cycles), or a non-changeable sysout (have all sysout funcion calls be linked). Anyone think this would be usefull. .0B(*B^(.l l.l l+ .+:lllP:lljlP:HllP:T<lP@ll h:lP.H....((CLASSIC  TIMESROMAN  TIMESROMAN MODERN?1(DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8)) CLASSIC CLASSICCLASSICCLASSICCLASSIC CLASSIC CLASSIC TERMINALTERMINAL GACHAGACHA CLASSIC CLASSICD6(TEXTFONT 5 (CLASSIC 14) (TIMESROMAN 10) (CLASSIC 10))  %I E SKIO.GETFN.2MODERN)7> Ma SKIO.GETFN.2MODERNL SKIO.GETFN.2MODERNf SKIO.GETFN.2MODERN: SKIO.GETFN.2MODERN72 SKIO.GETFN.2?1(DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8))  SKIO.GETFN.2MODERNj SKIO.GETFN.2MODERN SKIO.GETFN.2MODERN07 SKIO.GETFN.2MODERN"dDW& SKIO.GETFN.2MODERNEIA1>  SKIO.GETFN.2?1(DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8))  f) SKIO.GETFN.2?1(DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8)) D SKIO.GETFN.2MODERN)5>MD J   @       ^    =I 2\    * kZ D!    Ip  # "6          k        f        S    JK SKIO.GETFN.2MODERN Y SKIO.GETFN.2MODERN @ SKIO.GETFN.2MODERN4=, SKIO.GETFN.2MODERN 5 $xE   SKIO.GETFN.2MODERN*  K  4  R  3  w m  `   e  t   N      DG SKIO.GETFN.2MODERN# SKIO.GETFN.2MODERNdqUxz X v T Y dME j  hbw u7S    $      &      G    G       f    e      h                        v     x     I          E     @    I    c      `                             l     j       <                     -      "      $      y       (         T      r      '       )      ,       H      v                     p      :      ;               Y                                       r                  s             ;      N                         d     e                            .      +       %          h         *     o      a                              :           j               -      +    I     f                                v                                                              t            m         6        y  ;             3            h     {                          K     [     }              8     ;     8     O     .     +              l      ~     >          i          .          A             `          A                             Rz