Uploaded image for project: 'core.match'
  1. MATCH-126

Shadowing bindings does not work as expected

    Details

    • Type: Bug
    • Status: Open
    • Priority: Critical
    • Resolution: Unresolved
    • Labels:
      None

      Description

      This is a bug with core.match, or (far less likely) with the macro expansion in Clojure.

      This code:

      ```
      (let [foo [:bar :baz]]
      (match foo
      [:bar boo] boo
      :else :got-else))
      ```

      returns `:baz`. While this code:

      ```
      (let [foo [:bar :baz]]
      (match foo
      [:bar foo] foo
      :else :got-else))
      ```

      returns `:got-else`.

      They should be equal, since the `foo` in the match should shadow the `foo` in
      the let. In fact, when running `macroexpand-1` on these forms, they only differ in
      the gensym numbers and the letter `f` vs `b` in `foo` and `bar`.

      I have created a repo that reproduces the bug:

      https://github.com/magnars/bug-examples/tree/core-match-shadow-bindings

        Attachments

          Activity

            People

            • Assignee:
              dnolen David Nolen
              Reporter:
              alex+import import
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated: