<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">+1</td><td align="right" id="removed">-2</td><td nowrap="nowrap" align="center">622 -> 623</td></tr>
<tr class="alt"><td><tt>main/java/uk/co/badgersinfoil/metaas/<a href="#file2">ActionScriptFactory.java</a></tt> </td><td></td><td align="right" id="added">+7</td><td></td><td nowrap="nowrap" align="center">622 -> 623</td></tr>
<tr><td><tt>main/java/uk/co/badgersinfoil/metaas/dom/<a href="#file3"><span id="added">ASObjectLiteral.java</span></a></tt> </td><td></td><td align="right" id="added">+20</td><td></td><td nowrap="nowrap" align="right">added 623</td></tr>
<tr class="alt"><td><tt>main/java/uk/co/badgersinfoil/metaas/impl/<a href="#file4"><span id="added">ASTASObjectLiteral.java</span></a></tt> </td><td></td><td align="right" id="added">+60</td><td></td><td nowrap="nowrap" align="right">added 623</td></tr>
<tr><td><tt> /<a href="#file5">ASTBuilder.java</a></tt> </td><td></td><td align="right" id="added">+16</td><td></td><td nowrap="nowrap" align="center">622 -> 623</td></tr>
<tr class="alt"><td><tt> /<a href="#file6">ASTUtils.java</a></tt> </td><td></td><td align="right" id="added">+1</td><td></td><td nowrap="nowrap" align="center">622 -> 623</td></tr>
<tr><td><tt> /<a href="#file7">ExpressionBuilder.java</a></tt> </td><td></td><td align="right" id="added">+2</td><td></td><td nowrap="nowrap" align="center">622 -> 623</td></tr>
<tr class="alt"><td><tt>test/java/uk/co/badgersinfoil/metaas/<a href="#file8">LiteralTests.java</a></tt> </td><td></td><td align="right" id="added">+24</td><td align="right" id="removed">-2</td><td nowrap="nowrap" align="center">622 -> 623</td></tr>
<tr><td></td><td></td><td align="right" id="added">+131</td><td align="right" id="removed">-4</td><td></td></tr>
</table>
<small id="info">2 added + 6 modified, total 8 files</small><br />
<pre class="comment">
Basic support for object-literal-expression
</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">622 -> 623</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/antlr/org/asdt/core/internal/antlr/AS3.g3        2008-01-20 14:34:19 UTC (rev 622)
+++ trunk/src/main/antlr/org/asdt/core/internal/antlr/AS3.g3        2008-01-20 17:41:54 UTC (rev 623)
@@ -57,7 +57,7 @@
</small></pre><pre class="diff" id="context">         ARRAY_ACC;
        UNARY_PLUS; UNARY_MINUS; POST_INC; POST_DEC; PRE_INC; PRE_DEC;
        ARRAY_LITERAL;
</pre><pre class="diff" id="removed">-        <span id="removedchars">ELEMENT; </span>OBJECT_LITERAL;
</pre><pre class="diff" id="added">+        OBJECT_LITERAL;
</pre><pre class="diff" id="context">         OBJECT_FIELD; FUNC_DEF;
        FOR_INIT; FOR_CONDITION; FOR_ITERATOR;
        FOR_EACH; FOR_IN;
</pre><pre class="diff"><small id="info">@@ -801,7 +801,6 @@
</small></pre><pre class="diff" id="context">         $InOperator::allowed = true;
}
        :        assignmentExpression
</pre><pre class="diff" id="removed">-                -> ^(ELEMENT assignmentExpression)
</pre><pre class="diff" id="context">        
// This is an initializer used to set up an object.
</pre></div>
<hr /><a name="file2" /><div class="file">
<span class="pathname">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas</span><br />
<div class="fileheader"><big><b>ActionScriptFactory.java</b></big> <small id="info">622 -> 623</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/ActionScriptFactory.java        2008-01-20 14:34:19 UTC (rev 622)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/ActionScriptFactory.java        2008-01-20 17:41:54 UTC (rev 623)
@@ -24,6 +24,7 @@
</small></pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASInvocationExpression;
import uk.co.badgersinfoil.metaas.dom.ASNewExpression;
import uk.co.badgersinfoil.metaas.dom.ASNullLiteral;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.dom.ASObjectLiteral;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASPostfixExpression;
import uk.co.badgersinfoil.metaas.dom.ASPrefixExpression;
import uk.co.badgersinfoil.metaas.dom.ASStringLiteral;
</pre><pre class="diff"><small id="info">@@ -40,6 +41,7 @@
</small></pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.impl.ASTASInvocationExpression;
import uk.co.badgersinfoil.metaas.impl.ASTASNewExpression;
import uk.co.badgersinfoil.metaas.impl.ASTASNullLiteral;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.impl.ASTASObjectLiteral;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.impl.ASTASPostfixExpression;
import uk.co.badgersinfoil.metaas.impl.ASTASPrefixExpression;
import uk.co.badgersinfoil.metaas.impl.ASTASStringLiteral;
</pre><pre class="diff"><small id="info">@@ -465,4 +467,9 @@
</small></pre><pre class="diff" id="context">                 LinkedListTree ast = ASTBuilder.newArrayLiteral();
                return new ASTASArrayLiteral(ast);
        }
</pre><pre class="diff" id="added">+
+        public ASObjectLiteral newObjectLiteral() {
+                LinkedListTree ast = ASTBuilder.newObjectLiteral();
+                return new ASTASObjectLiteral(ast);
+        }
</pre><pre class="diff" id="context"> }
</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>ASObjectLiteral.java</b></big> <small id="info">added at 623</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASObjectLiteral.java         (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/dom/ASObjectLiteral.java        2008-01-20 17:41:54 UTC (rev 623)
@@ -0,0 +1,20 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.dom;
+
+import java.util.List;
+
+public interface ASObjectLiteral extends ASLiteral {
+
+        /**
+         * Returns a list of {@link ASObjectLiteral.Field} objects.
+         */
+        public List getFields();
+
+        public Field newField(String name, ASExpression value);
+
+        public interface Field extends ScriptElement {
+
+                public String getName();
+
+                public ASExpression getValue();
+        }
+}
</pre></div>
<hr /><a name="file4" /><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>ASTASObjectLiteral.java</b></big> <small id="info">added at 623</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASObjectLiteral.java         (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTASObjectLiteral.java        2008-01-20 17:41:54 UTC (rev 623)
@@ -0,0 +1,60 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.asdt.core.internal.antlr.AS3Parser;
+import uk.co.badgersinfoil.metaas.dom.ASExpression;
+import uk.co.badgersinfoil.metaas.dom.ASObjectLiteral;
+import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
+
+public class ASTASObjectLiteral extends ASTASLiteral implements ASObjectLiteral {
+
+        public ASTASObjectLiteral(LinkedListTree ast) {
+                super(ast);
+        }
+
+        public List getFields() {
+                List fields = new ArrayList();
+                ASTIterator i = new ASTIterator(ast);
+                while (i.hasNext()) {
+                        fields.add(buildField(i.next()));
+                }
+                return Collections.unmodifiableList(fields);
+        }
+
+        private ASTField buildField(LinkedListTree field) {
+                ASTUtils.assertAS3TokenTypeIs(AS3Parser.OBJECT_FIELD,
+                 field.getType());
+                return new ASTField(field);
+        }
+
+        public Field newField(String name, ASExpression value) {
+                LinkedListTree field = ASTBuilder.newObjectField(name, ast(value));
+                String indent = ASTUtils.findIndent(ast) + "\t";
+                ASTUtils.increaseIndent(field, indent);
+                if (ast.getChildCount() > 0) {
+                        ast.appendToken(TokenBuilder.newComma());
+                }
+                ast.appendToken(TokenBuilder.newNewline());
+                ast.addChildWithTokens(field);
+                return new ASTField(field);
+        }
+
+        public static class ASTField implements ASObjectLiteral.Field {
+
+                private LinkedListTree ast;
+
+                public ASTField(LinkedListTree ast) {
+                        this.ast = ast;
+                }
+
+                public String getName() {
+                        return ast.getFirstChild().getText();
+                }
+
+                public ASExpression getValue() {
+                        return ExpressionBuilder.build(ast.getLastChild());
+                }
+        }
+}
</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>ASTBuilder.java</b></big> <small id="info">622 -> 623</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTBuilder.java        2008-01-20 14:34:19 UTC (rev 622)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTBuilder.java        2008-01-20 17:41:54 UTC (rev 623)
@@ -602,4 +602,20 @@
</small></pre><pre class="diff" id="context">                 LinkedListTree lit = ASTUtils.newParentheticAST(AS3Parser.ARRAY_LITERAL, AS3Parser.LBRACK, "[", AS3Parser.RBRACK, "]");
                return lit;
        }
</pre><pre class="diff" id="added">+
+        public static LinkedListTree newObjectLiteral() {
+                LinkedListTree lit = newBlock(AS3Parser.OBJECT_LITERAL);
+                return lit;
+        }
+
+        public static LinkedListTree newObjectField(String name,
+         LinkedListTree value)
+        {
+                LinkedListTree field = ASTUtils.newImaginaryAST(AS3Parser.OBJECT_FIELD);
+                field.addChildWithTokens(AS3FragmentParser.parseSimpleIdent(name));
+                field.appendToken(TokenBuilder.newColon());
+                field.appendToken(TokenBuilder.newSpace());
+                field.addChildWithTokens(value);
+                return field;
+        }
</pre><pre class="diff" id="context"> }
</pre></div>
<hr /><a name="file6" /><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">622 -> 623</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTUtils.java        2008-01-20 14:34:19 UTC (rev 622)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ASTUtils.java        2008-01-20 17:41:54 UTC (rev 623)
@@ -47,6 +47,7 @@
</small></pre><pre class="diff" id="context">                                 switch (payload.getType()) {
                                 case AS3Parser.BLOCK:
                                 case AS3Parser.TYPE_BLOCK:
</pre><pre class="diff" id="added">+                                 case AS3Parser.OBJECT_LITERAL:
</pre><pre class="diff" id="context">                                         return blockDelegate;
                                 case AS3Parser.ANNOTATION:
                                 case AS3Parser.ARRAY_LITERAL:
</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>ExpressionBuilder.java</b></big> <small id="info">622 -> 623</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ExpressionBuilder.java        2008-01-20 14:34:19 UTC (rev 622)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/impl/ExpressionBuilder.java        2008-01-20 17:41:54 UTC (rev 623)
@@ -80,6 +80,8 @@
</small></pre><pre class="diff" id="context">                                 return new ASTASFunctionExpression(ast);
                        case AS3Parser.ARRAY_LITERAL:
                                return new ASTASArrayLiteral(ast);
</pre><pre class="diff" id="added">+                        case AS3Parser.OBJECT_LITERAL:
+                                return new ASTASObjectLiteral(ast);
</pre><pre class="diff" id="context">                         default:
                                throw new IllegalArgumentException("unhandled expression node type: "+ASTUtils.tokenName(ast));
                }
</pre></div>
<hr /><a name="file8" /><div class="file">
<span class="pathname">metaas/trunk/src/test/java/uk/co/badgersinfoil/metaas</span><br />
<div class="fileheader"><big><b>LiteralTests.java</b></big> <small id="info">622 -> 623</small></div>
<pre class="diff"><small id="info">--- trunk/src/test/java/uk/co/badgersinfoil/metaas/LiteralTests.java        2008-01-20 14:34:19 UTC (rev 622)
+++ trunk/src/test/java/uk/co/badgersinfoil/metaas/LiteralTests.java        2008-01-20 17:41:54 UTC (rev 623)
@@ -1,14 +1,15 @@
</small></pre><pre class="diff" id="context"> package uk.co.badgersinfoil.metaas;
import java.io.IOException;
</pre><pre class="diff" id="removed">-import java.util.List;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASArrayLiteral;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.dom.ASAssignmentExpression;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASBooleanLiteral;
import uk.co.badgersinfoil.metaas.dom.ASClassType;
import uk.co.badgersinfoil.metaas.dom.ASCompilationUnit;
import uk.co.badgersinfoil.metaas.dom.ASLiteral;
import uk.co.badgersinfoil.metaas.dom.ASMethod;
import uk.co.badgersinfoil.metaas.dom.ASNullLiteral;
</pre><pre class="diff" id="added">+import uk.co.badgersinfoil.metaas.dom.ASObjectLiteral;
</pre><pre class="diff" id="context"> import uk.co.badgersinfoil.metaas.dom.ASStringLiteral;
import uk.co.badgersinfoil.metaas.dom.ASIntegerLiteral;
import uk.co.badgersinfoil.metaas.dom.ASUndefinedLiteral;
</pre><pre class="diff"><small id="info">@@ -129,9 +130,30 @@
</small></pre><pre class="diff" id="context">                 ExtraAssertions.assertSize(2, lit.getEntries());
                literal = lit;
        }
</pre><pre class="diff" id="removed">-        
</pre><pre class="diff" id="added">+
</pre><pre class="diff" id="context">         public void testParseArrayLiteral() {
                literal = (ASArrayLiteral)fact.newExpression("['foo', [1]]");
                assertNotNull(literal);
        }
</pre><pre class="diff" id="added">+
+        public void testEmptyObjectLiteral() {
+                ASObjectLiteral lit = fact.newObjectLiteral();
+                assertNotNull(lit);
+                ExtraAssertions.assertSize(0, lit.getFields());
+                literal = lit;
+        }
+
+        public void testObjectLiteral() {
+                ASObjectLiteral lit = fact.newObjectLiteral();
+                ASObjectLiteral.Field field = lit.newField("foo", fact.newIntegerLiteral(33));
+                assertEquals("foo", field.getName());
+                ExtraAssertions.assertInstanceof(field.getValue(), ASIntegerLiteral.class);
+                field = lit.newField("bar", fact.newStringLiteral("hello"));
+                literal = lit;
+        }
+        
+        public void testParseObjectLiteral() {
+                ASAssignmentExpression expr = (ASAssignmentExpression)fact.newExpression("test = {foo:2}");
+                literal = (ASLiteral)expr.getRightSubexpression();
+        }
</pre><pre class="diff" id="context"> }
</pre></div>
<center><small><a href="http://www.badgers-in-foil.co.uk/projects/cvsspam/" title="commit -> email">CVSspam</a> 0.2.12</small></center>
</body></html>