incubator-flex-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mschma...@apache.org
Subject svn commit: r1425206 - in /incubator/flex/whiteboard/mschmalle/falconjx: compiler.jx.tests/src/org/apache/flex/js/internal/driver/ compiler.jx.tests/src/org/apache/flex/js/internal/js/ compiler.jx.tests/src/org/apache/flex/js/internal/js/codegen/ compi...
Date Sat, 22 Dec 2012 00:00:09 GMT
Author: mschmalle
Date: Sat Dec 22 00:00:09 2012
New Revision: 1425206

URL: http://svn.apache.org/viewvc?rev=1425206&view=rev
Log:
Flex:FalconJx
- First implementation of an extended emitter JSGoogEmitter.java
- The compiler is spitting out semi-valid goog format

Added:
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/js/
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/js/codegen/
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/js/codegen/TestGoogEmiter.java
  (with props)
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSGoogEmitter.java
  (with props)
Modified:
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestWalkerBase.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/as/IASEmitter.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/driver/JSBackend.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSEmitter.java

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestWalkerBase.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestWalkerBase.java?rev=1425206&r1=1425205&r2=1425206&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestWalkerBase.java
(original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestWalkerBase.java
Sat Dec 22 00:00:09 2012
@@ -3,9 +3,6 @@ package org.apache.flex.js.internal.driv
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
-import java.io.StringWriter;
-import java.io.Writer;
-
 import org.apache.flex.compiler.clients.IBackend;
 import org.apache.flex.compiler.internal.as.codegen.ASFilterWriter;
 import org.apache.flex.compiler.internal.driver.ASBackend;
@@ -16,8 +13,6 @@ public class TestWalkerBase extends Test
 {
     protected IASBlockVisitor visitor;
 
-    private Writer out;
-
     private IBackend backend;
 
     private ASFilterWriter writer;
@@ -29,9 +24,8 @@ public class TestWalkerBase extends Test
     {
         super.setUp();
 
-        backend = new ASBackend();
-        out = new StringWriter();
-        writer = new ASFilterWriter(out);
+        backend = createBackend();
+        writer = backend.createFilterWriter(project);
         visitor = backend.createWalker(project, errors, writer);
     }
 
@@ -39,14 +33,18 @@ public class TestWalkerBase extends Test
     public void tearDown()
     {
         backend = null;
-        out = null;
         writer = null;
         visitor = null;
     }
 
+    protected IBackend createBackend()
+    {
+        return new ASBackend();
+    }
+
     protected void assertOut(String code)
     {
-        mCode = out.toString();
-        assertThat(out.toString(), is(code));
+        mCode = writer.toString();
+        assertThat(writer.toString(), is(code));
     }
 }

Added: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/js/codegen/TestGoogEmiter.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/js/codegen/TestGoogEmiter.java?rev=1425206&view=auto
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/js/codegen/TestGoogEmiter.java
(added)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/js/codegen/TestGoogEmiter.java
Sat Dec 22 00:00:09 2012
@@ -0,0 +1,75 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.js.internal.js.codegen;
+
+import java.io.FilterWriter;
+
+import org.apache.flex.compiler.clients.IBackend;
+import org.apache.flex.compiler.internal.driver.JSBackend;
+import org.apache.flex.compiler.internal.js.codgen.JSEmitter;
+import org.apache.flex.compiler.internal.js.codgen.JSGoogEmitter;
+import org.apache.flex.compiler.tree.as.IFileNode;
+import org.apache.flex.js.internal.driver.TestWalkerBase;
+import org.junit.Test;
+
+/**
+ * This class tests the production of 'goog' JavaScript output.
+ * <p>
+ * Note; this is a complete prototype more used in figuring out where
+ * abstraction and indirection is needed concerning the AS -> JS translations.
+ * 
+ * @author Michael Schmalle
+ */
+public class TestGoogEmiter extends TestWalkerBase
+{
+    // emitPackageHeader()
+    // emitImports()
+    // emitClass()
+
+    @Test
+    public void testSimple()
+    {
+        String code = "package com.example.components {"
+                + "import org.apache.flex.html.staticControls.TextButton;"
+                + "public class MyTextButton extends TextButton {"
+                + "public function MyTextButton() {if (foo() != 42) { bar(); } }"
+                + "private var _privateVar:String = \"do \";"
+                + "public var publicProperty:Number = 100;"
+                + "public function myFunction(value: String): String{"
+                + "return \"Don't \" + _privateVar + value; }";
+        IFileNode node = getFileNode(code);
+        visitor.visitFile(node);
+        //assertOut("");
+    }
+
+    protected IBackend createBackend()
+    {
+        return new GoogBackend();
+    }
+
+    class GoogBackend extends JSBackend
+    {
+        @Override
+        protected JSEmitter createEmitter(FilterWriter out)
+        {
+            return new JSGoogEmitter(out);
+        }
+    }
+}

Propchange: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/js/codegen/TestGoogEmiter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/as/IASEmitter.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/as/IASEmitter.java?rev=1425206&r1=1425205&r2=1425206&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/as/IASEmitter.java
(original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/as/IASEmitter.java
Sat Dec 22 00:00:09 2012
@@ -25,6 +25,7 @@ import org.apache.flex.compiler.internal
 import org.apache.flex.compiler.tree.as.IExpressionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IGetterNode;
+import org.apache.flex.compiler.tree.as.IPackageNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 import org.apache.flex.compiler.visitor.IASBlockWalker;
@@ -61,6 +62,14 @@ public interface IASEmitter
      */
     void indentPop();
 
+    void emitPackageHeader(IPackageNode node);
+
+    void emitPackageHeaderContents(IPackageNode node);
+
+    void emitPackageContents(IPackageNode node);
+
+    void emitPackageFooter(IPackageNode node);
+
     /**
      * Emit a documentation comment for a Class field or constant
      * {@link IVariableNode}.

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java?rev=1425206&r1=1425205&r2=1425206&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
(original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
Sat Dec 22 00:00:09 2012
@@ -42,9 +42,11 @@ import org.apache.flex.compiler.tree.as.
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IGetterNode;
 import org.apache.flex.compiler.tree.as.IKeywordNode;
+import org.apache.flex.compiler.tree.as.IPackageNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.IScopedNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
+import org.apache.flex.compiler.tree.as.ITypeNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 import org.apache.flex.compiler.visitor.IASBlockWalker;
 
@@ -139,6 +141,51 @@ public class ASEmitter implements IASEmi
     }
 
     //--------------------------------------------------------------------------
+    // IPackageNode
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void emitPackageHeader(IPackageNode node)
+    {
+        write("package");
+
+        String name = node.getQualifiedName();
+        if (name != null && !name.equals(""))
+        {
+            write(" ");
+            getWalker().walk(node.getNameExpressionNode());
+        }
+
+        write(" ");
+        write("{");
+    }
+
+    @Override
+    public void emitPackageHeaderContents(IPackageNode node)
+    {
+    }
+
+    @Override
+    public void emitPackageContents(IPackageNode node)
+    {
+        ITypeNode tnode = findTypeNode(node);
+        if (tnode != null)
+        {
+            indentPush();
+            write("\n");
+            getWalker().walk(tnode); // IClassNode | IInterfaceNode
+        }
+    }
+
+    @Override
+    public void emitPackageFooter(IPackageNode node)
+    {
+        indentPop();
+        write("\n");
+        write("}");
+    }
+
+    //--------------------------------------------------------------------------
     // 
     //--------------------------------------------------------------------------
 
@@ -434,4 +481,30 @@ public class ASEmitter implements IASEmi
         // TODO (mschmalle) FunctionObjectNode; does this need specific treatment?
         emitMethodScope(node);
     }
+
+    protected ITypeNode findTypeNode(IPackageNode node)
+    {
+        IScopedNode scope = node.getScopedNode();
+        for (int i = 0; i < scope.getChildCount(); i++)
+        {
+            IASNode child = scope.getChild(i);
+            if (child instanceof ITypeNode)
+                return (ITypeNode) child;
+        }
+        return null;
+    }
+    
+    protected static IFunctionNode getConstructor(IDefinitionNode[] members)
+    {
+        for (IDefinitionNode node : members)
+        {
+            if (node instanceof IFunctionNode)
+            {
+                IFunctionNode fnode = (IFunctionNode) node;
+                if (fnode.isConstructor())
+                    return fnode;
+            }
+        }
+        return null;
+    }
 }

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/driver/JSBackend.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/driver/JSBackend.java?rev=1425206&r1=1425205&r2=1425206&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/driver/JSBackend.java
(original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/driver/JSBackend.java
Sat Dec 22 00:00:09 2012
@@ -19,6 +19,7 @@
 
 package org.apache.flex.compiler.internal.driver;
 
+import java.io.FilterWriter;
 import java.io.StringWriter;
 import java.util.List;
 
@@ -73,8 +74,8 @@ public class JSBackend implements IBacke
     }
 
     @Override
-    public JSTarget createTarget(IASProject project,
-            ITargetSettings settings, ITargetProgressMonitor monitor)
+    public JSTarget createTarget(IASProject project, ITargetSettings settings,
+            ITargetProgressMonitor monitor)
     {
         return new JSTarget(project, settings, monitor);
     }
@@ -83,7 +84,7 @@ public class JSBackend implements IBacke
     public IASBlockWalker createWalker(IASProject project,
             List<ICompilerProblem> errors, ASFilterWriter out)
     {
-        JSEmitter emitter = new JSEmitter(out);
+        JSEmitter emitter = createEmitter(out);
         ASBlockWalker walker = new ASBlockWalker(errors, project, emitter);
 
         BeforeAfterStrategy strategy = new BeforeAfterStrategy(
@@ -111,4 +112,9 @@ public class JSBackend implements IBacke
         return new JSWriter(project, problems, compilationUnit, enableDebug);
     }
 
+    protected JSEmitter createEmitter(FilterWriter out)
+    {
+        return new JSEmitter(out);
+    }
+
 }

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java?rev=1425206&r1=1425205&r2=1425206&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
(original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
Sat Dec 22 00:00:09 2012
@@ -258,29 +258,11 @@ public class ASBlockWalker implements IA
     public void visitPackage(IPackageNode node)
     {
         debug("visitPackage()");
-        emitter.write("package");
 
-        String name = node.getQualifiedName();
-        if (name != null && !name.equals(""))
-        {
-            emitter.write(" ");
-            walk(node.getNameExpressionNode());
-        }
-
-        emitter.write(" ");
-        emitter.write("{");
-
-        ITypeNode tnode = findTypeNode(node);
-        if (tnode != null)
-        {
-            emitter.indentPush();
-            emitter.write("\n");
-            walk(tnode); // IClassNode | IInterfaceNode
-        }
-
-        emitter.indentPop();
-        emitter.write("\n");
-        emitter.write("}");
+        emitter.emitPackageHeader(node);
+        emitter.emitPackageHeaderContents(node);
+        emitter.emitPackageContents(node);
+        emitter.emitPackageFooter(node);
     }
 
     @Override

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSEmitter.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSEmitter.java?rev=1425206&r1=1425205&r2=1425206&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSEmitter.java
(original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSEmitter.java
Sat Dec 22 00:00:09 2012
@@ -54,12 +54,6 @@ public class JSEmitter extends ASEmitter
         jsdoc.emmitPackageHeader(node);
     }
 
-    public void emitProvide(ITypeDefinition definition)
-    {
-        write("goog.provide('" + definition.getQualifiedName() + "');");
-        writeNewline();
-    }
-
     public void emitRequire(ITypeDefinition definition)
     {
         IPackageDefinition parent = (IPackageDefinition) definition.getParent();

Added: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSGoogEmitter.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSGoogEmitter.java?rev=1425206&view=auto
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSGoogEmitter.java
(added)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSGoogEmitter.java
Sat Dec 22 00:00:09 2012
@@ -0,0 +1,161 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.js.codgen;
+
+import java.io.FilterWriter;
+import java.util.ArrayList;
+
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IPackageDefinition;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IDefinitionNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IPackageNode;
+import org.apache.flex.compiler.tree.as.ITypeNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+
+public class JSGoogEmitter extends JSEmitter
+{
+    private IClassDefinition classDefinition;
+
+    @Override
+    public void emitPackageHeader(IPackageNode node)
+    {
+        ITypeNode type = findTypeNode(node);
+        write("goog.provide('" + type.getQualifiedName() + "');");
+        write("\n");
+        write("\n");
+    }
+
+    @Override
+    public void emitPackageHeaderContents(IPackageNode node)
+    {
+        IPackageDefinition parent = (IPackageDefinition) node.getDefinition();
+        ArrayList<String> list = new ArrayList<String>();
+        parent.getContainedScope().getScopeNode().getAllImports(list);
+        for (String imp : list)
+        {
+            if (imp.indexOf("__AS3__") != -1)
+                continue;
+            write("goog.require('" + imp + "');");
+            write("\n");
+        }
+        write("\n");
+    }
+
+    @Override
+    public void emitPackageContents(IPackageNode node)
+    {
+        ITypeNode type = findTypeNode(node);
+        IClassNode cnode = (IClassNode) type;
+        classDefinition = cnode.getDefinition();
+        // constructor
+        emitConstructor((IFunctionNode) classDefinition.getConstructor()
+                .getNode());
+
+        IDefinitionNode[] members = cnode.getAllMemberNodes();
+        for (IDefinitionNode dnode : members)
+        {
+            if (dnode instanceof IVariableNode)
+            {
+                emitField((IVariableNode) dnode);
+            }
+        }
+
+        for (IDefinitionNode dnode : members)
+        {
+            if (dnode instanceof IFunctionNode)
+            {
+                emitMethod((IFunctionNode) dnode);
+            }
+        }
+    }
+
+    @Override
+    public void emitPackageFooter(IPackageNode node)
+    {
+    }
+
+    @Override
+    public void emitConstructor(IFunctionNode node)
+    {
+        FunctionNode fn = (FunctionNode) node;
+        fn.parseFunctionBody(new ArrayList<ICompilerProblem>());
+        
+        emitJSDocConstructor(node, getWalker().getProject());
+        
+        String qname = classDefinition.getQualifiedName();
+        write(qname);
+        write(" ");
+        write("=");
+        write(" ");
+        write("function");
+        emitParamters(node.getParameterNodes());
+        emitMethodScope(node.getScopedNode());
+        write("\n");
+        write("\n");
+    }
+
+    public void emitField(IVariableNode node)
+    {
+        emitJSDocVariable(node);
+        write(classDefinition.getQualifiedName() + ".prototype."
+                + node.getName());
+        IExpressionNode vnode = node.getAssignedValueNode();
+        if (vnode != null)
+        {
+            write(" = ");
+            getWalker().walk(vnode);
+        }
+        write(";\n");
+        write("\n");
+    }
+
+    @Override
+    public void emitMethod(IFunctionNode node)
+    {
+        if (node.isConstructor())
+            return;
+        
+        emitJSDoc(node, getWalker().getProject(), false, classDefinition);
+        FunctionNode fn = (FunctionNode) node;
+        fn.parseFunctionBody(new ArrayList<ICompilerProblem>());
+
+        String qname = classDefinition.getQualifiedName();
+        write(qname);
+        write(" ");
+        write("=");
+        write(" ");
+        write("function");
+        emitParamters(node.getParameterNodes());
+        emitMethodScope(node.getScopedNode());
+        write("\n");
+        write("\n");
+    }
+
+    public JSGoogEmitter(FilterWriter out)
+    {
+        super(out);
+    }
+
+}

Propchange: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSGoogEmitter.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message