<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/java/uk/co/badgersinfoil/metaas/<a href="#file1"><span id="added">ASTASIntegerLiteral.java</span></a></tt> </td><td></td><td align="right" id="added">+20</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt>main/java/uk/co/badgersinfoil/metaas/dom/<a href="#file2"><span id="added">ASBinaryExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+60</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file3"><span id="added">ASExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+5</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file4"><span id="added">ASIntegerLiteral.java</span></a></tt> </td><td></td><td align="right" id="added">+6</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file5"><span id="added">ASLiteral.java</span></a></tt> </td><td></td><td align="right" id="added">+5</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file6"><span id="added">ASNewExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+10</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file7"><span id="added">ASNullLiteral.java</span></a></tt> </td><td></td><td align="right" id="added">+6</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file8"><span id="added">ASPostfixExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+26</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file9"><span id="added">ASPrefixExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+30</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file10"><span id="added">ASStringLiteral.java</span></a></tt> </td><td></td><td align="right" id="added">+6</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file11"><span id="added">ASTASNewExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+48</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt>main/java/uk/co/badgersinfoil/metaas/impl/<a href="#file12"><span id="added">ASTASBinaryExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+43</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file13"><span id="added">ASTASExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+31</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file14"><span id="added">ASTASFieldAccessExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+10</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file15"><span id="added">ASTASLiteral.java</span></a></tt> </td><td></td><td align="right" id="added">+19</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file16"><span id="added">ASTASNullLiteral.java</span></a></tt> </td><td></td><td align="right" id="added">+11</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file17"><span id="added">ASTASPostfixExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+31</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file18"><span id="added">ASTASPrefixExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+31</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file19"><span id="added">ASTASStringLiteral.java</span></a></tt> </td><td></td><td align="right" id="added">+20</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file20"><span id="added">ASTASUnresolvedNameExpression.java</span></a></tt> </td><td></td><td align="right" id="added">+14</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file21">ASTBuilder.java</a></tt> </td><td></td><td align="right" id="added">+18</td><td></td><td nowrap="nowrap" align="center">472 -> 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file22">ASTUtils.java</a></tt> </td><td></td><td align="right" id="added">+1</td><td></td><td nowrap="nowrap" align="center">472 -> 473</td></tr>
<tr><td><tt> /<a href="#file23"><span id="added">BinaryOperatorMap.java</span></a></tt> </td><td></td><td align="right" id="added">+59</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file24"><span id="added">ExpressionBuilder.java</span></a></tt> </td><td></td><td align="right" id="added">+51</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file25"><span id="added">PostfixOperatorMap.java</span></a></tt> </td><td></td><td align="right" id="added">+41</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file26"><span id="added">PrefixOperatorMap.java</span></a></tt> </td><td></td><td align="right" id="added">+45</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file27">TokenBuilder.java</a></tt> </td><td></td><td align="right" id="added">+96</td><td></td><td nowrap="nowrap" align="center">472 -> 473</td></tr>
<tr class="alt"><td><tt>test/java/uk/co/badgersinfoil/metaas/<a href="#file28"><span id="added">BinaryExpressionTests.java</span></a></tt> </td><td></td><td align="right" id="added">+154</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file29"><span id="added">EnumAssert.java</span></a></tt> </td><td></td><td align="right" id="added">+25</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file30"><span id="added">ExpressionParseTests.java</span></a></tt> </td><td></td><td align="right" id="added">+42</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file31"><span id="added">LiteralTests.java</span></a></tt> </td><td></td><td align="right" id="added">+29</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file32"><span id="added">NewExpressionTests.java</span></a></tt> </td><td></td><td align="right" id="added">+45</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td><tt> /<a href="#file33"><span id="added">PostfixExpressionTests.java</span></a></tt> </td><td></td><td align="right" id="added">+57</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr class="alt"><td><tt> /<a href="#file34"><span id="added">PrefixExpressionTests.java</span></a></tt> </td><td></td><td align="right" id="added">+72</td><td></td><td nowrap="nowrap" align="right">added 473</td></tr>
<tr><td></td><td></td><td align="right" id="added">+1167</td><td></td><td></td></tr>
</table>
<small id="info">31 added + 3 modified, total 34 files</small><br />
<div class="tasklist"><ul>
<li><a href="#task1">TODO: handle operator precidence issues</a></li>
<li><a href="#task2">TODO: handle operator precidence issues</a></li>
<li><a href="#task3">TODO: handle operator precidence issues</a></li>
</ul></div>
<pre class="comment">
Groundwork for a model of expressions. Far from complete or correct.
</pre>
<hr /><a name="file1" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas</span><br />
<div class="fileheader" id="added"><big><b>ASTASIntegerLiteral.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/ASTASIntegerLiteral.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/ASTASIntegerLiteral.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,20 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas;
+
+import uk.co.badgersinfoil.metaas.dom.ASIntegerLiteral;
+import uk.co.badgersinfoil.metaas.impl.ASTASLiteral;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASIntegerLiteral extends ASTASLiteral implements ASIntegerLiteral {
+
+        public ASTASIntegerLiteral(LinkedListTree ast) {
+                super(ast);
+        }
+
+        public int getValue() {
+                return Integer.parseInt(getTokenText());
+        }
+
+        public void setValue(int value) {
+                setTokenText(String.valueOf(value));
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file2" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader" id="added"><big><b>ASBinaryExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASBinaryExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASBinaryExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,60 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+public interface ASBinaryExpression extends ASExpression {
+        public Op getOperator();
+        public void setOperator(Op operator);
+        public ASExpression getLeftSubexpression();
+        public void setLeftSubexpression(ASExpression left);
+        public ASExpression getRightSubexpression();
+        public void setRightSubexpression(ASExpression right);
+
+        public static class Op {
+                private String name;
+                private Op(String name) {
+                        this.name = name;
+                }
+
+                /** Addition '+' */
+                public static final Op ADD = new Op("ADD");
+                /** Logical and '&&' */
+                public static final Op AND = new Op("AND");
+                /** Bit-wise and '&' */
+                public static final Op BITAND = new Op("BITAND");
+                /** Bit-wise or '|' */
+                public static final Op BITOR = new Op("BITOR");
+                /** Bit-wise xor '^' */
+                public static final Op BITXOR = new Op("BITXOR");
+                /** Division '/' */
+                public static final Op DIV = new Op("DIV");
+                /** Equality '==' */
+                public static final Op EQ = new Op("EQ");
+                /** Greater-than-or-equals '>=' */
+                public static final Op GE = new Op("GE");
+                /** Strictly greater-than '>' */
+                public static final Op GT = new Op("GT");
+                /** Less-than-or-equals '<=' */
+                public static final Op LE = new Op("LE");
+                /** Strictly less-than '<' */
+                public static final Op LT = new Op("LT");
+                /** Modulo '%' */
+                public static final Op MOD = new Op("MOD");
+                /** Multiplication '*' */
+                public static final Op MUL = new Op("MUL");
+                /** Not equal '!=' */
+                public static final Op NE = new Op("NE");
+                /** Logical or '||' */
+                public static final Op OR = new Op("OR");
+                /** Shift left '<<' */
+                public static final Op SL = new Op("SL");
+                /** Shift right '>>' */
+                public static final Op SR = new Op("SR");
+                /** Shift right, unsigned '>>>' */
+                public static final Op SRU = new Op("SRU");
+                /** Subtraction '-' */
+                public static final Op SUB = new Op("SUB");
+                
+                public String toString() {
+                        return name;
+                }
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file3" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader" id="added"><big><b>ASExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,5 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+public interface ASExpression extends ScriptElement {
+
+}
</pre></div>
<hr /><a name="file4" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader" id="added"><big><b>ASIntegerLiteral.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASIntegerLiteral.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASIntegerLiteral.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,6 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+public interface ASIntegerLiteral extends ASLiteral {
+        public int getValue();
+        public void setValue(int value);
+}
</pre></div>
<hr /><a name="file5" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader" id="added"><big><b>ASLiteral.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASLiteral.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASLiteral.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,5 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+public interface ASLiteral extends ASExpression {
+
+}
</pre></div>
<hr /><a name="file6" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader" id="added"><big><b>ASNewExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASNewExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASNewExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,10 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+import java.util.List;
+
+public interface ASNewExpression extends ASExpression {
+        public ASExpression getExpression();
+        public void setExpression(ASExpression expr);
+        public List getArguments();
+        public void setArguments(List args);
+}
</pre></div>
<hr /><a name="file7" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader" id="added"><big><b>ASNullLiteral.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASNullLiteral.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASNullLiteral.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,6 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+
+public interface ASNullLiteral extends ASLiteral {
+        
+}
</pre></div>
<hr /><a name="file8" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader" id="added"><big><b>ASPostfixExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASPostfixExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASPostfixExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,26 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+import uk.co.badgersinfoil.metaas.dom.ASPrefixExpression.Op;
+
+public interface ASPostfixExpression extends ASExpression {
+        public Op getOperator();
+        public void setOperator(Op operator);
+        public ASExpression getSubexpression();
+        public void setSubexpression(ASExpression expression);
+        
+        public static class Op {
+                private String name;
+                private Op(String name) {
+                        this.name = name;
+                }
+
+                /** Post-decrement <code>expr--</code> */
+                public static final Op POSTDEC = new Op("POSTDEC");
+                /** Post-increment <code>expr++</code> */
+                public static final Op POSTINC = new Op("POSTINC");
+
+                public String toString() {
+                        return name;
+                }                
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file9" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader" id="added"><big><b>ASPrefixExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASPrefixExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASPrefixExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,30 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+public interface ASPrefixExpression extends ASExpression {
+        public Op getOperator();
+        public void setOperator(Op operator);
+        public ASExpression getSubexpression();
+        public void setSubexpression(ASExpression expression);
+        
+        public static class Op {
+                private String name;
+                private Op(String name) {
+                        this.name = name;
+                }
+
+                /** Negation <code>-expr</code> */
+                public static final Op NEG = new Op("NEG");
+                /** Inverse <code>!expr</code> */
+                public static final Op NOT = new Op("NOT");
+                /** Positive expression <code>+expr</code> */
+                public static final Op POS = new Op("POS");
+                /** Pre-decrement <code>--expr</code> */
+                public static final Op PREDEC = new Op("PREDEC");
+                /** Pre-increment <code>++expr</code> */
+                public static final Op PREINC = new Op("PREINC");
+
+                public String toString() {
+                        return name;
+                }                
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file10" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader" id="added"><big><b>ASStringLiteral.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASStringLiteral.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASStringLiteral.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,6 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+public interface ASStringLiteral extends ASLiteral {
+        public String getValue();
+        public void setValue(String value);
+}
</pre></div>
<hr /><a name="file11" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader" id="added"><big><b>ASTASNewExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASTASNewExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASTASNewExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,48 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.asdt.core.internal.antlr.AS3Parser;
+import uk.co.badgersinfoil.metaas.impl.ASTASExpression;
+import uk.co.badgersinfoil.metaas.impl.ASTIterator;
+import uk.co.badgersinfoil.metaas.impl.ASTUtils;
+import uk.co.badgersinfoil.metaas.impl.ExpressionBuilder;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+
+public class ASTASNewExpression extends ASTASExpression implements
+                ASNewExpression {
+
+        public ASTASNewExpression(LinkedListTree ast) {
+                super(ast);
+        }
+
+        public List getArguments() {
+                LinkedListTree args = ASTUtils.findChildByType(ast, AS3Parser.ARGUMENTS);
+                ASTIterator i = new ASTIterator(args);
+                List result = new ArrayList(args.getChildCount());
+                while (i.hasNext()) {
+                        result.add(ExpressionBuilder.build(i.next()));
+                }
+                return Collections.unmodifiableList(result);
+        }
+
+        public ASExpression getExpression() {
+                return ExpressionBuilder.build(ast.getFirstChild());
+        }
+
+        public void setArguments(List args) {
+                LinkedListTree arguments = ASTUtils.findChildByType(ast, AS3Parser.ARGUMENTS);                
+                for (Iterator i=args.iterator(); i.hasNext(); ) {
+                        ASTASExpression arg = (ASTASExpression)i.next();
+                        arguments.addChildWithTokens(arg.getAST());
+                }
+        }
+
+        public void setExpression(ASExpression expr) {
+                LinkedListTree exprAST = ((ASTASExpression)expr).getAST();
+                ast.setChildWithTokens(0, exprAST);
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file12" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>ASTASBinaryExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASBinaryExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASBinaryExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,43 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import uk.co.badgersinfoil.metaas.dom.ASBinaryExpression;
+import uk.co.badgersinfoil.metaas.dom.ASExpression;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASBinaryExpression extends ASTASExpression
+ implements ASBinaryExpression
+{
+        public ASTASBinaryExpression(LinkedListTree ast) {
+                super(ast);
+        }
+
+        public ASExpression getLeftSubexpression() {
+                return ExpressionBuilder.build(ast.getFirstChild());
+        }
+
+        public Op getOperator() {
+                return BinaryOperatorMap.opFromType(ast.getType());
+        }
+
+        public ASExpression getRightSubexpression() {
+                return ExpressionBuilder.build(ast.getLastChild());
+        }
+
+        public void setLeftSubexpression(ASExpression left) {
+                setSubexpression(0, left);
+        }
+
+        public void setOperator(Op operator) {
+                BinaryOperatorMap.initialiseFromOp(operator, ast.getToken());
+        }
+
+        public void setRightSubexpression(ASExpression right) {
+                setSubexpression(1, right);
+        }
+
+        private void setSubexpression(int index, ASExpression subexpression) {
+                ASTASExpression sub = (ASTASExpression)subexpression;
<a name="task1" />+                // <span class="task">TODO</span>: handle operator precidence issues
+                ast.setChildWithTokens(index, sub.getAST());
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file13" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>ASTASExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,31 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import uk.co.badgersinfoil.metaas.dom.ASExpression;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASExpression implements ASExpression {
+
+        protected LinkedListTree ast;
+
+        public ASTASExpression(LinkedListTree ast) {
+                this.ast = ast;
+        }
+
+        public LinkedListTree getAST() {
+                return ast;
+        }
+
+        // equals()/hashCode() useful for unit tests
+
+        public boolean equals(Object o) {
+                if (o.getClass() != getClass()) {
+                        return false;
+                }
+                ASTASExpression expr = (ASTASExpression)o;
+                return ast == expr.ast;
+        }
+
+        public int hashCode() {
+                return ast.hashCode();
+        }
+}
</pre></div>
<hr /><a name="file14" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>ASTASFieldAccessExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASFieldAccessExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASFieldAccessExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,10 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASFieldAccessExpression extends ASTASExpression {
+
+        public ASTASFieldAccessExpression(LinkedListTree ast) {
+                super(ast);
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file15" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>ASTASLiteral.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASLiteral.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASLiteral.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,19 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import uk.co.badgersinfoil.metaas.dom.ASLiteral;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public abstract class ASTASLiteral extends ASTASExpression implements ASLiteral {
+
+        public ASTASLiteral(LinkedListTree ast) {
+                super(ast);
+        }
+
+        protected String getTokenText() {
+                return ast.getText();
+        }
+
+        protected void setTokenText(String text) {
+                ast.getToken().setText(text);
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file16" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>ASTASNullLiteral.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASNullLiteral.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASNullLiteral.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,11 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import uk.co.badgersinfoil.metaas.dom.ASNullLiteral;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASNullLiteral extends ASTASLiteral implements ASNullLiteral {
+
+        public ASTASNullLiteral(LinkedListTree ast) {
+                super(ast);
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file17" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>ASTASPostfixExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASPostfixExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASPostfixExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,31 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import uk.co.badgersinfoil.metaas.dom.ASExpression;
+import uk.co.badgersinfoil.metaas.dom.ASPostfixExpression;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASPostfixExpression extends ASTASExpression implements
+                ASPostfixExpression {
+
+        public ASTASPostfixExpression(LinkedListTree ast) {
+                super(ast);
+        }
+
+        public Op getOperator() {
+                return PostfixOperatorMap.opFromType(ast.getType());
+        }
+
+        public ASExpression getSubexpression() {
+                return ExpressionBuilder.build(ast.getFirstChild());
+        }
+
+        public void setOperator(Op operator) {
+                PostfixOperatorMap.initialiseFromOp(operator, ast.getToken());
+        }
+
+        public void setSubexpression(ASExpression subexpression) {
+                ASTASExpression sub = (ASTASExpression)subexpression;
<a name="task2" />+                // <span class="task">TODO</span>: handle operator precidence issues
+                ast.setChildWithTokens(0, sub.getAST());
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file18" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>ASTASPrefixExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASPrefixExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASPrefixExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,31 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import uk.co.badgersinfoil.metaas.dom.ASExpression;
+import uk.co.badgersinfoil.metaas.dom.ASPrefixExpression;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASPrefixExpression extends ASTASExpression implements
+                ASPrefixExpression {
+
+        public ASTASPrefixExpression(LinkedListTree ast) {
+                super(ast);
+        }
+
+        public Op getOperator() {
+                return PrefixOperatorMap.opFromType(ast.getType());
+        }
+
+        public ASExpression getSubexpression() {
+                return ExpressionBuilder.build(ast.getFirstChild());
+        }
+
+        public void setOperator(Op operator) {
+                PrefixOperatorMap.initialiseFromOp(operator, ast.getToken());
+        }
+
+        public void setSubexpression(ASExpression subexpression) {
+                ASTASExpression sub = (ASTASExpression)subexpression;
<a name="task3" />+                // <span class="task">TODO</span>: handle operator precidence issues
+                ast.setChildWithTokens(0, sub.getAST());
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file19" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>ASTASStringLiteral.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASStringLiteral.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASStringLiteral.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,20 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import uk.co.badgersinfoil.metaas.ActionScriptFactory;
+import uk.co.badgersinfoil.metaas.dom.ASStringLiteral;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASStringLiteral extends ASTASLiteral implements ASStringLiteral {
+
+        public ASTASStringLiteral(LinkedListTree ast) {
+                super(ast);
+        }
+
+        public String getValue() {
+                return ASTUtils.decodeStringLiteral(getTokenText());
+        }
+
+        public void setValue(String value) {
+                setTokenText(ActionScriptFactory.str(value));
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file20" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>ASTASUnresolvedNameExpression.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASUnresolvedNameExpression.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASUnresolvedNameExpression.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,14 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASUnresolvedNameExpression extends ASTASExpression {
+        
+        public ASTASUnresolvedNameExpression(LinkedListTree ast) {
+                super(ast);
+        }
+
+        public String getName() {
+                return getAST().getText();
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file21" /><div class="file">
<span class="pathname">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader"><big><b>ASTBuilder.java</b></big> <small id="info">472 -> 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTBuilder.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTBuilder.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -8,7 +8,9 @@
</small></pre><pre class="diff" id="context">
import org.asdt.core.internal.antlr.AS3Parser;
import uk.co.badgersinfoil.metaas.SyntaxException;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.dom.ASBinaryExpression;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASCompilationUnit;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.dom.ASExpression;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.Visibility;
import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListToken;
import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
</pre><pre class="diff"><small id="info">@@ -313,4 +315,20 @@
</small></pre><pre class="diff" id="context">                 returnStmt.appendToken(TokenBuilder.newSemi());
                return returnStmt;
        }
</pre><pre class="diff" id="added">+
+        public static ASBinaryExpression newBinaryExpression(LinkedListToken op, ASExpression left, ASExpression right) {
+                LinkedListTree ast = ASTUtils.newAST(op);
+                LinkedListTree leftExpr = ((ASTASExpression)left).getAST();
+                LinkedListTree rightExpr = ((ASTASExpression)right).getAST();
+                // don't use addChildWithTokens(); special handling below,
+                ast.addChild(leftExpr);
+                ast.addChild(rightExpr);
+                leftExpr.getStopToken().setNext(op);
+                rightExpr.getStartToken().setPrev(op);
+                ast.setStartToken(leftExpr.getStartToken());
+                ast.setStopToken(rightExpr.getStopToken());
+                op.beforeInsert(TokenBuilder.newSpace());
+                op.afterInsert(TokenBuilder.newSpace());
+                return new ASTASBinaryExpression(ast);
+        }
</pre><pre class="diff" id="context"> }
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file22" /><div class="file">
<span class="pathname">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader"><big><b>ASTUtils.java</b></big> <small id="info">472 -> 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTUtils.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTUtils.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -51,6 +51,7 @@
</small></pre><pre class="diff" id="context">                                         return metadataTagDelegate;
                                 case AS3Parser.PARAMS:
                                 case AS3Parser.ANNOTATION_PARAMS:
</pre><pre class="diff" id="added">+                                 case AS3Parser.ARGUMENTS:
</pre><pre class="diff" id="context">                                         return paramsDelegate;
                                 default:
                                        return basicDelegate;
</pre></div>
<hr /><a name="file23" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>BinaryOperatorMap.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/BinaryOperatorMap.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/BinaryOperatorMap.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,59 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.antlr.runtime.Token;
+import org.asdt.core.internal.antlr.AS3Parser;
+import uk.co.badgersinfoil.metaas.dom.ASBinaryExpression;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListToken;
+
+public class BinaryOperatorMap {
+
+        private static final Map OPERATORS_BY_TYPE = new HashMap();
+        private static final Map TYPES_BY_OPERATOR = new HashMap();
+
+        private static void mapOp(int type, String text, ASBinaryExpression.Op operator) {
+                OPERATORS_BY_TYPE.put(new Integer(type), operator);
+                TYPES_BY_OPERATOR.put(operator, new LinkedListToken(type, text));
+        }
+
+        static {
+                mapOp(AS3Parser.PLUS, "+", ASBinaryExpression.Op.ADD);
+                mapOp(AS3Parser.LAND, "&&", ASBinaryExpression.Op.AND);
+                mapOp(AS3Parser.BAND, "&", ASBinaryExpression.Op.BITAND);
+                mapOp(AS3Parser.BOR, "|", ASBinaryExpression.Op.BITOR);
+                mapOp(AS3Parser.BXOR, "^", ASBinaryExpression.Op.BITXOR);
+                mapOp(AS3Parser.DIV, "/", ASBinaryExpression.Op.DIV);
+                mapOp(AS3Parser.EQUAL, "==", ASBinaryExpression.Op.EQ);
+                mapOp(AS3Parser.GE, ">=", ASBinaryExpression.Op.GE);
+                mapOp(AS3Parser.GT, ">", ASBinaryExpression.Op.GT);
+                mapOp(AS3Parser.LE, "<=", ASBinaryExpression.Op.LE);
+                mapOp(AS3Parser.LT, "<", ASBinaryExpression.Op.LT);
+                mapOp(AS3Parser.MOD, "%", ASBinaryExpression.Op.MOD);
+                mapOp(AS3Parser.STAR, "*", ASBinaryExpression.Op.MUL);
+                mapOp(AS3Parser.NOT_EQUAL, "!=", ASBinaryExpression.Op.NE);
+                mapOp(AS3Parser.LOR, "||", ASBinaryExpression.Op.OR);
+                mapOp(AS3Parser.SL, "<<", ASBinaryExpression.Op.SL);
+                mapOp(AS3Parser.SR, ">>", ASBinaryExpression.Op.SR);
+                mapOp(AS3Parser.BSR, ">>>", ASBinaryExpression.Op.SRU);
+                mapOp(AS3Parser.MINUS, "-", ASBinaryExpression.Op.SUB);
+        }
+
+
+        public static ASBinaryExpression.Op opFromType(int type) {
+                ASBinaryExpression.Op op = (ASBinaryExpression.Op)OPERATORS_BY_TYPE.get(new Integer(type));
+                if (op == null) {
+                        throw new IllegalArgumentException("No operator for token-type "+ASTUtils.tokenName(type));
+                }
+                return op;
+        }
+
+        public static void initialiseFromOp(ASBinaryExpression.Op operator, Token tok) {
+                LinkedListToken type = (LinkedListToken)TYPES_BY_OPERATOR.get(operator);
+                if (type == null) {
+                        throw new IllegalArgumentException("No operator for Op "+operator);
+                }
+                tok.setType(type.getType());
+                tok.setText(type.getText());
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file24" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>ExpressionBuilder.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ExpressionBuilder.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ExpressionBuilder.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,51 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import org.asdt.core.internal.antlr.AS3Parser;
+import uk.co.badgersinfoil.metaas.ASTASIntegerLiteral;
+import uk.co.badgersinfoil.metaas.dom.ASExpression;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ExpressionBuilder {
+
+        public static ASExpression build(LinkedListTree ast) {
+                switch (ast.getType()) {
+                        case AS3Parser.DECIMAL_LITERAL:
+                                return new ASTASIntegerLiteral(ast);
+                        case AS3Parser.PLUS:
+                        case AS3Parser.LAND:
+                        case AS3Parser.BAND:
+                        case AS3Parser.BOR:
+                        case AS3Parser.BXOR:
+                        case AS3Parser.DIV:
+                        case AS3Parser.EQUAL:
+                        case AS3Parser.GE:
+                        case AS3Parser.GT:
+                        case AS3Parser.LE:
+                        case AS3Parser.LT:
+                        case AS3Parser.MOD:
+                        case AS3Parser.STAR:
+                        case AS3Parser.NOT_EQUAL:
+                        case AS3Parser.LOR:
+                        case AS3Parser.SL:
+                        case AS3Parser.SR:
+                        case AS3Parser.BSR:
+                        case AS3Parser.MINUS:
+                                return new ASTASBinaryExpression(ast);
+                        case AS3Parser.POST_DEC:
+                        case AS3Parser.POST_INC:
+                                return new ASTASPostfixExpression(ast);
+                        case AS3Parser.PRE_DEC:
+                        case AS3Parser.PRE_INC:
+                        case AS3Parser.UNARY_PLUS:
+                        case AS3Parser.UNARY_MINUS:
+                        case AS3Parser.LNOT:
+                                return new ASTASPrefixExpression(ast);
+                        case AS3Parser.IDENT:
+                                return new ASTASUnresolvedNameExpression(ast);
+                        case AS3Parser.PROPERTY_OR_IDENTIFIER:
+                                return new ASTASFieldAccessExpression(ast);
+                        default:
+                                throw new IllegalArgumentException("unhandled expression node type: "+ASTUtils.tokenName(ast));
+                }
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file25" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>PostfixOperatorMap.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/PostfixOperatorMap.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/PostfixOperatorMap.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,41 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.antlr.runtime.Token;
+import org.asdt.core.internal.antlr.AS3Parser;
+import uk.co.badgersinfoil.metaas.dom.ASPostfixExpression;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListToken;
+
+public class PostfixOperatorMap {
+        private static final Map OPERATORS_BY_TYPE = new HashMap();
+        private static final Map TYPES_BY_OPERATOR = new HashMap();
+
+        private static void mapOp(int type, String text, ASPostfixExpression.Op operator) {
+                OPERATORS_BY_TYPE.put(new Integer(type), operator);
+                TYPES_BY_OPERATOR.put(operator, new LinkedListToken(type, text));
+        }
+
+        static {
+                mapOp(AS3Parser.POST_DEC, "--", ASPostfixExpression.Op.POSTDEC);
+                mapOp(AS3Parser.POST_INC, "++", ASPostfixExpression.Op.POSTINC);
+        }
+
+
+        public static ASPostfixExpression.Op opFromType(int type) {
+                ASPostfixExpression.Op op = (ASPostfixExpression.Op)OPERATORS_BY_TYPE.get(new Integer(type));
+                if (op == null) {
+                        throw new IllegalArgumentException("No operator for token-type "+ASTUtils.tokenName(type));
+                }
+                return op;
+        }
+
+        public static void initialiseFromOp(ASPostfixExpression.Op operator, Token tok) {
+                LinkedListToken type = (LinkedListToken)TYPES_BY_OPERATOR.get(operator);
+                if (type == null) {
+                        throw new IllegalArgumentException("No operator for Op "+operator);
+                }
+                tok.setType(type.getType());
+                tok.setText(type.getText());
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file26" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader" id="added"><big><b>PrefixOperatorMap.java</b></big> <small id="info">added at 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/PrefixOperatorMap.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/PrefixOperatorMap.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -0,0 +1,45 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.antlr.runtime.Token;
+import org.asdt.core.internal.antlr.AS3Parser;
+import uk.co.badgersinfoil.metaas.dom.ASPrefixExpression;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListToken;
+
+public class PrefixOperatorMap {
+
+        private static final Map OPERATORS_BY_TYPE = new HashMap();
+        private static final Map TYPES_BY_OPERATOR = new HashMap();
+
+        private static void mapOp(int type, String text, ASPrefixExpression.Op operator) {
+                OPERATORS_BY_TYPE.put(new Integer(type), operator);
+                TYPES_BY_OPERATOR.put(operator, new LinkedListToken(type, text));
+        }
+
+        static {
+                mapOp(AS3Parser.UNARY_MINUS, "-", ASPrefixExpression.Op.NEG);
+                mapOp(AS3Parser.LNOT, "!", ASPrefixExpression.Op.NOT);
+                mapOp(AS3Parser.UNARY_PLUS, "+", ASPrefixExpression.Op.POS);
+                mapOp(AS3Parser.PRE_DEC, "--", ASPrefixExpression.Op.PREDEC);
+                mapOp(AS3Parser.PRE_INC, "++", ASPrefixExpression.Op.PREINC);
+        }
+
+
+        public static ASPrefixExpression.Op opFromType(int type) {
+                ASPrefixExpression.Op op = (ASPrefixExpression.Op)OPERATORS_BY_TYPE.get(new Integer(type));
+                if (op == null) {
+                        throw new IllegalArgumentException("No operator for token-type "+ASTUtils.tokenName(type));
+                }
+                return op;
+        }
+
+        public static void initialiseFromOp(ASPrefixExpression.Op operator, Token tok) {
+                LinkedListToken type = (LinkedListToken)TYPES_BY_OPERATOR.get(operator);
+                if (type == null) {
+                        throw new IllegalArgumentException("No operator for Op "+operator);
+                }
+                tok.setType(type.getType());
+                tok.setText(type.getText());
+        }
+}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file27" /><div class="file">
<span class="pathname">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader"><big><b>TokenBuilder.java</b></big> <small id="info">472 -> 473</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/TokenBuilder.java        2007-04-02 22:08:53 UTC (rev 472)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/TokenBuilder.java        2007-04-02 23:22:43 UTC (rev 473)
@@ -97,4 +97,100 @@
</small></pre><pre class="diff" id="context">                 placeholder.setChannel(AS3Parser.CHANNEL_PLACEHOLDER);
                return placeholder;
        }
</pre><pre class="diff" id="added">+
+        public static LinkedListToken newPlus() {
+                return newToken(AS3Parser.PLUS, "+");
+        }
+
+        public static LinkedListToken newAnd() {
+                return newToken(AS3Parser.LAND, "&&");
+        }
+
+        public static LinkedListToken newBitAnd() {
+                return newToken(AS3Parser.BAND, "&");
+        }
+
+        public static LinkedListToken newBitOr() {
+                return newToken(AS3Parser.BOR, "|");
+        }
+
+        public static LinkedListToken newBitXor() {
+                return newToken(AS3Parser.BXOR, "^");
+        }
+
+        public static LinkedListToken newDiv() {
+                return newToken(AS3Parser.DIV, "/");
+        }
+
+        public static LinkedListToken newEquals() {
+                return newToken(AS3Parser.EQUAL, "==");
+        }
+
+        public static LinkedListToken newGreaterEquals() {
+                return newToken(AS3Parser.GE, ">=");
+        }
+
+        public static LinkedListToken newGreater() {
+                return newToken(AS3Parser.GT, ">");
+        }
+
+        public static LinkedListToken newLessEquals() {
+                return newToken(AS3Parser.LE, "<=");
+        }
+
+        public static LinkedListToken newLess() {
+                return newToken(AS3Parser.LT, "<");
+        }
+
+        public static LinkedListToken newModulo() {
+                return newToken(AS3Parser.MOD, "%");
+        }
+
+        public static LinkedListToken newStar() {
+                return newToken(AS3Parser.STAR, "*");
+        }
+
+        public static LinkedListToken newNotEquals() {
+                return newToken(AS3Parser.NOT_EQUAL, "!=");
+        }
+
+        public static LinkedListToken newOr() {
+                return newToken(AS3Parser.LOR, "||");
+        }
+
+        public static LinkedListToken newShiftLeft() {
+                return newToken(AS3Parser.SL, "<<");
+        }
+
+        public static LinkedListToken newShiftRight() {
+                return newToken(AS3Parser.SR, ">>");
+        }
+
+        public static LinkedListToken newShiftRightUnsigned() {
+                return newToken(AS3Parser.BSR, ">>>");
+        }
+
+        public static LinkedListToken newMinus() {
+                return newToken(AS3Parser.MINUS, "-");
+        }
+
+        public static LinkedListToken newPreDec() {
+                return newToken(AS3Parser.PRE_DEC, "--");
+        }
+
+        public static LinkedListToken newPreInc() {
+                return newToken(AS3Parser.PRE_INC, "++");
+        }
+
+        public static LinkedListToken newNot() {
+                return newToken(AS3Parser.LNOT, "!");
+        }
+
+        public static LinkedListToken newPostDec() {
+             &