|
113 | 113 | tests thens)) |
114 | 114 | ~switch-type ~test-type ~skip-check?)) |
115 | 115 |
|
| 116 | +(defmethod -emit-form :new |
| 117 | + [{:keys [class args param-tags]} opts] |
| 118 | + (if param-tags |
| 119 | + (let [sym (symbol (class->str (:val class)) "new") |
| 120 | + sym (vary-meta sym assoc :param-tags param-tags)] |
| 121 | + `(~sym ~@(mapv #(-emit-form* % opts) args))) |
| 122 | + `(new ~(-emit-form* class opts) ~@(mapv #(-emit-form* % opts) args)))) |
| 123 | + |
116 | 124 | (defmethod -emit-form :static-field |
117 | | - [{:keys [class field]} opts] |
118 | | - (symbol (class->str class) (name field))) |
| 125 | + [{:keys [class field overloaded-field?]} opts] |
| 126 | + (if overloaded-field? |
| 127 | + `(. ~(class->sym class) ~(symbol (str "-" (name field)))) |
| 128 | + (list (symbol (class->str class) (name field))))) |
119 | 129 |
|
120 | 130 | (defmethod -emit-form :static-call |
121 | | - [{:keys [class method args]} opts] |
122 | | - `(~(symbol (class->str class) (name method)) |
123 | | - ~@(mapv #(-emit-form* % opts) args))) |
| 131 | + [{:keys [class method args param-tags]} opts] |
| 132 | + (let [sym (symbol (class->str class) (name method)) |
| 133 | + sym (if param-tags (vary-meta sym assoc :param-tags param-tags) sym)] |
| 134 | + `(~sym ~@(mapv #(-emit-form* % opts) args)))) |
124 | 135 |
|
125 | 136 | (defmethod -emit-form :instance-field |
126 | 137 | [{:keys [instance field]} opts] |
127 | 138 | `(~(symbol (str ".-" (name field))) ~(-emit-form* instance opts))) |
128 | 139 |
|
129 | 140 | (defmethod -emit-form :instance-call |
130 | | - [{:keys [instance method args]} opts] |
131 | | - `(~(symbol (str "." (name method))) ~(-emit-form* instance opts) |
132 | | - ~@(mapv #(-emit-form* % opts) args))) |
| 141 | + [{:keys [instance method args class param-tags]} opts] |
| 142 | + (if param-tags |
| 143 | + (let [sym (symbol (class->str class) (str "." (name method))) |
| 144 | + sym (vary-meta sym assoc :param-tags param-tags)] |
| 145 | + `(~sym ~(-emit-form* instance opts) ~@(mapv #(-emit-form* % opts) args))) |
| 146 | + `(~(symbol (str "." (name method))) ~(-emit-form* instance opts) |
| 147 | + ~@(mapv #(-emit-form* % opts) args)))) |
133 | 148 |
|
134 | 149 | (defmethod -emit-form :prim-invoke |
135 | 150 | [{:keys [fn args]} opts] |
|
147 | 162 | (list (-emit-form* keyword opts) |
148 | 163 | (-emit-form* target opts))) |
149 | 164 |
|
| 165 | +(defmethod -emit-form :method-value |
| 166 | + [{:keys [class method kind param-tags]} opts] |
| 167 | + (let [class-name (if (symbol? class) (name class) (.getName ^Class class)) |
| 168 | + sym (case kind |
| 169 | + :static (symbol class-name (str method)) |
| 170 | + :instance (symbol class-name (str "." method)) |
| 171 | + :ctor (symbol class-name "new"))] |
| 172 | + (if param-tags |
| 173 | + (vary-meta sym assoc :param-tags param-tags) |
| 174 | + sym))) |
| 175 | + |
150 | 176 | (defmethod -emit-form :instance? |
151 | 177 | [{:keys [class target]} opts] |
152 | 178 | `(instance? ~class ~(-emit-form* target opts))) |
|
0 commit comments