;;; -*- Mode:LISP; Package:USER; Readtable:CL; Base:10 -*-


;;;;; Master list of all the datatypes.
;;;;;     Codes 0 through 31 are the visible datatypes.
(defconstant $$datatype-assoc-list
	     '(( 0. . $$dtp-nil)
	       ( 1. . $$dtp-fixnum)
	       ( 2. . $$dtp-cons)
	       ( 3. . $$dtp-symbol)
	       ( 4. . $$dtp-bignum)
	       ( 5. . $$dtp-short-float)
	       ( 6. . $$dtp-float)
	       ( 7. . $$dtp-double-float)
	       ( 8. . $$dtp-rational)
	       ( 9. . $$dtp-complex)
	       (10. . $$dtp-locative)
	       (11. . $$dtp-unboxed-locative)
	       (12. . $$dtp-compiled-function)
	       (13. . $$dtp-code)
	       (14. . $$dtp-array)
	       (15. . $$dtp-stack-group)
	       (16. . $$dtp-instance)
	       (17. . $$dtp-lexical-closure)
	       (18. . $$dtp-interpreter-closure)
	       (19. . $$dtp-lexical-environment)
	     ; 20 spare - was once dtp-string
	       (21. . $$dtp-character)
	       (22. . $$dtp-extend)
	       (23. . $$dtp-encapsulation)
	     ; 24 spare	       
	     ; 25 spare	       
	     ; 26 spare	       
	     ; 27 spare	       
	     ; 28 spare	       
	     ; 29 spare	       
	     ; 30 spare	       
	     ; 31 spare	       

;;;;;      Codes 32 through 63 are the magic datatypes. (invisible, headers, unbound, etc
	       (32. . $$dtp-unboxed-header)
	       (33. . $$dtp-symbol-header)
	       (34. . $$dtp-array-header-single)
	       (35. . $$dtp-array-header-multiple)
	       (36. . $$dtp-array-header-extension)
	       (37. . $$dtp-external-value-cell-pointer)
	       (38. . $$dtp-gc-forward)
	       (39. . $$dtp-one-q-forward)
	       (40. . $$dtp-indexed-forward)
	       (41. . $$dtp-instance-header)
	       (42. . $$dtp-array-leader-header)
	       (43. . $$dtp-unbound)
	       (44. . $$dtp-header-forward)
	       (45. . $$dtp-body-forward)
	     ; 46 spare	       
	     ; 47 spare	       
	     ; 48 spare	       
	     ; 49 spare	       
	     ; 50 spare	       
	     ; 51 spare	       
	     ; 52 spare	       
	     ; 53 spare	       
	     ; 54 spare	       
	     ; 55 spare	       
	     ; 56 spare	       
	     ; 57 spare	       
	     ; 58 spare	       
	     ; 59 spare	       
	     ; 60 spare	       
	     ; 61 spare	       
	     ; 62 spare	       
	     ; 63 spare	       
 ))


;;; Generate defconstants for all the datatypes.
(defun generate-data-type-file ()
  (with-open-file (file "jb:k;data-types.lisp" :write)
    (format file ";;; -*- Mode:LISP; Package:Vinculum; Readtable:CL; Base:10 -*-")
    (format file "~%~%;;; Note - this file is generated automatically by jb:k;make-data-types.lisp")
    (format file "~%~%(export '(")
    (dolist (dt $$datatype-assoc-list)
      (format file "~%          ~(~A~)" (cdr dt)))
    (format file "~%            ))~%")
    (dolist (dt $$datatype-assoc-list)
      (format file "~%(defconstant ~(~A~) ~D)" (cdr dt) (car dt)))))