(DEFINE-FILE-INFO PACKAGE "XCL-USER" READTABLE "XCL")
(IL:FILECREATED "14-Aug-90 15:50:01" IL:|{DSK}<usr>local>lde>loops>src>SYSTEM>LOOPSDATATYPES.;3| 9356   

      IL:|changes| IL:|to:|  (IL:VARS IL:LOOPSDATATYPESCOMS)

      IL:|previous| IL:|date:| "13-Aug-90 16:01:37" 
IL:|{DSK}<usr>local>lde>loops>src>SYSTEM>LOOPSDATATYPES.;2|)


; Copyright (c) 1987, 1990 by Venue & Xerox Corporation.  All rights reserved.

(IL:PRETTYCOMPRINT IL:LOOPSDATATYPESCOMS)

(IL:RPAQQ IL:LOOPSDATATYPESCOMS
          (

(IL:* IL:|;;;| "Define the datatypes used in LOOPS")

           
           (IL:* IL:|;;| "These have to come very early in the loadup to set up the records before any fns that use them get loaded")

           (IL:DECLARE\: IL:EVAL@COMPILE IL:EVAL@LOAD IL:DOCOPY (IL:RECORDS IL:|annotatedValue| 
                                                                       IL:|class| IL:OBJECT 
                                                                       IL:|instance|)
                                                             (IL:* IL:\; "Can't hurt to call Make-Not-Reference-Counted more than once, so no need to wrap in in a (declare: donteval@load ...)")
                  (IL:P (IL:|Make-Not-Reference-Counted| 'IL:|class|)))
           (IL:MACROS IL:|Object?|)
           (IL:FUNCTIONS IL:|AnnotatedValue?| IL:|Class?| IL:|Instance?|)))



(IL:* IL:|;;;| "Define the datatypes used in LOOPS")




(IL:* IL:|;;| 
"These have to come very early in the loadup to set up the records before any fns that use them get loaded"
)

(IL:DECLARE\: IL:EVAL@COMPILE IL:EVAL@LOAD IL:DOCOPY 
(IL:DECLARE\: IL:EVAL@COMPILE

(IL:DATATYPE IL:|annotatedValue| (IL:|annotatedValue|)
                                     (IL:SYSTEM))

(IL:DATATYPE IL:|class| (IL:|metaClass| IL:|ivNames| IL:|ivDescrs| IL:|classUnitRec| 
                                   IL:|localIVs| IL:|cvNames| IL:|cvDescrs| IL:|className| 
                                   IL:|supers| IL:|subClasses| IL:|otherClassDescription| 
                                   IL:|selectors| IL:|methods| IL:|localSupers|)
                            (IL:SYSTEM))

(IL:BLOCKRECORD IL:OBJECT (IL:CLASS IL:VARNAMES IL:VARDESCRS)
                              (IL:ACCESSFNS ((IL:OBJUID (COND
                                                           ((IL:|type?| IL:|instance| IL:DATUM)
                                                            (IL:|fetch| IL:|instUnitRec|
                                                               IL:|of| IL:DATUM))
                                                           (T (IL:|fetch| IL:|classUnitRec|
                                                                 IL:|of| IL:DATUM)))
                                                    (COND
                                                       ((IL:|type?| IL:|instance| IL:DATUM)
                                                        (IL:|replace| IL:|instUnitRec|
                                                           IL:|of| IL:DATUM IL:|with| 
                                                                                      IL:NEWVALUE))
                                                       (T (IL:|replace| IL:|classUnitRec|
                                                             IL:|of| IL:DATUM IL:|with|
                                                                                  IL:NEWVALUE))))))
                              (IL:SYSTEM))

(IL:DATATYPE IL:|instance| (IL:|class| IL:|iNames| IL:|iDescrs| IL:|instMiscField|)
                               (IL:ACCESSFNS ((IL:|instIVProps| (CAR (IL:|fetch| 
                                                                            IL:|instMiscField|
                                                                        IL:|of| IL:DATUM))
                                                     (COND
                                                        ((NULL (IL:|fetch| IL:|instMiscField|
                                                                  IL:|of| IL:DATUM))
                                                         (CAR (IL:|replace| IL:|instMiscField|
                                                                 IL:|of| IL:DATUM
                                                                 IL:|with| (CONS IL:NEWVALUE
                                                                                     (CONS NIL NIL)))
                                                              ))
                                                        (T (CAR (RPLACA (IL:|fetch| 
                                                                               IL:|instMiscField|
                                                                           IL:|of| IL:DATUM)
                                                                       IL:NEWVALUE)))))
                                              (IL:|instUnitRec|
                                               (CADR (IL:|fetch| IL:|instMiscField| IL:|of|
                                                                                        IL:DATUM))
                                               (COND
                                                  ((NULL (IL:|fetch| IL:|instMiscField|
                                                            IL:|of| IL:DATUM))
                                                   (CADR (IL:|replace| IL:|instMiscField|
                                                            IL:|of| IL:DATUM
                                                            IL:|with| (CONS NIL (CONS IL:NEWVALUE
                                                                                          NIL)))))
                                                  (T (CAR (RPLACA (CDR (IL:|fetch| 
                                                                              IL:|instMiscField|
                                                                          IL:|of| IL:DATUM))
                                                                 IL:NEWVALUE)))))
                                              (IL:|otherIVs|
                                               (CDDR (IL:|fetch| IL:|instMiscField| IL:|of|
                                                                                        IL:DATUM))
                                               (COND
                                                  ((NULL (IL:|fetch| IL:|instMiscField|
                                                            IL:|of| IL:DATUM))
                                                   (CDDR (IL:|replace| IL:|instMiscField|
                                                            IL:|of| IL:DATUM
                                                            IL:|with| (CONS NIL (CONS NIL 
                                                                                          IL:NEWVALUE
                                                                                          )))))
                                                  (T (CDR (RPLACD (CDR (IL:|fetch| 
                                                                              IL:|instMiscField|
                                                                          IL:|of| IL:DATUM))
                                                                 IL:NEWVALUE)))))))
                               (IL:SYSTEM))
)

(IL:/DECLAREDATATYPE 'IL:|annotatedValue| '(IL:POINTER)
       '((IL:|annotatedValue| 0 IL:POINTER))
       '2)

(IL:/DECLAREDATATYPE 'IL:|class|
       '(IL:POINTER IL:POINTER IL:POINTER IL:POINTER IL:POINTER IL:POINTER IL:POINTER IL:POINTER 
               IL:POINTER IL:POINTER IL:POINTER IL:POINTER IL:POINTER IL:POINTER)
       '((IL:|class| 0 IL:POINTER)
         (IL:|class| 2 IL:POINTER)
         (IL:|class| 4 IL:POINTER)
         (IL:|class| 6 IL:POINTER)
         (IL:|class| 8 IL:POINTER)
         (IL:|class| 10 IL:POINTER)
         (IL:|class| 12 IL:POINTER)
         (IL:|class| 14 IL:POINTER)
         (IL:|class| 16 IL:POINTER)
         (IL:|class| 18 IL:POINTER)
         (IL:|class| 20 IL:POINTER)
         (IL:|class| 22 IL:POINTER)
         (IL:|class| 24 IL:POINTER)
         (IL:|class| 26 IL:POINTER))
       '28)

(IL:/DECLAREDATATYPE 'IL:|instance| '(IL:POINTER IL:POINTER IL:POINTER IL:POINTER)
       '((IL:|instance| 0 IL:POINTER)
         (IL:|instance| 2 IL:POINTER)
         (IL:|instance| 4 IL:POINTER)
         (IL:|instance| 6 IL:POINTER))
       '8)


(IL:|Make-Not-Reference-Counted| 'IL:|class|)
)
(IL:DECLARE\: IL:EVAL@COMPILE 

(IL:PUTPROPS IL:|Object?| IL:MACRO (IL:OPENLAMBDA (IL:|obj|)
                                                  (OR (IL:|type?| IL:|instance| IL:|obj|)
                                                      (IL:|type?| IL:|class| IL:|obj|))))
)

(DEFMACRO IL:|AnnotatedValue?| (IL:\x)
   `(IL:|type?| IL:|annotatedValue| ,IL:\x))

(DEFMACRO IL:|Class?| (IL:\x)
   `(IL:|type?| IL:|class| ,IL:\x))

(DEFMACRO IL:|Instance?| (IL:\x)
   `(IL:|type?| IL:|instance| ,IL:\x))
(IL:PUTPROPS IL:LOOPSDATATYPES IL:COPYRIGHT ("Venue & Xerox Corporation" 1987 1990))
(IL:DECLARE\: IL:DONTCOPY
  (IL:FILEMAP (NIL)))
IL:STOP
