Skip to content

Commit

Permalink
update symbol resolution on evaluation page
Browse files Browse the repository at this point in the history
  • Loading branch information
puredanger committed Jan 2, 2024
1 parent 282982b commit a3fa740
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions content/reference/evaluation.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,16 @@ Strings, numbers, characters, `true`, `false`, `nil` and keywords evaluate to th

A Symbol is _resolved_:

* If it is namespace-qualified, the value is the value of the binding of the global var named by the symbol. It is an error if there is no global var named by the symbol, or if the reference is to a non-public var in a different namespace.
* If it is package-qualified, the value is the Java class named by the symbol. It is an error if there is no Class named by the symbol.
* If it is namespace-qualified:
. If the symbol names a global public var, the value is the value of the binding of that var.
. Since Clojure 1.12, if the namespace is package-qualified or resolves to a class in the current namespace, and the symbol name is a static member, the value is a Clojure function that invokes the static member.
. Since Clojure 1.12, if the namespace starts with `.` and is a package-qualified class name, the value is a Clojure function that invokes an instance method.
. Else it is an error.
* If it is package-qualified, the value is the Java class named by the symbol. It is an error if there is no Class named by the symbol. Since Clojure 1.12, a class name or primitive name ending with one or more `pass:[*]`s resolves to an array class.
* Else, it is not qualified and the first of the following applies:
. If it names a special form it is considered a special form, and must be utilized accordingly.
. If in a local scope (e.g. in a function definition or a let form), a lookup is done to see if it names a local binding (e.g. a function argument or let-bound name). If so, the value is the value of the local binding.
. A lookup is done in the current namespace to see if there is a mapping from the symbol to a class. If so, the symbol is considered to name a Java class object. Note that class names normally denote class objects, but are treated specially in certain special forms, e.g. `.` and `new`.
. A lookup is done in the current namespace to see if there is a mapping from the symbol to a class. If so, the symbol is considered to name a Java class object. Note that class names normally denote class objects, but are treated specially in certain special forms, e.g. `.` and `new`. Since Clojure 1.12, a class name or primitive name ending with one or more `pass:[*]`s resolves to an array class.
. A lookup is done in the current namespace to see if there is a mapping from the symbol to a var. If so, the value is the value of the binding of the var referred-to by the symbol.
. It is an error.
Expand Down

0 comments on commit a3fa740

Please sign in to comment.