<!--
RSS generated by JIRA (4.4#649-r158309) at Tue May 21 18:34:02 CDT 2013

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
For example:
http://dev.clojure.org/jira/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?jqlQuery=project+%3D+MATCH+ORDER+BY+updated+DESC%2C+priority+DESC%2C+created+ASC&tempMax=1000&field=key&field=summary
-->
<!-- If you wish to do custom client-side styling of RSS, uncomment this:
<?xml-stylesheet href="http://dev.clojure.org/jira/styles/jiraxml2html.xsl" type="text/xsl"?>
-->
<rss version="0.92">
    <channel>
        <title>Clojure JIRA</title>
        <link>http://dev.clojure.org/jira/secure/IssueNavigator.jspa?reset=true&amp;jqlQuery=project+%3D+MATCH+ORDER+BY+updated+DESC%2C+priority+DESC%2C+created+ASC</link>
        <description>An XML representation of a search request</description>
                <language>en-us</language>
                        <issue start="0" end="69" total="69"/>
                <build-info>
            <version>4.4</version>
            <build-number>649</build-number>
            <build-date>25-07-2011</build-date>
        </build-info>
<item>
            <title>[MATCH-68] Vector match &quot;underflow&quot; =&gt; IndexOutOfBoundsException</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-68</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;This fails with &lt;tt&gt;0.2.0-alpha12&lt;/tt&gt;:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [[:x]]
  [[m n &amp;amp; _]] 1)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I expect nil, but an unguarded &lt;tt&gt;subvec&lt;/tt&gt; call throws an &lt;tt&gt;IndexOutOfBoundsException&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;A WIP patch is attached that fixes this (perhaps incorrectly) but which produced regressions (outside of core.match), e.g.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [[[:x &lt;span class=&quot;code-quote&quot;&gt;&quot;t&quot;&lt;/span&gt;]]]
 [[[:x &amp;amp; a] &amp;amp; tail]] :a
 [[[:y &amp;amp; p] [:x &amp;amp; a] &amp;amp; tail]] :b)
=&amp;gt; nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The patch also &quot;fixes&quot; this (by changing &lt;tt&gt;pattern-compare&lt;/tt&gt; behaviour for rest &lt;tt&gt;VectorPattern&lt;/tt&gt; s, but that leads to a regression in the &lt;tt&gt;vector-pattern-rest-2&lt;/tt&gt; testcase in core.match.&lt;/p&gt;

&lt;p&gt;(Original discussion with further background &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/cc2399f966489c6c?hl=en&quot;&gt;here&lt;/a&gt;.)&lt;/p&gt;</description>
                <environment></environment>
            <key id="16154">MATCH-68</key>
            <summary>Vector match &quot;underflow&quot; =&gt; IndexOutOfBoundsException</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Mon, 22 Apr 2013 12:40:00 -0500</created>
                <updated>Sat, 18 May 2013 15:11:12 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30989" author="glchapman" created="Wed, 24 Apr 2013 17:26:31 -0500"  >&lt;p&gt;FWIW, I&apos;ve been using the patch described &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-56&quot;&gt;here&lt;/a&gt;, and haven&apos;t yet run into any problems, though I also haven&apos;t used core.match that much. Anyway, with the change to subvec-inline, both of the cases here act as expected (producing nil and :a, respectively).&lt;/p&gt;

&lt;p&gt;(I note looking at my patch that I&apos;m doubly-evaluating ocr in the second overload; obviously that should be fixed with a let binding).&lt;/p&gt;</comment>
                    <comment id="31111" author="dnolen" created="Sat, 18 May 2013 15:11:12 -0500"  >&lt;p&gt;The patch looks like it&apos;s going in the right direction. Can you explain why your patch without the pattern-compares case causes the second example to fail?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11966" name="vector-rest-WIP.diff" size="2850" author="cemerick" created="Mon, 22 Apr 2013 12:40:00 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-57] Non deterministic match behavior for seqs when AOT</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-57</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The following source example:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/narkisr/match-issue/blob/master/src/match_issue/core.clj&quot;&gt;https://github.com/narkisr/match-issue/blob/master/src/match_issue/core.clj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The defrule macro calls a function called lhs that use the match library, &lt;/p&gt;

&lt;p&gt;this function calls it self recursively and print out the rest of body  left to be matched, &lt;/p&gt;

&lt;p&gt;When running lein compile two different results appear (in non deterministic fashion):&lt;/p&gt;

&lt;p&gt;(when $message :&amp;gt; Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
($message :&amp;gt; Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
(Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
((== level 6) :from (entry-point event-stream))&lt;/p&gt;

&lt;p&gt;This is the bug, as (== level 6) should be matched by:&lt;/p&gt;

&lt;p&gt;[([(&lt;span class=&quot;error&quot;&gt;&amp;#91;(o :when operator?) f s&amp;#93;&lt;/span&gt; :seq) :as c &amp;amp; r] :seq)]&lt;/p&gt;

&lt;p&gt;In other cases the output is (the correct one):&lt;/p&gt;

&lt;p&gt;(when $message :&amp;gt; Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
($message :&amp;gt; Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
(Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
((== level 6) :from (entry-point event-stream))&lt;br/&gt;
(:from (entry-point event-stream))&lt;br/&gt;
(entry-point event-stream)&lt;br/&gt;
()&lt;br/&gt;
()&lt;/p&gt;
</description>
                <environment>Clojure 1.3&lt;br/&gt;
&lt;br/&gt;
Leiningen 1.7.1 on Java 1.6.0_26&lt;br/&gt;
&lt;br/&gt;
core.match &amp;quot;0.2.0-alpha9&amp;quot;&lt;br/&gt;
</environment>
            <key id="15317">MATCH-57</key>
            <summary>Non deterministic match behavior for seqs when AOT</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="narkisr">Ronen Narkis</reporter>
                        <labels>
                    </labels>
                <created>Thu, 5 Apr 2012 19:47:42 -0500</created>
                <updated>Sat, 18 May 2013 14:29:42 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28083" author="dnolen" created="Fri, 6 Apr 2012 11:03:51 -0500"  >&lt;p&gt;All AOT related issues w/o patches are low priority for the foreseeable future. They are simply too time consuming to track down and I don&apos;t have the bandwidth at the moment. I will get to them eventually, but if you want movement on this please submit a patch. I will happily apply it!&lt;/p&gt;</comment>
                    <comment id="28087" author="narkisr" created="Sat, 7 Apr 2012 19:53:58 -0500"  >&lt;p&gt;Hey David, &lt;/p&gt;

&lt;p&gt;After going through the source code and some more in depth look I managed to understand what was going on, first iv stepped through the different stages&lt;/p&gt;


&lt;p&gt;(def m (emit-matrix &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;body&amp;#93;&lt;/span&gt; &lt;br/&gt;
    &apos;( [(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;when &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (lhs r)&lt;br/&gt;
       [(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;accumulate &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (&amp;lt;&amp;lt; &quot;accumulate(~(lhs r))&quot;)&lt;br/&gt;
       [(&lt;span class=&quot;error&quot;&gt;&amp;#91;bind &amp;#39;:&amp;gt; &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (&amp;lt;&amp;lt; &quot;~{bind}:~(lhs r)&quot;); pattern with bind&lt;br/&gt;
       [(&lt;span class=&quot;error&quot;&gt;&amp;#91;(t :when is-type?) &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (&amp;lt;&amp;lt; &quot;&lt;sub&gt;{t}&lt;/sub&gt;(lhs r)&quot;); pattern &lt;br/&gt;
       [([(&lt;span class=&quot;error&quot;&gt;&amp;#91;(f :when acc-fn?) &amp;amp; args&amp;#93;&lt;/span&gt; :seq) &amp;amp; r] :seq)] (&amp;lt;&amp;lt; &quot;,&lt;sub&gt;{f}&lt;/sub&gt;{args}~(lhs r)&quot; ); accumulate function&lt;br/&gt;
       [(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;:from dest &amp;amp; r&amp;#93;&lt;/span&gt; :seq)]  (&amp;lt;&amp;lt; &quot;from ~(lhs dest) ~(lhs r)&quot;)&lt;br/&gt;
       [(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;:over win &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (&amp;lt;&amp;lt; &quot;over ~(window win) ~(lhs r)&quot;)&lt;br/&gt;
       [([(&lt;span class=&quot;error&quot;&gt;&amp;#91;(o :when operator?) f s&amp;#93;&lt;/span&gt; :seq) :as c &amp;amp; r] :seq)] (&amp;lt;&amp;lt; &quot;(~(reduce str (map pr-str (to-infix c)))) ~(lhs r)&quot;)&lt;br/&gt;
         [(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;entry-point point &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (&amp;lt;&amp;lt; &quot;entry-point \&quot;~{point}\&quot;~(lhs r)&quot;)&lt;br/&gt;
         :else &quot;&quot;&lt;br/&gt;
         )))&lt;/p&gt;

&lt;p&gt;(def c (cm/compile m))&lt;/p&gt;

&lt;p&gt;(pprint c)&lt;/p&gt;

&lt;p&gt;(pprint (executable-form c))&lt;/p&gt;

&lt;p&gt;The last pprint failed aot compilation:&lt;/p&gt;

&lt;p&gt;$ lein compile&lt;/p&gt;

&lt;p&gt; ...&lt;br/&gt;
    Caused by: java.lang.ClassCastException: clojure.core.match.WildcardPattern cannot be cast to java.lang.String&lt;/p&gt;

&lt;p&gt;Which was very weird as I could clearly see that:&lt;/p&gt;

&lt;p&gt;(deftype WildcardPattern &lt;span class=&quot;error&quot;&gt;&amp;#91;sym _meta&amp;#93;&lt;/span&gt;&lt;br/&gt;
  IWildcardPattern&lt;br/&gt;
  (sym &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt; sym)&lt;br/&gt;
  clojure.lang.IObj&lt;br/&gt;
  (meta &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt; _meta)&lt;br/&gt;
  (withMeta &lt;span class=&quot;error&quot;&gt;&amp;#91;_ new-meta&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (WildcardPattern. sym new-meta))&lt;br/&gt;
  Object&lt;br/&gt;
  (toString &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (str sym)))&lt;/p&gt;

&lt;p&gt;Then iv also tried to enabled trace:&lt;/p&gt;

&lt;p&gt;(set-trace! true)&lt;/p&gt;


&lt;p&gt;Which resulted with:&lt;/p&gt;

&lt;p&gt;$ lein compile&lt;/p&gt;

&lt;p&gt;... &lt;/p&gt;

&lt;p&gt;TRACE: DAG: Column 0 : [#&amp;lt;SeqPattern &lt;a href=&quot;#&amp;lt;WildcardPattern t&amp;gt; #&amp;lt;WildcardPattern unit&amp;gt;&quot;&gt;#&amp;lt;LiteralPattern window&amp;gt; #&amp;lt;LiteralPattern :time&amp;gt; #&amp;lt;WildcardPattern t&amp;gt; #&amp;lt;WildcardPattern unit&amp;gt;&lt;/a&gt;&amp;gt;]&lt;br/&gt;
TRA	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6416)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6216)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6177)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5572)&lt;br/&gt;
	at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5008)&lt;br/&gt;
	at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3629)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6407)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6216)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6216)&lt;br/&gt;
	at clojure.lang.Compiler.access$100(Compiler.java:37)&lt;br/&gt;
	at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:492)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6216)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6177)&lt;br/&gt;
	at clojure.lang.Compiler.compile1(Compiler.java:6980)&lt;br/&gt;
	at clojure.lang.Compiler.compile(Compiler.java:7046)&lt;br/&gt;
	at clojure.lang.RT.compile(RTCE: DAG: Add switch-node on occurrence  exp&lt;/p&gt;


&lt;p&gt;The most weird thing was that on second compile it all went well, this raised a flag and my suspicion was that the core.match classes got compiled on the first run:&lt;/p&gt;

&lt;p&gt;$ ls classes/&lt;/p&gt;

&lt;p&gt;match$analyze_actions$analyze_action__1166.class&lt;br/&gt;
match$analyze_actions.class&lt;br/&gt;
match$backtrack_expr.class&lt;br/&gt;
match$bind_node.class&lt;br/&gt;
match$catch_error.class&lt;br/&gt;
match$check_matrix_args$check_pattern__1150.class&lt;br/&gt;
...&lt;/p&gt;

&lt;p&gt;Then iv decided to AOT compile clojure.core match:&lt;/p&gt;

&lt;p&gt;$ git checkout core.match-0.2.0-alpha9&lt;br/&gt;
$ git diff project.clj&lt;br/&gt;
-(defproject match &quot;0.2.0-alpha10-SNAPSHOT&quot;&lt;br/&gt;
+(defproject match &quot;0.2.0-alpha10-aot&quot;&lt;br/&gt;
   :description &quot;Optimized pattern matching and predicate dispatch for Clojure&quot;&lt;br/&gt;
   :source-path &quot;src/main/clojure&quot;&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;:test-path &quot;src/test/clojure&quot;)&lt;br/&gt;
+  :test-path &quot;src/test/clojure&quot;&lt;br/&gt;
+  :aot &lt;span class=&quot;error&quot;&gt;&amp;#91;clojure.core.match&amp;#93;&lt;/span&gt; &lt;br/&gt;
+  )&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;After using the aot jar it all went smooth including passing my non deterministic case (which is deterministic but very confusing to track down), &lt;/p&gt;

&lt;p&gt;In order to reproduce it its important to run:&lt;/p&gt;

&lt;p&gt;$ lein clean &lt;br/&gt;
$ rm -rf lib &lt;/p&gt;

&lt;p&gt;And only then run &lt;/p&gt;

&lt;p&gt;$ lein compile&lt;/p&gt;

&lt;p&gt;Otherwise the classes dir might contain AOT&apos;ed classes and make it seem that even non-aot jar works fine (its enough to run lein compile once to cause the classes to get compiled), &lt;/p&gt;

&lt;p&gt;The fix in my case is simple, just AOT ns. &lt;/p&gt;

&lt;p&gt;Im not sure if this Is a bug in the way Clojure AOT its classes but I think that adding the AOT&apos;ed classes to the default core match distro is a reasonable workaround &lt;/p&gt;

&lt;p&gt;BTW when using master (and not the tag) iv stumbled upon:&lt;/p&gt;

&lt;p&gt;  Exception in thread &quot;main&quot; java.lang.AssertionError: Assert failed: Unknown predicate in &lt;span class=&quot;error&quot;&gt;&amp;#91;is-type?&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Which is a pred defined in my ns.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-53] Match doesn&apos;t work when AOT compiled into a JAR, but manually macroexpanding and JAR&apos;ing works fine.</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-53</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Code here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/35fa11df7d7516abff50&quot;&gt;https://gist.github.com/35fa11df7d7516abff50&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Running lein uberjar on source containing the offending function, geo-&amp;gt;svg, results in a non-working application.&lt;br/&gt;
However, if match is manually macroexpanded in the repl and the results pasted in, then the JAR works just fine.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15247">MATCH-53</key>
            <summary>Match doesn&apos;t work when AOT compiled into a JAR, but manually macroexpanding and JAR&apos;ing works fine.</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="lynaghk">Kevin Lynagh</reporter>
                        <labels>
                    </labels>
                <created>Fri, 24 Feb 2012 14:21:34 -0600</created>
                <updated>Sat, 18 May 2013 14:25:39 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27847" author="lynaghk" created="Fri, 24 Feb 2012 14:27:53 -0600"  >&lt;p&gt;&quot;non-working&quot; meaning that the match always drops directly the :else clause.&lt;/p&gt;</comment>
                    <comment id="27860" author="lynaghk" created="Fri, 24 Feb 2012 18:09:08 -0600"  >&lt;p&gt;Updated code to minimal example. Problem persists with both Lein 1.7 and cake 0.6.3&lt;/p&gt;</comment>
                    <comment id="27876" author="dnolen" created="Sat, 25 Feb 2012 19:35:55 -0600"  >&lt;p&gt;AOT bugs are a bit tricky to track down. Not sure how soon I&apos;ll be able to really dive into this one.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-51] Fail to match empty vector </title>
                <link>http://dev.clojure.org/jira/browse/MATCH-51</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match (vector)
  ([(re :guard string?)] :seq) 4
  [] 6)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This should evaluate to 6 not nil. &lt;/p&gt;

</description>
                <environment></environment>
            <key id="15133">MATCH-51</key>
            <summary>Fail to match empty vector </summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jasonjckn">Jason Jackson</reporter>
                        <labels>
                    </labels>
                <created>Sat, 21 Jan 2012 09:29:51 -0600</created>
                <updated>Sat, 18 May 2013 14:24:24 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27598" author="jasonjckn" created="Sat, 21 Jan 2012 09:30:58 -0600"  >&lt;p&gt;tested on 0.2.0-alpha10-SNAPSHOT&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-54] Cannot AOT with certain match expression.</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-54</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;If you try to AOT this code, you get an exception.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn -main [&amp;amp; args]
  (println args)
  (let [x nil] 
    (match x
      [&lt;span class=&quot;code-quote&quot;&gt;&quot;=&quot;&lt;/span&gt; _ _] &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
      [[:invoke _] _] &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Stack Trace:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Compiling foo.core
Exception in thread &lt;span class=&quot;code-quote&quot;&gt;&quot;main&quot;&lt;/span&gt; java.lang.IndexOutOfBoundsException, compiling:(foo/core.clj:8)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6416)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6177)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$BodyExpr$Parser.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5572)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$LetExpr$Parser.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5873)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6409)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6397)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6177)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$BodyExpr$Parser.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5572)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$FnMethod.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5008)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$FnExpr.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:3629)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6407)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6397)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.access$100(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:37)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$DefExpr$Parser.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:492)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6409)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6177)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.compile1(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6980)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.compile(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:7046)
	at clojure.lang.RT.compile(RT.java:385)
	at clojure.lang.RT.load(RT.java:425)
	at clojure.lang.RT.load(RT.java:398)
	at clojure.core$load$fn__4610.invoke(core.clj:5386)
	at clojure.core$load.doInvoke(core.clj:5385)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$load_one.invoke(core.clj:5200)
	at clojure.core$compile$fn__4615.invoke(core.clj:5397)
	at clojure.core$compile.invoke(core.clj:5396)
	at user$eval27.invoke(NO_SOURCE_FILE:1)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6465)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6455)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6431)
	at clojure.core$eval.invoke(core.clj:2795)
	at clojure.main$eval_opt.invoke(main.clj:296)
	at clojure.main$initialize.invoke(main.clj:315)
	at clojure.main$null_opt.invoke(main.clj:348)
	at clojure.main$main.doInvoke(main.clj:426)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at clojure.lang.Var.invoke(Var.java:405)
	at clojure.lang.AFn.applyToHelper(AFn.java:163)
	at clojure.lang.Var.applyTo(Var.java:518)
	at clojure.main.main(main.java:37)
Caused by: java.lang.IndexOutOfBoundsException
	at clojure.lang.PersistentVector.arrayFor(PersistentVector.java:106)
	at clojure.lang.PersistentVector.nth(PersistentVector.java:110)
	at clojure.lang.RT.nth(RT.java:741)
	at clojure.core.match.PatternRow.invoke(match.clj:327)
	at clojure.core.match.PatternMatrix.pattern_at(match.clj:713)
	at clojure.core.match$useful_p_QMARK_.invoke(match.clj:778)
	at clojure.core.match.PatternMatrix$iter__832__838$fn__839$iter__834__840$fn__841$fn__842.invoke(match.clj:735)
	at clojure.core.match.PatternMatrix$iter__832__838$fn__839$iter__834__840$fn__841.invoke(match.clj:733)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core.match.PatternMatrix$iter__832__838$fn__839.invoke(match.clj:734)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:67)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$partition$fn__3913.invoke(core.clj:2777)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$map$fn__3811.invoke(core.clj:2424)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.Cons.next(Cons.java:39)
	at clojure.lang.PersistentVector.create(PersistentVector.java:50)
	at clojure.lang.LazilyPersistentVector.create(LazilyPersistentVector.java:31)
	at clojure.core$vec.invoke(core.clj:345)
	at clojure.core.match.PatternMatrix.useful_matrix(match.clj:733)
	at clojure.core.match.PatternMatrix.necessary_column(match.clj:725)
	at clojure.core.match.PatternMatrix$choose_column__815.invoke(match.clj:690)
	at clojure.core.match.PatternMatrix.compile(match.clj:708)
	at clojure.core.match$first_column_chosen_case$switch_clauses__780$fn__781.invoke(match.clj:613)
	at clojure.core$map$fn__3815.invoke(core.clj:2437)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$reduce.invoke(core.clj:5994)
	at clojure.core$into.invoke(core.clj:6004)
	at clojure.core.match$first_column_chosen_case$switch_clauses__780.invoke(match.clj:616)
	at clojure.core.match$first_column_chosen_case.invoke(match.clj:646)
	at clojure.core.match.PatternMatrix.compile(match.clj:710)
	at clojure.core.match$first_column_chosen_case$switch_clauses__780$fn__781.invoke(match.clj:613)
	at clojure.core$map$fn__3815.invoke(core.clj:2437)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$reduce.invoke(core.clj:5994)
	at clojure.core$into.invoke(core.clj:6004)
	at clojure.core.match$first_column_chosen_case$switch_clauses__780.invoke(match.clj:616)
	at clojure.core.match$first_column_chosen_case.invoke(match.clj:646)
	at clojure.core.match.PatternMatrix.compile(match.clj:710)
	at clojure.core.match$clj_form.invoke(match.clj:1616)
	at clojure.core.match$match.doInvoke(match.clj:1645)
	at clojure.lang.RestFn.invoke(RestFn.java:573)
	at clojure.lang.Var.invoke(Var.java:426)
	at clojure.lang.AFn.applyToHelper(AFn.java:193)
	at clojure.lang.Var.applyTo(Var.java:518)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.macroexpand1(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6320)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6395)
	... 46 more&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15261">MATCH-54</key>
            <summary>Cannot AOT with certain match expression.</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jasonjckn">Jason Jackson</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Mar 2012 16:42:23 -0600</created>
                <updated>Sat, 18 May 2013 14:22:38 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-59] Misleading comment in clojure.core.match.bits</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-59</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;I was looking at the code for clojure.core.match.bits, and there seems to be a reference to an example of parsing a dgram. The code looks to be broken or incomplete, or is it my understanding of it that is lacking?&lt;/p&gt;

&lt;p&gt;If it isn&apos;t done, are there any plans to finish it up?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15460">MATCH-59</key>
            <summary>Misleading comment in clojure.core.match.bits</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="tgk">Thomas Greve Kristensen</reporter>
                        <labels>
                    </labels>
                <created>Sat, 19 May 2012 08:22:21 -0500</created>
                <updated>Sat, 18 May 2013 14:21:34 -0500</updated>
                    <resolved>Sat, 18 May 2013 14:21:34 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31110" author="dnolen" created="Sat, 18 May 2013 14:21:34 -0500"  >&lt;p&gt;The bits and array namespaces are experimental I&apos;ve left a comment in both namespaces that states that.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://github.com/clojure/core.match/commit/511b786b9545f5c00a629fa27be0ee2a6b01e2ae&quot;&gt;http://github.com/clojure/core.match/commit/511b786b9545f5c00a629fa27be0ee2a6b01e2ae&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-66] Cannot match entire/single value</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-66</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;=&amp;gt; (match 3 x x)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: ocr-34984 in &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; context, compiling:(NO_SOURCE_PATH:1:1) 
=&amp;gt; (macroexpand &apos;(match 3 x x))
(let* [x ocr-35001] x)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(Discussed briefly &lt;a href=&quot;http://groups.google.com/group/clojure/msg/50ece364d68e4d74&quot;&gt;here&lt;/a&gt;.)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15948">MATCH-66</key>
            <summary>Cannot match entire/single value</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Sun, 6 Jan 2013 14:42:29 -0600</created>
                <updated>Sat, 18 May 2013 14:18:33 -0500</updated>
                    <resolved>Sat, 18 May 2013 14:18:33 -0500</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31109" author="dnolen" created="Sat, 18 May 2013 14:18:33 -0500"  >&lt;p&gt;fixed, &lt;a href=&quot;http://github.com/clojure/core.match/commit/02a833efb959e0518f264ded3b98ce4215b5622c&quot;&gt;http://github.com/clojure/core.match/commit/02a833efb959e0518f264ded3b98ce4215b5622c&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-69] AOT-compiling match expression produces stack overflow</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-69</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The offending match expression is pretty gnarly, will try to simplify and post it here later.  For now, a (partial) stack trace, eliding the repeating bits:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Caused by: java.lang.StackOverflowError
	at clojure.core$map$fn__4207.invoke(core.clj:2479)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.ChunkedCons.chunkedNext(ChunkedCons.java:59)
	at clojure.lang.ChunkedCons.next(ChunkedCons.java:43)
	at clojure.lang.PersistentVector.create(PersistentVector.java:51)
	at clojure.lang.LazilyPersistentVector.create(LazilyPersistentVector.java:31)
	at clojure.core$vec.invoke(core.clj:354)
	at clojure.core.match.PatternMatrix.column(match.clj:713)
	at clojure.core.match$useful_p_QMARK_.invoke(match.clj:811)
	at clojure.core.match.PatternMatrix$iter__1458__1464$fn__1465$iter__1460__1466$fn__1467$fn__1468.invoke(match.clj:765)
	at clojure.core.match.PatternMatrix$iter__1458__1464$fn__1465$iter__1460__1466$fn__1467.invoke(match.clj:763)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:484)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core.match.PatternMatrix$iter__1458__1464$fn__1465.invoke(match.clj:764)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:67)
	at clojure.lang.RT.seq(RT.java:484)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$partition$fn__4309.invoke(core.clj:2834)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:484)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$map$fn__4207.invoke(core.clj:2479)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.Cons.next(Cons.java:39)
	at clojure.lang.PersistentVector.create(PersistentVector.java:51)
	at clojure.lang.LazilyPersistentVector.create(LazilyPersistentVector.java:31)
	at clojure.core$vec.invoke(core.clj:354)
	at clojure.core.match.PatternMatrix.useful_matrix(match.clj:763)
	at clojure.core.match.PatternMatrix.necessary_column(match.clj:755)
	at clojure.core.match.PatternMatrix$choose_column__1441.invoke(match.clj:720)
	at clojure.core.match.PatternMatrix.compile(match.clj:738)
	at clojure.core.match$first_column_chosen_case$switch_clauses__1406$fn__1407.invoke(match.clj:643)
	at clojure.core$map$fn__4211.invoke(core.clj:2492)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:484)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core.protocols$seq_reduce.invoke(protocols.clj:30)
	at clojure.core.protocols$fn__6026.invoke(protocols.clj:54)
	at clojure.core.protocols$fn__5979$G__5974__5992.invoke(protocols.clj:13)
	at clojure.core$reduce.invoke(core.clj:6177)
	at clojure.core$into.invoke(core.clj:6229)
	at clojure.core.match$first_column_chosen_case$switch_clauses__1406.invoke(match.clj:646)
	at clojure.core.match$first_column_chosen_case.invoke(match.clj:676)
	at clojure.core.match.PatternMatrix.compile(match.clj:740)
	at clojure.core.match$first_column_chosen_case$switch_clauses__1406$fn__1407.invoke(match.clj:643)
	at clojure.core$map$fn__4211.invoke(core.clj:2492)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:484)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core.protocols$seq_reduce.invoke(protocols.clj:30)
	at clojure.core.protocols$fn__6026.invoke(protocols.clj:54)
	at clojure.core.protocols$fn__5979$G__5974__5992.invoke(protocols.clj:13)
	at clojure.core$reduce.invoke(core.clj:6177)
	at clojure.core$into.invoke(core.clj:6229)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="16157">MATCH-69</key>
            <summary>AOT-compiling match expression produces stack overflow</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Apr 2013 16:04:23 -0500</created>
                <updated>Wed, 24 Apr 2013 16:04:23 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-63] IllegalArgumentException when AOT compiling namespace using clojure.core.match since alpha10</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-63</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Getting this when AOT compiling a trivial project (attached) using alpha10: (works fine with alpha9)&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Caused by: java.lang.IllegalArgumentException: No method in multimethod &apos;to-source&apos; &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; dispatch value: class clojure.core.match.WildcardPattern
	at clojure.lang.MultiFn.getFn(MultiFn.java:121)
	at clojure.lang.MultiFn.invoke(MultiFn.java:167)
	at clojure.core.match$dag_clause_to_clj.invoke(match.clj:424)
	at clojure.lang.AFn.applyToHelper(AFn.java:167)
	at clojure.lang.AFn.applyTo(AFn.java:151)
	at clojure.core$apply.invoke(core.clj:602)
	at clojure.lang.AFn.applyToHelper(AFn.java:167)
	at clojure.lang.RestFn.applyTo(RestFn.java:132)
	at clojure.core$apply.invoke(core.clj:604)
	at clojure.core$partial$fn__3796.doInvoke(core.clj:2343)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$map$fn__3811.invoke(core.clj:2430)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$apply.invoke(core.clj:600)
	at clojure.core$mapcat.doInvoke(core.clj:2459)
	at clojure.lang.RestFn.invoke(RestFn.java:423)
	at clojure.core.match.SwitchNode.n_to_clj(match.clj:446)
	at clojure.core.match.BindNode.n_to_clj(match.clj:411)
	at clojure.core.match$executable_form.invoke(match.clj:1713)
	at clojure.core.match$clj_form.invoke(match.clj:1721)
	at clojure.core.match$match.doInvoke(match.clj:1750)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment>core.match 0.2.0-alpha10 and 0.2.0-alpha11-SNAPSHOT (git 7ad66cc)&lt;br/&gt;
clojure 1.3.0 and 1.4.0&lt;br/&gt;
</environment>
            <key id="15616">MATCH-63</key>
            <summary>IllegalArgumentException when AOT compiling namespace using clojure.core.match since alpha10</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="pmoriarty">Paudi Moriarty</reporter>
                        <labels>
                    </labels>
                <created>Wed, 8 Aug 2012 08:41:56 -0500</created>
                <updated>Tue, 26 Feb 2013 13:55:26 -0600</updated>
                                                                            <due></due>
                    <votes>3</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="29987" author="frederikdb" created="Tue, 20 Nov 2012 16:18:04 -0600"  >&lt;p&gt;I can confirm the same issue on alpha11.&lt;/p&gt;</comment>
                    <comment id="30024" author="dnolen" created="Fri, 23 Nov 2012 16:52:26 -0600"  >&lt;p&gt;I believe I may have found the cause and have fixed master - if someone can confirm I&apos;ll happily cut another release.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://github.com/clojure/core.match/commit/cbcc6e5fa070a7025e72f5eab4e83eaec100332b&quot;&gt;http://github.com/clojure/core.match/commit/cbcc6e5fa070a7025e72f5eab4e83eaec100332b&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30438" author="pmoriarty" created="Tue, 15 Jan 2013 09:42:58 -0600"  >&lt;p&gt;Thanks David, &lt;/p&gt;

&lt;p&gt;That change has &lt;b&gt;not&lt;/b&gt; fixed the issue for me.&lt;/p&gt;</comment>
                    <comment id="30439" author="pmoriarty" created="Tue, 15 Jan 2013 09:56:23 -0600"  >&lt;p&gt;So the pattern parameter being passed to dag-clause-to-clj:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn dag-clause-to-clj [occurrence pattern action]
  (let [test (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (instance? clojure.core.match.IPatternCompile pattern)
               (to-source* pattern occurrence)
               (to-source pattern occurrence))]
...&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;is a WildcardPattern which doesn&apos;t implement IPatternCompile and doesn&apos;t have a to-source method. So it seems it shouldn&apos;t be passed at all. Indeed, in normal usage it isn&apos;t.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;;; ## Wildcard Pattern
;; 
;; A wildcard pattern accepts any value.
;;
;; In practice, the DAG compilation eliminates any wildcard patterns.

(defprotocol IWildcardPattern
  (sym [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;]))

(deftype WildcardPattern [sym _meta]
  IWildcardPattern
  (sym [_] sym)
  clojure.lang.IObj
  (meta [_] _meta)
  (withMeta [_ &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;-meta]
    (WildcardPattern. sym &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;-meta))
  &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;
  (toString [_]
    (str sym)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="30440" author="dnolen" created="Tue, 15 Jan 2013 11:17:41 -0600"  >&lt;p&gt;Can you include an example pattern which works under normal circumstances but fails under AOT? This must meant that WildcardPatterns are making it through under AOT and getting to the multimethod case but not under incremental compilation at the REPL.&lt;/p&gt;</comment>
                    <comment id="30441" author="pmoriarty" created="Wed, 16 Jan 2013 09:34:59 -0600"  >&lt;p&gt;This seems to do it:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match {}
  {:a :x :b b} :dummy
  :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :dummy)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="30663" author="tolsen" created="Tue, 26 Feb 2013 13:55:26 -0600"  >&lt;p&gt;I&apos;ve seen this problem as well.  If I try to compile a second time, however, without running &lt;tt&gt;lein clean&lt;/tt&gt;, the compilation succeeds.  Maybe it&apos;s a bootstrapping problem?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11414" name="matchtest.zip" size="1043" author="pmoriarty" created="Wed, 8 Aug 2012 08:42:28 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-67] match broken on ClojureScript &gt;= 88b36c1</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-67</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The ClojureScript example in core.match&apos;s readme is failing at the moment, using core.match 0.2.0-alpha11:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(ns foo.bar
  (:use-macros [clojure.core.match.js :only [match]]))

(match [(mod 5 3) (mod 5 5)]
      [0 0] &lt;span class=&quot;code-quote&quot;&gt;&quot;FizzBuzz&quot;&lt;/span&gt;
      [0 _] &lt;span class=&quot;code-quote&quot;&gt;&quot;Fizz&quot;&lt;/span&gt;
      [_ 0] &lt;span class=&quot;code-quote&quot;&gt;&quot;Buzz&quot;&lt;/span&gt;
      :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; n)

ClojureScript:foo.bar&amp;gt; WARNING: Use of undeclared Var foo.bar/e__4345__auto__ at line 4 
clojure.lang.ExceptionInfo: Unsupported binding form: (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (clojure.core/identical? e__4345__auto__ 0) (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; (clojure.core/let [ocr-5230 (mod 5 5) ocr-5229 (mod 5 3)] (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (clojure.core/cond (clojure.core/= ocr-5230 0) (clojure.core/let [G__5226 ocr-5229] &lt;span class=&quot;code-quote&quot;&gt;&quot;Buzz&quot;&lt;/span&gt;) :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; 0)) (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; e__4345__auto__ (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (clojure.core/identical? e__4345__auto__ 0) (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; (clojure.core/let [G__5228 ocr-5230 G__5227 ocr-5229] n)) (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; e__4345__auto__)))))) (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; e__4345__auto__)) at line 4  {:tag :cljs/analysis-error, :file nil, :line 4}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The same error is produced with any usage of match in ClojureScript AFAICT, not just the README example.  However, all is well with core.match AFAICT under Clojure, and if you use older revs of ClojureScript, e.g. r1552.  I did a bisect, and found that this is the first ClojureScript commit with which the example does not work:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojurescript/commit/88b36c1&quot;&gt;https://github.com/clojure/clojurescript/commit/88b36c1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reverting it with master results in proper evaluation of the match, modulo the warning.&lt;/p&gt;

&lt;p&gt;I don&apos;t see any obvious reason why the above would cause any problems, and some moderate digging based on what I know about ClojureScript didn&apos;t yield any ah-ha! moments.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16014">MATCH-67</key>
            <summary>match broken on ClojureScript &gt;= 88b36c1</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Thu, 14 Feb 2013 15:40:04 -0600</created>
                <updated>Fri, 15 Feb 2013 19:51:49 -0600</updated>
                    <resolved>Fri, 15 Feb 2013 17:21:22 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30610" author="dnolen" created="Fri, 15 Feb 2013 17:21:22 -0600"  >&lt;p&gt;fixed &lt;a href=&quot;http://github.com/clojure/core.match/commit/3bab92b6620dccdcb9e55941af4599e3adf78a6e&quot;&gt;http://github.com/clojure/core.match/commit/3bab92b6620dccdcb9e55941af4599e3adf78a6e&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30611" author="cemerick" created="Fri, 15 Feb 2013 19:51:49 -0600"  >&lt;p&gt;Thanks for looking at this! &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-65] cata matching</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-65</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Dan Friedman&apos;s pattern matcher has a nice feature called cata-matching - allowing recursive matching from the match itself. Useful when writing compilers.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15851">MATCH-65</key>
            <summary>cata matching</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Nov 2012 16:54:30 -0600</created>
                <updated>Fri, 23 Nov 2012 16:54:30 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-64] Improve match compile times</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-64</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description></description>
                <environment></environment>
            <key id="15630">MATCH-64</key>
            <summary>Improve match compile times</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 15 Aug 2012 13:04:32 -0500</created>
                <updated>Wed, 15 Aug 2012 13:04:32 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-52] Pattern Map&apos;s aren&apos;t working</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-52</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Neither of these work as expected:&lt;/p&gt;

&lt;p&gt;(match [ {:type :consumed :value 4}]&lt;br/&gt;
  [({:uid uid :modifiers ms} :only &lt;span class=&quot;error&quot;&gt;&amp;#91;:uid :modifiers&amp;#93;&lt;/span&gt;)] :a0)&lt;/p&gt;

&lt;p&gt;(match [ {:type :consumed :value 4}]&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;{:uid uid :modifiers ms} &amp;#93;&lt;/span&gt; :a0)&lt;/p&gt;

&lt;p&gt;Tried these versions:&lt;br/&gt;
                 &quot;0.2.0-alpha10-SNAPSHOT&quot;&lt;br/&gt;
                 &quot;0.2.0-alpha9&quot;&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15221">MATCH-52</key>
            <summary>Pattern Map&apos;s aren&apos;t working</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jasonjckn">Jason Jackson</reporter>
                        <labels>
                    </labels>
                <created>Sun, 12 Feb 2012 23:04:44 -0600</created>
                <updated>Tue, 14 Aug 2012 21:11:34 -0500</updated>
                    <resolved>Tue, 14 Aug 2012 21:11:34 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27709" author="jasonjckn" created="Sun, 12 Feb 2012 23:33:30 -0600"  >&lt;p&gt;I tried to use :when to detect when key is not found. But this doesn&apos;t work either.&lt;br/&gt;
(match {:foo 3}&lt;br/&gt;
     {:uid (uid :when #(not (nil? %)))}  :a0)&lt;/p&gt;</comment>
                    <comment id="27720" author="dnolen" created="Tue, 14 Feb 2012 16:31:01 -0600"  >&lt;p&gt;Looks good, but can you create the patch so that it contains your credentials as well as test cases? Thanks!&lt;/p&gt;</comment>
                    <comment id="28495" author="jasonjckn" created="Sun, 13 May 2012 12:06:38 -0500"  >&lt;p&gt;added unit tests and attribution info. &lt;/p&gt;</comment>
                    <comment id="29128" author="lynaghk" created="Mon, 13 Aug 2012 23:18:07 -0500"  >&lt;p&gt;I&apos;ve manually applied this patch to the latest master and verified that it fixes the issue.&lt;br/&gt;
Patch attached and also available on the Github:&lt;/p&gt;

&lt;p&gt;    &lt;a href=&quot;https://github.com/lynaghk/core.match/tree/issue-52&quot;&gt;https://github.com/lynaghk/core.match/tree/issue-52&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;EDIT: spoke too soon; I can&apos;t seem to upload the patch to JIRA as a commenter. Available here: &lt;a href=&quot;https://github.com/lynaghk/core.match/compare/issue-52.patch&quot;&gt;https://github.com/lynaghk/core.match/compare/issue-52.patch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&apos;ve also added a commit on top to get ClojureScript support.&lt;br/&gt;
The implementation feels a bit gross to me (it inlines the clojure core.match val-at* function, basically) but a nicer solution isn&apos;t obvious to me given ClojureScript&apos;s macro/runtime divide.&lt;/p&gt;</comment>
                    <comment id="29154" author="lynaghk" created="Tue, 14 Aug 2012 21:05:58 -0500"  >&lt;p&gt;Updated Jason Jackson&apos;s patch with CLJS support.&lt;/p&gt;</comment>
                    <comment id="29155" author="dnolen" created="Tue, 14 Aug 2012 21:11:34 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;http://github.com/clojure/core.match/commit/7f73cee3f78417f1fb59bcbb4a8cda52de22efbd&quot;&gt;http://github.com/clojure/core.match/commit/7f73cee3f78417f1fb59bcbb4a8cda52de22efbd&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11215" name="0001-map-matching-always-checks-for-presence-of-key-even-.patch" size="4587" author="jasonjckn" created="Sun, 13 May 2012 12:06:38 -0500" />
                    <attachment id="11426" name="0001-Map-matching-should-always-check-for-presence-of-key.patch" size="4516" author="lynaghk" created="Tue, 14 Aug 2012 21:05:58 -0500" />
                    <attachment id="10906" name="patch" size="496" author="jasonjckn" created="Sun, 12 Feb 2012 23:48:59 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-62] ClojureScript map-matching should use cljs.core/ILookup, not cljs.core.ILookup</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-62</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The latter form is an implementation detail and doesn&apos;t work in the latest cljs compiler release.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15562">MATCH-62</key>
            <summary>ClojureScript map-matching should use cljs.core/ILookup, not cljs.core.ILookup</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="lynaghk">Kevin Lynagh</reporter>
                        <labels>
                    </labels>
                <created>Sat, 30 Jun 2012 11:35:20 -0500</created>
                <updated>Sun, 1 Jul 2012 11:05:07 -0500</updated>
                    <resolved>Sun, 1 Jul 2012 11:05:07 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28923" author="lynaghk" created="Sat, 30 Jun 2012 12:10:45 -0500"  >&lt;p&gt;Patch against master to use cljs.core/ILookup. Also available at &lt;a href=&quot;https://github.com/lynaghk/core.match/tree/62-cljs-protocol&quot;&gt;https://github.com/lynaghk/core.match/tree/62-cljs-protocol&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28927" author="dnolen" created="Sun, 1 Jul 2012 11:05:07 -0500"  >&lt;p&gt;fixed, &lt;a href=&quot;http://github.com/clojure/core.match/commit/241a3a3ab5344cc7c97fb3ab0b3783ce97b09f6d&quot;&gt;http://github.com/clojure/core.match/commit/241a3a3ab5344cc7c97fb3ab0b3783ce97b09f6d&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11357" name="cljs_lookup.patch" size="934" author="lynaghk" created="Sat, 30 Jun 2012 12:10:45 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-60] Matching maps with :only broken in CLJS</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-60</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The `.keySet` method call doesn&apos;t exist on JavaScript objects.&lt;br/&gt;
Master throws compile errors on me, so I&apos;ve attached a patch against alpha9 that removes the Java method call in favor of the pure Clojure `(set (keys m))`&lt;/p&gt;</description>
                <environment></environment>
            <key id="15545">MATCH-60</key>
            <summary>Matching maps with :only broken in CLJS</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="lynaghk">Kevin Lynagh</reporter>
                        <labels>
                    </labels>
                <created>Mon, 18 Jun 2012 10:19:16 -0500</created>
                <updated>Sun, 1 Jul 2012 11:03:45 -0500</updated>
                    <resolved>Sun, 1 Jul 2012 11:03:45 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28860" author="dnolen" created="Mon, 18 Jun 2012 10:49:30 -0500"  >&lt;p&gt;It would preferable to check the *&lt;b&gt;clojurescript&lt;/b&gt;* dynamic var and do different emission. Thanks!&lt;/p&gt;</comment>
                    <comment id="28922" author="lynaghk" created="Sat, 30 Jun 2012 11:34:06 -0500"  >&lt;p&gt;Updated patch against master that uses &lt;b&gt;clojurescript&lt;/b&gt; var. Also available at &lt;a href=&quot;https://github.com/lynaghk/core.match/tree/60-cljs-keyset&quot;&gt;https://github.com/lynaghk/core.match/tree/60-cljs-keyset&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28926" author="dnolen" created="Sun, 1 Jul 2012 11:03:45 -0500"  >&lt;p&gt;fixed, &lt;a href=&quot;http://github.com/clojure/core.match/commit/cdeea55f211f1dbe4768c8aec3149bfcb00438a2&quot;&gt;http://github.com/clojure/core.match/commit/cdeea55f211f1dbe4768c8aec3149bfcb00438a2&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11356" name="cljs_keyset.patch" size="1458" author="lynaghk" created="Sat, 30 Jun 2012 11:34:06 -0500" />
                    <attachment id="11334" name="cljs_keyset.patch" size="1254" author="lynaghk" created="Mon, 18 Jun 2012 10:19:16 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-61] Exception thrown when matching using :seq when there is a seq call in the tail of the occurrences</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-61</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;&amp;lt;iframe style=&quot;width: 648px; height: 400px; border: 0px;&quot; src=&quot;http://refheap.com/paste/3294/framed&quot; &amp;gt;&lt;/p&gt;

&lt;p&gt;I also tested with three occurrences. When there is a seq call in the second occurrence onward a RuntimeException is thrown. &lt;/p&gt;</description>
                <environment>with Clojure 1.3</environment>
            <key id="15550">MATCH-61</key>
            <summary>Exception thrown when matching using :seq when there is a seq call in the tail of the occurrences</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="etosch">Emma Tosch</reporter>
                        <labels>
                        <label>bug</label>
                        <label>seq</label>
                    </labels>
                <created>Fri, 22 Jun 2012 16:11:35 -0500</created>
                <updated>Fri, 22 Jun 2012 17:33:34 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28890" author="etosch" created="Fri, 22 Jun 2012 17:33:34 -0500"  >&lt;p&gt;&lt;a href=&quot;https://gist.github.com/626088b01817ac638fae&quot;&gt;https://gist.github.com/626088b01817ac638fae&lt;/a&gt;&lt;br/&gt;
Two expressions, macro-expanded. The only difference between the expressions is that the second occurrence in the second expression is seq&apos;ed. The second let is the one throwing the exception; it&apos;s the one with the binding&lt;/p&gt;

&lt;p&gt;(clojure.core/let [q_tail_&lt;em&gt;3472 q_tail&lt;/em&gt;_3472&lt;br/&gt;
                   q_head_&lt;em&gt;3471 q_head&lt;/em&gt;_3471&lt;br/&gt;
                   ocr-3470 (seq y)&lt;br/&gt;
                   z z]&lt;br/&gt;
...)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-58] we should test the presence of key with find, not get</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-58</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;If a user really doesn&apos;t care about the existence of a key they won&apos;t match on it. The current behavior is very confusing.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15319">MATCH-58</key>
            <summary>we should test the presence of key with find, not get</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sat, 7 Apr 2012 19:34:26 -0500</created>
                <updated>Sat, 7 Apr 2012 19:34:26 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-56] IndexOutOfBoundsException when matching empty vector</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-56</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Using the latest core.match:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (let [x []] (match &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; [&lt;span class=&quot;error&quot;&gt;&amp;#91;h &amp;amp; t&amp;#93;&lt;/span&gt;] &lt;span class=&quot;error&quot;&gt;&amp;#91;h t&amp;#93;&lt;/span&gt; :else :nomatch))&lt;br/&gt;
IndexOutOfBoundsException   clojure.lang.RT.subvec (RT.java:1451)&lt;/p&gt;

&lt;p&gt;Not sure if this is the best fix, but I resolved this specific case by slightly changing subvec-inline (see attached diff).&lt;/p&gt;</description>
                <environment>Clojure 1.3</environment>
            <key id="15298">MATCH-56</key>
            <summary>IndexOutOfBoundsException when matching empty vector</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="glchapman">Greg Chapman</reporter>
                        <labels>
                    </labels>
                <created>Tue, 27 Mar 2012 10:22:43 -0500</created>
                <updated>Tue, 27 Mar 2012 10:28:38 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28024" author="dnolen" created="Tue, 27 Mar 2012 10:28:38 -0500"  >&lt;p&gt;Thanks for the report. The patch is not going to work - we should be checking that the vector has at least one item.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11016" name="match.clj.diff" size="412" author="glchapman" created="Tue, 27 Mar 2012 10:22:43 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-55] Matching a sequence with just a rest pattern fails to compile</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-55</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;In 0.2.0-alpha9,&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [ [1 2] ] [([&amp;amp; _] :seq)] &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;fails to compile with &lt;tt&gt;No method in multimethod &apos;to-source&apos; for dispatch value: class clojure.core.match.RestPattern&lt;/tt&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15287">MATCH-55</key>
            <summary>Matching a sequence with just a rest pattern fails to compile</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Wed, 21 Mar 2012 15:37:19 -0500</created>
                <updated>Wed, 21 Mar 2012 15:37:19 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-48] Guards cannot be fn expressions</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-48</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Anonymous function literals as guards (such as (a :when #(odd? %))) seem to confuse the match compiler.  The attached test shows how.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15107">MATCH-48</key>
            <summary>Guards cannot be fn expressions</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="chrismgray">Chris Gray</reporter>
                        <labels>
                    </labels>
                <created>Tue, 10 Jan 2012 13:24:39 -0600</created>
                <updated>Sat, 25 Feb 2012 18:49:42 -0600</updated>
                    <resolved>Sat, 25 Feb 2012 18:49:42 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27526" author="dnolen" created="Tue, 10 Jan 2012 22:04:19 -0600"  >&lt;p&gt;I&apos;m on the fence about allowing inline fn expressions and fn literals as guards. The problem is that they can&apos;t be checked for equality and thus tests cannot be shared across guard patterns. I need to think about it some more but I don&apos;t consider this high priority in the near future. Any decision will have to take into consideration the goal of predicate dispatch.&lt;/p&gt;</comment>
                    <comment id="27532" author="chrismgray" created="Wed, 11 Jan 2012 12:41:31 -0600"  >&lt;p&gt;Sorry, I think the fact that the functions in my earlier example were function literals was a bit of a red herring.  The following test also fails.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(deftest guard-pattern-match-5
  (is (=
       (let [oddp odd?]
         (match [1 2]
                [a :when odd? b :when odd?] :a1
                [a :when oddp _] :a2
                [_ b :when even?] :a3
                :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a4))
       :a2)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27533" author="dnolen" created="Wed, 11 Jan 2012 12:44:32 -0600"  >&lt;p&gt;The earlier examples where not a red herring. This is likely a separate issue.&lt;/p&gt;</comment>
                    <comment id="27534" author="chrismgray" created="Wed, 11 Jan 2012 12:50:37 -0600"  >&lt;p&gt;I really don&apos;t see how, given that there seems to be no code that specializes on the type of function given to a guard.  My guess is that when guard-pattern-match-5 succeeds, guard-pattern-match-4 will succeed as well.  &lt;/p&gt;</comment>
                    <comment id="27535" author="dnolen" created="Wed, 11 Jan 2012 13:00:16 -0600"  >&lt;p&gt;Oh sorry you are right. This is exactly same problem. We can&apos;t know that odd? and oddp are the same. Again this is not something I&apos;m interested in fixing without a lot more consideration.&lt;/p&gt;

&lt;p&gt;Basically functions can&apos;t be tested for equality like types can. This means that the presence of a guard must create a backtrack point. However if we make guards work a little more like types (you have to declare them ahead of time) we lose a little bit of convenience but gain a lot of reasoning power and can share tests and avoid these pitfalls.&lt;/p&gt;

&lt;p&gt;This discussion probably needs a design page. &lt;/p&gt;</comment>
                    <comment id="27539" author="chrismgray" created="Wed, 11 Jan 2012 18:11:21 -0600"  >&lt;p&gt;Two more examples of the same problem, this time not using guards:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(deftest unequal-equal-tests
  (is (=
       (match [&lt;span class=&quot;code-quote&quot;&gt;&quot;foo&quot;&lt;/span&gt; &lt;span class=&quot;code-quote&quot;&gt;&quot;bar&quot;&lt;/span&gt;]
              [#&lt;span class=&quot;code-quote&quot;&gt;&quot;.*&quot;&lt;/span&gt; #&lt;span class=&quot;code-quote&quot;&gt;&quot;baz&quot;&lt;/span&gt;] :a1
              [#&lt;span class=&quot;code-quote&quot;&gt;&quot;foo&quot;&lt;/span&gt; _] :a2
              [_ &lt;span class=&quot;code-quote&quot;&gt;&quot;bar&quot;&lt;/span&gt;] :a3
              :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a4)
       :a2)))

(deftest unequal-equal-tests-2
  (is (=
       (let [a 1]
        (match [1 2]
               [(:or 1 2) 3] :a1
               [(:or 2 a) 2] :a2
               [1 _] :a3
               :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a4))
       :a2)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27541" author="dnolen" created="Wed, 11 Jan 2012 18:58:21 -0600"  >&lt;p&gt;They are not the same problem. These don&apos;t work for very different reasons. The first I probably won&apos;t even address and will leave for the community to deal with - I don&apos;t need robust pattern matching on regexes.&lt;/p&gt;

&lt;p&gt;The second example is a legitimate bug around matching locals which is unrelated to this ticket. Feel free to open a new one for it.&lt;/p&gt;</comment>
                    <comment id="27542" author="chrismgray" created="Wed, 11 Jan 2012 19:15:36 -0600"  >&lt;p&gt;Yes, you&apos;re right, the second is unrelated.&lt;/p&gt;</comment>
                    <comment id="27545" author="chrismgray" created="Thu, 12 Jan 2012 11:20:08 -0600"  >&lt;p&gt;On further reflection, what all these examples show is that Maranget&apos;s algorithm is only correct for literals whose equality you can test at compile time.  Thus, not even locals will work using his algorithm.  Regexes and functions will certainly not work correctly 100% of the time.&lt;/p&gt;

&lt;p&gt;What happens is that when multiple unequal tests in the same column can return a truthy value, you end up with a decision forest rather than a decision tree.  If the first decision tree in the forest has the first and third end-states, while the second tree has the second end-state, if you end up in the third end-state, you must still check the second decision tree before you decide which end-state is actually correct.&lt;/p&gt;

&lt;p&gt;This is a shame, since it means that compiling the matches becomes more complex.  On the other hand, it seems like a great subject for a paper at programming-language conference, so there&apos;s always that. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;On a serious note, though, this bug is major, and you should consider removing support for at least guards, locals, and regexes until it is fixed.  The bugs that arise from it in the end-user&apos;s code are really hard to track down &amp;#8211; it&apos;s as if `or` or `and` were broken 10% of the time. &lt;/p&gt;</comment>
                    <comment id="27546" author="dnolen" created="Thu, 12 Jan 2012 11:29:44 -0600"  >&lt;p&gt;There is nothing wrong with Maranget&apos;s algorithm. We just have to be sure that we create a backtrack point - that&apos;s all.&lt;/p&gt;

&lt;p&gt;Functions cannot be fixed because function equality is undecideable. So for guards we &lt;b&gt;might&lt;/b&gt; create a backtrack point. I&apos;ve already updated the README to describe what works at the moment. I have a branch which throws an error if :when is not given a vector of symbols or a symbol. It should probably be improved so that symbols are known top levels (no reassigning fns to locals).&lt;/p&gt;

&lt;p&gt;Regex equality can probably be made to work but I&apos;m not going to do it. (On further thought we can probably make patterns create backtrack points by default, can be overridden for those willing to make their patterns highly optimizeable)&lt;/p&gt;

&lt;p&gt;Locals can be fixed, we&apos;ll definitely create a backtrack point for these.&lt;/p&gt;</comment>
                    <comment id="27547" author="chrismgray" created="Thu, 12 Jan 2012 11:54:14 -0600"  >&lt;p&gt;I&apos;m sorry, but this problem will not be solved by backtracking alone.  At least not with the backtracking mechanism that currently exists. &lt;/p&gt;

&lt;p&gt;With backtracking, you are still treating the problem as though you have a decision tree.  A decision tree requires that all the tests at its nodes are mutually exclusive.&lt;/p&gt;

&lt;p&gt;By assuming that you have a decision tree, once a match is found in the tree, that match is returned.  As my last comment pointed out, that is not sufficient.  You must also check to see if there is a match in an end-state that was declared earlier.  I really don&apos;t see that that&apos;s possible given the current backtracking system.  &lt;/p&gt;</comment>
                    <comment id="27548" author="dnolen" created="Thu, 12 Jan 2012 13:26:19 -0600"  >&lt;p&gt;I don&apos;t follow you. Maranget&apos;s algorithm is not sufficient for pattern matching if we don&apos;t constrain columns to specific types. There are many things already in place to deal with the shortcomings of Maranget&apos;s approach given what we want to accomplish - for example, we actually have a grouping pass. This is the same approach that Racket uses as far as I can tell and they don&apos;t have any problems. Certainly none of the patterns you shown thus that far (besides fns exprs) pose any challenges that I can see.&lt;/p&gt;</comment>
                    <comment id="27549" author="chrismgray" created="Thu, 12 Jan 2012 13:42:07 -0600"  >&lt;p&gt;Sorry, I was editing my comment as you made yours.  I hope it is more clear now.&lt;/p&gt;

&lt;p&gt;I guess I don&apos;t totally understand your code still, so I will try to rectify that before commenting again.  From what I have seen, though, you are trying to build a decision tree.  What I am saying is that isn&apos;t possible at compile time, since you can&apos;t ensure that the nodes of the tree are mutually exclusive.&lt;/p&gt;</comment>
                    <comment id="27550" author="dnolen" created="Thu, 12 Jan 2012 13:51:48 -0600"  >&lt;p&gt;All known constructors are considered mutually exclusive. We group all constructors in a column preserving order as closely as possible. Decisions trees are created for these constructors. If we cannot know at compile time whether something is mutually exclusive (wildcards, locals), we create a backtrack point to handle them.&lt;/p&gt;

&lt;p&gt;Consider that if we only have backtrack points (no trees) all tests could potentially be tried. Our approach is a hybrid one - we don&apos;t rely only on decisions trees and we don&apos;t rely only on backtracking.&lt;/p&gt;

&lt;p&gt;When we get to integrating pattern matching on interfaces, protocols ambiguities of course become possibly. But even this can probably be handled reasonably with something like &quot;prefers&quot;.   &lt;/p&gt;</comment>
                    <comment id="27551" author="chrismgray" created="Thu, 12 Jan 2012 15:07:35 -0600"  >&lt;p&gt;Consider the following pair of decision trees:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;  1
 /
a
 \
  3*

  2*
 /
b--4*
 \
  5*
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Where the numbers are the order in which the terminals appear, and they have stars beside them if they match.  The correct terminal for core.match to return in this case is the second one.  Currently, the code would return the third terminal.  Suppose, however, that backtracking was added so that the tree rooted at b was checked for matches as well.  This is certainly possible, though a lot of information would need to be kept about the match already found (which is what I meant about things not working with the current backtracking system).  Also, you must ensure that the testing stops when you hit the second terminal, for two reasons &amp;#8211; first, not doing so would imply that all terminals are checked, and second, the test to distinguish 4 from 5 could throw an exception.  For similar reasons, the return value of the third terminal can&apos;t be computed &amp;#8211; it could be a very long computation, or it could throw an exception. &lt;/p&gt;</comment>
                    <comment id="27552" author="dnolen" created="Thu, 12 Jan 2012 15:28:29 -0600"  >&lt;p&gt;If the correct terminal is the second one, we will return the second one. No information needs to be kept around. I suggest you take a closer look at the code at this point.&lt;/p&gt;</comment>
                    <comment id="27553" author="chrismgray" created="Thu, 12 Jan 2012 18:58:24 -0600"  >&lt;p&gt;Aah, you&apos;re right.  (I think.)  Might it be more accurate to say that the situation I proposed can&apos;t happen?  That is, no two trees are created where there are lower-numbered terminals in the second tree than in the first tree?&lt;/p&gt;

&lt;p&gt;Is the plan to add backtrack points for everything where equality can&apos;t be determined at compile time? &lt;/p&gt;</comment>
                    <comment id="27554" author="chrismgray" created="Thu, 12 Jan 2012 23:27:20 -0600"  >&lt;p&gt;These patches implement the proper backtracking for tests that are not mutually exclusive.&lt;/p&gt;</comment>
                    <comment id="27558" author="dnolen" created="Fri, 13 Jan 2012 09:15:21 -0600"  >&lt;p&gt;Wow, this is great. I&apos;ve skimmed over the patches and they look pretty good. I will go over them more closely as soon as I can - there are a couple changes we should probably make. Thanks!&lt;/p&gt;</comment>
                    <comment id="27559" author="chrismgray" created="Fri, 13 Jan 2012 11:08:59 -0600"  >&lt;p&gt;No problem.  My apologies for the persistent misunderstanding. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="27721" author="dnolen" created="Tue, 14 Feb 2012 16:39:42 -0600"  >&lt;p&gt;Sorry for the epic delay. Here are my notes on that patches:&lt;/p&gt;

&lt;p&gt;1. Let&apos;s rename mutually-exclusive-inequality? to comparable?&lt;br/&gt;
2. I want GuardPatterns to comparable, I&apos;m not going to support arbitrary fns - not worth it IMO.&lt;br/&gt;
   As a compromise I&apos;d be willing to rename :when patterns -&amp;gt; PredicatePatterns and GuardPatterns&lt;br/&gt;
   can be allowed via :guard.&lt;br/&gt;
3. No need to declare OrPatterns as comparable - they aren&apos;t real patterns&lt;br/&gt;
4. No need to exclude VectorPatterns - the way that pattern matching works makes this unnecessary&lt;/p&gt;

&lt;p&gt;If you make these changes I promise to apply these in a timely manner &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; &lt;/p&gt;</comment>
                    <comment id="27723" author="chrismgray" created="Wed, 15 Feb 2012 12:50:45 -0600"  >&lt;p&gt;Okay, patch uploaded.  There is a fairly significant portion of it that is just cut and paste, which I&apos;m not so happy about, but I don&apos;t think there&apos;s a way to do type inheritance, so I did the easier thing.&lt;/p&gt;</comment>
                    <comment id="27875" author="dnolen" created="Sat, 25 Feb 2012 18:49:42 -0600"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/ac92c6df3f70f56fbe12f9d3f46585e66102c50b&quot;&gt;https://github.com/clojure/core.match/commit/ac92c6df3f70f56fbe12f9d3f46585e66102c50b&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;addressed &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-50&quot; title=&quot;locals pattern matching issue&quot;&gt;&lt;del&gt;MATCH-50&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10770" name="0001-Added-new-multimethod-mutually-exclusive-inequality.patch" size="2929" author="chrismgray" created="Thu, 12 Jan 2012 23:27:20 -0600" />
                    <attachment id="10764" name="0001-Failing-test.patch" size="1032" author="chrismgray" created="Tue, 10 Jan 2012 13:24:39 -0600" />
                    <attachment id="10769" name="0002-Use-the-new-multimethod-and-add-some-tests.patch" size="4606" author="chrismgray" created="Thu, 12 Jan 2012 23:27:20 -0600" />
                    <attachment id="10910" name="new-patches.diff" size="17722" author="chrismgray" created="Wed, 15 Feb 2012 12:47:35 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-50] locals pattern matching issue</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-50</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [a 1]
    (match [1 2]
      [1 3] :a0
      [a 2] :a1
      :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a2)) ;; :a2&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15113">MATCH-50</key>
            <summary>locals pattern matching issue</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 12 Jan 2012 08:39:17 -0600</created>
                <updated>Sat, 25 Feb 2012 18:49:00 -0600</updated>
                    <resolved>Sat, 25 Feb 2012 18:49:00 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27874" author="dnolen" created="Sat, 25 Feb 2012 18:49:00 -0600"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/ac92c6df3f70f56fbe12f9d3f46585e66102c50b&quot;&gt;https://github.com/clojure/core.match/commit/ac92c6df3f70f56fbe12f9d3f46585e66102c50b&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-49] Duplicate wildcard detection in pattern row doesn&apos;t account for locals</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-49</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description></description>
                <environment></environment>
            <key id="15112">MATCH-49</key>
            <summary>Duplicate wildcard detection in pattern row doesn&apos;t account for locals</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 12 Jan 2012 08:36:14 -0600</created>
                <updated>Thu, 12 Jan 2012 08:36:14 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-35] Bug in seq pattern matching</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-35</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [l &apos;(1 2 3)]
    (match [l]
      [([a &amp;amp; [b &amp;amp; [c d]]] :seq)] :a0
      :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a1))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Matches when it shouldn&apos;t.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14903">MATCH-35</key>
            <summary>Bug in seq pattern matching</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 27 Oct 2011 23:22:08 -0500</created>
                <updated>Wed, 11 Jan 2012 10:26:35 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27531" author="glchapman" created="Wed, 11 Jan 2012 10:24:59 -0600"  >&lt;p&gt;Another example of (I think) the same issue:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (let &lt;span class=&quot;error&quot;&gt;&amp;#91;x ()&amp;#93;&lt;/span&gt; (match &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; [(&lt;span class=&quot;error&quot;&gt;&amp;#91;h &amp;amp; t&amp;#93;&lt;/span&gt; :seq)] &lt;span class=&quot;error&quot;&gt;&amp;#91;h t&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt; :a1))&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;nil ()&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Perhaps SeqPattern&apos;s IPatternCompile should call seq in order to filter empty seqs? (e.g.:&lt;/p&gt;

&lt;p&gt;  (to-source* &lt;span class=&quot;error&quot;&gt;&amp;#91;this ocr&amp;#93;&lt;/span&gt;&lt;br/&gt;
    `(and (or (seq? ~ocr) (sequential? ~ocr)) (seq ~ocr)))&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-43] Vector pattern - unreachable clause</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-43</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;This is the simplest example I could come up with:&lt;/p&gt;

&lt;p&gt;(defn f &lt;span class=&quot;error&quot;&gt;&amp;#91;xs&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (match xs&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;:a&amp;#93;&lt;/span&gt; &quot;a&quot;&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;:b b&amp;#93;&lt;/span&gt; b&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;:c&amp;#93;&lt;/span&gt; &quot;c&quot;&lt;br/&gt;
         :else &quot;problem!&quot;))&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;:a&amp;#93;&lt;/span&gt; and &lt;span class=&quot;error&quot;&gt;&amp;#91;:b b&amp;#93;&lt;/span&gt; can be matched with no problems, but &lt;span class=&quot;error&quot;&gt;&amp;#91;:c&amp;#93;&lt;/span&gt; can&apos;t be matched for some reason:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (f &lt;span class=&quot;error&quot;&gt;&amp;#91;:a&amp;#93;&lt;/span&gt;)&lt;br/&gt;
&quot;a&quot;&lt;br/&gt;
user=&amp;gt; (f &lt;span class=&quot;error&quot;&gt;&amp;#91;:b 1&amp;#93;&lt;/span&gt;)&lt;br/&gt;
1&lt;br/&gt;
user=&amp;gt; (f &lt;span class=&quot;error&quot;&gt;&amp;#91;:c&amp;#93;&lt;/span&gt;)&lt;br/&gt;
&quot;problem!&quot;&lt;/p&gt;</description>
                <environment>Clojure 1.3, core.match 0.2.0-alpha8</environment>
            <key id="15062">MATCH-43</key>
            <summary>Vector pattern - unreachable clause</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="bitsai">Benny Tsai</reporter>
                        <labels>
                    </labels>
                <created>Sat, 10 Dec 2011 11:19:50 -0600</created>
                <updated>Tue, 27 Dec 2011 20:23:57 -0600</updated>
                    <resolved>Tue, 27 Dec 2011 20:23:57 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27457" author="dnolen" created="Mon, 12 Dec 2011 21:24:02 -0600"  >&lt;p&gt;This will have to wait for &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-31&quot;&gt;http://dev.clojure.org/jira/browse/MATCH-31&lt;/a&gt;. There are some deeper issues with vector pattern matching that need to get ironed out first.&lt;/p&gt;

&lt;p&gt;In the meantime just put your &lt;span class=&quot;error&quot;&gt;&amp;#91;:c&amp;#93;&lt;/span&gt; test above &lt;span class=&quot;error&quot;&gt;&amp;#91;:b b&amp;#93;&lt;/span&gt;. The key idea is to keep vector patterns of the same size &quot;together&quot;.&lt;/p&gt;</comment>
                    <comment id="27499" author="dnolen" created="Tue, 27 Dec 2011 20:23:57 -0600"  >&lt;p&gt;fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/b2ee29d701a9306c1c494d91c371c01a512aee0c&quot;&gt;https://github.com/clojure/core.match/commit/b2ee29d701a9306c1c494d91c371c01a512aee0c&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-47] vector patterns dispatch on count after dispatching on type</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-47</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The current behavior just creates complications.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15087">MATCH-47</key>
            <summary>vector patterns dispatch on count after dispatching on type</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="3" iconUrl="http://dev.clojure.org/jira/images/icons/status_inprogress.gif">In Progress</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Dec 2011 21:41:42 -0600</created>
                <updated>Fri, 23 Dec 2011 22:22:41 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-45] group types together</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-45</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Currently if patterns of the same type are not adjacent, matching fails unexpectedly. This should always work. This does beg the question about things which might possible match multiple clauses. When we get to predicate dispatch we may check for subsumption. However in some cases we might have something which is legitimately both things. We haven&apos;t decided yet how we&apos;ll handle that.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15083">MATCH-45</key>
            <summary>group types together</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 21 Dec 2011 22:46:56 -0600</created>
                <updated>Fri, 23 Dec 2011 22:09:30 -0600</updated>
                    <resolved>Fri, 23 Dec 2011 22:09:30 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27498" author="dnolen" created="Fri, 23 Dec 2011 22:09:30 -0600"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/29607a2105d8af90c5b8d9d4cde9191e63a2570c&quot;&gt;https://github.com/clojure/core.match/commit/29607a2105d8af90c5b8d9d4cde9191e63a2570c&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-46] :or leaks into the matches</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-46</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Macroexpanding an match expression with an :or pattern will show this.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15084">MATCH-46</key>
            <summary>:or leaks into the matches</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 22 Dec 2011 00:30:05 -0600</created>
                <updated>Thu, 22 Dec 2011 00:52:54 -0600</updated>
                    <resolved>Thu, 22 Dec 2011 00:52:54 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27487" author="dnolen" created="Thu, 22 Dec 2011 00:52:54 -0600"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/c1430c98937f31a0c8d2a92d793b0795b2c9a1d6&quot;&gt;https://github.com/clojure/core.match/commit/c1430c98937f31a0c8d2a92d793b0795b2c9a1d6&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-44] regroup-keywords should not use gensym</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-44</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;I contributed the regroup-keywords function to allow &apos;flattened&apos; match syntax for :when and :as.  It used gensym to make a marker to simplify the algorithm.  After seeing how other people had done similar things with sentinel values, I realized that (Object.) is a better unique value.  Theoretically, an evil user could use the same symbol that the gensym had created.  Also, it&apos;s better to test with identical? rather than = since the sentinel is unique.  I will attach a patch with a slight refactoring.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15064">MATCH-44</key>
            <summary>regroup-keywords should not use gensym</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Mon, 12 Dec 2011 09:54:52 -0600</created>
                <updated>Mon, 12 Dec 2011 21:30:07 -0600</updated>
                    <resolved>Mon, 12 Dec 2011 21:30:07 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27458" author="dnolen" created="Mon, 12 Dec 2011 21:30:07 -0600"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/6d0f3fe33c4a85a12366d447e82cab59e299f94a&quot;&gt;https://github.com/clojure/core.match/commit/6d0f3fe33c4a85a12366d447e82cab59e299f94a&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10742" name="0001-improved-regroup-keywords.patch" size="1708" author="steveminer@gmail.com" created="Mon, 12 Dec 2011 09:54:52 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-36] throw on unsuccessful match</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-36</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;I was on the fence about this. But after looking at the literature as well as the behavior of condp, I&apos;ve decided that throwing on unsuccessful match is the way to go. This is particularly important since we put no constraints on the types allowed - we cannot determine exhaustiveness.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14904">MATCH-36</key>
            <summary>throw on unsuccessful match</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 27 Oct 2011 23:52:02 -0500</created>
                <updated>Wed, 30 Nov 2011 20:46:39 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-31] vector patterns should work on seq</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-31</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;This means abandoning subvec and using nth + offsets.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14683">MATCH-31</key>
            <summary>vector patterns should work on seq</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="3" iconUrl="http://dev.clojure.org/jira/images/icons/status_inprogress.gif">In Progress</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 10 Oct 2011 22:35:40 -0500</created>
                <updated>Wed, 30 Nov 2011 20:46:21 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-41] This 5-clause match expression fails to compile</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-41</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;This expression fails to compile with a NullPointerException. Oddly enough I seem unable to make it any more minimal:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [[&lt;span class=&quot;code-quote&quot;&gt;&quot;foo&quot;&lt;/span&gt;]]
    [[&lt;span class=&quot;code-quote&quot;&gt;&quot;foo&quot;&lt;/span&gt;]] :a0
    [[&lt;span class=&quot;code-quote&quot;&gt;&quot;foo&quot;&lt;/span&gt; a]] :a1
    [[&lt;span class=&quot;code-quote&quot;&gt;&quot;baz&quot;&lt;/span&gt;]] :a2
    [[&lt;span class=&quot;code-quote&quot;&gt;&quot;baz&quot;&lt;/span&gt; a b]] :a3)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When I included the SNAPSHOT release in my project that seemed to fix it, but oddly enough I cloned the git repo this morning and it was still broken on HEAD, so I have no idea what&apos;s going on.&lt;/p&gt;</description>
                <environment>Ubuntu 10.10&lt;br/&gt;
&lt;br/&gt;
java version &amp;quot;1.6.0_20&amp;quot;&lt;br/&gt;
OpenJDK Runtime Environment (IcedTea6 1.9.10) (6b20-1.9.10-0ubuntu1~10.10.2)&lt;br/&gt;
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)</environment>
            <key id="15040">MATCH-41</key>
            <summary>This 5-clause match expression fails to compile</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="gfredericks">Gary Fredericks</reporter>
                        <labels>
                    </labels>
                <created>Wed, 30 Nov 2011 09:51:14 -0600</created>
                <updated>Wed, 30 Nov 2011 20:12:12 -0600</updated>
                    <resolved>Wed, 30 Nov 2011 20:12:12 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27383" author="dnolen" created="Wed, 30 Nov 2011 20:12:12 -0600"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/a790f7900da9152dcdf290ade34b8001c47869f1&quot;&gt;https://github.com/clojure/core.match/commit/a790f7900da9152dcdf290ade34b8001c47869f1&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-42] quoted symbols should be treated as literals</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-42</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Reported on the Clojure mailing list:&lt;/p&gt;

&lt;p&gt;From: 	Alex Miller &amp;lt;alex@puredanger.com&amp;gt;&lt;br/&gt;
Subject: 	Symbol matching in core.match&lt;br/&gt;
Date: 	November 30, 2011 2:49:43 PM EST&lt;br/&gt;
To: 	Clojure &amp;lt;clojure@googlegroups.com&amp;gt;&lt;br/&gt;
Reply-To: 	clojure@googlegroups.com&lt;/p&gt;

&lt;p&gt;I&apos;ve been working with core.match some this week and finding it pretty&lt;br/&gt;
nice.  However, I have a common case (for me) that is not well handled&lt;br/&gt;
right now via core.match: matching symbols. Say that I wrote a match&lt;br/&gt;
like this:&lt;/p&gt;

&lt;p&gt;;; translate (+ x (+ y z)) to (+ x y z)&lt;br/&gt;
(let &lt;span class=&quot;error&quot;&gt;&amp;#91;e &amp;#39;(+ 1 (+ 2 3))&amp;#93;&lt;/span&gt;&lt;br/&gt;
 (match &lt;span class=&quot;error&quot;&gt;&amp;#91;e&amp;#93;&lt;/span&gt;&lt;br/&gt;
      [([+ x (&lt;span class=&quot;error&quot;&gt;&amp;#91;+ y z&amp;#93;&lt;/span&gt; :seq)] :seq)] (+ x y z)))&lt;/p&gt;

&lt;p&gt;You will see this error:&lt;br/&gt;
Pattern row 1: Pattern row reuses wildcards in [([+ x ([+ y&lt;br/&gt;
z] :seq)] :seq)].  The following wildcards are ambiguous: +.  There&apos;s&lt;br/&gt;
no guarantee that the matched values will be same.  Rename the&lt;br/&gt;
occurrences uniquely.&lt;/p&gt;

&lt;p&gt;Any symbol inside a pattern row is treated as a bind variable.  + is a&lt;br/&gt;
symbol.  You can achieve this with guards:&lt;/p&gt;

&lt;p&gt;(defn +? &lt;span class=&quot;error&quot;&gt;&amp;#91;s&amp;#93;&lt;/span&gt; (= &apos;+ s))&lt;/p&gt;

&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;e &amp;#39;(+ 1 (+ 2 3))&amp;#93;&lt;/span&gt;&lt;br/&gt;
 (match &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;(+ 1 (+ 2 3))&amp;#93;&lt;/span&gt;&lt;br/&gt;
      [([(_o1 :when +?) x (&lt;span class=&quot;error&quot;&gt;&amp;#91;(_o2 :when +?) y z&amp;#93;&lt;/span&gt; :seq)] :seq)] (list&lt;br/&gt;
&apos;+ x y z)))&lt;/p&gt;

&lt;p&gt;but, yuck.  I can imagine using the reserved ()&apos;s with additional keys&lt;br/&gt;
(:symbol or :sym) to do symbol matching like (:symbol +) but also,&lt;br/&gt;
yuck.  The simplest idea I came up with was:&lt;/p&gt;

&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;e &amp;#39;(+ 1 (+ 2 3))&amp;#93;&lt;/span&gt;&lt;br/&gt;
 (match &lt;span class=&quot;error&quot;&gt;&amp;#91;e&amp;#93;&lt;/span&gt;&lt;br/&gt;
      [([&apos;+ x (&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;+ y z&amp;#93;&lt;/span&gt; :seq)] :seq)] (&apos;+ x y z)))&lt;/p&gt;

&lt;p&gt;These come through as (quote x) although the error reporting goes a&lt;br/&gt;
little off the rails:&lt;br/&gt;
Pattern row 1: Pattern row reuses wildcards in [([(quote +) x ([(quote&lt;br/&gt;
+) y z] :seq)] :seq)].  The following wildcards are ambiguous: quote.&lt;br/&gt;
There&apos;s no guarantee that the matched values will be same.  Rename the&lt;br/&gt;
occurrences uniquely.&lt;/p&gt;

&lt;p&gt;However, that seems fixable and you could then use (quote x) as a&lt;br/&gt;
signal to do symbol matching.  If I can figure out what the hell I&apos;m&lt;br/&gt;
doing in core.match then I&apos;d be happy to work on a patch.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15042">MATCH-42</key>
            <summary>quoted symbols should be treated as literals</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Wed, 30 Nov 2011 16:41:54 -0600</created>
                <updated>Wed, 30 Nov 2011 18:52:38 -0600</updated>
                    <resolved>Wed, 30 Nov 2011 18:52:38 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27378" author="steveminer@gmail.com" created="Wed, 30 Nov 2011 16:56:16 -0600"  >&lt;p&gt;Skip anything that&apos;s quoted when looking for duplicate symbol names.  Added a test for the reported case.&lt;/p&gt;</comment>
                    <comment id="27379" author="steveminer@gmail.com" created="Wed, 30 Nov 2011 16:57:36 -0600"  >&lt;p&gt;patch attached&lt;/p&gt;</comment>
                    <comment id="27380" author="dnolen" created="Wed, 30 Nov 2011 18:52:38 -0600"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/6721be4fba74561038539e12667bc04cc5fc94cc&quot;&gt;https://github.com/clojure/core.match/commit/6721be4fba74561038539e12667bc04cc5fc94cc&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10728" name="match-42-quoted-symbol.patch" size="2549" author="steveminer@gmail.com" created="Wed, 30 Nov 2011 16:56:16 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-39] Allow matching of map expressions to restrict the set of keys present in the value to a subset of a specified set of keys</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-39</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;It is useful, to be able to constrain a match on a map value to limit the set of keys present in the value, without enforcing that the keys are all present in the value.&lt;/p&gt;

&lt;p&gt;The current :only option, enforces a strict matching of keys.&lt;/p&gt;

&lt;p&gt;{{(let [x {:a 1} (match &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; [({:a _ :b _} :only &lt;span class=&quot;error&quot;&gt;&amp;#91;:a :b&amp;#93;&lt;/span&gt;)])}} =&amp;gt; doesn&apos;t match&lt;/p&gt;

&lt;p&gt;This came up trying to write a precondition on the argument of a function, which allowed optional keys, but wanted to restrict the overall set of keys.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15023">MATCH-39</key>
            <summary>Allow matching of map expressions to restrict the set of keys present in the value to a subset of a specified set of keys</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Mon, 21 Nov 2011 11:03:28 -0600</created>
                <updated>Mon, 21 Nov 2011 12:34:22 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27333" author="dnolen" created="Mon, 21 Nov 2011 12:22:37 -0600"  >&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match x
  ({:c 1} :has [:a :b]) :a0
  ...)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match x
  ({:c 1} :contains [:a :b]) :a0
  ...)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Seems reasonable.&lt;/p&gt;</comment>
                    <comment id="27334" author="dnolen" created="Mon, 21 Nov 2011 12:34:22 -0600"  >&lt;p&gt;Ah misunderstood. You want something like :allowed.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-40] Allow or&apos;ing of guard functions</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-40</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;In order to simplify composition of guard predicates which are alternatives, allow for passing a sequence of predicates whose values when called will be or&apos;d together.&lt;/p&gt;

&lt;p&gt;The :when keyword currently allows passing of a vector of predicates that are and&apos;d together.&lt;/p&gt;

&lt;p&gt;Either case (`and` or `or`) can be achieved externally to match via composition, and an alternative might be to force explicit composition outside of core.match.&lt;/p&gt;

&lt;p&gt;At the least, the documentation should mention that multiple predicates will be and&apos;d together.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15024">MATCH-40</key>
            <summary>Allow or&apos;ing of guard functions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Mon, 21 Nov 2011 11:11:42 -0600</created>
                <updated>Mon, 21 Nov 2011 11:11:42 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-38] interpose1 no longer needed</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-38</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;With the fix for &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-34&quot; title=&quot;remove infix or pattern syntax, use (:or x y z) instead&quot;&gt;&lt;del&gt;MATCH-34&lt;/del&gt;&lt;/a&gt;, the function interpose1 is no longer used and can be removed.  It was there only to support the old infix OR pattern.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14908">MATCH-38</key>
            <summary>interpose1 no longer needed</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Sat, 29 Oct 2011 06:35:21 -0500</created>
                <updated>Sat, 29 Oct 2011 12:50:34 -0500</updated>
                    <resolved>Sat, 29 Oct 2011 12:50:34 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27185" author="dnolen" created="Sat, 29 Oct 2011 12:50:34 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/314c665197bf6f74ed5e66518e93b48f5778ff60&quot;&gt;https://github.com/clojure/core.match/commit/314c665197bf6f74ed5e66518e93b48f5778ff60&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-37] remove match-1, match should support match-1 behavior</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-37</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;matching literal vectors is not something we support so there can be no ambiguity.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14905">MATCH-37</key>
            <summary>remove match-1, match should support match-1 behavior</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 28 Oct 2011 00:21:35 -0500</created>
                <updated>Fri, 28 Oct 2011 00:31:08 -0500</updated>
                    <resolved>Fri, 28 Oct 2011 00:31:08 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27175" author="dnolen" created="Fri, 28 Oct 2011 00:31:08 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/5edc28c6cd5315818ec2a852e931f5b7fe7dff35&quot;&gt;https://github.com/clojure/core.match/commit/5edc28c6cd5315818ec2a852e931f5b7fe7dff35&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-2] Matching Diagnostics</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-2</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Communicate to the user precisely what failed to match. Conversation here: &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/675456fba1712214&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/675456fba1712214&lt;/a&gt;. We adopt the behavior of condp since that is closer to what match does and will do (predicate dispatch)&lt;/p&gt;</description>
                <environment></environment>
            <key id="14601">MATCH-2</key>
            <summary>Matching Diagnostics</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 09:54:33 -0500</created>
                <updated>Thu, 27 Oct 2011 23:50:44 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26762" author="dnolen" created="Mon, 5 Sep 2011 10:40:09 -0500"  >&lt;p&gt;Continuing the conversation from GitHub - concerning your changes, we should probably show what &lt;b&gt;current&lt;/b&gt; occurrence failed to match as well as the breadcrumb.&lt;/p&gt;</comment>
                    <comment id="26873" author="dnolen" created="Mon, 26 Sep 2011 07:10:04 -0500"  >&lt;p&gt;Matching diagnostics will be complicated by &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-1&quot; title=&quot;Investigate non-overlapping pattern optimization via pre-allocated exception for backtracking &quot;&gt;&lt;del&gt;MATCH-1&lt;/del&gt;&lt;/a&gt;. Clojure doesn&apos;t yet support simple data conveying exceptions. Will probably have to use a combination of proxy and definterface.&lt;/p&gt;</comment>
                    <comment id="26879" author="ambrosebs" created="Fri, 30 Sep 2011 04:39:01 -0500"  >&lt;p&gt;I haven&apos;t yet kept up with your backtracking changes, and I just noticed this conversation, so I&apos;ll have to have another look at diagnostics with backtracking.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-4] Optimized pattern matching on deftype/record, POJOs</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-4</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [x]
  [({:a 0 :b 1} :type Foo)] :a0
  ...)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;:a and :b would be converted to field access, i.e. (.a x)&lt;/p&gt;

&lt;p&gt;As with primitive array matching, we should do an instance check followed by hinted field access.&lt;/p&gt;

&lt;p&gt;We should consider adopting the deftype/record syntax.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14603">MATCH-4</key>
            <summary>Optimized pattern matching on deftype/record, POJOs</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 09:56:54 -0500</created>
                <updated>Thu, 27 Oct 2011 23:42:15 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27171" author="dnolen" created="Thu, 27 Oct 2011 16:41:00 -0500"  >&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [x]
  [^Foo {.-bar 5 .-baz 7}] :a0
  [^Foo {.-bar _ .-woz 8}] :a1
  :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a2)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Given the recent ClojureScript property access discussions this seems like an acceptable syntax for high-performance property access.&lt;/p&gt;

&lt;p&gt;Maybe:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [^Foo x]
  [{.-bar 5 .-baz 7}] :a0
  [{.-bar _ .-woz 8}] :a1
  :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a2)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But probably not since then we should probably throw if someone tries to declare a different type in the row.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-10] map pattern keys should be allowed to be heterogenous types</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-10</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Right now they fail since heterogenous keys can&apos;t be sorted.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14609">MATCH-10</key>
            <summary>map pattern keys should be allowed to be heterogenous types</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 10:02:20 -0500</created>
                <updated>Thu, 27 Oct 2011 23:39:10 -0500</updated>
                    <resolved>Thu, 27 Oct 2011 23:39:10 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27174" author="dnolen" created="Thu, 27 Oct 2011 23:39:10 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/3a2e5598b6fc7ad52caa0869802d0ed80ba54124&quot;&gt;https://github.com/clojure/core.match/commit/3a2e5598b6fc7ad52caa0869802d0ed80ba54124&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-33] typo in README.md</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-33</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Re: &quot;As shown, :else clauses are special, in that they are not implicitely wrapped in [].&quot;&lt;/p&gt;

&lt;p&gt;&quot;implicitely&quot; is misspelled, but &quot;implicitly&quot; would be the wrong word anyway as the intended meaning seems to be &quot;explicitly&quot;.  It would be clearer just to leave out the adverb.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14800">MATCH-33</key>
            <summary>typo in README.md</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Thu, 20 Oct 2011 16:23:00 -0500</created>
                <updated>Thu, 27 Oct 2011 23:19:58 -0500</updated>
                    <resolved>Thu, 27 Oct 2011 23:19:58 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27173" author="dnolen" created="Thu, 27 Oct 2011 23:19:58 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/1399a77e7833abb3a41be538a6356bc3bd871152&quot;&gt;https://github.com/clojure/core.match/commit/1399a77e7833abb3a41be538a6356bc3bd871152&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-34] remove infix or pattern syntax, use (:or x y z) instead</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-34</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description></description>
                <environment></environment>
            <key id="14803">MATCH-34</key>
            <summary>remove infix or pattern syntax, use (:or x y z) instead</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 21 Oct 2011 19:08:13 -0500</created>
                <updated>Thu, 27 Oct 2011 23:17:49 -0500</updated>
                    <resolved>Thu, 27 Oct 2011 23:17:49 -0500</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27172" author="dnolen" created="Thu, 27 Oct 2011 23:17:49 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/0195f7211d44e15d40a35445b4882fcaf5bc9fb6&quot;&gt;https://github.com/clojure/core.match/commit/0195f7211d44e15d40a35445b4882fcaf5bc9fb6&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-7] Eliminate distinction between leaf-bind-expr and bind-expr</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-7</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;We should have a better considered binding model that works for all cases instead of treating leaf nodes and regular binding as different cases.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14606">MATCH-7</key>
            <summary>Eliminate distinction between leaf-bind-expr and bind-expr</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 10:00:02 -0500</created>
                <updated>Fri, 21 Oct 2011 18:55:52 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-32] Allow flattened pattern syntax at top-level to avoid nesting :when and :as</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-32</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;On the Clojure mailing list I wrote:&lt;/p&gt;

&lt;p&gt;For guards, I wonder if the extra parens are really necessary.  Couldn&apos;t the :when bind tightly to the previous pattern variable?  Like Clojure FOR comprehensions.  I think it would be easier to read that way.  Same comment applies to :as.  To cover the rare case of matching a literal :when or :as, you could quote it or use it as the first item in an OR pattern.&lt;/p&gt;

&lt;p&gt;On Oct 10, 2011, at 3:11 PM, David Nolen wrote:&lt;/p&gt;

&lt;p&gt;It would be nice to lose the extra parens - patch welcome &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14694">MATCH-32</key>
            <summary>Allow flattened pattern syntax at top-level to avoid nesting :when and :as</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Wed, 12 Oct 2011 10:28:44 -0500</created>
                <updated>Fri, 21 Oct 2011 18:53:52 -0500</updated>
                    <resolved>Fri, 21 Oct 2011 18:53:51 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26943" author="steveminer@gmail.com" created="Wed, 12 Oct 2011 10:35:56 -0500"  >&lt;p&gt;I attached a patch that groups the :when and :as terms appropriately given a &quot;flattened&quot; syntax.  That is, &lt;span class=&quot;error&quot;&gt;&amp;#91;a :when even?&amp;#93;&lt;/span&gt; becomes &lt;span class=&quot;error&quot;&gt;&amp;#91;(a :when even?)&amp;#93;&lt;/span&gt; before being processed as usual.  I only applied it to the top-level of the pattern row because I was concerned about recursive performance and things can get pretty complicated so maybe the magic isn&apos;t worth it.&lt;/p&gt;

&lt;p&gt;Only :when and :as at the top level get any special treatment.  No mangling for :seq or ::vector, etc.  No mangling of nested patterns.&lt;/p&gt;

&lt;p&gt;I also added a couple of tests for my changes.&lt;/p&gt;</comment>
                    <comment id="26977" author="steveminer@gmail.com" created="Fri, 14 Oct 2011 13:03:44 -0500"  >&lt;p&gt;I wrote an improved patch that should handle nested patterns as well.  Still only groups :when and :as, not :seq since that seems sort of special.&lt;/p&gt;</comment>
                    <comment id="26982" author="steveminer@gmail.com" created="Sat, 15 Oct 2011 07:59:41 -0500"  >&lt;p&gt;Better to use seq? instead of list?&lt;/p&gt;</comment>
                    <comment id="26985" author="dnolen" created="Sat, 15 Oct 2011 10:24:32 -0500"  >&lt;p&gt;At first glance this looks pretty neat! Will try to take a deeper look today. Thanks!&lt;/p&gt;</comment>
                    <comment id="26987" author="dnolen" created="Sat, 15 Oct 2011 10:47:15 -0500"  >&lt;p&gt;One issue I have with this syntax enhancement - how does one match :when or :as as literals?&lt;/p&gt;</comment>
                    <comment id="26991" author="steveminer@gmail.com" created="Sat, 15 Oct 2011 15:13:34 -0500"  >&lt;p&gt;The patch tries to group the :when or :as if that makes sense.  If it doesn&apos;t make sense &lt;span class=&quot;error&quot;&gt;&amp;#91;:when true nil&amp;#93;&lt;/span&gt;, it leaves it alone so that would match the literal.  In the rare case where it would be ambiguous, you would have to use a single OR pattern to get a literal match, such as &lt;span class=&quot;error&quot;&gt;&amp;#91;a (:when |) false&amp;#93;&lt;/span&gt;.  I put something like that in one of my new tests.&lt;/p&gt;</comment>
                    <comment id="26992" author="steveminer@gmail.com" created="Sat, 15 Oct 2011 15:18:29 -0500"  >&lt;p&gt;By the way, it might be nice to allow a single element list to match that single pattern.  That is, treat &lt;span class=&quot;error&quot;&gt;&amp;#91;(p)&amp;#93;&lt;/span&gt; the same as &lt;span class=&quot;error&quot;&gt;&amp;#91;p&amp;#93;&lt;/span&gt;.  Right now, it&apos;s considered an error.  It would also simply my patch, where I had to introduce interpose1 (as a variant of interpose) to handle an edge case with the OR pattern.&lt;/p&gt;</comment>
                    <comment id="27075" author="dnolen" created="Thu, 20 Oct 2011 13:54:50 -0500"  >&lt;p&gt;I&apos;m not a fan of (:when |). I&apos;d prefer it if the patch included support for always matching literal keywords that are written as &apos;:foo.&lt;/p&gt;</comment>
                    <comment id="27076" author="steveminer@gmail.com" created="Thu, 20 Oct 2011 15:04:32 -0500"  >&lt;p&gt;Revised patch to support &apos;:when (and quoted keywords in general) to match the literal keyword.  Updated against HEAD.&lt;/p&gt;</comment>
                    <comment id="27081" author="dnolen" created="Fri, 21 Oct 2011 18:53:52 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/d69abfaf68a86d5b9d73070e666720770779118f&quot;&gt;https://github.com/clojure/core.match/commit/d69abfaf68a86d5b9d73070e666720770779118f&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10394" name="flat2.patch" size="5058" author="steveminer@gmail.com" created="Fri, 14 Oct 2011 13:03:44 -0500" />
                    <attachment id="10396" name="flat3.patch" size="6113" author="steveminer@gmail.com" created="Sat, 15 Oct 2011 07:59:41 -0500" />
                    <attachment id="10492" name="flat4.patch" size="5694" author="steveminer@gmail.com" created="Thu, 20 Oct 2011 15:04:32 -0500" />
                    <attachment id="10381" name="flat.patch" size="4258" author="steveminer@gmail.com" created="Wed, 12 Oct 2011 10:28:45 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10012">Accepted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-30] throw if binding name reused in the same pattern row</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-30</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description></description>
                <environment></environment>
            <key id="14680">MATCH-30</key>
            <summary>throw if binding name reused in the same pattern row</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 10 Oct 2011 14:08:27 -0500</created>
                <updated>Wed, 19 Oct 2011 09:57:31 -0500</updated>
                    <resolved>Wed, 19 Oct 2011 09:57:29 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26993" author="steveminer@gmail.com" created="Sat, 15 Oct 2011 15:43:46 -0500"  >&lt;p&gt;Checks for duplicate wildcard names in a pattern row.&lt;/p&gt;</comment>
                    <comment id="26994" author="dnolen" created="Sat, 15 Oct 2011 16:05:22 -0500"  >&lt;p&gt;You should be able to reuse bindings as is done in the red black tree pattern as there is no ambiguity there. If we can get that enhancement in I&apos;ll gladly accept this. Thanks for taking this on!&lt;/p&gt;</comment>
                    <comment id="27005" author="steveminer@gmail.com" created="Sun, 16 Oct 2011 15:53:13 -0500"  >&lt;p&gt;The new patch allows OR patterns to reuse wildcards, but still complains if there are other ambiguities.  I added a couple of tests to illustrate.&lt;/p&gt;</comment>
                    <comment id="27008" author="dnolen" created="Mon, 17 Oct 2011 10:33:54 -0500"  >&lt;p&gt;This looks good. It looks like you created this patch before I added your match-let. Mind creating a new version of this patch against HEAD? Thanks much.&lt;/p&gt;</comment>
                    <comment id="27017" author="steveminer@gmail.com" created="Tue, 18 Oct 2011 14:47:18 -0500"  >&lt;p&gt;Updated patch for latest HEAD&lt;/p&gt;</comment>
                    <comment id="27019" author="dnolen" created="Tue, 18 Oct 2011 19:14:07 -0500"  >&lt;p&gt;I&apos;m trying to apply with patch with git am, but I keep getting:&lt;/p&gt;

&lt;p&gt;Applying: * src/main/clojure/clojure/core/match.clj: Add Stephen Miner&apos;s match-let&lt;br/&gt;
error: patch failed: src/main/clojure/clojure/core/match.clj:1532&lt;br/&gt;
error: src/main/clojure/clojure/core/match.clj: patch does not apply&lt;br/&gt;
Patch failed at 0001 * src/main/clojure/clojure/core/match.clj: Add Stephen Miner&apos;s match-let&lt;/p&gt;

&lt;p&gt;It looks like the previous commit of my pasting of your match-let patch is mixed up into your latest patch.&lt;/p&gt;</comment>
                    <comment id="27070" author="steveminer@gmail.com" created="Wed, 19 Oct 2011 07:22:30 -0500"  >&lt;p&gt;Sorry, I made a git mistake with dup3.patch.  I made a fresh patch called dup4.patch that should fix the problem.&lt;/p&gt;</comment>
                    <comment id="27071" author="dnolen" created="Wed, 19 Oct 2011 09:57:31 -0500"  >&lt;p&gt;Fixed &lt;a href=&quot;https://github.com/clojure/core.match/commit/819f7f7d874f63b74ba634a9bebc95da574d80eb&quot;&gt;https://github.com/clojure/core.match/commit/819f7f7d874f63b74ba634a9bebc95da574d80eb&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10404" name="dup2.patch" size="5084" author="steveminer@gmail.com" created="Sun, 16 Oct 2011 15:53:13 -0500" />
                    <attachment id="10410" name="dup3.patch" size="5259" author="steveminer@gmail.com" created="Tue, 18 Oct 2011 14:47:18 -0500" />
                    <attachment id="10490" name="dup4.patch" size="4697" author="steveminer@gmail.com" created="Wed, 19 Oct 2011 07:22:30 -0500" />
                    <attachment id="10402" name="dup.patch" size="4768" author="steveminer@gmail.com" created="Sat, 15 Oct 2011 15:43:46 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10012">Accepted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-29] match should not throw, return nil if no match found like cond</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-29</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description></description>
                <environment></environment>
            <key id="14675">MATCH-29</key>
            <summary>match should not throw, return nil if no match found like cond</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 9 Oct 2011 14:54:34 -0500</created>
                <updated>Mon, 10 Oct 2011 22:55:09 -0500</updated>
                    <resolved>Mon, 10 Oct 2011 22:55:09 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26928" author="dnolen" created="Mon, 10 Oct 2011 22:55:09 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/c9e47acfc7dd4364428cfe011476a3492787f050&quot;&gt;https://github.com/clojure/core.match/commit/c9e47acfc7dd4364428cfe011476a3492787f050&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-9] use case for dispatching on literals</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-9</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Would speed up literal matching considerably.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14608">MATCH-9</key>
            <summary>use case for dispatching on literals</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 10:01:28 -0500</created>
                <updated>Mon, 10 Oct 2011 22:45:51 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-28] clojure.core.match ns instead of clojure.core.match.core</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-28</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description></description>
                <environment></environment>
            <key id="14674">MATCH-28</key>
            <summary>clojure.core.match ns instead of clojure.core.match.core</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 9 Oct 2011 14:51:17 -0500</created>
                <updated>Mon, 10 Oct 2011 22:34:41 -0500</updated>
                    <resolved>Mon, 10 Oct 2011 22:34:41 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26927" author="dnolen" created="Mon, 10 Oct 2011 22:34:41 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/af647a77415f5a8c8cc3d1222873b55f91241dde&quot;&gt;https://github.com/clojure/core.match/commit/af647a77415f5a8c8cc3d1222873b55f91241dde&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-26] Bug in the way that constructor set for a column is computed</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-26</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [x &apos;(1 2) y 1]
  (match [x y]
    [([1] :seq) _] :a0
    [_ 1] :a1
    [([1 2] :seq) _] :a2
    [_ 2] :a3
    :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a4))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This returns :a2 when it should return :a1&lt;/p&gt;</description>
                <environment></environment>
            <key id="14669">MATCH-26</key>
            <summary>Bug in the way that constructor set for a column is computed</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 5 Oct 2011 23:42:24 -0500</created>
                <updated>Sun, 9 Oct 2011 14:22:53 -0500</updated>
                    <resolved>Sun, 9 Oct 2011 14:22:52 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26916" author="dnolen" created="Sun, 9 Oct 2011 14:22:52 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/efa880320fc235536690ba8af078a59c17f3321d&quot;&gt;https://github.com/clojure/core.match/commit/efa880320fc235536690ba8af078a59c17f3321d&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-27] match eats exceptions</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-27</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;user=&amp;gt; (match-1 :a :a (throw (Exception.)) :else :c)&lt;br/&gt;
:c&lt;/p&gt;

&lt;p&gt;I would expect the exception to flow through the match. Instead, it gets eaten and one is left wondering why the proper clause &quot;isn&apos;t matching&quot;.&lt;/p&gt;</description>
                <environment>match 0.2.0-alpha4, clojure 1.2.0</environment>
            <key id="14671">MATCH-27</key>
            <summary>match eats exceptions</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="mindslight">mindslight</reporter>
                        <labels>
                    </labels>
                <created>Thu, 6 Oct 2011 20:10:32 -0500</created>
                <updated>Thu, 6 Oct 2011 22:51:10 -0500</updated>
                    <resolved>Thu, 6 Oct 2011 22:51:10 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26903" author="dnolen" created="Thu, 6 Oct 2011 22:51:10 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/94f240dee09434ab87d2f901c647fdbd73792e89&quot;&gt;https://github.com/clojure/core.match/commit/94f240dee09434ab87d2f901c647fdbd73792e89&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-25] Map pattern :only case still not right</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-25</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [m {:a 1 :b 2}]
  (match [m]
    [({:a 1} :only [:a])] :a0
    :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a1))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We get :a0 instead of :a1&lt;/p&gt;</description>
                <environment></environment>
            <key id="14668">MATCH-25</key>
            <summary>Map pattern :only case still not right</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 5 Oct 2011 22:54:57 -0500</created>
                <updated>Thu, 6 Oct 2011 20:28:58 -0500</updated>
                    <resolved>Thu, 6 Oct 2011 20:28:58 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26901" author="dnolen" created="Thu, 6 Oct 2011 20:28:58 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/3407090009b447b594a7c361c8891f9b6e8f72bb&quot;&gt;https://github.com/clojure/core.match/commit/3407090009b447b594a7c361c8891f9b6e8f72bb&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-23] map pattern order bug</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-23</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;x {:a 1 :b 2 :c 10 :d 30}&amp;#93;&lt;/span&gt;&lt;br/&gt;
 (match &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt;&lt;br/&gt;
   [({:a _ :b _ :c _ :d _} :only &lt;span class=&quot;error&quot;&gt;&amp;#91;:a :b :c :d&amp;#93;&lt;/span&gt;)] :a-1&lt;br/&gt;
   [({:a _ :b 2} :only &lt;span class=&quot;error&quot;&gt;&amp;#91;:a :b&amp;#93;&lt;/span&gt;)] :a0&lt;br/&gt;
   &lt;span class=&quot;error&quot;&gt;&amp;#91;{:a 1 :c _}&amp;#93;&lt;/span&gt; :a1&lt;br/&gt;
   &lt;span class=&quot;error&quot;&gt;&amp;#91;{:c 3 :d _ :e 4}&amp;#93;&lt;/span&gt; :a2&lt;br/&gt;
   :else []))&lt;/p&gt;

&lt;p&gt;returns :a1 instead of :a-1&lt;/p&gt;</description>
                <environment></environment>
            <key id="14664">MATCH-23</key>
            <summary>map pattern order bug</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 3 Oct 2011 07:09:29 -0500</created>
                <updated>Wed, 5 Oct 2011 21:39:05 -0500</updated>
                    <resolved>Wed, 5 Oct 2011 21:39:04 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26896" author="dnolen" created="Wed, 5 Oct 2011 21:39:05 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/61e05362872d7f336e0c12c42765806a9e5b8fc4&quot;&gt;https://github.com/clojure/core.match/commit/61e05362872d7f336e0c12c42765806a9e5b8fc4&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-24] Setting *warn-on-reflection* affects all code using core.match</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-24</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Setting &lt;b&gt;warn-on-reflection&lt;/b&gt; affects all use of core.match.&lt;/p&gt;

&lt;p&gt;Please remove all cases where &lt;b&gt;warn-on-reflection&lt;/b&gt; is set. &lt;/p&gt;

&lt;p&gt;This can be set by the pom for the project, rather than in source, so it doesn&apos;t affect code using core.match.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14665">MATCH-24</key>
            <summary>Setting *warn-on-reflection* affects all code using core.match</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Mon, 3 Oct 2011 07:29:39 -0500</created>
                <updated>Mon, 3 Oct 2011 11:32:03 -0500</updated>
                    <resolved>Mon, 3 Oct 2011 07:38:04 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26891" author="dnolen" created="Mon, 3 Oct 2011 07:38:04 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/f75152edb697cff9bbe9070478b5bc0105f140ca&quot;&gt;https://github.com/clojure/core.match/commit/f75152edb697cff9bbe9070478b5bc0105f140ca&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do you have an example of setting it in the POM?&lt;/p&gt;</comment>
                    <comment id="26892" author="hugoduncan" created="Mon, 3 Oct 2011 11:32:02 -0500"  >&lt;p&gt;Thanks!&lt;/p&gt;

&lt;p&gt;I assume the clojure build is using clojure-maven-plugin, in which case it is just a matter of setting warnOnReflection. Something like this (untested):&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-xml&quot;&gt;&lt;span class=&quot;code-tag&quot;&gt;&amp;lt;build&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.theoryinpractise&lt;span class=&quot;code-tag&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;clojure-maven-plugin&lt;span class=&quot;code-tag&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;warnOnReflection&amp;gt;&lt;/span&gt;true&lt;span class=&quot;code-tag&quot;&gt;&amp;lt;/warnOnReflection&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
 &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;
&lt;span class=&quot;code-tag&quot;&gt;&amp;lt;/build&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-19] Analyze action bodies for the presence of recur, if recur is present do not use backtracking</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-19</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;A post about matchure on the ML reminded about my original line of thinking. We should not use the backtracking solution if we detect the presence of recur in any of the action bodies. If it is present we should use the old compilation mechanism.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14650">MATCH-19</key>
            <summary>Analyze action bodies for the presence of recur, if recur is present do not use backtracking</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 29 Sep 2011 06:39:33 -0500</created>
                <updated>Sun, 2 Oct 2011 12:56:19 -0500</updated>
                    <resolved>Sun, 2 Oct 2011 12:56:19 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26890" author="dnolen" created="Sun, 2 Oct 2011 12:56:19 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/af4ca0425daee7dd7421716f6a151d2dda988a9a&quot;&gt;https://github.com/clojure/core.match/commit/af4ca0425daee7dd7421716f6a151d2dda988a9a&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-20] Doesn&apos;t match &apos;head &amp; tail&apos; in vector matching.</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-20</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Following code:&lt;/p&gt;

&lt;p&gt;(match [&lt;span class=&quot;error&quot;&gt;&amp;#91;:plus 1 2 3&amp;#93;&lt;/span&gt;]&lt;br/&gt;
  [&lt;span class=&quot;error&quot;&gt;&amp;#91;:pow arg pow&amp;#93;&lt;/span&gt;] 0&lt;br/&gt;
  [&lt;span class=&quot;error&quot;&gt;&amp;#91;:plus &amp;amp; args&amp;#93;&lt;/span&gt;] 1&lt;br/&gt;
  :else 2)&lt;/p&gt;

&lt;p&gt;Returns 2, but must return 1.&lt;/p&gt;

&lt;p&gt;If we delete first clause it works:&lt;/p&gt;

&lt;p&gt;(match [&lt;span class=&quot;error&quot;&gt;&amp;#91;:plus 1 2 3&amp;#93;&lt;/span&gt;]&lt;br/&gt;
  [&lt;span class=&quot;error&quot;&gt;&amp;#91;:plus &amp;amp; args&amp;#93;&lt;/span&gt;] 1&lt;br/&gt;
  :else 2)&lt;/p&gt;

&lt;p&gt;Returns 1.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14651">MATCH-20</key>
            <summary>Doesn&apos;t match &apos;head &amp; tail&apos; in vector matching.</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="nbeloglazov">Nikita Beloglazov</reporter>
                        <labels>
                    </labels>
                <created>Thu, 29 Sep 2011 14:02:37 -0500</created>
                <updated>Sun, 2 Oct 2011 12:25:44 -0500</updated>
                    <resolved>Sun, 2 Oct 2011 12:25:42 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26882" author="nbeloglazov" created="Sat, 1 Oct 2011 13:11:32 -0500"  >&lt;p&gt;Also works with &lt;span class=&quot;error&quot;&gt;&amp;#91;:plus 1 2&amp;#93;&lt;/span&gt; - vector size is now 3, was 4:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-none&quot;&gt;(match [[:plus 1 2]]
  [[:pow arg pow]] 0
  [[:plus &amp;amp; args]] 1
  :else 2)
=&amp;gt; 1&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26883" author="dnolen" created="Sat, 1 Oct 2011 13:13:12 -0500"  >&lt;p&gt;I have a pretty good idea what&apos;s wrong here as well as the fix. Hope to get this resolved in the next couple of days.&lt;/p&gt;</comment>
                    <comment id="26889" author="dnolen" created="Sun, 2 Oct 2011 12:25:44 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/02f2ab62cba3d1017c2590b04946cb2c92190635&quot;&gt;https://github.com/clojure/core.match/commit/02f2ab62cba3d1017c2590b04946cb2c92190635&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-21] Head-Tail Pattern Matching Fails for Lists</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-21</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Head-tail pattern matching only seems to work with vectors.&lt;/p&gt;

&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/clojure/core.match/commit/9f4919d855be09a1b32f9e5563ac1c3f5bace642&quot;&gt;https://github.com/clojure/core.match/commit/9f4919d855be09a1b32f9e5563ac1c3f5bace642&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The following code falls through. (macroexpand appended)&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [x &apos;(1 2 3)]
  (match [x]
         [[a &amp;amp; as]] :a))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt;
  (clojure.core/cond
    (clojure.core/instance? clojure.lang.IPersistentVector x) (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt;
                                                                (clojure.core/let 
                                                                  [x_left__3201
                                                                   (clojure.core/subvec
                                                                     x
                                                                     0
                                                                     1)]
                                                                  (clojure.core/cond
                                                                    (clojure.core/and
                                                                      (clojure.core/instance?
                                                                        clojure.lang.IPersistentVector
                                                                        x_left__3201)
                                                                      (clojure.core/=
                                                                        (clojure.core/count
                                                                          x_left__3201)
                                                                        1))
                                                                    (clojure.core/let 
                                                                      [a
                                                                       (clojure.core/nth
                                                                         x_left__3201
                                                                         0)
                                                                       as
                                                                       (clojure.core/subvec
                                                                         x
                                                                         1)]
                                                                      :a)
                                                                    :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt;
                                                                    (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt;
                                                                      clojure.core.match.core/backtrack)))
                                                                (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt;
                                                                  java.lang.Exception
                                                                  e__2436__auto__
                                                                  (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt;
                                                                    clojure.core.match.core/backtrack)))
    :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; clojure.core.match.core/backtrack))
  (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt;
    java.lang.Exception
    e__2437__auto__
    (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; clojure.core.match.core/backtrack)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14654">MATCH-21</key>
            <summary>Head-Tail Pattern Matching Fails for Lists</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Fri, 30 Sep 2011 04:28:58 -0500</created>
                <updated>Sun, 2 Oct 2011 11:35:01 -0500</updated>
                    <resolved>Sun, 2 Oct 2011 11:35:01 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26888" author="dnolen" created="Sun, 2 Oct 2011 11:35:01 -0500"  >&lt;p&gt;This is the expected behavior. If you want to match seqs you have to use the seq pattern syntax.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-22] boolean expression fails</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-22</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;(match &lt;span class=&quot;error&quot;&gt;&amp;#91;false&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;false&amp;#93;&lt;/span&gt; true) throws an error.&lt;/p&gt;

&lt;p&gt;I thought I handled this case earlier, but seems like I missed something.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14662">MATCH-22</key>
            <summary>boolean expression fails</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sat, 1 Oct 2011 18:41:18 -0500</created>
                <updated>Sun, 2 Oct 2011 11:32:34 -0500</updated>
                    <resolved>Sun, 2 Oct 2011 11:32:33 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26887" author="dnolen" created="Sun, 2 Oct 2011 11:32:34 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/66a36260eb77c1920f9db011cdb612d4797665a7&quot;&gt;https://github.com/clojure/core.match/commit/66a36260eb77c1920f9db011cdb612d4797665a7&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-13] Invalid method Code length when generating red black tree matcher</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-13</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The issue is the same as stated on&lt;br/&gt;
&lt;a href=&quot;https://github.com/swannodette/match/issues/54&quot;&gt;https://github.com/swannodette/match/issues/54&lt;/a&gt;&lt;br/&gt;
but moved here as a part of moving match to Clojure contrib.&lt;/p&gt;

&lt;p&gt;Here is a copy of the text from the issue above:&lt;/p&gt;

&lt;p&gt;After having forked the latest version on branch and compiling I attempted to execute the infamous red-black tree rebalancing code.&lt;/p&gt;

&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;node nil&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (match/match&lt;br/&gt;
   &lt;span class=&quot;error&quot;&gt;&amp;#91;node&amp;#93;&lt;/span&gt;&lt;br/&gt;
   [([:black [:red &lt;span class=&quot;error&quot;&gt;&amp;#91;:red a x b&amp;#93;&lt;/span&gt; y c] z d] |&lt;br/&gt;
       [:black [:red a x &lt;span class=&quot;error&quot;&gt;&amp;#91;:red b y c&amp;#93;&lt;/span&gt;] z d] |&lt;br/&gt;
     [:black a x [:red &lt;span class=&quot;error&quot;&gt;&amp;#91;:red b y c&amp;#93;&lt;/span&gt; z d]] |&lt;br/&gt;
       [:black a x [:red b y &lt;span class=&quot;error&quot;&gt;&amp;#91;:red c z d&amp;#93;&lt;/span&gt;]])]&lt;br/&gt;
   [:red &lt;span class=&quot;error&quot;&gt;&amp;#91;:black a x b&amp;#93;&lt;/span&gt; y &lt;span class=&quot;error&quot;&gt;&amp;#91;:black c z d&amp;#93;&lt;/span&gt;]))&lt;br/&gt;
The good news is that issue issue 47 is indeed resolved. The bad news is that a new issue has cropped up, namely that the ClassFormatError with the message&lt;/p&gt;

&lt;p&gt;error: java.lang.ClassFormatError: Invalid method Code length 78596 in class file redblack/core$eval3306 (core.clj:10)&lt;br/&gt;
is raised.&lt;/p&gt;</description>
                <environment>lein --version&lt;br/&gt;
Leiningen 1.4.2 on Java 1.6.0_26 Java HotSpot(TM) 64-Bit Server VM&lt;br/&gt;
The project.clj file is as follows:&lt;br/&gt;
(defproject redblack &amp;quot;1.0.0-SNAPSHOT&amp;quot;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;:description &amp;quot;FIXME: write&amp;quot;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;:dependencies [[org.clojure/clojure &amp;quot;1.2.0&amp;quot;]&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[org.clojure/clojure-contrib &amp;quot;1.2.0&amp;quot;]&lt;br/&gt;
		 [org.clojure/core.match &amp;quot;0.2.0-SNAPSHOT&amp;quot;]]&lt;br/&gt;
&amp;nbsp;&amp;nbsp;:dev-dependencies [[swank-clojure &amp;quot;1.3.0-SNAPSHOT&amp;quot;]])&lt;br/&gt;
core.match is compiled and installed using the above environment by issuing mvn install</environment>
            <key id="14613">MATCH-13</key>
            <summary>Invalid method Code length when generating red black tree matcher</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="tgk">Thomas Greve Kristensen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 5 Sep 2011 14:18:20 -0500</created>
                <updated>Wed, 28 Sep 2011 22:47:22 -0500</updated>
                    <resolved>Wed, 28 Sep 2011 22:47:22 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26765" author="dnolen" created="Mon, 5 Sep 2011 15:43:27 -0500"  >&lt;p&gt;Do you encounter this error at the REPL?&lt;/p&gt;</comment>
                    <comment id="26766" author="tgk" created="Mon, 5 Sep 2011 23:26:42 -0500"  >&lt;p&gt;Sort of - it is encountered when connecting to the REPL using swank form emacs.&lt;/p&gt;</comment>
                    <comment id="26768" author="dnolen" created="Mon, 5 Sep 2011 23:43:48 -0500"  >&lt;p&gt;Can you elaborate the exact steps? What OS?&lt;/p&gt;

&lt;p&gt;I&apos;m interested in knowing the details since I haven&apos;t run into it myself - solving &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-1&quot;&gt;http://dev.clojure.org/jira/browse/MATCH-1&lt;/a&gt; should address this problem.&lt;/p&gt;</comment>
                    <comment id="26769" author="tgk" created="Tue, 6 Sep 2011 02:21:00 -0500"  >&lt;p&gt;I have executed all my tests on a mac os x lion 10.7.1. I&apos;ve just added my (failing) code to github, it can be found here:&lt;br/&gt;
&lt;a href=&quot;https://github.com/tgk/RedBlackTreesUsingMatch&quot;&gt;https://github.com/tgk/RedBlackTreesUsingMatch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The steps are as follows:&lt;br/&gt;
lein deps&lt;br/&gt;
lein swank&lt;br/&gt;
From aquaemacs, connect to swank using slime-connect&lt;br/&gt;
Open the file src/redblack/core.clj&lt;br/&gt;
Execute the entire file (C-c C-k if memory serves)&lt;/p&gt;

&lt;p&gt;Sorry for the very brief description, but I&apos;m at work...&lt;/p&gt;</comment>
                    <comment id="26770" author="tgk" created="Tue, 6 Sep 2011 12:33:58 -0500"  >&lt;p&gt;Here&apos;s a bit longer description:&lt;/p&gt;

&lt;p&gt;First, I cloned clojure.core.match.core and installed it using&lt;br/&gt;
mvn install&lt;/p&gt;

&lt;p&gt;I have added a :main description to the project above. To make it fail I can simply use&lt;br/&gt;
lein run&lt;/p&gt;</comment>
                    <comment id="26773" author="tgk" created="Wed, 7 Sep 2011 13:23:43 -0500"  >&lt;p&gt;I have also tried using 1.3.0-master-SNAPSHOT of clojure but with no luck. Which version of java are you using?&lt;/p&gt;</comment>
                    <comment id="26774" author="tgk" created="Wed, 7 Sep 2011 13:23:46 -0500"  >&lt;p&gt;I have also tried using 1.3.0-master-SNAPSHOT of clojure but with no luck. Which version of java are you using?&lt;/p&gt;</comment>
                    <comment id="26775" author="dnolen" created="Wed, 7 Sep 2011 13:52:07 -0500"  >&lt;p&gt;Sorry been a bit swamped so I haven&apos;t had a chance to go through your exact steps (I&apos;m sure I&apos;ll get the same error). Again I&apos;m pretty confident I know why the red black tree pattern generates so much code. Adding backtracking will be a significant code size optimization.&lt;/p&gt;</comment>
                    <comment id="26872" author="dnolen" created="Mon, 26 Sep 2011 06:59:38 -0500"  >&lt;p&gt;See &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-1&quot; title=&quot;Investigate non-overlapping pattern optimization via pre-allocated exception for backtracking &quot;&gt;&lt;del&gt;MATCH-1&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26876" author="dnolen" created="Wed, 28 Sep 2011 22:47:22 -0500"  >&lt;p&gt;Fixed now in master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-1] Investigate non-overlapping pattern optimization via pre-allocated exception for backtracking </title>
                <link>http://dev.clojure.org/jira/browse/MATCH-1</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The red black tree balance pattern mentioned by tgk generates enough code that the JVM will not inline it. Maranget&apos;s algorithm basically implements backtracking by passing along wildcard matches with actual matches. For non-overlapping patterns like the red black tree balance pattern this means exponential code size.&lt;/p&gt;

&lt;p&gt;For such patterns where none of the actions involve recur we could implement backtracking with a pre-allocated exception.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blogs.oracle.com/jrose/entry/longjumps_considered_inexpensive&quot;&gt;http://blogs.oracle.com/jrose/entry/longjumps_considered_inexpensive&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14600">MATCH-1</key>
            <summary>Investigate non-overlapping pattern optimization via pre-allocated exception for backtracking </summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 09:52:03 -0500</created>
                <updated>Wed, 28 Sep 2011 22:46:59 -0500</updated>
                    <resolved>Wed, 28 Sep 2011 22:46:59 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26875" author="dnolen" created="Wed, 28 Sep 2011 22:46:59 -0500"  >&lt;p&gt;Fixed now in master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-18] IndexOutOfBound exception using &apos;&amp;&apos; in vector matching.</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-18</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Following sample causes IndexOutOfBound exception. &lt;/p&gt;

&lt;p&gt;(match [&lt;span class=&quot;error&quot;&gt;&amp;#91;:pow :x 2&amp;#93;&lt;/span&gt;]&lt;br/&gt;
        [&lt;span class=&quot;error&quot;&gt;&amp;#91;:pow arg pow&amp;#93;&lt;/span&gt;] 0&lt;br/&gt;
        [&lt;span class=&quot;error&quot;&gt;&amp;#91;:mult &amp;amp; args&amp;#93;&lt;/span&gt;] 1&lt;br/&gt;
        :else 2)&lt;/p&gt;

&lt;p&gt;Result: IndexOutOfBound&lt;/p&gt;

&lt;p&gt;But if we delete &apos;&amp;amp;&apos; everything works fine:&lt;/p&gt;

&lt;p&gt;(match [&lt;span class=&quot;error&quot;&gt;&amp;#91;:pow :x 2&amp;#93;&lt;/span&gt;]&lt;br/&gt;
        [&lt;span class=&quot;error&quot;&gt;&amp;#91;:pow arg pow&amp;#93;&lt;/span&gt;] 0&lt;br/&gt;
        [&lt;span class=&quot;error&quot;&gt;&amp;#91;:mult args&amp;#93;&lt;/span&gt;] 1&lt;br/&gt;
        :else 2)&lt;/p&gt;

&lt;p&gt;Result: 0&lt;/p&gt;</description>
                <environment></environment>
            <key id="14649">MATCH-18</key>
            <summary>IndexOutOfBound exception using &apos;&amp;&apos; in vector matching.</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="nbeloglazov">Nikita Beloglazov</reporter>
                        <labels>
                    </labels>
                <created>Wed, 28 Sep 2011 16:10:12 -0500</created>
                <updated>Wed, 28 Sep 2011 20:23:05 -0500</updated>
                    <resolved>Wed, 28 Sep 2011 20:23:04 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26874" author="dnolen" created="Wed, 28 Sep 2011 20:23:04 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/e0677eec1dac387e369886a72c19f75262cecd68&quot;&gt;https://github.com/clojure/core.match/commit/e0677eec1dac387e369886a72c19f75262cecd68&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-5] Rest patterns should infer their type</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-5</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Rest patterns don&apos;t currently infer their type. A simple enhancement that would save some extra typing as well as potentially mysterious errors.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14604">MATCH-5</key>
            <summary>Rest patterns should infer their type</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 09:58:00 -0500</created>
                <updated>Mon, 26 Sep 2011 06:58:22 -0500</updated>
                    <resolved>Mon, 26 Sep 2011 06:58:22 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26871" author="dnolen" created="Mon, 26 Sep 2011 06:58:22 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/d8e767948977837bfb138b9383d6f7c2d175c09e&quot;&gt;https://github.com/clojure/core.match/commit/d8e767948977837bfb138b9383d6f7c2d175c09e&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-6] Nested rest pattern in vector patterns cause infinite loop</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-6</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Nested rest patterns combined w/ vector patterns cause an infinite loop.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14605">MATCH-6</key>
            <summary>Nested rest pattern in vector patterns cause infinite loop</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 09:58:35 -0500</created>
                <updated>Mon, 26 Sep 2011 05:59:48 -0500</updated>
                    <resolved>Mon, 26 Sep 2011 05:59:48 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26870" author="dnolen" created="Mon, 26 Sep 2011 05:59:48 -0500"  >&lt;p&gt;See &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-17&quot; title=&quot;first-column-chosen-case Infinite Loop at Compilation&quot;&gt;&lt;del&gt;MATCH-17&lt;/del&gt;&lt;/a&gt; and &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-14&quot; title=&quot;Vector Pattern bug when patterns not all of the same length&quot;&gt;&lt;del&gt;MATCH-14&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-14] Vector Pattern bug when patterns not all of the same length</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-14</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;(let [v [&lt;span class=&quot;error&quot;&gt;&amp;#91;1 2&amp;#93;&lt;/span&gt;]]&lt;br/&gt;
  (match &lt;span class=&quot;error&quot;&gt;&amp;#91;v&amp;#93;&lt;/span&gt;&lt;br/&gt;
    [&lt;span class=&quot;error&quot;&gt;&amp;#91;3 1&amp;#93;&lt;/span&gt;] :a0&lt;br/&gt;
    [[(&lt;span class=&quot;error&quot;&gt;&amp;#91;1 a&amp;#93;&lt;/span&gt; :as b)]] &lt;span class=&quot;error&quot;&gt;&amp;#91;:a1 a b&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;Throws out of bounds exception error&lt;/p&gt;</description>
                <environment></environment>
            <key id="14629">MATCH-14</key>
            <summary>Vector Pattern bug when patterns not all of the same length</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Tue, 13 Sep 2011 22:15:09 -0500</created>
                <updated>Mon, 26 Sep 2011 05:57:18 -0500</updated>
                    <resolved>Mon, 26 Sep 2011 05:57:18 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26869" author="dnolen" created="Mon, 26 Sep 2011 05:57:18 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/2f5d82bfb6031325114b9a5aaad975fb60dd7bd3&quot;&gt;https://github.com/clojure/core.match/commit/2f5d82bfb6031325114b9a5aaad975fb60dd7bd3&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-17] first-column-chosen-case Infinite Loop at Compilation</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-17</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;See: &lt;a href=&quot;https://gist.github.com/1241625&quot;&gt;https://gist.github.com/1241625&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14645">MATCH-17</key>
            <summary>first-column-chosen-case Infinite Loop at Compilation</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 25 Sep 2011 23:47:40 -0500</created>
                <updated>Mon, 26 Sep 2011 05:48:47 -0500</updated>
                    <resolved>Mon, 26 Sep 2011 05:48:46 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26868" author="dnolen" created="Mon, 26 Sep 2011 05:48:46 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/1b01e7fc6634e081f6a96db41eb65c91b95b8161&quot;&gt;https://github.com/clojure/core.match/commit/1b01e7fc6634e081f6a96db41eb65c91b95b8161&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-11] The order of pattern rows should be preserved</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-11</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Sometimes pattern rows are not preserved in the user defind order. Fix this and create the tests to show that this property is preserved.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14610">MATCH-11</key>
            <summary>The order of pattern rows should be preserved</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 10:17:16 -0500</created>
                <updated>Sun, 25 Sep 2011 20:50:16 -0500</updated>
                    <resolved>Sun, 25 Sep 2011 20:50:15 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26867" author="dnolen" created="Sun, 25 Sep 2011 20:50:16 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/5e2762fbca6179b3b19505d7603fc6a37108dba1&quot;&gt;https://github.com/clojure/core.match/commit/5e2762fbca6179b3b19505d7603fc6a37108dba1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No tests. The rule is never reorder - always return 1.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-15] Binding issue </title>
                <link>http://dev.clojure.org/jira/browse/MATCH-15</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The binding in the match macro used in gitolite-webui.notification 41:&lt;/p&gt;

&lt;p&gt;(defn email-request &lt;span class=&quot;error&quot;&gt;&amp;#91;req&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (match &lt;span class=&quot;error&quot;&gt;&amp;#91;req&amp;#93;&lt;/span&gt;&lt;br/&gt;
	   &lt;span class=&quot;error&quot;&gt;&amp;#91;{:name _ :repo (r :when (comp not nil?)) :email email}&amp;#93;&lt;/span&gt; (notify-user-constrained email &quot;Your repository access request has been approved&quot; (&amp;lt;&amp;lt; &quot;Verify that you can access it by cloning ~(:repo req) repository.&quot;) @config)&lt;br/&gt;
	   &lt;span class=&quot;error&quot;&gt;&amp;#91;{:name _ :key _ :email email}&amp;#93;&lt;/span&gt; (notify-user-constrained email &quot;Your key request in gitolite was approved&quot; (&amp;lt;&amp;lt; &quot;Please verify that your public key matches ~(:key req)&quot;) @config)&lt;br/&gt;
	   ))&lt;/p&gt;

&lt;p&gt;Trying to create jar results with:&lt;/p&gt;

&lt;p&gt;(match-fix)&#9889; % lein uberjar                                                            ~/CodeProjects/gitolite-webui&lt;br/&gt;
Cleaning up.&lt;br/&gt;
WARNING: gitolite-webui.notification, line 42: Non-exhaustive pattern matrix, consider adding :else clause&lt;br/&gt;
Exception in thread &quot;main&quot; java.lang.Exception: Unable to resolve symbol: email in this context (notification.clj:43)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5205)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5151)&lt;br/&gt;
	at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3057)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:5371)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5190)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5151)&lt;br/&gt;
	at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2315)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:5369)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5190)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:5357)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5190)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:5357)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5190)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5151)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:4670)&lt;br/&gt;
	at clojure.lang.Compiler$FnMethod.parse(Compiler.java:4328)&lt;br/&gt;
	at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3173)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:5367)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5190)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:5357)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5190)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5151)&lt;br/&gt;
	at clojure.lang.Compiler$HostExpr$Parser.parse(Compiler.java:798)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:5369)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5190)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:5357)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5190)&lt;br/&gt;
	at clojure.lang.Compiler.access$100(Compiler.java:35)&lt;br/&gt;
	at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:438)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:5369)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5190)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5151)&lt;br/&gt;
	at clojure.lang.Compiler.compile1(Compiler.java:5928)&lt;br/&gt;
	at clojure.lang.Compiler.compile(Compiler.java:5992)&lt;br/&gt;
	at clojure.lang.RT.compile(RT.java:368)&lt;br/&gt;
	at clojure.lang.RT.load(RT.java:407)&lt;br/&gt;
	at clojure.lang.RT.load(RT.java:381)&lt;br/&gt;
	at clojure.core$load$fn__4519.invoke(core.clj:4915)&lt;br/&gt;
	at clojure.core$load.doInvoke(core.clj:4914)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:408)&lt;br/&gt;
	at clojure.core$load_one.invoke(core.clj:4729)&lt;br/&gt;
	at clojure.core$load_lib.doInvoke(core.clj:4766)&lt;br/&gt;
	at clojure.lang.RestFn.applyTo(RestFn.java:142)&lt;br/&gt;
	at clojure.core$apply.invoke(core.clj:542)&lt;br/&gt;
	at clojure.core$load_libs.doInvoke(core.clj:4800)&lt;br/&gt;
	at clojure.lang.RestFn.applyTo(RestFn.java:137)&lt;br/&gt;
	at clojure.core$apply.invoke(core.clj:544)&lt;br/&gt;
	at clojure.core$use.doInvoke(core.clj:4892)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:512)&lt;br/&gt;
	at gitolite_webui.persistency$loading_&lt;em&gt;4414&lt;/em&gt;&lt;em&gt;auto&lt;/em&gt;_.invoke(persistency.clj:1)&lt;br/&gt;
	at clojure.lang.AFn.applyToHelper(AFn.java:159)&lt;br/&gt;
	at clojure.lang.AFn.applyTo(AFn.java:151)&lt;br/&gt;
	at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:2906)&lt;br/&gt;
	at clojure.lang.Compiler.compile1(Compiler.java:5933)&lt;br/&gt;
	at clojure.lang.Compiler.compile1(Compiler.java:5923)&lt;br/&gt;
	at clojure.lang.Compiler.compile(Compiler.java:5992)&lt;br/&gt;
	at clojure.lang.RT.compile(RT.java:368)&lt;br/&gt;
	at clojure.lang.RT.load(RT.java:407)&lt;br/&gt;
	at clojure.lang.RT.load(RT.java:381)&lt;br/&gt;
	at clojure.core$load$fn__4519.invoke(core.clj:4915)&lt;br/&gt;
	at clojure.core$load.doInvoke(core.clj:4914)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:408)&lt;br/&gt;
	at clojure.core$load_one.invoke(core.clj:4729)&lt;br/&gt;
	at clojure.core$load_lib.doInvoke(core.clj:4766)&lt;br/&gt;
	at clojure.lang.RestFn.applyTo(RestFn.java:142)&lt;br/&gt;
	at clojure.core$apply.invoke(core.clj:542)&lt;br/&gt;
	at clojure.core$load_libs.doInvoke(core.clj:4800)&lt;br/&gt;
	at clojure.lang.RestFn.applyTo(RestFn.java:137)&lt;br/&gt;
	at clojure.core$apply.invoke(core.clj:542)&lt;br/&gt;
	at clojure.core$require.doInvoke(core.clj:4881)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:512)&lt;br/&gt;
	at gitolite_webui.core$loading_&lt;em&gt;4414&lt;/em&gt;&lt;em&gt;auto&lt;/em&gt;_.invoke(core.clj:1)&lt;br/&gt;
	at clojure.lang.AFn.applyToHelper(AFn.java:159)&lt;br/&gt;
	at clojure.lang.AFn.applyTo(AFn.java:151)&lt;br/&gt;
	at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:2906)&lt;br/&gt;
	at clojure.lang.Compiler.compile1(Compiler.java:5933)&lt;br/&gt;
	at clojure.lang.Compiler.compile1(Compiler.java:5923)&lt;br/&gt;
	at clojure.lang.Compiler.compile(Compiler.java:5992)&lt;br/&gt;
	at clojure.lang.RT.compile(RT.java:368)&lt;br/&gt;
	at clojure.lang.RT.load(RT.java:407)&lt;br/&gt;
	at clojure.lang.RT.load(RT.java:381)&lt;br/&gt;
	at clojure.core$load$fn__4519.invoke(core.clj:4915)&lt;br/&gt;
	at clojure.core$load.doInvoke(core.clj:4914)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:408)&lt;br/&gt;
	at clojure.core$load_one.invoke(core.clj:4729)&lt;br/&gt;
	at clojure.core$compile$fn__4524.invoke(core.clj:4926)&lt;br/&gt;
	at clojure.core$compile.invoke(core.clj:4925)&lt;br/&gt;
	at user$eval27.invoke(NO_SOURCE_FILE:1)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:5424)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:5415)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:5391)&lt;br/&gt;
	at clojure.core$eval.invoke(core.clj:2382)&lt;br/&gt;
	at clojure.main$eval_opt.invoke(main.clj:235)&lt;br/&gt;
	at clojure.main$initialize.invoke(main.clj:254)&lt;br/&gt;
	at clojure.main$null_opt.invoke(main.clj:279)&lt;br/&gt;
	at clojure.main$main.doInvoke(main.clj:354)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:421)&lt;br/&gt;
	at clojure.lang.Var.invoke(Var.java:369)&lt;br/&gt;
	at clojure.lang.AFn.applyToHelper(AFn.java:163)&lt;br/&gt;
	at clojure.lang.Var.applyTo(Var.java:482)&lt;br/&gt;
	at clojure.main.main(main.java:37)&lt;br/&gt;
Caused by: java.lang.Exception: Unable to resolve symbol: email in this context&lt;br/&gt;
	at clojure.lang.Compiler.resolveIn(Compiler.java:5677)&lt;br/&gt;
	at clojure.lang.Compiler.resolve(Compiler.java:5621)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSymbol(Compiler.java:5584)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:5172)&lt;br/&gt;
	... 100 more&lt;/p&gt;

&lt;p&gt;Trying to use an else clause:&lt;/p&gt;

&lt;p&gt;(defn email-request &lt;span class=&quot;error&quot;&gt;&amp;#91;req&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (match &lt;span class=&quot;error&quot;&gt;&amp;#91;req&amp;#93;&lt;/span&gt;&lt;br/&gt;
	   &lt;span class=&quot;error&quot;&gt;&amp;#91;{:name _ :repo (r :when (comp not nil?)) :email email}&amp;#93;&lt;/span&gt; (notify-user-constrained email &quot;Your repository access request has been approved&quot; (&amp;lt;&amp;lt; &quot;Verify that you can access it by cloning ~(:repo req) repository.&quot;) @config)&lt;br/&gt;
	   &lt;span class=&quot;error&quot;&gt;&amp;#91;{:name _ :key _ :email email}&amp;#93;&lt;/span&gt; (notify-user-constrained email &quot;Your key request in gitolite was approved&quot; (&amp;lt;&amp;lt; &quot;Please verify that your public key matches ~(:key req)&quot;) @config)&lt;br/&gt;
	   :else :error&lt;br/&gt;
	   ))&lt;/p&gt;

&lt;p&gt;Exception in thread &quot;main&quot; java.lang.RuntimeException: java.lang.IllegalArgumentException: No method in multimethod &apos;to-source&apos; for dispatch value: class clojure.core.match.core.WildcardPattern (notification.clj:42)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:5376)&lt;/p&gt;</description>
                <environment>Latest HEAD version of match while compile my project &lt;a href=&quot;https://github.com/narkisr/gitolite-webui/tree/match-fix&quot;&gt;https://github.com/narkisr/gitolite-webui/tree/match-fix&lt;/a&gt; </environment>
            <key id="14637">MATCH-15</key>
            <summary>Binding issue </summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="narkisr">Ronen Narkis</reporter>
                        <labels>
                    </labels>
                <created>Thu, 22 Sep 2011 18:17:02 -0500</created>
                <updated>Sun, 25 Sep 2011 19:53:58 -0500</updated>
                    <resolved>Sun, 25 Sep 2011 19:53:57 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26841" author="dnolen" created="Thu, 22 Sep 2011 18:50:40 -0500"  >&lt;p&gt;Thanks! However, this is too much context. Please add an isolated case. This limits the moving parts as well as make it easy to add a new test case to handle your issue.&lt;/p&gt;</comment>
                    <comment id="26855" author="narkisr" created="Fri, 23 Sep 2011 15:59:47 -0500"  >&lt;p&gt;Hey David, iv created a single file project that reproduces this:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/narkisr/MATCH_15&quot;&gt;https://github.com/narkisr/MATCH_15&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The single function in there is:&lt;/p&gt;

&lt;p&gt;(defn email-request &lt;span class=&quot;error&quot;&gt;&amp;#91;req&amp;#93;&lt;/span&gt;&lt;br/&gt;
(match &lt;span class=&quot;error&quot;&gt;&amp;#91;req&amp;#93;&lt;/span&gt;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;{:name _ :repo (r :when (comp not nil?)) :email email}&amp;#93;&lt;/span&gt; (println email)&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;{:name _ :key _ :email email}&amp;#93;&lt;/span&gt; (println email)&lt;br/&gt;
))&lt;/p&gt;

&lt;p&gt;Running lein uberjar results with the same error.&lt;/p&gt;</comment>
                    <comment id="26866" author="dnolen" created="Sun, 25 Sep 2011 19:53:58 -0500"  >&lt;p&gt;Turns out this only affected AOT code. We were doing some dynamic things that did not play well w/ AOT. Fixed in master, &lt;a href=&quot;https://github.com/clojure/core.match/commit/64eb9d4ff8774c3f228cfa8958043a65c083ec86&quot;&gt;https://github.com/clojure/core.match/commit/64eb9d4ff8774c3f228cfa8958043a65c083ec86&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-3] strange infinite lazy seq of nils pattern rows bug at leaf nodes</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-3</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;This is low priority, but should be investigated. To see this behavior just print out the pattern row at the leaf node cases. Encountered this while fixing symbol binding bug in vector patterns.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14602">MATCH-3</key>
            <summary>strange infinite lazy seq of nils pattern rows bug at leaf nodes</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 09:55:36 -0500</created>
                <updated>Sun, 25 Sep 2011 18:45:22 -0500</updated>
                    <resolved>Sun, 25 Sep 2011 18:45:22 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26865" author="dnolen" created="Sun, 25 Sep 2011 18:45:22 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/7ceffec3876b5175f33182e75c91e2c8046a19e4&quot;&gt;https://github.com/clojure/core.match/commit/7ceffec3876b5175f33182e75c91e2c8046a19e4&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-16] Empty Vector Patterns Fail to Match</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-16</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;  (match [[]] &lt;br/&gt;
         [[]] &quot;asdf&quot;)&lt;br/&gt;
#&amp;lt;RuntimeException java.lang.RuntimeException: java.lang.Exception: No match found. Followed 0 branches. Breadcrumbs: []&amp;gt;&lt;/p&gt;


&lt;p&gt;Macro-expand&apos;d:&lt;/p&gt;


&lt;p&gt;(let*&lt;br/&gt;
  [ocr-4856 []]&lt;br/&gt;
  (clojure.core/cond&lt;br/&gt;
    (clojure.core/and&lt;br/&gt;
      (clojure.core/instance? clojure.lang.IPersistentVector ocr-4856)&lt;br/&gt;
      (clojure.core/= (clojure.core/count ocr-4856) 1)) (clojure.core/let &lt;br/&gt;
                                                          [ocr-4856_0__4857&lt;br/&gt;
                                                           (clojure.core/nth&lt;br/&gt;
                                                             ocr-4856&lt;br/&gt;
                                                             0)]&lt;br/&gt;
                                                          (clojure.core/cond&lt;br/&gt;
                                                            (clojure.core/=&lt;br/&gt;
                                                              ocr-4856_0__4857&lt;br/&gt;
                                                              nil)&lt;br/&gt;
                                                            &quot;asdf&quot;&lt;br/&gt;
                                                            :else&lt;br/&gt;
                                                            (throw&lt;br/&gt;
                                                              (java.lang.Exception.&lt;br/&gt;
                                                                (clojure.core/str&lt;br/&gt;
                                                                  &quot;No match found. &quot;&lt;br/&gt;
                                                                  &quot;Followed &quot;&lt;br/&gt;
                                                                  1&lt;br/&gt;
                                                                  &quot; branches.&quot;&lt;br/&gt;
                                                                  &quot; Breadcrumbs: &quot;&lt;br/&gt;
                                                                  &apos;[(clojure.core/and&lt;br/&gt;
                                                                      (clojure.core/instance?&lt;br/&gt;
                                                                        clojure.lang.IPersistentVector&lt;br/&gt;
                                                                        ocr-4856)&lt;br/&gt;
                                                                      (clojure.core/=&lt;br/&gt;
                                                                        (clojure.core/count&lt;br/&gt;
                                                                          ocr-4856)&lt;br/&gt;
                                                                        1))])))))&lt;br/&gt;
    :else (throw&lt;br/&gt;
            (java.lang.Exception.&lt;br/&gt;
              (clojure.core/str&lt;br/&gt;
                &quot;No match found. &quot;&lt;br/&gt;
                &quot;Followed &quot;&lt;br/&gt;
                0&lt;br/&gt;
                &quot; branches.&quot;&lt;br/&gt;
                &quot; Breadcrumbs: &quot;&lt;br/&gt;
                &apos;[])))))&lt;/p&gt;


&lt;p&gt;Clearly this test is the issue: (clojure.core/= (clojure.core/count ocr-4856) 1))&lt;/p&gt;</description>
                <environment></environment>
            <key id="14643">MATCH-16</key>
            <summary>Empty Vector Patterns Fail to Match</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 25 Sep 2011 05:12:45 -0500</created>
                <updated>Sun, 25 Sep 2011 17:53:48 -0500</updated>
                    <resolved>Sun, 25 Sep 2011 17:53:47 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26862" author="ambrosebs" created="Sun, 25 Sep 2011 05:15:04 -0500"  >&lt;p&gt;Bah, I&apos;ll try again:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [[]] 
         [[]] &lt;span class=&quot;code-quote&quot;&gt;&quot;asdf&quot;&lt;/span&gt;)
#&amp;lt;RuntimeException java.lang.RuntimeException: java.lang.Exception: No match found. Followed 0 branches. Breadcrumbs: []&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let*
  [ocr-4856 []]
  (clojure.core/cond
    (clojure.core/and
      (clojure.core/instance? clojure.lang.IPersistentVector ocr-4856)
      (clojure.core/= (clojure.core/count ocr-4856) 1)) (clojure.core/let 
                                                          [ocr-4856_0__4857
                                                           (clojure.core/nth
                                                             ocr-4856
                                                             0)]
                                                          (clojure.core/cond
                                                            (clojure.core/=
                                                              ocr-4856_0__4857
                                                              nil)
                                                            &lt;span class=&quot;code-quote&quot;&gt;&quot;asdf&quot;&lt;/span&gt;
                                                            :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt;
                                                            (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt;
                                                              (java.lang.Exception.
                                                                (clojure.core/str
                                                                  &lt;span class=&quot;code-quote&quot;&gt;&quot;No match found. &quot;&lt;/span&gt;
                                                                  &lt;span class=&quot;code-quote&quot;&gt;&quot;Followed &quot;&lt;/span&gt;
                                                                  1
                                                                  &lt;span class=&quot;code-quote&quot;&gt;&quot; branches.&quot;&lt;/span&gt;
                                                                  &lt;span class=&quot;code-quote&quot;&gt;&quot; Breadcrumbs: &quot;&lt;/span&gt;
                                                                  &apos;[(clojure.core/and
                                                                      (clojure.core/instance?
                                                                        clojure.lang.IPersistentVector
                                                                        ocr-4856)
                                                                      (clojure.core/=
                                                                        (clojure.core/count
                                                                          ocr-4856)
                                                                        1))])))))
    :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt;
            (java.lang.Exception.
              (clojure.core/str
                &lt;span class=&quot;code-quote&quot;&gt;&quot;No match found. &quot;&lt;/span&gt;
                &lt;span class=&quot;code-quote&quot;&gt;&quot;Followed &quot;&lt;/span&gt;
                0
                &lt;span class=&quot;code-quote&quot;&gt;&quot; branches.&quot;&lt;/span&gt;
                &lt;span class=&quot;code-quote&quot;&gt;&quot; Breadcrumbs: &quot;&lt;/span&gt;
                &apos;[])))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26864" author="dnolen" created="Sun, 25 Sep 2011 17:53:48 -0500"  >&lt;p&gt;Fixed, &lt;a href=&quot;https://github.com/clojure/core.match/commit/9ba924ddd4e8cf9f08d44f2362bf04add1b69ae1&quot;&gt;https://github.com/clojure/core.match/commit/9ba924ddd4e8cf9f08d44f2362bf04add1b69ae1&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-12] Migrate to Maven</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-12</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;AFAIK we need to migrate to Maven for Contrib projects.&lt;/p&gt;

&lt;p&gt;I used core.logic as a template and it seems to have been successful. Anything missing?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/core.match/commit/5146212edecbd8d765028e165352d20005b44cc3&quot;&gt;https://github.com/clojure/core.match/commit/5146212edecbd8d765028e165352d20005b44cc3&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14612">MATCH-12</key>
            <summary>Migrate to Maven</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 20:51:58 -0500</created>
                <updated>Fri, 23 Sep 2011 00:47:20 -0500</updated>
                    <resolved>Fri, 23 Sep 2011 00:47:19 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26763" author="dnolen" created="Mon, 5 Sep 2011 10:40:48 -0500"  >&lt;p&gt;This looks OK to me, do all tests pass?&lt;/p&gt;</comment>
                    <comment id="26764" author="ambrosebs" created="Mon, 5 Sep 2011 10:56:39 -0500"  >&lt;p&gt;Yep, all tests pass.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>dnolen</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[MATCH-8] Implement (p|q)ba heuristics</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-8</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;We should implement the rest of Maranget&apos;s suggested heuristics.&lt;/p&gt;

&lt;p&gt;p - needed prefix&lt;br/&gt;
q - constructor prefix&lt;br/&gt;
b - branching factor&lt;br/&gt;
a - constructor arity&lt;/p&gt;</description>
                <environment></environment>
            <key id="14607">MATCH-8</key>
            <summary>Implement (p|q)ba heuristics</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 10:00:57 -0500</created>
                <updated>Sun, 4 Sep 2011 10:00:57 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>
</channel>
</rss>