<!--
RSS generated by JIRA (4.4#649-r158309) at Wed May 22 02:21:23 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+AND+updated%3E%3D-1w+ORDER+BY+updated+DESC&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+AND+updated%3E%3D-1w+ORDER+BY+updated+DESC</link>
        <description>An XML representation of a search request</description>
                <language>en-us</language>
                        <issue start="0" end="7" total="7"/>
                <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>
</channel>
</rss>