Thanks Harbs, that worked! :)

El mar., 29 ene. 2019 a las 13:30, Harbs (<[email protected]>) escribió:

> You’re right.
>
> I just committed a work-around.
>
> > On Jan 29, 2019, at 2:00 PM, Carlos Rovira <[email protected]>
> wrote:
> >
> > Hi Harbs,
> >
> > I rebuild all with the latest change but seems the problem is still
> there.
> > Now I get this:
> >
> > RangeError: Maximum call stack size exceeded
> > Language.js:115
> > at String.toString (<anonymous>)
> > at Function.org.apache.royale.utils.Language.string
> >
> (/Users/carlosrovira/Dev/Codeoscopic/Source/sgc/webapp/src/main/webapp/javascript/bin/js-debug/org/apache/royale/utils/Language.js:115:80)
> > at Function.org.apache.royale.utils.Language.string
> >
> (/Users/carlosrovira/Dev/Codeoscopic/Source/sgc/webapp/src/main/webapp/javascript/bin/js-debug/org/apache/royale/utils/Language.js:115:44)
> > at Function.org.apache.royale.utils.Language.string
> >
> (/Users/carlosrovira/Dev/Codeoscopic/Source/sgc/webapp/src/main/webapp/javascript/bin/js-debug/org/apache/royale/utils/Language.js:115:44)
> > at Function.org.apache.royale.utils.Language.string
> >
> (/Users/carlosrovira/Dev/Codeoscopic/Source/sgc/webapp/src/main/webapp/javascript/bin/js-debug/org/apache/royale/utils/Language.js:115:44)
> > at Function.org.apache.royale.utils.Language.string
> >
> (/Users/carlosrovira/Dev/Codeoscopic/Source/sgc/webapp/src/main/webapp/javascript/bin/js-debug/org/apache/royale/utils/Language.js:115:44)
> > at Function.org.apache.royale.utils.Language.string
> >
> (/Users/carlosrovira/Dev/Codeoscopic/Source/sgc/webapp/src/main/webapp/javascript/bin/js-debug/org/apache/royale/utils/Language.js:115:44)
> > at Function.org.apache.royale.utils.Language.string
> >
> (/Users/carlosrovira/Dev/Codeoscopic/Source/sgc/webapp/src/main/webapp/javascript/bin/js-debug/org/apache/royale/utils/Language.js:115:44)
> > at Function.org.apache.royale.utils.Language.string
> >
> (/Users/carlosrovira/Dev/Codeoscopic/Source/sgc/webapp/src/main/webapp/javascript/bin/js-debug/org/apache/royale/utils/Language.js:115:44)
> > at Function.org.apache.royale.utils.Language.string
> >
> (/Users/carlosrovira/Dev/Codeoscopic/Source/sgc/webapp/src/main/webapp/javascript/bin/js-debug/org/apache/royale/utils/Language.js:115:44)
> >
> > and the code is running is
> >
> > /**
> > * string()
> > * @royaleignorecoercion String
> > * @asparam value The value to be cast.
> > * @asreturn {string}
> > * @export
> > * @param {*} value
> > * @return {string}
> > */
> > org.apache.royale.utils.Language.string = function(value) {
> > return org.apache.royale.utils.Language.string(value == null ? null :
> value.
> > toString()); <--filing here
> > };
> >
> > Can you take a look?
> >
> > thanks
> >
> > Carlos
> >
> >
> >
> > El mar., 29 ene. 2019 a las 12:11, Harbs (<[email protected]>)
> escribió:
> >
> >> Language.string needed a cast. I just committed a fix for that.
> >>
> >> I think it was a side effect of Josh fixing string casting… ;-)
> >>
> >> Harbs
> >>
> >>> On Jan 29, 2019, at 12:46 PM, Piotr Zarzycki <
> [email protected]>
> >> wrote:
> >>>
> >>> Hi Josh,
> >>>
> >>> I'm not sure if it's related but I just build two applications using
> >> latest
> >>> sources and both of them are not working. I'm getting following error
> in
> >>> console [1]
> >>> It happened in function:
> >>>
> >>> org.apache.royale.utils.Language.string = function(value) {
> >>> return org.apache.royale.utils.Language.string(value == null ? null :
> >>> value.toString());
> >>> };
> >>>
> >>> [1] https://imgur.com/a/XemjI5P
> >>>
> >>> Thanks,
> >>> Piotr
> >>>
> >>> wt., 29 sty 2019 o 00:25 <[email protected]> napisał(a):
> >>>
> >>>> This is an automated email from the ASF dual-hosted git repository.
> >>>>
> >>>> joshtynjala pushed a commit to branch develop
> >>>> in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
> >>>>
> >>>>
> >>>> The following commit(s) were added to refs/heads/develop by this push:
> >>>>    new afb00e4  compiler-jx: Assigning a value to an int or uint
> >> coerces
> >>>> it so that variables don't store decimal values (closes #74)
> >>>> afb00e4 is described below
> >>>>
> >>>> commit afb00e48c74476618811bfb37cc830e78e700753
> >>>> Author: Josh Tynjala <[email protected]>
> >>>> AuthorDate: Mon Jan 28 15:18:56 2019 -0800
> >>>>
> >>>>   compiler-jx: Assigning a value to an int or uint coerces it so that
> >>>> variables don't store decimal values (closes #74)
> >>>>
> >>>>   Applies to variable declarations, the assignment binary operator,
> >>>> returning a value from a function, and passing an argument to a
> >> function.
> >>>>
> >>>>   In the case of return statements and parameters, I included some
> >> other
> >>>> basic coercions to make it more consistent with what was already there
> >> for
> >>>> variable declarations and assignment. There was some coercion related
> to
> >>>> dynamic array access and XML that should probably also be shared, but
> I
> >>>> left that out for now because those ones in particular could use some
> >>>> cleanup. The new return statements and parameters currently call a
> >> shared
> >>>> IJSEmitter.emitAssignmentCoercion(). Ideally, all four [...]
> >>>> ---
> >>>> .../royale/compiler/codegen/js/IJSEmitter.java     |   3 +
> >>>> .../compiler/internal/codegen/js/JSEmitter.java    |  87 ++++++++++++
> >>>> .../codegen/js/jx/BinaryOperatorEmitter.java       | 116
> >> ++++++++++++----
> >>>> .../js/jx/FunctionCallArgumentsEmitter.java        |  29 +++-
> >>>> .../internal/codegen/js/jx/ReturnEmitter.java      |  14 +-
> >>>> .../codegen/js/jx/VarDeclarationEmitter.java       |  86 ++++++++++--
> >>>> .../codegen/js/goog/TestGoogAccessorMembers.java   |   4 +-
> >>>> .../internal/codegen/js/goog/TestGoogEmitter.java  |   2 +-
> >>>> .../codegen/js/royale/TestRoyaleClass.java         |  36 +++++
> >>>> .../codegen/js/royale/TestRoyaleEmitter.java       |   2 +-
> >>>> .../codegen/js/royale/TestRoyaleExpressions.java   | 152
> >>>> +++++++++++++++------
> >>>> .../codegen/js/royale/TestRoyaleGlobalClasses.java |  10 +-
> >>>> .../js/royale/TestRoyaleGlobalFunctions.java       |   4 +-
> >>>> .../codegen/js/royale/TestRoyaleMethodMembers.java |   4 +-
> >>>> .../codegen/js/royale/TestRoyaleStatements.java    |  18 +++
> >>>> 15 files changed, 473 insertions(+), 94 deletions(-)
> >>>>
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/js/IJSEmitter.java
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/js/IJSEmitter.java
> >>>> index 5dffb4d..b68f9f0 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/js/IJSEmitter.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/js/IJSEmitter.java
> >>>> @@ -25,6 +25,7 @@ import
> >> org.apache.royale.compiler.codegen.as.IASEmitter;
> >>>> import org.apache.royale.compiler.definitions.IDefinition;
> >>>> import org.apache.royale.compiler.internal.codegen.js.JSSessionModel;
> >>>> import org.apache.royale.compiler.tree.as.IASNode;
> >>>> +import org.apache.royale.compiler.tree.as.IExpressionNode;
> >>>> import org.apache.royale.compiler.tree.as.ITypeNode;
> >>>> import org.apache.royale.compiler.visitor.IASNodeStrategy;
> >>>>
> >>>> @@ -45,4 +46,6 @@ public interface IJSEmitter extends IASEmitter,
> >>>> IMappingEmitter
> >>>>
> >>>>    void emitClosureStart();
> >>>>    void emitClosureEnd(IASNode node, IDefinition nodeDef);
> >>>> +
> >>>> +    void emitAssignmentCoercion(IExpressionNode assignedNode,
> >> IDefinition
> >>>> definition);
> >>>> }
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
> >>>> index 6b2b8e2..997c562 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
> >>>> @@ -28,6 +28,7 @@ import
> org.apache.royale.compiler.codegen.ISubEmitter;
> >>>> import org.apache.royale.compiler.codegen.js.IJSEmitter;
> >>>> import org.apache.royale.compiler.codegen.js.IMappingEmitter;
> >>>> import org.apache.royale.compiler.common.ISourceLocation;
> >>>> +import
> >>>> org.apache.royale.compiler.constants.IASLanguageConstants.BuiltinType;
> >>>> import org.apache.royale.compiler.definitions.IDefinition;
> >>>> import org.apache.royale.compiler.internal.codegen.as.ASEmitter;
> >>>> import org.apache.royale.compiler.internal.codegen.as
> .ASEmitterTokens;
> >>>> @@ -58,11 +59,13 @@ import
> >>>>
> org.apache.royale.compiler.internal.codegen.js.jx.UnaryOperatorEmitter;
> >>>> import
> >> org.apache.royale.compiler.internal.codegen.js.jx.WhileLoopEmitter;
> >>>> import org.apache.royale.compiler.internal.codegen.js.jx.WithEmitter;
> >>>> import org.apache.royale.compiler.internal.tree.as.FunctionNode;
> >>>> +import org.apache.royale.compiler.projects.ICompilerProject;
> >>>> import org.apache.royale.compiler.tree.as.IASNode;
> >>>> import org.apache.royale.compiler.tree.as.ICatchNode;
> >>>> import org.apache.royale.compiler.tree.as.IContainerNode;
> >>>> import org.apache.royale.compiler.tree.as.IDefinitionNode;
> >>>> import org.apache.royale.compiler.tree.as.IDynamicAccessNode;
> >>>> +import org.apache.royale.compiler.tree.as.IExpressionNode;
> >>>> import org.apache.royale.compiler.tree.as.IForLoopNode;
> >>>> import org.apache.royale.compiler.tree.as.IFunctionNode;
> >>>> import org.apache.royale.compiler.tree.as.IFunctionObjectNode;
> >>>> @@ -515,4 +518,88 @@ public class JSEmitter extends ASEmitter
> implements
> >>>> IJSEmitter
> >>>>               return className.replace(".", "_") + "_" + name;
> >>>>       }
> >>>>
> >>>> +    public void emitAssignmentCoercion(IExpressionNode assignedNode,
> >>>> IDefinition definition)
> >>>> +    {
> >>>> +        IDefinition assignedDef = null;
> >>>> +        ICompilerProject project = getWalker().getProject();
> >>>> +        if (assignedNode != null)
> >>>> +        {
> >>>> +            assignedDef = assignedNode.resolveType(project);
> >>>> +        }
> >>>> +               String coercionStart = null;
> >>>> +        String coercionEnd = null;
> >>>> +               if
> >>>> (project.getBuiltinType(BuiltinType.INT).equals(definition))
> >>>> +               {
> >>>> +                       boolean needsCoercion = false;
> >>>> +                       if (assignedNode instanceof
> INumericLiteralNode)
> >>>> +                       {
> >>>> +                               INumericLiteralNode numericLiteral =
> >>>> (INumericLiteralNode) assignedNode;
> >>>> +                               if
> >>>>
> >>
> (!BuiltinType.INT.equals(numericLiteral.getNumericValue().getAssumedType()))
> >>>> +                               {
> >>>> +                                       needsCoercion = true;
> >>>> +                               }
> >>>> +                       }
> >>>> +                       else
> >>>> if(!project.getBuiltinType(BuiltinType.INT).equals(assignedDef))
> >>>> +                       {
> >>>> +                               needsCoercion = true;
> >>>> +                       }
> >>>> +                       if (needsCoercion)
> >>>> +                       {
> >>>> +                               coercionStart = "(";
> >>>> +                               coercionEnd = ") >> 0";
> >>>> +                       }
> >>>> +               }
> >>>> +               else if
> >>>> (project.getBuiltinType(BuiltinType.UINT).equals(definition))
> >>>> +               {
> >>>> +                       boolean needsCoercion = false;
> >>>> +                       if (assignedNode instanceof
> INumericLiteralNode)
> >>>> +                       {
> >>>> +                               INumericLiteralNode numericLiteral =
> >>>> (INumericLiteralNode) assignedNode;
> >>>> +                               if
> >>>>
> >>
> (!BuiltinType.UINT.equals(numericLiteral.getNumericValue().getAssumedType()))
> >>>> +                               {
> >>>> +                                       needsCoercion = true;
> >>>> +                               }
> >>>> +                       }
> >>>> +                       else
> >>>> if(!project.getBuiltinType(BuiltinType.UINT).equals(assignedDef))
> >>>> +                       {
> >>>> +                               needsCoercion = true;
> >>>> +                       }
> >>>> +                       if (needsCoercion)
> >>>> +                       {
> >>>> +                               coercionStart = "(";
> >>>> +                               coercionEnd = ") >>> 0";
> >>>> +            }
> >>>> +        }
> >>>> +        else if
> >>>> (project.getBuiltinType(BuiltinType.NUMBER).equals(definition)
> >>>> +                &&
> >>>> !project.getBuiltinType(BuiltinType.NUMBER).equals(assignedDef)
> >>>> +                &&
> >>>> !project.getBuiltinType(BuiltinType.INT).equals(assignedDef)
> >>>> +                &&
> >>>> !project.getBuiltinType(BuiltinType.UINT).equals(assignedDef))
> >>>> +        {
> >>>> +            coercionStart = "Number(";
> >>>> +        }
> >>>> +        else if
> >>>> (project.getBuiltinType(BuiltinType.STRING).equals(definition)
> >>>> +                &&
> >>>> !project.getBuiltinType(BuiltinType.STRING).equals(assignedDef)
> >>>> +                &&
> >>>> !project.getBuiltinType(BuiltinType.NULL).equals(assignedDef))
> >>>> +        {
> >>>> +            coercionStart =
> "org.apache.royale.utils.Language.string(";
> >>>> +        }
> >>>> +
> >>>> +               if (coercionStart != null)
> >>>> +               {
> >>>> +                       write(coercionStart);
> >>>> +               }
> >>>> +               getWalker().walk(assignedNode);
> >>>> +               if (coercionStart != null)
> >>>> +               {
> >>>> +                       if (coercionEnd != null)
> >>>> +                       {
> >>>> +                               write(coercionEnd);
> >>>> +                       }
> >>>> +                       else
> >>>> +                       {
> >>>> +                               write(")");
> >>>> +                       }
> >>>> +               }
> >>>> +    }
> >>>> +
> >>>> }
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
> >>>> index 756c3d8..ff09dd4 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
> >>>> @@ -22,6 +22,7 @@ package
> >>>> org.apache.royale.compiler.internal.codegen.js.jx;
> >>>> import org.apache.royale.compiler.codegen.ISubEmitter;
> >>>> import org.apache.royale.compiler.codegen.js.IJSEmitter;
> >>>> import org.apache.royale.compiler.constants.IASLanguageConstants;
> >>>> +import
> >>>> org.apache.royale.compiler.constants.IASLanguageConstants.BuiltinType;
> >>>> import org.apache.royale.compiler.definitions.IDefinition;
> >>>> import org.apache.royale.compiler.definitions.ITypeDefinition;
> >>>> import org.apache.royale.compiler.definitions.metadata.IMetaTag;
> >>>> @@ -45,6 +46,7 @@ import
> >>>> org.apache.royale.compiler.tree.as.IBinaryOperatorNode;
> >>>> import org.apache.royale.compiler.tree.as.IClassNode;
> >>>> import org.apache.royale.compiler.tree.as.IExpressionNode;
> >>>> import org.apache.royale.compiler.tree.as.IIdentifierNode;
> >>>> +import org.apache.royale.compiler.tree.as.INumericLiteralNode;
> >>>> import org.apache.royale.compiler.utils.ASNodeUtils;
> >>>>
> >>>> public class BinaryOperatorEmitter extends JSSubEmitter implements
> >>>> @@ -444,32 +446,91 @@ public class BinaryOperatorEmitter extends
> >>>> JSSubEmitter implements
> >>>>                               }
> >>>>                       }
> >>>>            }
> >>>> -            String coercion = (leftIsNumber && !rightIsNumber &&
> >>>> isAssignment) ? "Number(" : "";
> >>>> -            if (isAssignment && leftDef != null &&
> >>>> leftDef.getQualifiedName().equals(IASLanguageConstants.String))
> >>>> +                       String coercionStart = null;
> >>>> +                       String coercionEnd = null;
> >>>> +            if (isAssignment)
> >>>>            {
> >>>> -               if (rNode.getNodeID() != ASTNodeID.LiteralStringID &&
> >>>> -                               rNode.getNodeID() !=
> >>>> ASTNodeID.LiteralNullID)
> >>>> -               {
> >>>> -                               if (rightDef == null ||
> >>>> -
> >>>> (!(rightDef.getQualifiedName().equals(IASLanguageConstants.String) ||
> >>>> -
> >>>> (rightDef.getQualifiedName().equals(IASLanguageConstants.ANY_TYPE)
> >>>> -                                               && rNode.getNodeID()
> ==
> >>>> ASTNodeID.FunctionCallID &&
> >>>> -                                               isToString(rNode)) ||
> >>>> -                                                 // if not an
> >> assignment
> >>>> we don't need to coerce numbers
> >>>> -                                                 (!isAssignment &&
> >>>> rightIsNumber) ||
> >>>> -
> >>>> rightDef.getQualifiedName().equals(IASLanguageConstants.Null))))
> >>>> -                               {
> >>>> -                                       JSRoyaleDocEmitter docEmitter
> =
> >>>> (JSRoyaleDocEmitter)(getEmitter().getDocEmitter());
> >>>> -                                       if
> >>>> (docEmitter.emitStringConversions)
> >>>> -                                       {
> >>>> -                                               coercion =
> >>>> "org.apache.royale.utils.Language.string(";
> >>>> -                                       }
> >>>> -                               }
> >>>> -               }
> >>>> +                               if
> >>>> (getProject().getBuiltinType(BuiltinType.INT).equals(leftDef))
> >>>> +                               {
> >>>> +                                       boolean needsCoercion = false;
> >>>> +                                       if (rNode instanceof
> >>>> INumericLiteralNode)
> >>>> +                                       {
> >>>> +                                               INumericLiteralNode
> >>>> rNumber = (INumericLiteralNode) rNode;
> >>>> +                                               if
> >>>> (!BuiltinType.INT.equals(rNumber.getNumericValue().getAssumedType()))
> >>>> +                                               {
> >>>> +                                                       needsCoercion
> =
> >>>> true;
> >>>> +                                               }
> >>>> +                                       }
> >>>> +                                       else
> >>>> if(!getProject().getBuiltinType(BuiltinType.INT).equals(rightDef))
> >>>> +                                       {
> >>>> +                                               needsCoercion = true;
> >>>> +                                       }
> >>>> +                                       if (needsCoercion)
> >>>> +                                       {
> >>>> +                                               coercionStart = "(";
> >>>> +                                               coercionEnd = ") >>
> 0";
> >>>> +                                       }
> >>>> +                               }
> >>>> +                               else if
> >>>> (getProject().getBuiltinType(BuiltinType.UINT).equals(leftDef))
> >>>> +                               {
> >>>> +                                       boolean needsCoercion = false;
> >>>> +                                       if (rNode instanceof
> >>>> INumericLiteralNode)
> >>>> +                                       {
> >>>> +                                               INumericLiteralNode
> >>>> rNumber = (INumericLiteralNode) rNode;
> >>>> +                                               if
> >>>> (!BuiltinType.UINT.equals(rNumber.getNumericValue().getAssumedType()))
> >>>> +                                               {
> >>>> +                                                       needsCoercion
> =
> >>>> true;
> >>>> +                                               }
> >>>> +                                       }
> >>>> +                                       else
> >>>> if(!getProject().getBuiltinType(BuiltinType.UINT).equals(rightDef))
> >>>> +                                       {
> >>>> +                                               needsCoercion = true;
> >>>> +                                       }
> >>>> +                                       if (needsCoercion)
> >>>> +                                       {
> >>>> +                                               coercionStart = "(";
> >>>> +                                               coercionEnd = ") >>>
> 0";
> >>>> +                                       }
> >>>> +                               }
> >>>> +                               else if (leftIsNumber &&
> !rightIsNumber)
> >>>> +                               {
> >>>> +                                       coercionStart = "Number(";
> >>>> +                               }
> >>>> +                               else if
> >>>> (getProject().getBuiltinType(BuiltinType.STRING).equals(leftDef))
> >>>> +                               {
> >>>> +                                       if (rNode.getNodeID() !=
> >>>> ASTNodeID.LiteralStringID &&
> >>>> +
> >> rNode.getNodeID()
> >>>> != ASTNodeID.LiteralNullID)
> >>>> +                                       {
> >>>> +                                               if (rightDef == null
> ||
> >>>> +
> >>>> (!(rightDef.getQualifiedName().equals(IASLanguageConstants.String) ||
> >>>> +
> >>>> (rightDef.getQualifiedName().equals(IASLanguageConstants.ANY_TYPE)
> >>>> +
> >>>>    && rNode.getNodeID() == ASTNodeID.FunctionCallID &&
> >>>> +
> >>>>    isToString(rNode)) ||
> >>>> +                                                               // if
> >> not
> >>>> an assignment we don't need to coerce numbers
> >>>> +
> >>>> (!isAssignment && rightIsNumber) ||
> >>>> +
> >>>> rightDef.getQualifiedName().equals(IASLanguageConstants.Null))))
> >>>> +                                               {
> >>>> +
> >> JSRoyaleDocEmitter
> >>>> docEmitter = (JSRoyaleDocEmitter)(getEmitter().getDocEmitter());
> >>>> +                                                       if
> >>>> (docEmitter.emitStringConversions)
> >>>> +                                                       {
> >>>> +
> >>>> coercionStart = "org.apache.royale.utils.Language.string(";
> >>>> +                                                       }
> >>>> +                                               }
> >>>> +                                       }
> >>>> +                               }
> >>>>            }
> >>>> -            super_emitBinaryOperator(node, coercion);
> >>>> -            if (coercion.length() > 0)
> >>>> -               write(")");
> >>>> +            super_emitBinaryOperator(node, coercionStart);
> >>>> +                       if (coercionStart != null)
> >>>> +                       {
> >>>> +                               if (coercionEnd != null)
> >>>> +                               {
> >>>> +                                       write(coercionEnd);
> >>>> +                               }
> >>>> +                               else
> >>>> +                               {
> >>>> +                                       write(")");
> >>>> +                               }
> >>>> +                       }
> >>>>
> >>>>            /*
> >>>>            IExpressionNode leftSide = node.getLeftOperandNode();
> >>>> @@ -550,7 +611,7 @@ public class BinaryOperatorEmitter extends
> >>>> JSSubEmitter implements
> >>>>       return false;
> >>>>    }
> >>>>
> >>>> -    private void super_emitBinaryOperator(IBinaryOperatorNode node,
> >>>> String coercion)
> >>>> +    private void super_emitBinaryOperator(IBinaryOperatorNode node,
> >>>> String coercionStart)
> >>>>    {
> >>>>        if (ASNodeUtils.hasParenOpen(node))
> >>>>            write(ASEmitterTokens.PAREN_OPEN);
> >>>> @@ -617,7 +678,10 @@ public class BinaryOperatorEmitter extends
> >>>> JSSubEmitter implements
> >>>>            write(ASEmitterTokens.SPACE);
> >>>>            endMapping(node);
> >>>>
> >>>> -            write(coercion);
> >>>> +                       if (coercionStart != null)
> >>>> +                       {
> >>>> +                               write(coercionStart);
> >>>> +                       }
> >>>>            /*
> >>>>            IDefinition definition =
> >>>> node.getRightOperandNode().resolve(getProject());
> >>>>               if (definition instanceof FunctionDefinition &&
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FunctionCallArgumentsEmitter.java
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FunctionCallArgumentsEmitter.java
> >>>> index bca4c59..40b6302 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FunctionCallArgumentsEmitter.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FunctionCallArgumentsEmitter.java
> >>>> @@ -21,10 +21,14 @@ package
> >>>> org.apache.royale.compiler.internal.codegen.js.jx;
> >>>>
> >>>> import org.apache.royale.compiler.codegen.ISubEmitter;
> >>>> import org.apache.royale.compiler.codegen.js.IJSEmitter;
> >>>> +import org.apache.royale.compiler.definitions.IDefinition;
> >>>> +import org.apache.royale.compiler.definitions.IFunctionDefinition;
> >>>> +import org.apache.royale.compiler.definitions.IParameterDefinition;
> >>>> import org.apache.royale.compiler.internal.codegen.as
> .ASEmitterTokens;
> >>>> import org.apache.royale.compiler.internal.codegen.js.JSSubEmitter;
> >>>> import org.apache.royale.compiler.tree.as.IContainerNode;
> >>>> import org.apache.royale.compiler.tree.as.IExpressionNode;
> >>>> +import org.apache.royale.compiler.tree.as.IFunctionCallNode;
> >>>>
> >>>> public class FunctionCallArgumentsEmitter extends JSSubEmitter
> >> implements
> >>>>        ISubEmitter<IContainerNode>
> >>>> @@ -41,11 +45,34 @@ public class FunctionCallArgumentsEmitter extends
> >>>> JSSubEmitter implements
> >>>>        write(ASEmitterTokens.PAREN_OPEN);
> >>>>        endMapping(node);
> >>>>
> >>>> +        IParameterDefinition[] paramDefs = null;
> >>>> +        IFunctionCallNode functionCallNode = (IFunctionCallNode)
> >>>> node.getAncestorOfType(IFunctionCallNode.class);
> >>>> +        if (functionCallNode != null)
> >>>> +        {
> >>>> +            IDefinition calledDef =
> >>>> functionCallNode.resolveCalledExpression(getProject());
> >>>> +            if (calledDef instanceof IFunctionDefinition)
> >>>> +            {
> >>>> +                IFunctionDefinition functionDef =
> (IFunctionDefinition)
> >>>> calledDef;
> >>>> +                paramDefs = functionDef.getParameters();
> >>>> +            }
> >>>> +        }
> >>>> +
> >>>>        int len = node.getChildCount();
> >>>>        for (int i = 0; i < len; i++)
> >>>>        {
> >>>>            IExpressionNode argumentNode = (IExpressionNode)
> >>>> node.getChild(i);
> >>>> -            getWalker().walk(argumentNode);
> >>>> +            IParameterDefinition paramDef = null;
> >>>> +            if (paramDefs != null && paramDefs.length > i)
> >>>> +            {
> >>>> +                paramDef = paramDefs[i];
> >>>> +                if (paramDef.isRest())
> >>>> +                {
> >>>> +                    paramDef = null;
> >>>> +                }
> >>>> +            }
> >>>> +
> >>>> +            getEmitter().emitAssignmentCoercion(argumentNode,
> >> paramDef);
> >>>> +
> >>>>            if (i < len - 1)
> >>>>            {
> >>>>                //we're mapping the comma to the container, but we use
> >> the
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ReturnEmitter.java
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ReturnEmitter.java
> >>>> index a7f5d7e..0573110 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ReturnEmitter.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ReturnEmitter.java
> >>>> @@ -21,10 +21,12 @@ package
> >>>> org.apache.royale.compiler.internal.codegen.js.jx;
> >>>>
> >>>> import org.apache.royale.compiler.codegen.ISubEmitter;
> >>>> import org.apache.royale.compiler.codegen.js.IJSEmitter;
> >>>> +import org.apache.royale.compiler.definitions.IDefinition;
> >>>> import org.apache.royale.compiler.internal.codegen.as
> .ASEmitterTokens;
> >>>> import org.apache.royale.compiler.internal.codegen.js.JSSubEmitter;
> >>>> import org.apache.royale.compiler.tree.ASTNodeID;
> >>>> import org.apache.royale.compiler.tree.as.IExpressionNode;
> >>>> +import org.apache.royale.compiler.tree.as.IFunctionNode;
> >>>> import org.apache.royale.compiler.tree.as.IReturnNode;
> >>>>
> >>>> public class ReturnEmitter extends JSSubEmitter implements
> >>>> @@ -51,7 +53,17 @@ public class ReturnEmitter extends JSSubEmitter
> >>>> implements
> >>>>
> >>>>        if (hasReturnValue)
> >>>>        {
> >>>> -            getWalker().walk(rnode);
> >>>> +            IDefinition returnDef = null;
> >>>> +            IFunctionNode parentFn = (IFunctionNode)
> >>>> node.getAncestorOfType(IFunctionNode.class);
> >>>> +            if (parentFn != null)
> >>>> +            {
> >>>> +                IExpressionNode returnTypeNode =
> >>>> parentFn.getReturnTypeNode();
> >>>> +                if (returnTypeNode != null)
> >>>> +                {
> >>>> +                    returnDef = returnTypeNode.resolve(getProject());
> >>>> +                }
> >>>> +            }
> >>>> +            getEmitter().emitAssignmentCoercion(rnode, returnDef);
> >>>>        }
> >>>>    }
> >>>> }
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
> >>>> index 90dbd7b..01c4a6f 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
> >>>> @@ -23,6 +23,7 @@ import
> org.apache.royale.compiler.codegen.ISubEmitter;
> >>>> import org.apache.royale.compiler.codegen.js.IJSEmitter;
> >>>> import org.apache.royale.compiler.constants.IASKeywordConstants;
> >>>> import org.apache.royale.compiler.constants.IASLanguageConstants;
> >>>> +import
> >>>> org.apache.royale.compiler.constants.IASLanguageConstants.BuiltinType;
> >>>> import org.apache.royale.compiler.definitions.IDefinition;
> >>>> import org.apache.royale.compiler.definitions.metadata.IMetaTag;
> >>>> import
> >> org.apache.royale.compiler.definitions.metadata.IMetaTagAttribute;
> >>>> @@ -40,6 +41,7 @@ import org.apache.royale.compiler.tree.ASTNodeID;
> >>>> import org.apache.royale.compiler.tree.as.IASNode;
> >>>> import org.apache.royale.compiler.tree.as.IEmbedNode;
> >>>> import org.apache.royale.compiler.tree.as.IExpressionNode;
> >>>> +import org.apache.royale.compiler.tree.as.INumericLiteralNode;
> >>>> import org.apache.royale.compiler.tree.as.IVariableNode;
> >>>>
> >>>> public class VarDeclarationEmitter extends JSSubEmitter implements
> >>>> @@ -65,9 +67,11 @@ public class VarDeclarationEmitter extends
> >> JSSubEmitter
> >>>> implements
> >>>>        }
> >>>>
> >>>>        IExpressionNode variableTypeNode = node.getVariableTypeNode();
> >>>> +        IDefinition variableDef = null;
> >>>>        boolean hasVariableType = variableTypeNode.getLine() >= 0;
> >>>>        if(hasVariableType)
> >>>>        {
> >>>> +            variableDef = variableTypeNode.resolve(getProject());
> >>>>            startMapping(variableTypeNode,
> >>>>                    variableTypeNode.getLine(),
> >>>>                    variableTypeNode.getColumn() - 1); //include the :
> >>>> @@ -173,20 +177,76 @@ public class VarDeclarationEmitter extends
> >>>> JSSubEmitter implements
> >>>>                               }
> >>>>                       }
> >>>>            }
> >>>> -            String coercion = "";
> >>>> -            if (varIsNumber && !valIsNumber)
> >>>> -               coercion = "Number(";
> >>>> -            //else if (varIsNumber && valIsNumber && varIsInt &&
> >>>> !valIsInt)
> >>>> -            // coercion = "Math.floor(";
> >>>> -            if (variableTypeNode.getNodeID() ==
> ASTNodeID.IdentifierID
> >> &&
> >>>> -
> >>>>
> >>
> ((IdentifierNode)variableTypeNode).getName().equals(IASLanguageConstants.String)
> >>>> &&
> >>>> -                       (avdef == null ||
> >>>> (!avdef.getQualifiedName().equals(IASLanguageConstants.String) &&
> >>>> -
> >>>> !avdef.getQualifiedName().equals(IASLanguageConstants.Null))))
> >>>> -                       coercion =
> >>>> "org.apache.royale.utils.Language.string(";
> >>>> -            write(coercion);
> >>>> +            String coercionStart = null;
> >>>> +            String coercionEnd = null;
> >>>> +            if
> >>>> (getProject().getBuiltinType(BuiltinType.INT).equals(variableDef))
> >>>> +            {
> >>>> +                boolean needsCoercion = false;
> >>>> +                if (avnode instanceof INumericLiteralNode)
> >>>> +                {
> >>>> +                    INumericLiteralNode numericLiteral =
> >>>> (INumericLiteralNode) avnode;
> >>>> +                    if
> >>>>
> >>
> (!BuiltinType.INT.equals(numericLiteral.getNumericValue().getAssumedType()))
> >>>> +                    {
> >>>> +                        needsCoercion = true;
> >>>> +                    }
> >>>> +                }
> >>>> +                else
> >>>> if(!getProject().getBuiltinType(BuiltinType.INT).equals(avdef))
> >>>> +                {
> >>>> +                    needsCoercion = true;
> >>>> +                }
> >>>> +                if (needsCoercion)
> >>>> +                {
> >>>> +                    coercionStart = "(";
> >>>> +                    coercionEnd = ") >> 0";
> >>>> +                }
> >>>> +            }
> >>>> +            else if
> >>>> (getProject().getBuiltinType(BuiltinType.UINT).equals(variableDef))
> >>>> +            {
> >>>> +                boolean needsCoercion = false;
> >>>> +                if (avnode instanceof INumericLiteralNode)
> >>>> +                {
> >>>> +                    INumericLiteralNode numericLiteral =
> >>>> (INumericLiteralNode) avnode;
> >>>> +                    if
> >>>>
> >>
> (!BuiltinType.UINT.equals(numericLiteral.getNumericValue().getAssumedType()))
> >>>> +                    {
> >>>> +                        needsCoercion = true;
> >>>> +                    }
> >>>> +                }
> >>>> +                else
> >>>> if(!getProject().getBuiltinType(BuiltinType.UINT).equals(avdef))
> >>>> +                {
> >>>> +                    needsCoercion = true;
> >>>> +                }
> >>>> +                if (needsCoercion)
> >>>> +                {
> >>>> +                    coercionStart = "(";
> >>>> +                    coercionEnd = ") >>> 0";
> >>>> +                }
> >>>> +            }
> >>>> +            else if (varIsNumber && !valIsNumber)
> >>>> +            {
> >>>> +                coercionStart = "Number(";
> >>>> +            }
> >>>> +            else if
> >>>> (getProject().getBuiltinType(BuiltinType.STRING).equals(variableDef)
> &&
> >>>> +
> >>>> !getProject().getBuiltinType(BuiltinType.STRING).equals(avdef) &&
> >>>> +
> >>>> !getProject().getBuiltinType(BuiltinType.NULL).equals(avdef))
> >>>> +            {
> >>>> +                coercionStart =
> >>>> "org.apache.royale.utils.Language.string(";
> >>>> +            }
> >>>> +                       if (coercionStart != null)
> >>>> +                       {
> >>>> +                write(coercionStart);
> >>>> +            }
> >>>>            fjs.emitAssignedValue(avnode);
> >>>> -            if (coercion.length() > 0)
> >>>> -               write(")");
> >>>> +                       if (coercionStart != null)
> >>>> +                       {
> >>>> +                               if (coercionEnd != null)
> >>>> +                               {
> >>>> +                                       write(coercionEnd);
> >>>> +                               }
> >>>> +                               else
> >>>> +                               {
> >>>> +                                       write(")");
> >>>> +                               }
> >>>> +                       }
> >>>>        }
> >>>>        if (avnode == null)
> >>>>        {
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogAccessorMembers.java
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogAccessorMembers.java
> >>>> index 3fd051d..69ae550 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogAccessorMembers.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogAccessorMembers.java
> >>>> @@ -98,10 +98,10 @@ public class TestGoogAccessorMembers extends
> >>>> TestAccessorMembers
> >>>>    @Test
> >>>>    public void testSetAccessor_withBody()
> >>>>    {
> >>>> -        ISetterNode node = (ISetterNode) getAccessor("function set
> >>>> foo(value:int):void{trace('haai');}");
> >>>> +        ISetterNode node = (ISetterNode) getAccessor("function set
> >>>> foo(value:int):void{'haai';}");
> >>>>        asBlockWalker.visitSetter(node);
> >>>>        assertOut("Object.defineProperty(\n\tRoyaleTest_A.prototype,
> >>>> \n\t'foo', "
> >>>> -                + "\n\t{set:function(value) {\n\t\tvar self =
> >>>> this;\n\t\ttrace('haai');\n\t}, configurable:true}\n)");
> >>>> +                + "\n\t{set:function(value) {\n\t\tvar self =
> >>>> this;\n\t\t'haai';\n\t}, configurable:true}\n)");
> >>>>    }
> >>>>
> >>>>    @Override
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogEmitter.java
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogEmitter.java
> >>>> index 6fe906d..c40adb9 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogEmitter.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogEmitter.java
> >>>> @@ -111,7 +111,7 @@ public class TestGoogEmitter extends ASTestBase
> >>>>    @Test
> >>>>    public void testDefaultParameter()
> >>>>    {
> >>>> -        IFunctionNode node = getMethodWithPackage("function
> >>>> method1(p1:int, p2:int, p3:int = 3, p4:int = 4):int{return p1 + p2 +
> p3
> >> +
> >>>> p4;}");
> >>>> +        IFunctionNode node = getMethodWithPackage("function
> >>>> method1(p1:Number, p2:Number, p3:Number = 3, p4:Number =
> >> 4):Number{return
> >>>> p1 + p2 + p3 + p4;}");
> >>>>        asBlockWalker.visitFunction(node);
> >>>>        assertOut("/**\n * @param {number} p1\n * @param {number} p2\n
> *
> >>>> @param {number=} p3\n * @param {number=} p4\n * @return {number}\n
> */\n"
> >>>>                + "foo.bar.RoyaleTest_A.prototype.method1 =
> function(p1,
> >>>> p2, p3, p4) {\n"
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleClass.java
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleClass.java
> >>>> index f496a4e..ecc034a 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleClass.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleClass.java
> >>>> @@ -149,6 +149,42 @@ public class TestRoyaleClass extends
> TestGoogClass
> >>>>    }
> >>>>
> >>>>    @Test
> >>>> +    public void testMethod_returnInt()
> >>>> +    {
> >>>> +        IClassNode node = getClassNode("public class B {public
> function
> >>>> B() {}; public function foo():int { var a:Number = 123.4; return a;
> >> };}");
> >>>> +        asBlockWalker.visitClass(node);
> >>>> +        String expected = "/**\n * @constructor\n
> >> */\norg.apache.royale.B
> >>>> = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for
> >>>> reflection.\n */\ngoog.exportSymbol('org.apache.royale.B',
> >>>> org.apache.royale.B);\n\n\n/**\n * @export\n
> >>>> */\norg.apache.royale.B.prototype.foo = function() {\n  var a /**
> @type
> >>>> {number} */ = 123.4;\n  return (a) >> 0;\n};";
> >>>> +        assertOut(expected);
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void testMethod_returnIntLiteral()
> >>>> +    {
> >>>> +        IClassNode node = getClassNode("public class B {public
> function
> >>>> B() {}; public function foo():int { return 123.4 };}");
> >>>> +        asBlockWalker.visitClass(node);
> >>>> +        String expected = "/**\n * @constructor\n
> >> */\norg.apache.royale.B
> >>>> = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for
> >>>> reflection.\n */\ngoog.exportSymbol('org.apache.royale.B',
> >>>> org.apache.royale.B);\n\n\n/**\n * @export\n
> >>>> */\norg.apache.royale.B.prototype.foo = function() {\n  return (123.4)
> >>>>
> >>>> 0;\n};";
> >>>> +        assertOut(expected);
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void testMethod_returnUint()
> >>>> +    {
> >>>> +        IClassNode node = getClassNode("public class B {public
> function
> >>>> B() {}; public function foo():uint { var a:Number = 123.4; return a;
> >> };}");
> >>>> +        asBlockWalker.visitClass(node);
> >>>> +        String expected = "/**\n * @constructor\n
> >> */\norg.apache.royale.B
> >>>> = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for
> >>>> reflection.\n */\ngoog.exportSymbol('org.apache.royale.B',
> >>>> org.apache.royale.B);\n\n\n/**\n * @export\n
> >>>> */\norg.apache.royale.B.prototype.foo = function() {\n  var a /**
> @type
> >>>> {number} */ = 123.4;\n  return (a) >>> 0;\n};";
> >>>> +        assertOut(expected);
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void testMethod_returnUintLiteral()
> >>>> +    {
> >>>> +        IClassNode node = getClassNode("public class B {public
> function
> >>>> B() {}; public function foo():uint { return 123.4 };}");
> >>>> +        asBlockWalker.visitClass(node);
> >>>> +        String expected = "/**\n * @constructor\n
> >> */\norg.apache.royale.B
> >>>> = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for
> >>>> reflection.\n */\ngoog.exportSymbol('org.apache.royale.B',
> >>>> org.apache.royale.B);\n\n\n/**\n * @export\n
> >>>> */\norg.apache.royale.B.prototype.foo = function() {\n  return (123.4)
> >>>>>
> >>>> 0;\n};";
> >>>> +        assertOut(expected);
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>>    public void testMethod_override()
> >>>>    {
> >>>>        IClassNode node = getClassNode("public class B {public function
> >>>> B() {}; override public function foo():void {};}");
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java
> >>>> index e8c40a8..25fccbb 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java
> >>>> @@ -330,7 +330,7 @@ public class TestRoyaleEmitter extends
> >> TestGoogEmitter
> >>>>    @Test
> >>>>    public void testDefaultParameter()
> >>>>    {
> >>>> -        IFunctionNode node = getMethodWithPackage("function
> >>>> method1(p1:int, p2:int, p3:int = 3, p4:int = 4):int{return p1 + p2 +
> p3
> >> +
> >>>> p4;}");
> >>>> +        IFunctionNode node = getMethodWithPackage("function
> >>>> method1(p1:Number, p2:Number, p3:Number = 3, p4:Number =
> >> 4):Number{return
> >>>> p1 + p2 + p3 + p4;}");
> >>>>        asBlockWalker.visitFunction(node);
> >>>>        assertOut("/**\n * @param {number} p1\n * @param {number} p2\n
> *
> >>>> @param {number=} p3\n * @param {number=} p4\n * @return {number}\n
> */\n"
> >>>>                + "foo.bar.RoyaleTest_A.prototype.method1 =
> function(p1,
> >>>> p2, p3, p4) {\n"
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
> >>>> index 713c26f..7aeb0f6 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
> >>>> @@ -269,10 +269,82 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    }
> >>>>
> >>>>    @Test
> >>>> +    public void testVisitBinaryOperatorNode_AssignmentIntVarToInt()
> >>>> +    {
> >>>> +        IBinaryOperatorNode node = getBinaryNode("var
> integer1:int;var
> >>>> integer2:int;integer1 = integer2");
> >>>> +        asBlockWalker.visitBinaryOperator(node);
> >>>> +        assertOut("integer1 = integer2");
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void
> testVisitBinaryOperatorNode_AssignmentNumberVarToInt()
> >>>> +    {
> >>>> +        IBinaryOperatorNode node = getBinaryNode("var integer:int;var
> >>>> number:Number;integer = number");
> >>>> +        asBlockWalker.visitBinaryOperator(node);
> >>>> +        assertOut("integer = (number) >> 0");
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void testVisitBinaryOperatorNode_AssignmentUintVarToInt()
> >>>> +    {
> >>>> +        IBinaryOperatorNode node = getBinaryNode("var integer:int;var
> >>>> unsigned_integer:uint;integer = unsigned_integer");
> >>>> +        asBlockWalker.visitBinaryOperator(node);
> >>>> +        assertOut("integer = (unsigned_integer) >> 0");
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void
> >> testVisitBinaryOperatorNode_AssignmentNumberLiteralToInt()
> >>>> +    {
> >>>> +        IBinaryOperatorNode node = getBinaryNode("var
> >>>> numToInt:int;numToInt = 123.4");
> >>>> +        asBlockWalker.visitBinaryOperator(node);
> >>>> +        assertOut("numToInt = (123.4) >> 0");
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void
> testVisitBinaryOperatorNode_AssignmentIntLiteralToInt()
> >>>> +    {
> >>>> +        IBinaryOperatorNode node = getBinaryNode("var
> >>>> numToInt:int;numToInt = 321");
> >>>> +        asBlockWalker.visitBinaryOperator(node);
> >>>> +        assertOut("numToInt = 321");
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void testVisitBinaryOperatorNode_AssignmentUintVarToUint()
> >>>> +    {
> >>>> +        IBinaryOperatorNode node = getBinaryNode("var
> >>>> unsigned_integer1:uint;var unsigned_integer2:uint;unsigned_integer1 =
> >>>> unsigned_integer2");
> >>>> +        asBlockWalker.visitBinaryOperator(node);
> >>>> +        assertOut("unsigned_integer1 = unsigned_integer2");
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void
> testVisitBinaryOperatorNode_AssignmentNumberVarToUint()
> >>>> +    {
> >>>> +        IBinaryOperatorNode node = getBinaryNode("var
> >>>> unsigned_integer:uint;var number:Number;unsigned_integer = number");
> >>>> +        asBlockWalker.visitBinaryOperator(node);
> >>>> +        assertOut("unsigned_integer = (number) >>> 0");
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void testVisitBinaryOperatorNode_AssignmentIntVarToUint()
> >>>> +    {
> >>>> +        IBinaryOperatorNode node = getBinaryNode("var
> >>>> unsigned_integer:uint;var integer:int;unsigned_integer = integer");
> >>>> +        asBlockWalker.visitBinaryOperator(node);
> >>>> +        assertOut("unsigned_integer = (integer) >>> 0");
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void
> >>>> testVisitBinaryOperatorNode_AssignmentNumberLiteralToUint()
> >>>> +    {
> >>>> +        IBinaryOperatorNode node = getBinaryNode("var
> >>>> numToUint:uint;numToUint = 123.4");
> >>>> +        asBlockWalker.visitBinaryOperator(node);
> >>>> +        assertOut("numToUint = (123.4) >>> 0");
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>>    public void testVisitBinaryOperatorNode_setterAssignment()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public function set
> b(value:int):void
> >>>> {}; public function c() { b = 1; }}",
> >>>> +                "public class B {public function set
> >> b(value:Number):void
> >>>> {}; public function c() { b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = 1");
> >>>> @@ -282,7 +354,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_setterAssignmentWithThis()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public function set
> b(value:int):void
> >>>> {}; public function c() { this.b = 1; }}",
> >>>> +                "public class B {public function set
> >> b(value:Number):void
> >>>> {}; public function c() { this.b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = 1");
> >>>> @@ -292,7 +364,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_setterAssignmentPrivate()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public function get b():int { return
> >> 0;
> >>>> } private function set b(value:int):void {}; public function test() {
> >>>> this.b = 1; }}",
> >>>> +                "public class B {public function get b():Number {
> >> return
> >>>> 0; } private function set b(value:Number):void {}; public function
> >> test() {
> >>>> this.b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = 1");
> >>>> @@ -302,7 +374,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_setterAssignmentPrivateWithNamespace()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public function get b():int { return
> >> 0;
> >>>> } private function set b(value:int):void {}; public function test() {
> >>>> this.private::b = 1; }}",
> >>>> +                "public class B {public function get b():Number {
> >> return
> >>>> 0; } private function set b(value:Number):void {}; public function
> >> test() {
> >>>> this.private::b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = 1");
> >>>> @@ -316,7 +388,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>        // disconnect fileNode from parent
> >>>>        // set thisclass on emitter to class def
> >>>>        IFileNode node = (IFileNode) getNode(
> >>>> -                "public class B { public function c() { this.b = 1;
> };
> >>>> public function set b(value:int):void {}}",
> >>>> +                "public class B { public function c() { this.b = 1;
> };
> >>>> public function set b(value:Number):void {}}",
> >>>>                IFileNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        IFunctionNode fnode = (IFunctionNode)
> findFirstDescendantOfType(
> >>>>                node, IFunctionNode.class);
> >>>> @@ -340,7 +412,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>        // disconnect fileNode from parent
> >>>>        // set thisclass on emitter to class def
> >>>>        IFileNode node = (IFileNode) getNode(
> >>>> -                "public class B { public function c() { b = 1; };
> >> public
> >>>> function set b(value:int):void {}}",
> >>>> +                "public class B { public function c() { b = 1; };
> >> public
> >>>> function set b(value:Number):void {}}",
> >>>>                IFileNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        IFunctionNode fnode = (IFunctionNode)
> findFirstDescendantOfType(
> >>>>                node, IFunctionNode.class);
> >>>> @@ -360,7 +432,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_setterAssignmentOtherInstance()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public function set
> b(value:int):void
> >>>> {}; public function c(other:B) { other.b = 1; }}",
> >>>> +                "public class B {public function set
> >> b(value:Number):void
> >>>> {}; public function c(other:B) { other.b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("other.b = 1");
> >>>> @@ -370,7 +442,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_nestedSetterAssignment()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public function set
> b(value:int):void
> >>>> {}; public function get d():B {}; public function c(other:B) { d.d.b =
> >> 1;
> >>>> }}",
> >>>> +                "public class B {public function set
> >> b(value:Number):void
> >>>> {}; public function get d():B {}; public function c(other:B) { d.d.b =
> >> 1;
> >>>> }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.d.d.b = 1");
> >>>> @@ -380,7 +452,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_nestedSetterAssignmentOtherInstance()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public function set
> b(value:int):void
> >>>> {}; public function get d():B {}; public function c(other:B) {
> >> other.d.b =
> >>>> 1; }}",
> >>>> +                "public class B {public function set
> >> b(value:Number):void
> >>>> {}; public function get d():B {}; public function c(other:B) {
> >> other.d.b =
> >>>> 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("other.d.b = 1");
> >>>> @@ -390,7 +462,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> testVisitBinaryOperatorNode_setterAssignmentFromGetter()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public function set
> b(value:int):void
> >>>> {}; public function c() { b = b + 1; }}",
> >>>> +                "public class B {public function set
> >> b(value:Number):void
> >>>> {}; public function c() { b = b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = this.b + 1");
> >>>> @@ -400,7 +472,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_setterAssignmentFromGetterMaskedByLocal()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public function set
> b(value:int):void
> >>>> {}; public function c() { var b:int; b = b + 1; }}",
> >>>> +                "public class B {public function set
> >> b(value:Number):void
> >>>> {}; public function c() { var b:Number; b = b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("b = b + 1");
> >>>> @@ -410,7 +482,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_setterAssignmentFromGetterMaskedByParam()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public function set
> b(value:int):void
> >>>> {}; public function c(b:int) { b = b + 1; }}",
> >>>> +                "public class B {public function set
> >> b(value:Number):void
> >>>> {}; public function c(b:Number) { b = b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("b = b + 1");
> >>>> @@ -420,7 +492,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_setterAssignmentFromInternalVar()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {var b:int; public function c() { b =
> >> b +
> >>>> 1; }}",
> >>>> +                "public class B {var b:Number; public function c() {
> b
> >> =
> >>>> b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = this.b + 1");
> >>>> @@ -430,7 +502,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_staticSetterAssignmentFromInternalVar()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {static var b:int; public function
> c()
> >> {
> >>>> b = b + 1; }}",
> >>>> +                "public class B {static var b:Number; public function
> >> c()
> >>>> { b = b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("B.b = B.b + 1");
> >>>> @@ -440,7 +512,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_bindableAssignment()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {[Bindable] public var b:int; public
> >>>> function c() { b = 1; }}",
> >>>> +                "public class B {[Bindable] public var b:Number;
> public
> >>>> function c() { b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = 1");
> >>>> @@ -450,7 +522,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> testVisitBinaryOperatorNode_bindableAssignmentWithThis()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {[Bindable] public var b:int; public
> >>>> function c() { this.b = 1; }}",
> >>>> +                "public class B {[Bindable] public var b:Number;
> public
> >>>> function c() { this.b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = 1");
> >>>> @@ -460,7 +532,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_bindableAssignmentOtherInstance()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {[Bindable] public var b:int; public
> >>>> function c(other:B) { other.b = 1; }}",
> >>>> +                "public class B {[Bindable] public var b:Number;
> public
> >>>> function c(other:B) { other.b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("other.b = 1");
> >>>> @@ -470,7 +542,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_bindableSetterAssignment()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {[Bindable] public var b:int;
> >> [Bindable]
> >>>> public var d:B; public function c(other:B) { d.d.b = 1; }}",
> >>>> +                "public class B {[Bindable] public var b:Number;
> >>>> [Bindable] public var d:B; public function c(other:B) { d.d.b = 1;
> }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.d.d.b = 1");
> >>>> @@ -480,7 +552,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_bindableSetterAssignmentOtherInstance()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {[Bindable] public var b:int;
> >> [Bindable]
> >>>> public var d:B; public function c(other:B) { other.d.b = 1; }}",
> >>>> +                "public class B {[Bindable] public var b:Number;
> >>>> [Bindable] public var d:B; public function c(other:B) { other.d.b = 1;
> >> }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("other.d.b = 1");
> >>>> @@ -490,7 +562,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >> testVisitBinaryOperatorNode_bindableAssignmentFromGetter()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {[Bindable] public var b:int; public
> >>>> function c() { b = b + 1; }}",
> >>>> +                "public class B {[Bindable] public var b:Number;
> public
> >>>> function c() { b = b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = this.b + 1");
> >>>> @@ -500,7 +572,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>>
> testVisitBinaryOperatorNode_bindableAssignmentFromGetterMaskedByLocal()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {[Bindable] public var b:int; public
> >>>> function c() { var b:int; b = b + 1; }}",
> >>>> +                "public class B {[Bindable] public var b:Number;
> public
> >>>> function c() { var b:Number; b = b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("b = b + 1");
> >>>> @@ -510,7 +582,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>>
> testVisitBinaryOperatorNode_bindableAssignmentFromGetterMaskedByParam()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {[Bindable] public var b:int; public
> >>>> function c(b:int) { b = b + 1; }}",
> >>>> +                "public class B {[Bindable] public var b:Number;
> public
> >>>> function c(b:Number) { b = b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("b = b + 1");
> >>>> @@ -520,7 +592,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_varAssignment()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public var b:int; public function
> c()
> >> {
> >>>> b = 1; }}",
> >>>> +                "public class B {public var b:Number; public function
> >> c()
> >>>> { b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = 1");
> >>>> @@ -530,7 +602,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_varAssignmentWithThis()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public var b:int; public function
> c()
> >> {
> >>>> this.b = 1; }}",
> >>>> +                "public class B {public var b:Number; public function
> >> c()
> >>>> { this.b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = 1");
> >>>> @@ -540,7 +612,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> testVisitBinaryOperatorNode_varAssignmentOtherInstance()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public var b:int; public function
> >>>> c(other:B) { other.b = 1; }}",
> >>>> +                "public class B {public var b:Number; public function
> >>>> c(other:B) { other.b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("other.b = 1");
> >>>> @@ -550,7 +622,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_varSetterAssignment()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {[Bindable] public var b:int; public
> >> var
> >>>> d:B; public function c(other:B) { d.d.b = 1; }}",
> >>>> +                "public class B {[Bindable] public var b:Number;
> public
> >>>> var d:B; public function c(other:B) { d.d.b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.d.d.b = 1");
> >>>> @@ -560,7 +632,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_varVarAssignment()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public var b:int; public var d:B;
> >> public
> >>>> function c(other:B) { d.d.b = 1; }}",
> >>>> +                "public class B {public var b:Number; public var d:B;
> >>>> public function c(other:B) { d.d.b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.d.d.b = 1");
> >>>> @@ -570,7 +642,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_varSetterAssignmentOtherInstance()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {[Bindable] public var b:int; public
> >> var
> >>>> d:B; public function c(other:B) { other.d.b = 1; }}",
> >>>> +                "public class B {[Bindable] public var b:Number;
> public
> >>>> var d:B; public function c(other:B) { other.d.b = 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("other.d.b = 1");
> >>>> @@ -580,7 +652,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_varAssignmentFromVar()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public var b:int; public function
> c()
> >> {
> >>>> b = b + 1; }}",
> >>>> +                "public class B {public var b:Number; public function
> >> c()
> >>>> { b = b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("this.b = this.b + 1");
> >>>> @@ -590,7 +662,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_varAssignmentFromVarMaskedByLocal()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public var b:int; public function
> c()
> >> {
> >>>> var b:int; b = b + 1; }}",
> >>>> +                "public class B {public var b:Number; public function
> >> c()
> >>>> { var b:Number; b = b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("b = b + 1");
> >>>> @@ -600,7 +672,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_varAssignmentFromVarMaskedByParam()
> >>>>    {
> >>>>        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
> >>>> -                "public class B {public var b:int; public function
> >>>> c(b:int) { b = b + 1; }}",
> >>>> +                "public class B {public var b:Number; public function
> >>>> c(b:Number) { b = b + 1; }}",
> >>>>                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
> >>>>        asBlockWalker.visitBinaryOperator(node);
> >>>>        assertOut("b = b + 1");
> >>>> @@ -610,7 +682,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testVisitBinaryOperatorNode_staticSetterAssignment()
> >>>>    {
> >>>>        IFunctionNode node = (IFunctionNode) getNode(
> >>>> -                "public class B {public function c() { b = 1; };
> public
> >>>> static function set b(value:int):void {}}",
> >>>> +                "public class B {public function c() { b = 1; };
> public
> >>>> static function set b(value:Number):void {}}",
> >>>>                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        IBinaryOperatorNode bnode = (IBinaryOperatorNode)
> >>>> findFirstDescendantOfType(
> >>>>                node, IBinaryOperatorNode.class);
> >>>> @@ -622,7 +694,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_staticSetterAssignmentWithPath()
> >>>>    {
> >>>>        IFunctionNode node = (IFunctionNode) getNode(
> >>>> -                "public class B {public function c() { foo.bar.B.b =
> 1;
> >>>> }; public static function set b(value:int):void {}}",
> >>>> +                "public class B {public function c() { foo.bar.B.b =
> 1;
> >>>> }; public static function set b(value:Number):void {}}",
> >>>>                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        IBinaryOperatorNode bnode = (IBinaryOperatorNode)
> >>>> findFirstDescendantOfType(
> >>>>                node, IBinaryOperatorNode.class);
> >>>> @@ -634,7 +706,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_staticSetterAssignmentOtherInstance()
> >>>>    {
> >>>>        IFunctionNode node = (IFunctionNode) getNode(
> >>>> -                "public class B {public function c() { d.b = 1; };
> >> public
> >>>> function set b(value:int):void {}; public static function get d():B
> >> {}}",
> >>>> +                "public class B {public function c() { d.b = 1; };
> >> public
> >>>> function set b(value:Number):void {}; public static function get d():B
> >> {}}",
> >>>>                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        IBinaryOperatorNode bnode = (IBinaryOperatorNode)
> >>>> findFirstDescendantOfType(
> >>>>                node, IBinaryOperatorNode.class);
> >>>> @@ -650,7 +722,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>        // disconnect fileNode from parent
> >>>>        // set thisclass on emitter to class def
> >>>>        IFileNode node = (IFileNode) getNode(
> >>>> -                "public class B {public function c() { d.b = 1; };
> >> public
> >>>> function set b(value:int):void {}; public static function get d():B
> >> {}}",
> >>>> +                "public class B {public function c() { d.b = 1; };
> >> public
> >>>> function set b(value:Number):void {}; public static function get d():B
> >> {}}",
> >>>>                IFileNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        IFunctionNode fnode = (IFunctionNode)
> findFirstDescendantOfType(
> >>>>                node, IFunctionNode.class);
> >>>> @@ -670,7 +742,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>> testVisitBinaryOperatorNode_staticSetterAssignmentFromGetter()
> >>>>    {
> >>>>        IFunctionNode node = (IFunctionNode) getNode(
> >>>> -                "public class B {public function c() { b = b + 1; };
> >>>> public static function set b(value:int):void {}; public static
> function
> >> get
> >>>> b():int {}}",
> >>>> +                "public class B {public function c() { b = b + 1; };
> >>>> public static function set b(value:Number):void {}; public static
> >> function
> >>>> get b():Number {}}",
> >>>>                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        IBinaryOperatorNode bnode = (IBinaryOperatorNode)
> >>>> findFirstDescendantOfType(
> >>>>                node, IBinaryOperatorNode.class);
> >>>> @@ -682,7 +754,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>>
> >>
> testVisitBinaryOperatorNode_staticSetterAssignmentFromGetterMaskedByLocal()
> >>>>    {
> >>>>        IFunctionNode node = (IFunctionNode) getNode(
> >>>> -                "public class B {public function c() { var b:int; b =
> >> b +
> >>>> 1; }; public static function set b(value:int):void {}; public static
> >>>> function get b():int {}}",
> >>>> +                "public class B {public function c() { var b:Number;
> b
> >> =
> >>>> b + 1; }; public static function set b(value:Number):void {}; public
> >> static
> >>>> function get b():Number {}}",
> >>>>                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        IBinaryOperatorNode bnode = (IBinaryOperatorNode)
> >>>> findFirstDescendantOfType(
> >>>>                node, IBinaryOperatorNode.class);
> >>>> @@ -694,7 +766,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void
> >>>>
> >>
> testVisitBinaryOperatorNode_staticSetterAssignmentFromGetterMaskedByParam()
> >>>>    {
> >>>>        IFunctionNode node = (IFunctionNode) getNode(
> >>>> -                "public class B {public function c(b:int) { b = b +
> 1;
> >> };
> >>>> public static function set b(value:int):void {}; public static
> function
> >> get
> >>>> b():int {}}",
> >>>> +                "public class B {public function c(b:Number) { b = b
> +
> >> 1;
> >>>> }; public static function set b(value:Number):void {}; public static
> >>>> function get b():Number {}}",
> >>>>                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        IBinaryOperatorNode bnode = (IBinaryOperatorNode)
> >>>> findFirstDescendantOfType(
> >>>>                node, IBinaryOperatorNode.class);
> >>>> @@ -1036,7 +1108,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testNativeGetter()
> >>>>    {
> >>>>        IFunctionNode node = (IFunctionNode) getNode(
> >>>> -                "public class B {public function b():int { var
> >> s:String;
> >>>> return s.length; }}",
> >>>> +                "public class B {public function b():Number { var
> >>>> s:String; return s.length; }}",
> >>>>                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        asBlockWalker.visitFunction(node);
> >>>>        // String.length is a getter but is a property in JS, so don't
> >>>> generate set_length() call.
> >>>> @@ -1047,7 +1119,7 @@ public class TestRoyaleExpressions extends
> >>>> TestGoogExpressions
> >>>>    public void testNativeVectorGetter()
> >>>>    {
> >>>>        IFunctionNode node = (IFunctionNode) getNode(
> >>>> -                "public class B {public function b():int { var
> >>>> a:Vector.<String>; return a.length; }}",
> >>>> +                "public class B {public function b():Number { var
> >>>> a:Vector.<String>; return a.length; }}",
> >>>>                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        asBlockWalker.visitFunction(node);
> >>>>        // String.length is a getter but is a property in JS, so don't
> >>>> generate set_length() call.
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java
> >>>> index 77d148c..f823df8 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java
> >>>> @@ -675,7 +675,7 @@ public class TestRoyaleGlobalClasses extends
> >>>> TestGoogGlobalClasses
> >>>>        IASNode parentNode = node.getParent();
> >>>>        node = (IVariableNode) parentNode.getChild(1);
> >>>>        asBlockWalker.visitVariable(node);
> >>>> -        assertOut("var /** @type {number} */ b =
> >>>> a.child('child').length()");
> >>>> +        assertOut("var /** @type {number} */ b =
> >>>> (a.child('child').length()) >> 0");
> >>>>    }
> >>>>
> >>>>    @Test
> >>>> @@ -939,7 +939,7 @@ public class TestRoyaleGlobalClasses extends
> >>>> TestGoogGlobalClasses
> >>>>    {
> >>>>       IForLoopNode node = getForLoopNode("var a:XML = new XML(\"<top
> >>>> attr1='cat'><child attr2='dog'><grandchild
> >>>> attr3='fish'>text</grandchild></child></top>\");for each (var
> p:XMLList
> >> in
> >>>> a) var i:int = p.length();");
> >>>>        asBlockWalker.visitForLoop(node);
> >>>> -        assertOut("var foreachiter0_target = a;\nfor (var
> foreachiter0
> >> in
> >>>> foreachiter0_target.elementNames()) \n{\nvar p =
> >>>> foreachiter0_target[foreachiter0];\n\n  var /** @type {number} */ i =
> >>>> p.length();}\n");
> >>>> +        assertOut("var foreachiter0_target = a;\nfor (var
> foreachiter0
> >> in
> >>>> foreachiter0_target.elementNames()) \n{\nvar p =
> >>>> foreachiter0_target[foreachiter0];\n\n  var /** @type {number} */ i =
> >>>> (p.length()) >> 0;}\n");
> >>>>    }
> >>>>
> >>>>    @Test
> >>>> @@ -947,7 +947,7 @@ public class TestRoyaleGlobalClasses extends
> >>>> TestGoogGlobalClasses
> >>>>    {
> >>>>       IForLoopNode node = getForLoopNode("var a:*;for each (var p:XML
> >> in
> >>>> (a as XMLList)) var i:int = p.length();");
> >>>>        asBlockWalker.visitForLoop(node);
> >>>> -        assertOut("var foreachiter0_target =
> >>>> org.apache.royale.utils.Language.as(a, XMLList);\nfor (var
> foreachiter0
> >>>> in foreachiter0_target.elementNames()) \n{\nvar p =
> >>>> foreachiter0_target[foreachiter0];\n\n  var /** @type {number} */ i =
> >>>> p.length();}\n");
> >>>> +        assertOut("var foreachiter0_target =
> >>>> org.apache.royale.utils.Language.as(a, XMLList);\nfor (var
> foreachiter0
> >>>> in foreachiter0_target.elementNames()) \n{\nvar p =
> >>>> foreachiter0_target[foreachiter0];\n\n  var /** @type {number} */ i =
> >>>> (p.length()) >> 0;}\n");
> >>>>    }
> >>>>
> >>>>    @Test
> >>>> @@ -955,7 +955,7 @@ public class TestRoyaleGlobalClasses extends
> >>>> TestGoogGlobalClasses
> >>>>    {
> >>>>       IForLoopNode node = getForLoopNode("var a:*;for each (var p:XML
> >> in
> >>>> XMLList(a)) var i:int = p.length();");
> >>>>        asBlockWalker.visitForLoop(node);
> >>>> -        assertOut("var foreachiter0_target = XMLList(a);\nfor (var
> >>>> foreachiter0 in foreachiter0_target.elementNames()) \n{\nvar p =
> >>>> foreachiter0_target[foreachiter0];\n\n  var /** @type {number} */ i =
> >>>> p.length();}\n");
> >>>> +        assertOut("var foreachiter0_target = XMLList(a);\nfor (var
> >>>> foreachiter0 in foreachiter0_target.elementNames()) \n{\nvar p =
> >>>> foreachiter0_target[foreachiter0];\n\n  var /** @type {number} */ i =
> >>>> (p.length()) >> 0;}\n");
> >>>>    }
> >>>>
> >>>>    @Test
> >>>> @@ -1074,7 +1074,7 @@ public class TestRoyaleGlobalClasses extends
> >>>> TestGoogGlobalClasses
> >>>>                "import custom.TestProxy; public class B {public
> >> function
> >>>> b() { var a:TestProxy = new TestProxy();for each (var p:String in a)
> var
> >>>> i:int = p.length; }}",
> >>>>                IForLoopNode.class, WRAP_LEVEL_PACKAGE, true);
> >>>>        asBlockWalker.visitForLoop(node);
> >>>> -        assertOut("var foreachiter0_target = a;\nfor (var
> foreachiter0
> >> in
> >>>> foreachiter0_target.propertyNames()) \n{\nvar p =
> >>>> foreachiter0_target.getProperty(foreachiter0);\n\n  var /** @type
> >> {number}
> >>>> */ i = p.length;}\n");
> >>>> +        assertOut("var foreachiter0_target = a;\nfor (var
> foreachiter0
> >> in
> >>>> foreachiter0_target.propertyNames()) \n{\nvar p =
> >>>> foreachiter0_target.getProperty(foreachiter0);\n\n  var /** @type
> >> {number}
> >>>> */ i = (p.length) >> 0;}\n");
> >>>>    }
> >>>>
> >>>>    @Test
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalFunctions.java
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalFunctions.java
> >>>> index 2c6eaf7..8f2f9d1 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalFunctions.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalFunctions.java
> >>>> @@ -104,7 +104,7 @@ public class TestRoyaleGlobalFunctions extends
> >>>> TestGoogGlobalFunctions
> >>>>    @Test
> >>>>    public void testParseInt()
> >>>>    {
> >>>> -        IVariableNode node = getVariable("var a:int =
> >> parseInt('1.8');");
> >>>> +        IVariableNode node = getVariable("var a:Number =
> >>>> parseInt('1.8');");
> >>>>        asBlockWalker.visitVariable(node);
> >>>>        assertOut("var /** @type {number} */ a = parseInt('1.8',
> >>>> undefined)");
> >>>>    }
> >>>> @@ -112,7 +112,7 @@ public class TestRoyaleGlobalFunctions extends
> >>>> TestGoogGlobalFunctions
> >>>>    @Test
> >>>>    public void testParseIntTwoArgs()
> >>>>    {
> >>>> -        IVariableNode node = getVariable("var a:int = parseInt('1.8',
> >>>> 16);");
> >>>> +        IVariableNode node = getVariable("var a:Number =
> >> parseInt('1.8',
> >>>> 16);");
> >>>>        asBlockWalker.visitVariable(node);
> >>>>        assertOut("var /** @type {number} */ a = parseInt('1.8', 16)");
> >>>>    }
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleMethodMembers.java
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleMethodMembers.java
> >>>> index dc251a3..78cdcaf 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleMethodMembers.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleMethodMembers.java
> >>>> @@ -147,7 +147,7 @@ public class TestRoyaleMethodMembers extends
> >>>> TestGoogMethodMembers
> >>>>    {
> >>>>        IClassNode node = (IClassNode) getNode("public function
> >>>> RoyaleTest_A(){}; private function foo(value:int):String{return
> value;};
> >>>> private function bar():String{if(true){while(i){return
> >> this.foo(42);}}};",
> >>>> IClassNode.class, WRAP_LEVEL_CLASS);
> >>>>        asBlockWalker.visitClass(node);
> >>>> -        assertOut("/**\n * @constructor\n */\nRoyaleTest_A =
> function()
> >>>> {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n
> >>>> */\ngoog.exportSymbol('RoyaleTest_A', RoyaleTest_A);\n\n\n/**\n *
> >>>> @private\n * @param {number} value\n * @return {string}\n
> >>>> */\nRoyaleTest_A.prototype.foo = function(value) {\n  return
> >>>> value;\n};\n\n\n/**\n * @private\n * @return {string}\n
> >>>> */\nRoyaleTest_A.prototype.bar = function() {\n  if (true) {\n
> while
> >> (i)
> >>>> {\n      return this.foo(42);\n  [...]
> >>>> +        assertOut("/**\n * @constructor\n */\nRoyaleTest_A =
> function()
> >>>> {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n
> >>>> */\ngoog.exportSymbol('RoyaleTest_A', RoyaleTest_A);\n\n\n/**\n *
> >>>> @private\n * @param {number} value\n * @return {string}\n
> >>>> */\nRoyaleTest_A.prototype.foo = function(value) {\n  return
> >>>> org.apache.royale.utils.Language.string(value);\n};\n\n\n/**\n *
> >> @private\n
> >>>> * @return {string}\n */\nRoyaleTest_A.prototype.bar = function() {\n
> if
> >>>> (true) {\n    w [...]
> >>>>    }
> >>>>
> >>>>    @Test
> >>>> @@ -155,7 +155,7 @@ public class TestRoyaleMethodMembers extends
> >>>> TestGoogMethodMembers
> >>>>    {
> >>>>        IClassNode node = (IClassNode) getNode("public function
> >>>> RoyaleTest_A(){}; private function foo(value:int):String{return
> value;};
> >>>> private function bar():void{if(true){while(i){foo(42);}}};",
> >>>> IClassNode.class, WRAP_LEVEL_CLASS);
> >>>>        asBlockWalker.visitClass(node);
> >>>> -        assertOut("/**\n * @constructor\n */\nRoyaleTest_A =
> function()
> >>>> {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n
> >>>> */\ngoog.exportSymbol('RoyaleTest_A', RoyaleTest_A);\n\n\n/**\n *
> >>>> @private\n * @param {number} value\n * @return {string}\n
> >>>> */\nRoyaleTest_A.prototype.foo = function(value) {\n  return
> >>>> value;\n};\n\n\n/**\n * @private\n */\nRoyaleTest_A.prototype.bar =
> >>>> function() {\n  if (true) {\n    while (i) {\n      this.foo(42);\n
> >> }\n
> >>>> }\n};");
> >>>> +        assertOut("/**\n * @constructor\n */\nRoyaleTest_A =
> function()
> >>>> {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n
> >>>> */\ngoog.exportSymbol('RoyaleTest_A', RoyaleTest_A);\n\n\n/**\n *
> >>>> @private\n * @param {number} value\n * @return {string}\n
> >>>> */\nRoyaleTest_A.prototype.foo = function(value) {\n  return
> >>>> org.apache.royale.utils.Language.string(value);\n};\n\n\n/**\n *
> >> @private\n
> >>>> */\nRoyaleTest_A.prototype.bar = function() {\n  if (true) {\n
> while
> >> (i)
> >>>> {\n      thi [...]
> >>>>    }
> >>>>
> >>>>    @Override
> >>>> diff --git
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleStatements.java
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleStatements.java
> >>>> index 9de87f5..2f82899 100644
> >>>> ---
> >>>>
> >>
> a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleStatements.java
> >>>> +++
> >>>>
> >>
> b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleStatements.java
> >>>> @@ -96,6 +96,24 @@ public class TestRoyaleStatements extends
> >>>> TestGoogStatements
> >>>>        assertOut("var /** @type {number} */ a = 0");
> >>>>    }
> >>>>
> >>>> +    @Test
> >>>> +    public void testVarDeclaration_withTypeIntAndAssignedNumber()
> >>>> +    {
> >>>> +        IVariableNode node = (IVariableNode) getNode("var a:int =
> >> 123.4;",
> >>>> +                IVariableNode.class);
> >>>> +        asBlockWalker.visitVariable(node);
> >>>> +        assertOut("var /** @type {number} */ a = (123.4) >> 0");
> >>>> +    }
> >>>> +
> >>>> +    @Test
> >>>> +    public void testVarDeclaration_withTypeUintAndAssignedNumber()
> >>>> +    {
> >>>> +        IVariableNode node = (IVariableNode) getNode("var a:uint =
> >>>> 123.4;",
> >>>> +                IVariableNode.class);
> >>>> +        asBlockWalker.visitVariable(node);
> >>>> +        assertOut("var /** @type {number} */ a = (123.4) >>> 0");
> >>>> +    }
> >>>> +
> >>>>    //----------------------------------
> >>>>    // const declaration
> >>>>    //----------------------------------
> >>>>
> >>>>
> >>>
> >>> --
> >>>
> >>> Piotr Zarzycki
> >>>
> >>> Patreon: *https://www.patreon.com/piotrzarzycki
> >>> <https://www.patreon.com/piotrzarzycki>*
> >>
> >>
> >
> > --
> > Carlos Rovira
> > http://about.me/carlosrovira
>
>

-- 
Carlos Rovira
http://about.me/carlosrovira

Reply via email to