gdjn  Diff

Differences From Artifact [a791260fb2]:

To Artifact [4bd262c377]:


    20     20   	(defn recurse [acc dox t & r]
    21     21   		(cond
    22     22   			(string? t)
    23     23   				(recurse acc [;dox t] ;r)
    24     24   			(or (struct?  t)
    25     25   				(keyword? t))
    26     26   				(recurse [;acc t] dox ;r)
    27         -			[[;(if (empty? dox) []
           27  +			:else [[;(if (empty? dox) []
    28     28   				   [{:doc (string/join dox)}])
    29     29   			  ;acc] t ;r]))
    30     30   	(recurse [] [] ;args))
    31     31   
    32     32   (defmacro class [name & dfn]
    33     33   	(def def-map (tuple tuple (dyn *current-file*)
    34     34   	                   ;(tuple/sourcemap (dyn :macro-form))))
................................................................................
    67     67   	(def doc-str (string/join dox))
    68     68   	(def body spec)
    69     69   	(with-dyns [*class-path*
    70     70   				[;(or (dyn *class-path*) []) name]]
    71     71   	(with-syms [$local-env $parent-env $form]
    72     72   			~(let [,$parent-env (or @scope (curenv))
    73     73   				   ,$local-env (,table/setproto
    74         -						@{ '@name    ,(mapped-val (keyword name))
           74  +						@{ '@id      ,(mapped-val (keyword name))
    75     75   						   '@gd-id   ,(mapped-val (string export-name))
    76     76   						   '@inherit ,(mapped-val super)
    77     77   						   '@mode    ,(mapped-val mode)
    78     78   						   '@doc     ,(if (empty? dox) nil
    79     79   										  (mapped-val doc-str))}
    80     80   						,$parent-env)
    81     81   				  ,name ,$local-env]
................................................................................
    92     92   (defn- member [& x]
    93     93   	(string/join [;(or (dyn *class-path*) [])
    94     94   				  ;x] "."))
    95     95   
    96     96   (defmacro defclass* [id meta & r]
    97     97   	~(def ,id ,;meta (class ,id ,;r)))
    98     98   
    99         -(defmacro defclass  [id & r] ~(defclass* ,id [] ,;r))
   100         -(defmacro defclass- [id & r] ~(defclass* ,id [:private] ,;r))
           99  +(defmacro defclass  [id & r] ~(defclass* ,id [:subclass] ,;r))
          100  +(defmacro defclass- [id & r] ~(defclass* ,id [:subclass :private] ,;r))
   101    101   
   102    102   (defn- parse-sig [sig]
   103    103   	(match sig
   104    104   		([ty id dox & r] (string? dox))
   105    105   		 [{:type (eval ty) :id id :doc dox}
   106    106   		  ;(parse-sig r)]
   107         -		[ty id & r] [{:type (eval ty) :id id}
          107  +		[ty id & r] [{:type (eval ty) :id (tuple 'quote id)}
   108    108   					 ;(parse-sig r) ]
   109    109   		_ []))
   110    110   
   111    111   (defmacro defm [id & rest]
   112         -	(def (meta ret sig & body) (assemble-meta rest))
          112  +	(def (meta sig ret & body) (assemble-meta rest))
   113    113   	(def args (parse-sig sig))
   114         -	(def md [;meta :method {:sig args :ret (eval ret)}])
   115         -	(def arg-names ['me ;(map (fn [{:id id}] id) args)])
          114  +	(def md [;meta {:method {:sig args :ret (eval ret)}}])
          115  +	(def arg-names ['me ;(map (fn [{:id (_ id)}] id) args)])
   116    116   	(def path (symbol (member id)))
   117    117   	~(def ,id ,;md (fn ,path ,arg-names ,;body)))
   118    118   
   119    119   (defmacro defm- [id & r] ~(defm ,id :private ,;r))
   120    120   
   121    121   (defmacro prop [id & args]
   122    122   	(def (meta-list ty init-val)