| Index: compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java
|
| diff --git a/compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java b/compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java
|
| index f16a813514bff6385d9daa611f95ede7f33d90a7..7eb025528231973905036e7e53a8c293b229a013 100644
|
| --- a/compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java
|
| +++ b/compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java
|
| @@ -599,7 +599,7 @@ public class GenerateJavascriptAST {
|
| if (methodElement.getModifiers().isGetter() || methodElement.getModifiers().isSetter()) {
|
| return;
|
| }
|
| - JsNameRef classJsNameRef = isTopLevel ? null :
|
| + JsNameRef classJsNameRef = isTopLevel ? null :
|
| getJsName(methodElement.getEnclosingElement()).makeRef();
|
| String getterName = mangler.createGetterSyntax(methodElement, unitLibrary);
|
| String methodName = methodElement.getName();
|
| @@ -1199,7 +1199,7 @@ public class GenerateJavascriptAST {
|
| JsName def = scope.declareFreshName("def");
|
| stmts.add(AstUtil.newVar(null, seen, number(0)));
|
| stmts.add(AstUtil.newVar(null, def, number(0)));
|
| -
|
| +
|
| // switch ($n) {
|
| // case 1: P0 = $o.P0 ? (++seen, $o.P0) : null; // no default value
|
| // case 2: P1 = $o.P1 ? (++seen, $o.P1) : (++def, DEFAULT); // explicit default value
|
| @@ -1213,7 +1213,7 @@ public class GenerateJavascriptAST {
|
| if (!param.getModifiers().isNamed()) {
|
| continue;
|
| }
|
| -
|
| +
|
| String paramNameStr = getPropNameForNamedParameter(jsParam);
|
| JsExpression paramName = string(getPropNameForNamedParameter(jsParam));
|
| if (generateClosureCompatibleCode) {
|
| @@ -1221,42 +1221,42 @@ public class GenerateJavascriptAST {
|
| AstUtil.nameref(null, "JSCompiler_renameProperty"), paramName);
|
| }
|
| JsExpression ifExpr = AstUtil.in(null, paramName, namedParam.getName().makeRef());
|
| -
|
| +
|
| JsExpression ppSeen = AstUtil.preinc(null, seen.makeRef());
|
| JsBinaryOperation thenExpr = AstUtil.comma(null, ppSeen,
|
| AstUtil.newNameRef(namedParam.getName().makeRef(), paramNameStr));
|
| -
|
| +
|
| DartExpression defaultValue = param.getDefaultExpr();
|
| JsExpression elseExpr = (defaultValue != null)
|
| ? generateDefaultValue(defaultValue)
|
| : undefined();
|
| JsExpression ppDef = AstUtil.preinc(null, def.makeRef());
|
| elseExpr = AstUtil.comma(null, ppDef, elseExpr);
|
| -
|
| +
|
| JsBinaryOperation asg = assign(
|
| jsParam.getName().makeRef(),
|
| new JsConditional(ifExpr, thenExpr, elseExpr));
|
| -
|
| +
|
| jsSwitch.getCases().add(AstUtil.newCase(number(i), asg.makeStmt()));
|
| }
|
| if (jsSwitch.getCases().size() > 0) {
|
| stmts.add(jsSwitch);
|
| }
|
| -
|
| +
|
| // if ((seen != $o.count) || (seen + def + $n != TOTAL)) {
|
| // $nsme();
|
| // }
|
| {
|
| JsBinaryOperation ifLeft = neq(seen.makeRef(),
|
| AstUtil.newNameRef(namedParam.getName().makeRef(), "count"));
|
| -
|
| +
|
| JsExpression add1 = add(seen.makeRef(), def.makeRef());
|
| JsExpression add2 = add(add1, countParam.getName().makeRef());
|
| JsExpression ifRight = neq(add2, number(func.getParams().size()));
|
| -
|
| +
|
| JsExpression ifExpr = or(ifLeft, ifRight);
|
| JsStatement thenStmt = AstUtil.newInvocation(new JsNameRef("$nsme")).makeStmt();
|
| -
|
| +
|
| stmts.add(new JsIf(ifExpr, thenStmt, null));
|
| }
|
| } else {
|
| @@ -1268,7 +1268,7 @@ public class GenerateJavascriptAST {
|
| or(AstUtil.newNameRef(namedParam.getName().makeRef(), "count"),
|
| neq(countParam.getName().makeRef(), number(func.getParams().size())));
|
| JsStatement thenStmt = AstUtil.newInvocation(new JsNameRef("$nsme")).makeStmt();
|
| -
|
| +
|
| stmts.add(new JsIf(ifExpr, thenStmt, null));
|
| }
|
| }
|
| @@ -1713,7 +1713,9 @@ public class GenerateJavascriptAST {
|
| // Create JS parameters
|
| List<DartParameter> params = x.getParams();
|
| List<JsParameter> jsParams = jsFunc.getParameters();
|
| - generateAll(params, jsParams, JsParameter.class);
|
| + if (!jsFunc.isHoisted()) {
|
| + generateAll(params, jsParams, JsParameter.class);
|
| + }
|
|
|
| // Create the runtime type checks that will be inserted later
|
| List<JsStatement> checks = Lists.newArrayList();
|
| @@ -2023,7 +2025,7 @@ public class GenerateJavascriptAST {
|
|
|
| /**
|
| * Get the return type of a factory method.
|
| - *
|
| + *
|
| * @param function
|
| * @return {@link Type} instance or null if not a factory method or otherwise unavailable
|
| */
|
| @@ -2295,7 +2297,7 @@ public class GenerateJavascriptAST {
|
|
|
| lhs = rtt.addTypeCheck(getCurrentClass(), lhs, getRequiredType(op), arg1.getType(), arg1);
|
| rhs = rtt.addTypeCheck(getCurrentClass(), rhs, getRequiredType(op), arg2.getType(), arg2);
|
| -
|
| +
|
| if (skipShim) {
|
| if (op.isEqualityOperator()) {
|
| op = mapToStrictEquals(op);
|
| @@ -2325,7 +2327,7 @@ public class GenerateJavascriptAST {
|
|
|
| /**
|
| * Return a type which an operator requires for its operands.
|
| - *
|
| + *
|
| * @param op operator
|
| * @return a {@link Type} instance, which will be {@code null} if there are
|
| * no restrictions
|
| @@ -2978,7 +2980,6 @@ public class GenerateJavascriptAST {
|
| @Override
|
| public JsNode visitFunctionExpression(DartFunctionExpression x) {
|
| JsFunction fn = (JsFunction) generate(x.getFunction());
|
| -
|
| JsName fnDeclaredName;
|
| JsName hoistedName;
|
| String hoistedRttName = null;
|
| @@ -3074,7 +3075,7 @@ public class GenerateJavascriptAST {
|
| }
|
| }
|
|
|
| - JsInvocation invoke = AstUtil.newInvocation(new JsNameRef(jsBindName),
|
| + JsInvocation invoke = AstUtil.newInvocation(new JsNameRef(jsBindName),
|
| new JsNameRef(hoistedName),
|
| hoistedRttName != null ? new JsNameRef(hoistedRttName) : nulle(), thisRef);
|
|
|
|
|