Skip to content

Commit

Permalink
setters and getters may deal woth different types!
Browse files Browse the repository at this point in the history
  • Loading branch information
cgrand committed Oct 1, 2024
1 parent 19ba122 commit 7b6b417
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 3 deletions.
6 changes: 4 additions & 2 deletions clj/src/cljd/compiler.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -969,7 +969,9 @@
(update :parameters actual-parameters type-env)
(update :type-parameters (fn [ps] (map #(actual-type % type-env) ps))))
:field
(update member-info :type actual-type type-env)
(-> member-info
(update :type actual-type type-env)
(update :setter-type actual-type type-env))
:constructor
;; TODO: what about type-parameters
(-> member-info
Expand Down Expand Up @@ -1978,7 +1980,7 @@
(println "DYNAMIC WARNING: can't resolve member" member-name "on target type" (:element-name type! "dynamic") "of library" (:lib type! "dart:core") (source-info)))
(not= (:kind member-info) :field)
(throw (Exception. (str member-name " is not a field of " (:element-name type!) " " (source-info)))))
[dart-obj-bindings dart-obj member-name (or (:type member-info) dc-dynamic)]))
[dart-obj-bindings dart-obj member-name (or (:setter-type member-info) dc-dynamic)]))

(defn emit-set! [[_ target expr] env]
(let [target (macroexpand env target)]
Expand Down
3 changes: 2 additions & 1 deletion resources/analyzer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,8 @@ class TopLevelVisitor extends ThrowingElementVisitor<Map<String, dynamic>> {
':const': f.isConst,
':getter': f.getter != null,
':setter': f.setter != null,
':type': emitType(rootLib, f.type)
':type': emitType(rootLib, f.type),
':setter-type': f.setter != null ? emitType(rootLib, f.setter!.parameters.first.type) : null
};
}
return classData;
Expand Down

0 comments on commit 7b6b417

Please sign in to comment.