<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">+6</td><td align="right" id="removed">-1</td><td nowrap="nowrap" align="center">538 -&gt; 539</td></tr>
<tr class="alt"><td><tt>main/java/uk/co/badgersinfoil/metaas/dom/<a href="#file2"><span id="added">ASSuperStatement.java</span></a></tt> </td><td></td><td align="right" id="added">+20</td><td></td><td nowrap="nowrap" align="right">added 539</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file3">StatementContainer.java</a></tt> </td><td></td><td align="right" id="added">+6</td><td></td><td nowrap="nowrap" align="center">538 -&gt; 539</td></tr>
<tr class="alt"><td><tt>main/java/uk/co/badgersinfoil/metaas/impl/<a href="#file4">ASTASInvocationExpression.java</a></tt> </td><td></td><td align="right" id="added">+4</td><td align="right" id="removed">-23</td><td nowrap="nowrap" align="center">538 -&gt; 539</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file5">ASTASMethod.java</a></tt> </td><td></td><td align="right" id="added">+5</td><td></td><td nowrap="nowrap" align="center">538 -&gt; 539</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file6"><span id="added">ASTASSuperStatement.java</span></a></tt> </td><td></td><td align="right" id="added">+22</td><td></td><td nowrap="nowrap" align="right">added 539</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file7">ASTBuilder.java</a></tt> </td><td></td><td align="right" id="added">+13</td><td></td><td nowrap="nowrap" align="center">538 -&gt; 539</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file8">ASTStatementList.java</a></tt> </td><td></td><td align="right" id="added">+7</td><td></td><td nowrap="nowrap" align="center">538 -&gt; 539</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file9"><span id="added">ArgumentUtils.java</span></a></tt> </td><td></td><td align="right" id="added">+57</td><td></td><td nowrap="nowrap" align="right">added 539</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file10">ContainerDelegate.java</a></tt> </td><td></td><td align="right" id="added">+5</td><td align="right" id="removed">-1</td><td nowrap="nowrap" align="center">538 -&gt; 539</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file11">StatementBuilder.java</a></tt> </td><td></td><td align="right" id="added">+2</td><td></td><td nowrap="nowrap" align="center">538 -&gt; 539</td></tr>
<tr class="alt"><td><tt>test/java/uk/co/badgersinfoil/metaas/<a href="#file12">StatementTests.java</a></tt> </td><td></td><td align="right" id="added">+28</td><td align="right" id="removed">-1</td><td nowrap="nowrap" align="center">538 -&gt; 539</td></tr>
<tr><td></td><td></td><td align="right" id="added">+175</td><td align="right" id="removed">-26</td><td></td></tr>
</table>
<small id="info">3 added + 9 modified, total 12 files</small><br />
<pre class="comment">
basic support for 'super'-statements
</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">538 -&gt; 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/antlr/org/asdt/core/internal/antlr/AS3.g3        2007-10-06 23:17:58 UTC (rev 538)
+++ trunk/src/main/antlr/org/asdt/core/internal/antlr/AS3.g3        2007-10-27 15:25:51 UTC (rev 539)
@@ -437,7 +437,8 @@
</small></pre><pre class="diff" id="context">         
 
 statement
</pre><pre class="diff" id="removed">-        :        (LCURLY)=&gt; block
</pre><pre class="diff" id="added">+        :        superStatement
+        |        (LCURLY)=&gt; block
</pre><pre class="diff" id="context">         |        declarationStatement
         |        expressionStatement
         |        ifStatement
</pre><pre class="diff"><small id="info">@@ -479,6 +480,10 @@
</small></pre><pre class="diff" id="context">         |        SEMI!
         
 
</pre><pre class="diff" id="added">+superStatement
+        :        SUPER^ arguments semi
+        
+
</pre><pre class="diff" id="context"> declarationStatement
 scope InOperator;
 @init {
</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>ASSuperStatement.java</b></big> <small id="info">added at 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASSuperStatement.java                                (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASSuperStatement.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -0,0 +1,20 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+import java.util.List;
+
+/**
+ * Represents a call to a superclass constructor,
+ * &lt;pre class="eg"&gt;...
+ * super(args);
+ * ...&lt;/pre&gt;
+ */
+public interface ASSuperStatement extends Statement {
+        /**
+         * @param args a list of {@link ASExpression}
+         */
+        public void setArguments(List args);
+        /**
+         * @return a list of {@link ASExpression}
+         */
+        public List getArguments();
+}
</pre></div>
<hr /><a name="file3" /><div class="file">
<span class="pathname">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/dom</span><br />
<div class="fileheader"><big><b>StatementContainer.java</b></big> <small id="info">538 -&gt; 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/StatementContainer.java        2007-10-06 23:17:58 UTC (rev 538)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/StatementContainer.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -150,6 +150,12 @@
</small></pre><pre class="diff" id="context">         public ASReturnStatement newReturn();
 
         /**
</pre><pre class="diff" id="added">+         * Adds a call to the superclass constructor (assuming that this is
+         * itself a constructor).
+         */
+        public ASSuperStatement newSuper(List arguments);
+
+        /**
</pre><pre class="diff" id="context">          * Returns true if if this container currently contains at
          * least one statement, and false if it is empty, or contains only
          * comments and whitespace.
</pre></div>
<hr /><a name="file4" /><div class="file">
<span class="pathname">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader"><big><b>ASTASInvocationExpression.java</b></big> <small id="info">538 -&gt; 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASInvocationExpression.java        2007-10-06 23:17:58 UTC (rev 538)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASInvocationExpression.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -1,10 +1,6 @@
</small></pre><pre class="diff" id="context"> package uk.co.badgersinfoil.metaas.impl;
 
</pre><pre class="diff" id="removed">-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
</pre><pre class="diff" id="context"> import java.util.List;
</pre><pre class="diff" id="removed">-import org.asdt.core.internal.antlr.AS3Parser;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASExpression;
 import uk.co.badgersinfoil.metaas.dom.ASInvocationExpression;
 import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
</pre><pre class="diff"><small id="info">@@ -17,13 +13,8 @@
</small></pre><pre class="diff" id="context">         }
 
         public List getArguments() {
</pre><pre class="diff" id="removed">-                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);
</pre><pre class="diff" id="added">+                LinkedListTree args = ArgumentUtils.findArgs(ast);
+                return ArgumentUtils.astToExpressionList(args);
</pre><pre class="diff" id="context">         }
 
         public ASExpression getTargetExpression() {
</pre><pre class="diff"><small id="info">@@ -31,18 +22,8 @@
</small></pre><pre class="diff" id="context">         }
 
         public void setArguments(List args) {
</pre><pre class="diff" id="removed">-                LinkedListTree arguments = ASTUtils.findChildByType(ast, AS3Parser.ARGUMENTS);
-                // get rid of any old arguments,
-                ASTUtils.deleteAllChildren(arguments);
-                // add the new arguments,
-                for (Iterator i=args.iterator(); i.hasNext(); ) {
-                        ASTASExpression arg = (ASTASExpression)i.next();
-                        arguments.addChildWithTokens(arg.getAST());
-                        if (i.hasNext()) {
-                                arguments.appendToken(TokenBuilder.newComma());
-                                arguments.appendToken(TokenBuilder.newSpace());
-                        }
-                }
</pre><pre class="diff" id="added">+                LinkedListTree argumentNode = ArgumentUtils.findArgs(ast);
+                ArgumentUtils.overwriteArgsWithExpressionList(argumentNode, args);
</pre><pre class="diff" id="context">         }
 
         public void setTargetExpression(ASExpression expr) {
</pre></div>
<hr /><a name="file5" /><div class="file">
<span class="pathname">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader"><big><b>ASTASMethod.java</b></big> <small id="info">538 -&gt; 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASMethod.java        2007-10-06 23:17:58 UTC (rev 538)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASMethod.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -23,6 +23,7 @@
</small></pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASIfStatement;
 import uk.co.badgersinfoil.metaas.dom.ASMethod;
 import uk.co.badgersinfoil.metaas.dom.ASReturnStatement;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.dom.ASSuperStatement;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASSwitchStatement;
 import uk.co.badgersinfoil.metaas.dom.ASWhileStatement;
 import uk.co.badgersinfoil.metaas.dom.ASWithStatement;
</pre><pre class="diff"><small id="info">@@ -287,6 +288,10 @@
</small></pre><pre class="diff" id="context">                 return stmtList.newReturn();
         }
 
</pre><pre class="diff" id="added">+        public ASSuperStatement newSuper(List args) {
+                return stmtList.newSuper(args);
+        }
+
</pre><pre class="diff" id="context">         public boolean containsCode() {
                 return stmtList.containsCode();
         }
</pre></div>
<hr /><a name="file6" /><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>ASTASSuperStatement.java</b></big> <small id="info">added at 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASSuperStatement.java                                (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASSuperStatement.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -0,0 +1,22 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import java.util.List;
+import uk.co.badgersinfoil.metaas.dom.ASSuperStatement;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASSuperStatement implements ASSuperStatement {
+
+        private LinkedListTree ast;
+
+        public ASTASSuperStatement(LinkedListTree superStmt) {
+                ast = superStmt;
+        }
+
+        public List getArguments() {
+                return ArgumentUtils.astToExpressionList(ArgumentUtils.findArgs(ast));
+        }
+
+        public void setArguments(List args) {
+                ArgumentUtils.overwriteArgsWithExpressionList(ArgumentUtils.findArgs(ast), args);
+        }
+}
</pre></div>
<hr /><a name="file7" /><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">538 -&gt; 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTBuilder.java        2007-10-06 23:17:58 UTC (rev 538)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTBuilder.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -6,6 +6,7 @@
</small></pre><pre class="diff" id="context"> 
 package uk.co.badgersinfoil.metaas.impl;
 
</pre><pre class="diff" id="added">+import java.util.List;
</pre><pre class="diff" id="context"> import org.asdt.core.internal.antlr.AS3Parser;
 import uk.co.badgersinfoil.metaas.SyntaxException;
 import uk.co.badgersinfoil.metaas.dom.ASBinaryExpression;
</pre><pre class="diff"><small id="info">@@ -375,6 +376,18 @@
</small></pre><pre class="diff" id="context">                 return returnStmt;
         }
 
</pre><pre class="diff" id="added">+        /**
+         * @param args a list of ASExpression objects
+         */
+        public static LinkedListTree newSuperStatement(List args) {
+                LinkedListTree superStmt = ASTUtils.newAST(AS3Parser.SUPER, "super");
+                LinkedListTree argumentsNode = ASTUtils.newParentheticAST(AS3Parser.ARGUMENTS, AS3Parser.LPAREN, "(", AS3Parser.RPAREN, ")");
+                ArgumentUtils.overwriteArgsWithExpressionList(argumentsNode, args);
+                superStmt.addChildWithTokens(argumentsNode);
+                superStmt.appendToken(TokenBuilder.newSemi());
+                return superStmt;
+        }
+
</pre><pre class="diff" id="context">         public static ASBinaryExpression newBinaryExpression(LinkedListToken op, ASExpression left, ASExpression right) {
                 LinkedListTree ast = ASTUtils.newAST(op);
                 LinkedListTree leftExpr = ((ASTASExpression)left).getAST();
</pre></div>
<hr /><a name="file8" /><div class="file">
<span class="pathname">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader"><big><b>ASTStatementList.java</b></big> <small id="info">538 -&gt; 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTStatementList.java        2007-10-06 23:17:58 UTC (rev 538)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTStatementList.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -20,6 +20,7 @@
</small></pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASForStatement;
 import uk.co.badgersinfoil.metaas.dom.ASIfStatement;
 import uk.co.badgersinfoil.metaas.dom.ASReturnStatement;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.dom.ASSuperStatement;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASSwitchStatement;
 import uk.co.badgersinfoil.metaas.dom.ASWhileStatement;
 import uk.co.badgersinfoil.metaas.dom.ASWithStatement;
</pre><pre class="diff"><small id="info">@@ -205,6 +206,12 @@
</small></pre><pre class="diff" id="context">                 return new ASTASReturnStatement(returnStmt);
         }
 
</pre><pre class="diff" id="added">+        public ASSuperStatement newSuper(List args) {
+                LinkedListTree superStmt = ASTBuilder.newSuperStatement(args);
+                addStatement(superStmt);
+                return new ASTASSuperStatement(superStmt);
+        }
+
</pre><pre class="diff" id="context">         private void addStatement(LinkedListTree stmt) {
                 ASTUtils.addChildWithIndentation(ast, stmt);
         }
</pre></div>
<hr /><a name="file9" /><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>ArgumentUtils.java</b></big> <small id="info">added at 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ArgumentUtils.java                                (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ArgumentUtils.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -0,0 +1,57 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+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.antlr.LinkedListTree;
+
+/**
+ * Utilities for argument lists
+ */
+public class ArgumentUtils {
+
+        /**
+         * Finds the first child of the given AST node of type ARGUMENTS
+         * 
+         * @return the matching AST node, or null if none is found
+         */
+        public static LinkedListTree findArgs(LinkedListTree parent) {
+                return ASTUtils.findChildByType(parent, AS3Parser.ARGUMENTS);
+        }
+
+        /**
+         * 
+         * @param args the ARGUMENTS AST node
+         * @return a list of ASExpression
+         */
+        public static List astToExpressionList(LinkedListTree args) {
+                ASTIterator i = new ASTIterator(args);
+                List result = new ArrayList(args.getChildCount());
+                while (i.hasNext()) {
+                        result.add(ExpressionBuilder.build(i.next()));
+                }
+                return Collections.unmodifiableList(result);
+        }
+
+        /**
+         * 
+         * @param argumentNode the ARGUMENTS AST node
+         * @param args list of ASExpression objects to be used as the new
+         *        argument list
+         */
+        public static void overwriteArgsWithExpressionList(LinkedListTree argumentNode, List args) {
+                // get rid of any old arguments,
+                ASTUtils.deleteAllChildren(argumentNode);
+                // add the new arguments,
+                for (Iterator i=args.iterator(); i.hasNext(); ) {
+                        ASTASExpression arg = (ASTASExpression)i.next();
+                        argumentNode.addChildWithTokens(arg.getAST());
+                        if (i.hasNext()) {
+                                argumentNode.appendToken(TokenBuilder.newComma());
+                                argumentNode.appendToken(TokenBuilder.newSpace());
+                        }
+                }
+        }
+}
</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">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader"><big><b>ContainerDelegate.java</b></big> <small id="info">538 -&gt; 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ContainerDelegate.java        2007-10-06 23:17:58 UTC (rev 538)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ContainerDelegate.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -1,7 +1,6 @@
</small></pre><pre class="diff" id="context"> package uk.co.badgersinfoil.metaas.impl;
 
 import java.util.List;
</pre><pre class="diff" id="removed">-import uk.co.badgersinfoil.metaas.dom.ASBinaryExpression;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASDeclarationStatement;
 import uk.co.badgersinfoil.metaas.dom.ASDoWhileStatement;
 import uk.co.badgersinfoil.metaas.dom.ASExpression;
</pre><pre class="diff"><small id="info">@@ -11,6 +10,7 @@
</small></pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASForStatement;
 import uk.co.badgersinfoil.metaas.dom.ASIfStatement;
 import uk.co.badgersinfoil.metaas.dom.ASReturnStatement;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.dom.ASSuperStatement;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASSwitchStatement;
 import uk.co.badgersinfoil.metaas.dom.ASWhileStatement;
 import uk.co.badgersinfoil.metaas.dom.ASWithStatement;
</pre><pre class="diff"><small id="info">@@ -109,6 +109,10 @@
</small></pre><pre class="diff" id="context">                 return getStatementContainer().newReturn();
         }
 
</pre><pre class="diff" id="added">+        public ASSuperStatement newSuper(List args) {
+                return getStatementContainer().newSuper(args);
+        }
+
</pre><pre class="diff" id="context">         public boolean containsCode() {
                 return getStatementContainer().containsCode();
         }
</pre></div>
<hr /><a name="file11" /><div class="file">
<span class="pathname">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/impl</span><br />
<div class="fileheader"><big><b>StatementBuilder.java</b></big> <small id="info">538 -&gt; 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/StatementBuilder.java        2007-10-06 23:17:58 UTC (rev 538)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/StatementBuilder.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -51,6 +51,8 @@
</small></pre><pre class="diff" id="context">                                 return new ASTASWithStatement(ast);
                         case AS3Parser.RETURN:
                                 return new ASTASReturnStatement(ast);
</pre><pre class="diff" id="added">+                        case AS3Parser.SUPER:
+                                return new ASTASSuperStatement(ast);
</pre><pre class="diff" id="context">                         default:
                                 throw new SyntaxException("Unsupported statement node type: "+ASTUtils.tokenName(ast)+" in "+ActionScriptFactory.str(ASTUtils.stringifyNode(ast)));
                 }
</pre></div>
<hr /><a name="file12" /><div class="file">
<span class="pathname">metaas/trunk/src/test/java/uk/co/badgersinfoil/metaas</span><br />
<div class="fileheader"><big><b>StatementTests.java</b></big> <small id="info">538 -&gt; 539</small></div>
<pre class="diff"><small id="info">--- trunk/src/test/java/uk/co/badgersinfoil/metaas/StatementTests.java        2007-10-06 23:17:58 UTC (rev 538)
+++ trunk/src/test/java/uk/co/badgersinfoil/metaas/StatementTests.java        2007-10-27 15:25:51 UTC (rev 539)
@@ -1,8 +1,9 @@
</small></pre><pre class="diff" id="context"> package uk.co.badgersinfoil.metaas;
 
 import java.io.IOException;
</pre><pre class="diff" id="added">+import java.util.ArrayList;
+import java.util.Collections;
</pre><pre class="diff" id="context"> import java.util.List;
</pre><pre class="diff" id="removed">-
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASBlock;
 import uk.co.badgersinfoil.metaas.dom.ASClassType;
 import uk.co.badgersinfoil.metaas.dom.ASCompilationUnit;
</pre><pre class="diff"><small id="info">@@ -14,8 +15,10 @@
</small></pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASForInStatement;
 import uk.co.badgersinfoil.metaas.dom.ASForStatement;
 import uk.co.badgersinfoil.metaas.dom.ASIfStatement;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.dom.ASIntegerLiteral;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASMethod;
 import uk.co.badgersinfoil.metaas.dom.ASReturnStatement;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.dom.ASSuperStatement;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASSwitchCase;
 import uk.co.badgersinfoil.metaas.dom.ASSwitchDefault;
 import uk.co.badgersinfoil.metaas.dom.ASSwitchStatement;
</pre><pre class="diff"><small id="info">@@ -224,4 +227,28 @@
</small></pre><pre class="diff" id="context">                 ifStmt.setThen(block);
                 // TODO: find something to assert
         }
</pre><pre class="diff" id="added">+
+        public void testSuperStatementNoArg() {
+                ASSuperStatement stmt = meth.newSuper(Collections.EMPTY_LIST);
+                assertEquals(0, stmt.getArguments().size());
+        }
+
+        public void testSuperStatement() {
+                List args = Collections.singletonList(fact.newIntegerLiteral(1));
+                ASSuperStatement stmt = meth.newSuper(args);
+                assertEquals(1, stmt.getArguments().size());
+                ASExpression arg = (ASExpression)stmt.getArguments().get(0);
+                assertEquals(1, ((ASIntegerLiteral)arg).getValue());
+        }
+
+        public void testSuperStatementReplaceArgs() {
+                List args = Collections.singletonList(fact.newIntegerLiteral(1));
+                ASSuperStatement stmt = meth.newSuper(args);
+
+                args = new ArrayList();
+                args.add(fact.newIntegerLiteral(2));
+                args.add(fact.newStringLiteral("foo"));
+                stmt.setArguments(args);
+                assertEquals(2, stmt.getArguments().size());
+        }
</pre><pre class="diff" id="context"> }
</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>