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

(DEFVAR *WARN-ON-ERRORS* T
  "T to enable the WARN-ON-ERRORS feature while compiling. NIL means get an error.")

(DEFVAR *COMPILER-ENV* NIL)


(DEFUN SYMBOLCONC (&REST L)
  (INTERN (APPLY #'STRING-APPEND L)))

(DEFMACRO DEF-CL (PROPNAME DOC)
  (LET ((DN (SYMBOLCONC "DEF-" PROPNAME)))
    `(DEFMACRO ,DN (SYMBOL ARGLIST &BODY BODY)
       ,DOC
       (*def-cl ',dn symbol ',propname arglist body))))
       
(defun *def-cl (dn symbol key arglist body)
  (LET ((S (SYMBOLCONC SYMBOL "_" KEY "_CL")))
    `(PROGN (DEFUN ,S ,ARGLIST ,@BODY)
	    (*DEFCL ',dn ',SYMBOL ',KEY ',S))))


(DEFUN *DEFCL (dn SYMBOL KEY P)
  (WHEN (SI:RECORD-SOURCE-FILE-NAME SYMBOL dn)
    (putprop symbol p key)
    symbol))



(DEF-CL CL-TOPLEVEL-FORM "define a special handler for form a toplevel in a file")


