<html>
<head>
<style><!--
  body {background-color:#ffffff;}
  .file {border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;}
  .pathname {font-family:monospace; float:right;}
  .fileheader {margin-bottom:.5em;}
  .diff {margin:0;}
  .tasklist {padding:4px;border:1px dashed #000000;margin-top:1em;}
  .tasklist ul {margin-top:0;margin-bottom:0;}
  tr.alt {background-color:#eeeeee}
  #added {background-color:#ddffdd;}
  #addedchars {background-color:#99ff99;font-weight:bolder;}
  tr.alt #added {background-color:#ccf7cc;}
  #removed {background-color:#ffdddd;}
  #removedchars {background-color:#ff9999;font-weight:bolder;}
  tr.alt #removed {background-color:#f7cccc;}
  #copied {background-color:#ccccff;}
  tr.alt #copied {background-color:#bbbbf7;}
  #info {color:#888888;}
  #context {background-color:#eeeeee;}
  td {padding-left:.3em;padding-right:.3em;}
  tr.head {border-bottom-width:1px;border-bottom-style:solid;}
  tr.head td {padding:0;padding-top:.2em;}
  .task {background-color:#ffff00;}
  .comment {white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;padding:4px;border:1px dashed #000000;background-color:#ffffdd}
  .error {color:red;}
  hr {border-width:0px;height:2px;background:black;}
--></style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head"><td colspan="5">Commit in <b><tt>metaas/trunk/src</tt></b></td></tr>
<tr><td><tt>main/antlr/org/asdt/core/internal/antlr/<a href="#file1">AS3.g3</a></tt> </td><td></td><td align="right" id="added">+19</td><td align="right" id="removed">-11</td><td nowrap="nowrap" align="center">523 -&gt; 524</td></tr>
<tr class="alt"><td><tt>test/java/uk/co/badgersinfoil/metaas/<a href="#file2"><span id="added">TokenBoundryTests.java</span></a></tt> </td><td></td><td align="right" id="added">+101</td><td></td><td nowrap="nowrap" align="right">added 524</td></tr>
<tr><td></td><td></td><td align="right" id="added">+120</td><td align="right" id="removed">-11</td><td></td></tr>
</table>
<small id="info">1 added + 1 modified, total 2 files</small><br />
<div class="tasklist"><ul>
<li><a href="#task1">TODO: expression list</a></li>
<li><a href="#task2">TODO:        public void testAssignment() {</a></li>
<li><a href="#task3">TODO: conditional expression</a></li>
</ul></div>
<pre class="comment">
Have the parser set up the correct token boundries, allowing subexpression replacement to work
</pre>
<hr /><a name="file1" /><div class="file">
<span class="pathname">metaas/trunk/src/main/antlr/org/asdt/core/internal/antlr</span><br />
<div class="fileheader"><big><b>AS3.g3</b></big> <small id="info">523 -&gt; 524</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/antlr/org/asdt/core/internal/antlr/AS3.g3        2007-09-02 00:35:23 UTC (rev 523)
+++ trunk/src/main/antlr/org/asdt/core/internal/antlr/AS3.g3        2007-09-02 13:01:58 UTC (rev 524)
@@ -164,6 +164,11 @@
</small></pre><pre class="diff" id="context">                 tok.beforeInsert(placeholder);
                 return placeholder;
         }
</pre><pre class="diff" id="added">+
+        private void demarcate(LinkedListTree parent) {
+                parent.setStartToken(parent.getFirstChild().getStartToken());
+                parent.setStopToken(parent.getLastChild().getStopToken());
+        }
</pre><pre class="diff" id="context"> }
 
 
</pre><pre class="diff"><small id="info">@@ -828,8 +833,9 @@
</small></pre><pre class="diff" id="context"> // assignment expression (level 13)
 assignmentExpression
         :        conditionalExpression
</pre><pre class="diff" id="removed">-        (        (assignmentOperator)=&gt; assignmentOperator
</pre><pre class="diff" id="added">+        (        (assignmentOperator)=&gt; o=assignmentOperator^
</pre><pre class="diff" id="context">                 assignmentExpression
</pre><pre class="diff" id="added">+                {demarcate($o.tree);}
</pre><pre class="diff" id="context">         )*
         
 
</pre><pre class="diff"><small id="info">@@ -868,7 +874,7 @@
</small></pre><pre class="diff" id="context"> // logical or (||)  (level 11)
 logicalOrExpression
         :        logicalAndExpression
</pre><pre class="diff" id="removed">-                (logicalOrOperator^ logicalAndExpression)*
</pre><pre class="diff" id="added">+                (o=logicalOrOperator^ logicalAndExpression {demarcate($o.tree);})*
</pre><pre class="diff" id="context">         
 
 logicalOrOperator
</pre><pre class="diff"><small id="info">@@ -878,7 +884,7 @@
</small></pre><pre class="diff" id="context"> // logical and (&amp;&amp;)  (level 10)
 logicalAndExpression
         :        bitwiseOrExpression
</pre><pre class="diff" id="removed">-                (logicalAndOperator^ bitwiseOrExpression)*
</pre><pre class="diff" id="added">+                (o=logicalAndOperator^ bitwiseOrExpression {demarcate($o.tree);})*
</pre><pre class="diff" id="context">         
 
 logicalAndOperator
</pre><pre class="diff"><small id="info">@@ -888,26 +894,27 @@
</small></pre><pre class="diff" id="context"> // bitwise or non-short-circuiting or (|)  (level 9)
 bitwiseOrExpression
         :        bitwiseXorExpression
</pre><pre class="diff" id="removed">-                (BOR^ bitwiseXorExpression)*
</pre><pre class="diff" id="added">+                (o=BOR^ bitwiseXorExpression {demarcate($o.tree);})*
</pre><pre class="diff" id="context">         
 
 // exclusive or (^)  (level 8)
 bitwiseXorExpression
         :        bitwiseAndExpression
</pre><pre class="diff" id="removed">-                (BXOR^ bitwiseAndExpression)*
</pre><pre class="diff" id="added">+                (o=BXOR^ bitwiseAndExpression {demarcate($o.tree);})*
</pre><pre class="diff" id="context">         
 
 // bitwise or non-short-circuiting and (&amp;)  (level 7)
 bitwiseAndExpression
         :        equalityExpression
</pre><pre class="diff" id="removed">-                (BAND^ equalityExpression)*
</pre><pre class="diff" id="added">+                (o=BAND^ equalityExpression {demarcate($o.tree);})*
</pre><pre class="diff" id="context">         
 
 // equality/inequality (==/!=) (level 6)
 equalityExpression
         :        relationalExpression
</pre><pre class="diff" id="removed">-        (        equalityOperator^
</pre><pre class="diff" id="added">+        (        <span id="addedchars">o=</span>equalityOperator^
</pre><pre class="diff" id="context">                 relationalExpression
</pre><pre class="diff" id="added">+                {demarcate($o.tree);}
</pre><pre class="diff" id="context">         )*
         
 
</pre><pre class="diff"><small id="info">@@ -918,7 +925,7 @@
</small></pre><pre class="diff" id="context"> // boolean relational expressions (level 5)
 relationalExpression
         :        shiftExpression
</pre><pre class="diff" id="removed">-                ((relationalOperator)=&gt; relationalOperator^ shiftExpression)*
</pre><pre class="diff" id="added">+                ((relationalOperator)=&gt; o=relationalOperator^ shiftExpression {demarcate($o.tree);})*
</pre><pre class="diff" id="context">         
 
 relationalOperator
</pre><pre class="diff"><small id="info">@@ -929,7 +936,7 @@
</small></pre><pre class="diff" id="context"> // bit shift expressions (level 4)
 shiftExpression
         :        additiveExpression
</pre><pre class="diff" id="removed">-                (shiftOperator^ additiveExpression)*
</pre><pre class="diff" id="added">+                (o=shiftOperator^ additiveExpression {demarcate($o.tree);})*
</pre><pre class="diff" id="context">         
 
 shiftOperator
</pre><pre class="diff"><small id="info">@@ -939,7 +946,7 @@
</small></pre><pre class="diff" id="context"> // binary addition/subtraction (level 3)
 additiveExpression
         :        multiplicativeExpression
</pre><pre class="diff" id="removed">-                (additiveOperator^ multiplicativeExpression )*
</pre><pre class="diff" id="added">+                (o=additiveOperator^ multiplicativeExpression {demarcate($o.tree);})*
</pre><pre class="diff" id="context">         
 
 additiveOperator
</pre><pre class="diff"><small id="info">@@ -949,8 +956,9 @@
</small></pre><pre class="diff" id="context"> // multiplication/division/modulo (level 2)
 multiplicativeExpression
         :        unaryExpression
</pre><pre class="diff" id="removed">-                (        multiplicativeOperator^
</pre><pre class="diff" id="added">+                (        <span id="addedchars">o=</span>multiplicativeOperator^
</pre><pre class="diff" id="context">                         unaryExpression
</pre><pre class="diff" id="added">+                        {demarcate($o.tree);}
</pre><pre class="diff" id="context">                 )*
         
 
</pre></div>
<hr /><a name="file2" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/test/java/uk/co/badgersinfoil/metaas</span><br />
<div class="fileheader" id="added"><big><b>TokenBoundryTests.java</b></big> <small id="info">added at 524</small></div>
<pre class="diff"><small id="info">--- trunk/src/test/java/uk/co/badgersinfoil/metaas/TokenBoundryTests.java                                (rev 0)
+++ trunk/src/test/java/uk/co/badgersinfoil/metaas/TokenBoundryTests.java        2007-09-02 13:01:58 UTC (rev 524)
@@ -0,0 +1,101 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas;
+
+import java.io.StringWriter;
+import uk.co.badgersinfoil.metaas.dom.ASBinaryExpression;
+import uk.co.badgersinfoil.metaas.dom.ASExpression;
+import uk.co.badgersinfoil.metaas.impl.AS3FragmentParser;
+import uk.co.badgersinfoil.metaas.impl.ASTASExpression;
+import uk.co.badgersinfoil.metaas.impl.ASTPrinter;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+import junit.framework.TestCase;
+
+public class TokenBoundryTests extends TestCase {
+        private ActionScriptFactory fact = new ActionScriptFactory();
+        private ASBinaryExpression expr;
+
+        public void setUp() {
+                expr = null;
+        }
+
+        public void tearDown() {
+                if (expr != null) {
+                        StringWriter buff = new StringWriter();
+                        LinkedListTree ast = ((ASTASExpression)expr).getAST();
+                        new ASTPrinter(buff).print(ast);
+                        LinkedListTree parsed = AS3FragmentParser.parseExpr(buff.toString());
+                        CodeMirror.assertASTMatch(ast, parsed);
+                }
+        }
+
<a name="task1" />+        // <span class="task">TODO</span>: expression list
+
+//
<a name="task2" />+//<span class="task">TODO</span>:        public void testAssignment() {
+//                expr = (ASBinaryExpression)fact.newExpression("a = b = c");
+//                ASExpression left = fact.newExpression("foo");
+//                expr.setLeftSubexpression(left);
+//        }
+
<a name="task3" />+        // <span class="task">TODO</span>: conditional expression
+
+        public void testLogicalOr() {
+                expr = (ASBinaryExpression)fact.newExpression("a || b || c");
+                ASExpression left = fact.newExpression("foo");
+                expr.setLeftSubexpression(left);
+        }
+
+        public void testLogicalAnd() {
+                expr = (ASBinaryExpression)fact.newExpression("a &amp;&amp; b &amp;&amp; c");
+                ASExpression left = fact.newExpression("foo");
+                expr.setLeftSubexpression(left);
+        }
+
+        public void testBitOr() {
+                expr = (ASBinaryExpression)fact.newExpression("a | b | c");
+                ASExpression left = fact.newExpression("foo");
+                expr.setLeftSubexpression(left);
+        }
+
+        public void testXor() {
+                expr = (ASBinaryExpression)fact.newExpression("a ^ b ^ c");
+                ASExpression left = fact.newExpression("foo");
+                expr.setLeftSubexpression(left);
+        }
+
+        public void testBitAnd() {
+                expr = (ASBinaryExpression)fact.newExpression("a &amp; b &amp; c");
+                ASExpression left = fact.newExpression("foo");
+                expr.setLeftSubexpression(left);
+        }
+
+        public void testEquality() {
+                expr = (ASBinaryExpression)fact.newExpression("a == b == c");
+                ASExpression left = fact.newExpression("foo");
+                expr.setLeftSubexpression(left);
+        }
+
+        public void testRelational() {
+                // not strictly possible (I wonder if the grammar should forbid?)
+                expr = (ASBinaryExpression)fact.newExpression("a &lt; b &lt; c");
+                ASExpression left = fact.newExpression("foo");
+                expr.setLeftSubexpression(left);
+        }
+
+        public void testShift() {
+                expr = (ASBinaryExpression)fact.newExpression("a &lt;&lt; b &lt;&lt; c");
+                ASExpression left = fact.newExpression("foo");
+                expr.setLeftSubexpression(left);
+        }
+
+        public void testAdditive() {
+                expr = (ASBinaryExpression)fact.newExpression("1 + 2 + 2");
+                ASExpression left = fact.newIntegerLiteral(1);
+                expr.setLeftSubexpression(left);
+        }
+
+        public void testMultiplicative() {
+                expr = (ASBinaryExpression)fact.newExpression("1 * 2 * 2");
+                ASExpression left = fact.newIntegerLiteral(1);
+                expr.setLeftSubexpression(left);
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<center><small><a href="http://www.badgers-in-foil.co.uk/projects/cvsspam/" title="commit -&gt; email">CVSspam</a> 0.2.12</small></center>
</body></html>