Index: sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
index 4d32c899c6eede74c1243b77c3cd871e2448a91f..1a25d7328ffb7b32e8c73a03e89a8ffd9d40b62c 100644 |
--- a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
@@ -218,46 +218,46 @@ class CodeEmitterTask extends CompilerTask { |
// function generateAccessor(field, prototype) { |
jsAst.Fun fun = js.fun(['field', 'prototype'], [ |
- js['var len = field.length'], |
- js['var code = field.charCodeAt(len - 1)'], |
- js['code = ((code >= $RANGE1_FIRST) && (code <= $RANGE1_LAST))' |
+ js('var len = field.length'), |
+ js('var code = field.charCodeAt(len - 1)'), |
+ js('code = ((code >= $RANGE1_FIRST) && (code <= $RANGE1_LAST))' |
' ? code - $RANGE1_ADJUST' |
' : ((code >= $RANGE2_FIRST) && (code <= $RANGE2_LAST))' |
' ? code - $RANGE2_ADJUST' |
' : ((code >= $RANGE3_FIRST) && (code <= $RANGE3_LAST))' |
' ? code - $RANGE3_ADJUST' |
- ' : $NO_FIELD_CODE'], |
+ ' : $NO_FIELD_CODE'), |
// if (needsAccessor) { |
js.if_('code', [ |
- js['var getterCode = code & 3'], |
- js['var setterCode = code >> 2'], |
- js['var accessorName = field = field.substring(0, len - 1)'], |
+ js('var getterCode = code & 3'), |
+ js('var setterCode = code >> 2'), |
+ js('var accessorName = field = field.substring(0, len - 1)'), |
- js['var divider = field.indexOf(":")'], |
+ js('var divider = field.indexOf(":")'), |
js.if_('divider > 0', [ // Colon never in first position. |
- js['accessorName = field.substring(0, divider)'], |
- js['field = field.substring(divider + 1)'] |
+ js('accessorName = field.substring(0, divider)'), |
+ js('field = field.substring(divider + 1)') |
]), |
// if (needsGetter) { |
js.if_('getterCode', [ |
- js['var args = (getterCode & 2) ? "$receiverParamName" : ""'], |
- js['var receiver = (getterCode & 1) ? "this" : "$receiverParamName"'], |
- js['var body = "return " + receiver + "." + field'], |
- js['prototype["${namer.getterPrefix}" + accessorName] = ' |
- 'new Function(args, body)'] |
+ js('var args = (getterCode & 2) ? "$receiverParamName" : ""'), |
+ js('var receiver = (getterCode & 1) ? "this" : "$receiverParamName"'), |
+ js('var body = "return " + receiver + "." + field'), |
+ js('prototype["${namer.getterPrefix}" + accessorName] = ' |
+ 'new Function(args, body)') |
]), |
// if (needsSetter) { |
js.if_('setterCode', [ |
- js['var args = (setterCode & 2)' |
+ js('var args = (setterCode & 2)' |
' ? "$receiverParamName,${_}$valueParamName"' |
- ' : "$valueParamName"'], |
- js['var receiver = (setterCode & 1) ? "this" : "$receiverParamName"'], |
- js['var body = receiver + "." + field + "$_=$_$valueParamName"'], |
- js['prototype["${namer.setterPrefix}" + accessorName] = ' |
- 'new Function(args, body)'] |
+ ' : "$valueParamName"'), |
+ js('var receiver = (setterCode & 1) ? "this" : "$receiverParamName"'), |
+ js('var body = receiver + "." + field + "$_=$_$valueParamName"'), |
+ js('prototype["${namer.setterPrefix}" + accessorName] = ' |
+ 'new Function(args, body)') |
]), |
]), |
@@ -288,33 +288,33 @@ class CodeEmitterTask extends CompilerTask { |
// function(cls, fields, prototype) { |
var defineClass = js.fun(['cls', 'fields', 'prototype'], [ |
- js['var constructor'], |
+ js('var constructor'), |
// if (typeof fields == "function") { |
- js.if_(js['typeof fields == "function"'], [ |
- js['constructor = fields'] |
+ js.if_(js('typeof fields == "function"'), [ |
+ js('constructor = fields') |
], /* else */ [ |
- js['var str = "function " + cls + "("'], |
- js['var body = ""'], |
+ js('var str = "function " + cls + "("'), |
+ js('var body = ""'), |
// for (var i = 0; i < fields.length; i++) { |
js.for_('var i = 0', 'i < fields.length', 'i++', [ |
// if (i != 0) str += ", "; |
- js.if_('i != 0', js['str += ", "']), |
+ js.if_('i != 0', js('str += ", "')), |
- js['var field = fields[i]'], |
- js['field = generateAccessor(field, prototype)'], |
- js['str += field'], |
- js['body += ("this." + field + " = " + field + ";\\n")'] |
+ js('var field = fields[i]'), |
+ js('field = generateAccessor(field, prototype)'), |
+ js('str += field'), |
+ js('body += ("this." + field + " = " + field + ";\\n")') |
]), |
- js['str += (") {" + body + "}\\nreturn " + cls)'], |
+ js('str += (") {" + body + "}\\nreturn " + cls)'), |
- js['constructor = (new Function(str))()'] |
+ js('constructor = (new Function(str))()') |
]), |
- js['constructor.prototype = prototype'], |
- js['constructor.builtin\$cls = cls'], |
+ js('constructor.prototype = prototype'), |
+ js('constructor.builtin\$cls = cls'), |
// return constructor; |
js.return_('constructor') |
@@ -323,7 +323,7 @@ class CodeEmitterTask extends CompilerTask { |
// defineClassFunction (it's a local declaration in init()). |
return [ |
generateAccessorFunction, |
- js['$generateAccessorHolder = generateAccessor'], |
+ js('$generateAccessorHolder = generateAccessor'), |
new jsAst.FunctionDeclaration( |
new jsAst.VariableDeclaration('defineClass'), defineClass) ]; |
} |
@@ -341,13 +341,13 @@ class CodeEmitterTask extends CompilerTask { |
// TODO(8541): Remove this work around. |
return [ |
- js['var $supportsProtoName = false'], |
- js['var tmp = (defineClass("c", ["f?"], {})).prototype'], |
+ js('var $supportsProtoName = false'), |
+ js('var tmp = (defineClass("c", ["f?"], {})).prototype'), |
- js.if_(js['tmp.__proto__'], [ |
- js['tmp.__proto__ = {}'], |
- js.if_(js[r'typeof tmp.get$f != "undefined"'], |
- js['$supportsProtoName = true']) |
+ js.if_(js('tmp.__proto__'), [ |
+ js('tmp.__proto__ = {}'), |
+ js.if_(js(r'typeof tmp.get$f != "undefined"'), |
+ js('$supportsProtoName = true')) |
]) |
]; |
@@ -498,37 +498,37 @@ class CodeEmitterTask extends CompilerTask { |
var type = 0; |
if (useDiffEncoding) { |
statements.addAll([ |
- js['var objectClassObject = ' |
+ js('var objectClassObject = ' |
' collectedClasses["${namer.getName(objectClass)}"],' |
' shortNames = "$diffEncoding".split(","),' |
' nameNumber = 0,' |
' diffEncodedString = shortNames[0],' |
- ' calculatedShortNames = [0, 1]'], // 0, 1 are args for splice. |
+ ' calculatedShortNames = [0, 1]'), // 0, 1 are args for splice. |
js.for_('var i = 0', 'i < diffEncodedString.length', 'i++', [ |
- js['var codes = [],' |
+ js('var codes = [],' |
' diff = 0,' |
- ' digit = diffEncodedString.charCodeAt(i)'], |
+ ' digit = diffEncodedString.charCodeAt(i)'), |
js.if_('digit == ${$PERIOD}', [ |
- js['nameNumber = 0'], |
- js['digit = diffEncodedString.charCodeAt(++i)'] |
+ js('nameNumber = 0'), |
+ js('digit = diffEncodedString.charCodeAt(++i)') |
]), |
js.while_('digit <= ${$Z}', [ |
- js['diff *= 26'], |
- js['diff += (digit - ${$A})'], |
- js['digit = diffEncodedString.charCodeAt(++i)'] |
+ js('diff *= 26'), |
+ js('diff += (digit - ${$A})'), |
+ js('digit = diffEncodedString.charCodeAt(++i)') |
]), |
- js['diff *= 26'], |
- js['diff += (digit - ${$a})'], |
- js['nameNumber += diff'], |
+ js('diff *= 26'), |
+ js('diff += (digit - ${$a})'), |
+ js('nameNumber += diff'), |
js.for_('var remaining = nameNumber', |
'remaining > 0', |
'remaining = ((remaining / 88) | 0)', [ |
- js['codes.unshift(${$HASH} + (remaining % 88))'] |
+ js('codes.unshift(${$HASH} + (remaining % 88))') |
]), |
- js['calculatedShortNames.push(' |
- ' String.fromCharCode.apply(String, codes))'] |
+ js('calculatedShortNames.push(' |
+ ' String.fromCharCode.apply(String, codes))') |
]), |
- js['shortNames.splice.apply(shortNames, calculatedShortNames)'] |
+ js('shortNames.splice.apply(shortNames, calculatedShortNames)') |
]); |
} else { |
// No useDiffEncoding version. |
@@ -537,10 +537,10 @@ class CodeEmitterTask extends CompilerTask { |
String longNamesConstant = minify ? "" : |
',longNames = "${longs.join(",")}".split(",")'; |
statements.add( |
- js['var objectClassObject = ' |
+ js('var objectClassObject = ' |
' collectedClasses["${namer.getName(objectClass)}"],' |
' shortNames = "$diffEncoding".split(",")' |
- ' $longNamesConstant']); |
+ ' $longNamesConstant')); |
} |
String sliceOffset = '," + (j < $firstNormalSelector ? 1 : 0)'; |
@@ -553,11 +553,11 @@ class CodeEmitterTask extends CompilerTask { |
statements.addAll([ |
js.for_('var j = 0', 'j < shortNames.length', 'j++', [ |
- js['var type = 0'], |
- js['var short = shortNames[j]'], |
- js.if_('short[0] == "${namer.getterPrefix[0]}"', js['type = 1']), |
- js.if_('short[0] == "${namer.setterPrefix[0]}"', js['type = 2']), |
- js['$whatToPatch[short] = Function("' |
+ js('var type = 0'), |
+ js('var short = shortNames[j]'), |
+ js.if_('short[0] == "${namer.getterPrefix[0]}"', js('type = 1')), |
+ js.if_('short[0] == "${namer.setterPrefix[0]}"', js('type = 2')), |
+ js('$whatToPatch[short] = Function("' |
'return this.$noSuchMethodName(' |
'this,' |
'${namer.CURRENT_ISOLATE}.$createInvocationMirror(\'"' |
@@ -566,7 +566,7 @@ class CodeEmitterTask extends CompilerTask { |
' + type' |
' + ",Array.prototype.slice.call(arguments' |
'$sliceOffset' |
- ' + "),[]))")'] |
+ ' + "),[]))")') |
]) |
]); |
} |
@@ -586,15 +586,15 @@ class CodeEmitterTask extends CompilerTask { |
// object and copy over the members. |
List<jsAst.Node> statements = [ |
- js['var pendingClasses = {}'], |
+ js('var pendingClasses = {}'), |
- js['var hasOwnProperty = Object.prototype.hasOwnProperty'], |
+ js('var hasOwnProperty = Object.prototype.hasOwnProperty'), |
// for (var cls in collectedClasses) { |
js.forIn('cls', 'collectedClasses', [ |
// if (hasOwnProperty.call(collectedClasses, cls)) { |
js.if_('hasOwnProperty.call(collectedClasses, cls)', [ |
- js['var desc = collectedClasses[cls]'], |
+ js('var desc = collectedClasses[cls]'), |
/* The 'fields' are either a constructor function or a |
* string encoding fields, constructor and superclass. Get |
@@ -603,24 +603,24 @@ class CodeEmitterTask extends CompilerTask { |
* descriptor. |
*/ |
// var fields = desc[""], supr; |
- js['var fields = desc[""], supr'], |
+ js('var fields = desc[""], supr'), |
js.if_('typeof fields == "string"', [ |
- js['var s = fields.split(";")'], |
- js['supr = s[0]'], |
- js['fields = s[1] == "" ? [] : s[1].split(",")'], |
+ js('var s = fields.split(";")'), |
+ js('supr = s[0]'), |
+ js('fields = s[1] == "" ? [] : s[1].split(",")'), |
], /* else */ [ |
- js['supr = desc.super'] |
+ js('supr = desc.super') |
]), |
- js['isolateProperties[cls] = defineClass(cls, fields, desc)'], |
+ js('isolateProperties[cls] = defineClass(cls, fields, desc)'), |
// if (supr) pendingClasses[cls] = supr; |
- js.if_('supr', js['pendingClasses[cls] = supr']) |
+ js.if_('supr', js('pendingClasses[cls] = supr')) |
]) |
]), |
- js['var finishedClasses = {}'], |
+ js('var finishedClasses = {}'), |
// function finishClass(cls) { ... } |
buildFinishClass(), |
@@ -630,7 +630,7 @@ class CodeEmitterTask extends CompilerTask { |
statements.add( |
// for (var cls in pendingClasses) finishClass(cls); |
- js.forIn('cls', 'pendingClasses', js['finishClass(cls)']) |
+ js.forIn('cls', 'pendingClasses', js('finishClass(cls)')) |
); |
// function(collectedClasses, |
// isolateProperties, |
@@ -646,37 +646,37 @@ class CodeEmitterTask extends CompilerTask { |
// TODO(8540): Remove this work around. |
/* Opera does not support 'getOwnPropertyNames'. Therefore we use |
hasOwnProperty instead. */ |
- js['var hasOwnProperty = Object.prototype.hasOwnProperty'], |
+ js('var hasOwnProperty = Object.prototype.hasOwnProperty'), |
// if (hasOwnProperty.call(finishedClasses, cls)) return; |
js.if_('hasOwnProperty.call(finishedClasses, cls)', |
js.return_()), |
- js['finishedClasses[cls] = true'], |
+ js('finishedClasses[cls] = true'), |
- js['var superclass = pendingClasses[cls]'], |
+ js('var superclass = pendingClasses[cls]'), |
// The superclass is only false (empty string) for Dart's Object class. |
// The minifier together with noSuchMethod can put methods on the |
// Object.prototype object, and they show through here, so we check that |
// we have a string. |
js.if_('!superclass || typeof superclass != "string"', js.return_()), |
- js['finishClass(superclass)'], |
- js['var constructor = isolateProperties[cls]'], |
- js['var superConstructor = isolateProperties[superclass]'], |
+ js('finishClass(superclass)'), |
+ js('var constructor = isolateProperties[cls]'), |
+ js('var superConstructor = isolateProperties[superclass]'), |
// if (!superConstructor) |
// superConstructor = existingIsolateProperties[superclass]; |
- js.if_(js['superConstructor'].not, |
- js['superConstructor'].assign( |
- js['existingIsolateProperties'][js['superclass']])), |
+ js.if_(js('superConstructor').not, |
+ js('superConstructor').assign( |
+ js('existingIsolateProperties')[js('superclass')])), |
- js['var prototype = constructor.prototype'], |
+ js('var prototype = constructor.prototype'), |
// if ($supportsProtoName) { |
js.if_(supportsProtoName, [ |
- js['prototype.__proto__ = superConstructor.prototype'], |
- js['prototype.constructor = constructor'], |
+ js('prototype.__proto__ = superConstructor.prototype'), |
+ js('prototype.constructor = constructor'), |
], /* else */ [ |
// function tmp() {}; |
@@ -684,11 +684,11 @@ class CodeEmitterTask extends CompilerTask { |
new jsAst.VariableDeclaration('tmp'), |
js.fun([], [])), |
- js['tmp.prototype = superConstructor.prototype'], |
- js['var newPrototype = new tmp()'], |
+ js('tmp.prototype = superConstructor.prototype'), |
+ js('var newPrototype = new tmp()'), |
- js['constructor.prototype = newPrototype'], |
- js['newPrototype.constructor = constructor'], |
+ js('constructor.prototype = newPrototype'), |
+ js('newPrototype.constructor = constructor'), |
// for (var member in prototype) { |
js.forIn('member', 'prototype', [ |
@@ -698,7 +698,7 @@ class CodeEmitterTask extends CompilerTask { |
// if (hasOwnProperty.call(prototype, member)) { |
js.if_('hasOwnProperty.call(prototype, member)', [ |
- js['newPrototype[member] = prototype[member]'] |
+ js('newPrototype[member] = prototype[member]') |
]) |
]) |
@@ -737,40 +737,40 @@ class CodeEmitterTask extends CompilerTask { |
if (needsDefineClass) { |
copyFinishClasses.add( |
// newIsolate.$finishClasses = oldIsolate.$finishClasses; |
- js['newIsolate'][finishClassesProperty].assign( |
- js['oldIsolate'][finishClassesProperty])); |
+ js('newIsolate')[finishClassesProperty].assign( |
+ js('oldIsolate')[finishClassesProperty])); |
} |
// function(oldIsolate) { |
return js.fun('oldIsolate', [ |
- js['var isolateProperties = oldIsolate.${namer.isolatePropertiesName}'], |
+ js('var isolateProperties = oldIsolate.${namer.isolatePropertiesName}'), |
- js[r'isolateProperties.$currentScript =' |
+ js(r'isolateProperties.$currentScript =' |
'typeof document == "object" ?' |
'(document.currentScript ||' |
'document.scripts[document.scripts.length - 1]) :' |
- 'null'], |
+ 'null'), |
- js['var isolatePrototype = oldIsolate.prototype'], |
- js['var str = "{\\n"'], |
- js['str += ' |
- '"var properties = $isolate.${namer.isolatePropertiesName};\\n"'], |
- js['var hasOwnProperty = Object.prototype.hasOwnProperty'], |
+ js('var isolatePrototype = oldIsolate.prototype'), |
+ js('var str = "{\\n"'), |
+ js('str += ' |
+ '"var properties = $isolate.${namer.isolatePropertiesName};\\n"'), |
+ js('var hasOwnProperty = Object.prototype.hasOwnProperty'), |
// for (var staticName in isolateProperties) { |
js.forIn('staticName', 'isolateProperties', [ |
js.if_('hasOwnProperty.call(isolateProperties, staticName)', [ |
- js['str += ("this." + staticName + "= properties." + staticName + ' |
- '";\\n")'] |
+ js('str += ("this." + staticName + "= properties." + staticName + ' |
+ '";\\n")') |
]) |
]), |
- js['str += "}\\n"'], |
+ js('str += "}\\n"'), |
- js['var newIsolate = new Function(str)'], |
- js['newIsolate.prototype = isolatePrototype'], |
- js['isolatePrototype.constructor = newIsolate'], |
- js['newIsolate.${namer.isolatePropertiesName} = isolateProperties'], |
+ js('var newIsolate = new Function(str)'), |
+ js('newIsolate.prototype = isolatePrototype'), |
+ js('isolatePrototype.constructor = newIsolate'), |
+ js('newIsolate.${namer.isolatePropertiesName} = isolateProperties'), |
]..addAll(copyFinishClasses) |
..addAll([ |
@@ -786,7 +786,7 @@ class CodeEmitterTask extends CompilerTask { |
var parameters = <String>['prototype', 'staticName', 'fieldName', |
'getterName', 'lazyValue']; |
return js.fun(parameters, [ |
- js['var getter = new Function("{ return $isolate." + fieldName + ";}")'], |
+ js('var getter = new Function("{ return $isolate." + fieldName + ";}")'), |
]..addAll(addLazyInitializerLogic()) |
); |
} |
@@ -796,22 +796,22 @@ class CodeEmitterTask extends CompilerTask { |
String cyclicThrow = namer.isolateAccess(backend.getCyclicThrowHelper()); |
return [ |
- js['var sentinelUndefined = {}'], |
- js['var sentinelInProgress = {}'], |
- js['prototype[fieldName] = sentinelUndefined'], |
+ js('var sentinelUndefined = {}'), |
+ js('var sentinelInProgress = {}'), |
+ js('prototype[fieldName] = sentinelUndefined'), |
// prototype[getterName] = function() { |
- js['prototype'][js['getterName']].assign(js.fun([], [ |
- js['var result = $isolate[fieldName]'], |
+ js('prototype')[js('getterName')].assign(js.fun([], [ |
+ js('var result = $isolate[fieldName]'), |
// try { |
js.try_([ |
js.if_('result === sentinelUndefined', [ |
- js['$isolate[fieldName] = sentinelInProgress'], |
+ js('$isolate[fieldName] = sentinelInProgress'), |
// try { |
js.try_([ |
- js['result = $isolate[fieldName] = lazyValue()'], |
+ js('result = $isolate[fieldName] = lazyValue()'), |
], finallyPart: [ |
// Use try-finally, not try-catch/throw as it destroys the |
@@ -821,13 +821,13 @@ class CodeEmitterTask extends CompilerTask { |
js.if_('result === sentinelUndefined', [ |
// if ($isolate[fieldName] === sentinelInProgress) { |
js.if_('$isolate[fieldName] === sentinelInProgress', [ |
- js['$isolate[fieldName] = null'], |
+ js('$isolate[fieldName] = null'), |
]) |
]) |
]) |
], /* else */ [ |
js.if_('result === sentinelInProgress', |
- js['$cyclicThrow(staticName)'] |
+ js('$cyclicThrow(staticName)') |
) |
]), |
@@ -835,7 +835,7 @@ class CodeEmitterTask extends CompilerTask { |
js.return_('result') |
], finallyPart: [ |
- js['$isolate[getterName] = getter'] |
+ js('$isolate[getterName] = getter') |
]) |
])) |
]; |
@@ -846,7 +846,7 @@ class CodeEmitterTask extends CompilerTask { |
return defineClassFunction |
..addAll(buildProtoSupportCheck()) |
..addAll([ |
- js[finishClassesName].assign(finishClassesFunction) |
+ js(finishClassesName).assign(finishClassesFunction) |
]); |
} |
@@ -854,13 +854,13 @@ class CodeEmitterTask extends CompilerTask { |
if (!needsLazyInitializer) return []; |
// $lazyInitializerName = $lazyInitializerFunction |
- return [js[lazyInitializerName].assign(lazyInitializerFunction)]; |
+ return [js(lazyInitializerName).assign(lazyInitializerFunction)]; |
} |
List buildFinishIsolateConstructor() { |
return [ |
// $finishIsolateConstructorName = $finishIsolateConstructorFunction |
- js[finishIsolateConstructorName].assign(finishIsolateConstructorFunction) |
+ js(finishIsolateConstructorName).assign(finishIsolateConstructorFunction) |
]; |
} |
@@ -922,7 +922,7 @@ class CodeEmitterTask extends CompilerTask { |
if (isInterceptedMethod) { |
count++; |
parametersBuffer[0] = new jsAst.Parameter(receiverArgumentName); |
- argumentsBuffer[0] = js[receiverArgumentName]; |
+ argumentsBuffer[0] = js(receiverArgumentName); |
} |
int optionalParameterStart = positionalArgumentCount + extraArgumentCount; |
@@ -937,14 +937,14 @@ class CodeEmitterTask extends CompilerTask { |
assert(jsName != receiverArgumentName); |
if (count < optionalParameterStart) { |
parametersBuffer[count] = new jsAst.Parameter(jsName); |
- argumentsBuffer[count] = js[jsName]; |
+ argumentsBuffer[count] = js(jsName); |
} else { |
int index = names.indexOf(element.name); |
if (index != -1) { |
indexOfLastOptionalArgumentInParameters = count; |
// The order of the named arguments is not the same as the |
// one in the real method (which is in Dart source order). |
- argumentsBuffer[count] = js[jsName]; |
+ argumentsBuffer[count] = js(jsName); |
parametersBuffer[optionalParameterStart + index] = |
new jsAst.Parameter(jsName); |
// Note that [elements] may be null for a synthesized [member]. |
@@ -974,7 +974,7 @@ class CodeEmitterTask extends CompilerTask { |
parametersBuffer, argumentsBuffer, |
indexOfLastOptionalArgumentInParameters); |
} else { |
- body = [js.return_(js['this'][namer.getName(member)](argumentsBuffer))]; |
+ body = [js.return_(js('this')[namer.getName(member)](argumentsBuffer))]; |
} |
jsAst.Fun function = js.fun(parametersBuffer, body); |
@@ -1416,7 +1416,7 @@ class CodeEmitterTask extends CompilerTask { |
? ['receiver'] |
: []; |
builder.addProperty(getterName, |
- js.fun(args, js.return_(js['$receiver.$fieldName']))); |
+ js.fun(args, js.return_(js('$receiver.$fieldName')))); |
} |
void generateSetter(Element member, String fieldName, String accessorName, |
@@ -1428,7 +1428,7 @@ class CodeEmitterTask extends CompilerTask { |
? ['receiver', 'v'] |
: ['v']; |
builder.addProperty(setterName, |
- js.fun(args, js[receiver][fieldName].assign('v'))); |
+ js.fun(args, js(receiver)[fieldName].assign('v'))); |
} |
bool canGenerateCheckedSetter(Element member) { |
@@ -1453,7 +1453,7 @@ class CodeEmitterTask extends CompilerTask { |
FunctionElement helperElement |
= backend.getCheckedModeHelper(type, typeCast: false); |
String helperName = namer.isolateAccess(helperElement); |
- List<jsAst.Expression> arguments = <jsAst.Expression>[js['v']]; |
+ List<jsAst.Expression> arguments = <jsAst.Expression>[js('v')]; |
if (helperElement.computeSignature(compiler).parameterCount != 1) { |
arguments.add(js.string(namer.operatorIs(type.element))); |
} |
@@ -1466,7 +1466,7 @@ class CodeEmitterTask extends CompilerTask { |
: ['v']; |
builder.addProperty(setterName, |
js.fun(args, |
- js[receiver][fieldName].assign(js[helperName](arguments)))); |
+ js(receiver)[fieldName].assign(js(helperName)(arguments)))); |
} |
void emitClassConstructor(ClassElement classElement, ClassBuilder builder) { |
@@ -1610,7 +1610,7 @@ class CodeEmitterTask extends CompilerTask { |
emitInstanceMembers(classElement, builder); |
jsAst.Expression init = |
- js[classesCollector][className].assign(builder.toObjectInitializer()); |
+ js(classesCollector)[className].assign(builder.toObjectInitializer()); |
buffer.write(jsAst.prettyPrint(init, compiler)); |
buffer.write('$N$n'); |
} |
@@ -1833,7 +1833,7 @@ class CodeEmitterTask extends CompilerTask { |
String name, |
jsAst.Expression functionExpression) { |
jsAst.Expression assignment = |
- js[isolateProperties][name].assign(functionExpression); |
+ js(isolateProperties)[name].assign(functionExpression); |
buffer.write(jsAst.prettyPrint(assignment, compiler)); |
buffer.write('$N$n'); |
} |
@@ -1890,7 +1890,7 @@ class CodeEmitterTask extends CompilerTask { |
addParameterStubs(callElement, (String name, jsAst.Expression value) { |
jsAst.Expression assignment = |
- js[isolateProperties][staticName][name].assign(value); |
+ js(isolateProperties)[staticName][name].assign(value); |
buffer.write(jsAst.prettyPrint(assignment.toStatement(), compiler)); |
buffer.write('$N'); |
}); |
@@ -2012,18 +2012,18 @@ class CodeEmitterTask extends CompilerTask { |
List<String> parameters = <String>[]; |
List<jsAst.Expression> arguments = <jsAst.Expression>[]; |
if (inInterceptor) { |
- arguments.add(js['this'][fieldNames[2]]); |
+ arguments.add(js('this')[fieldNames[2]]); |
} |
for (int i = 0; i < parameterCount; i++) { |
String name = 'p$i'; |
parameters.add(name); |
- arguments.add(js[name]); |
+ arguments.add(js(name)); |
} |
jsAst.Expression fun = js.fun( |
parameters, |
js.return_( |
- js['this'][fieldNames[0]][js['this'][fieldNames[1]]](arguments))); |
+ js('this')[fieldNames[0]][js('this')[fieldNames[1]]](arguments))); |
boundClosureBuilder.addProperty(invocationName, fun); |
addParameterStubs(callElement, boundClosureBuilder.addProperty); |
@@ -2033,7 +2033,7 @@ class CodeEmitterTask extends CompilerTask { |
}); |
boundClosures.add( |
- js[classesCollector][mangledName].assign( |
+ js(classesCollector)[mangledName].assign( |
boundClosureBuilder.toObjectInitializer())); |
closureClass = namer.isolateAccess(closureClassElement); |
@@ -2050,16 +2050,16 @@ class CodeEmitterTask extends CompilerTask { |
List<String> parameters = <String>[]; |
List<jsAst.Expression> arguments = <jsAst.Expression>[]; |
- arguments.add(js['this']); |
+ arguments.add(js('this')); |
arguments.add(js.string(targetName)); |
if (inInterceptor) { |
parameters.add(extraArg); |
- arguments.add(js[extraArg]); |
+ arguments.add(js(extraArg)); |
} |
jsAst.Expression getterFunction = js.fun( |
parameters, |
- js.return_(js[closureClass].newWith(arguments))); |
+ js.return_(js(closureClass).newWith(arguments))); |
defineStub(getterName, getterFunction); |
} |
@@ -2083,15 +2083,15 @@ class CodeEmitterTask extends CompilerTask { |
jsAst.Expression buildGetter() { |
if (member.isGetter()) { |
String getterName = namer.getterName(member); |
- return js['this'][getterName]( |
+ return js('this')[getterName]( |
isInterceptedMethod |
- ? <jsAst.Expression>[js[receiverArgumentName]] |
+ ? <jsAst.Expression>[js(receiverArgumentName)] |
: <jsAst.Expression>[]); |
} else { |
String fieldName = member.hasFixedBackendName() |
? member.fixedBackendName() |
: namer.instanceFieldName(member); |
- return js['this'][fieldName]; |
+ return js('this')[fieldName]; |
} |
} |
@@ -2119,7 +2119,7 @@ class CodeEmitterTask extends CompilerTask { |
for (int i = 0; i < selector.argumentCount; i++) { |
String name = 'arg$i'; |
parameters.add(new jsAst.Parameter(name)); |
- arguments.add(js[name]); |
+ arguments.add(js(name)); |
} |
jsAst.Fun function = js.fun( |
@@ -2141,7 +2141,7 @@ class CodeEmitterTask extends CompilerTask { |
compiler.withCurrentElement(element, () { |
Constant initialValue = handler.getInitialValueFor(element); |
jsAst.Expression init = |
- js[isolateProperties][namer.getName(element)].assign( |
+ js(isolateProperties)[namer.getName(element)].assign( |
constantEmitter.referenceInInitializationContext(initialValue)); |
buffer.write(jsAst.prettyPrint(init, compiler)); |
buffer.write('$N'); |
@@ -2168,7 +2168,7 @@ class CodeEmitterTask extends CompilerTask { |
// The name is used for error reporting. The 'initial' must be a |
// closure that constructs the initial value. |
List<jsAst.Expression> arguments = <jsAst.Expression>[]; |
- arguments.add(js[isolateProperties]); |
+ arguments.add(js(isolateProperties)); |
arguments.add(js.string(element.name.slowToString())); |
arguments.add(js.string(namer.getName(element))); |
arguments.add(js.string(namer.getLazyInitializerName(element))); |
@@ -2177,7 +2177,7 @@ class CodeEmitterTask extends CompilerTask { |
if (getter != null) { |
arguments.add(getter); |
} |
- jsAst.Expression init = js[lazyInitializerName](arguments); |
+ jsAst.Expression init = js(lazyInitializerName)(arguments); |
buffer.write(jsAst.prettyPrint(init, compiler)); |
buffer.write("$N"); |
} |
@@ -2210,7 +2210,7 @@ class CodeEmitterTask extends CompilerTask { |
} |
CodeBuffer buffer = |
bufferForElement(constant.computeType(compiler).element, eagerBuffer); |
- jsAst.Expression init = js[isolateProperties][name].assign( |
+ jsAst.Expression init = js(isolateProperties)[name].assign( |
constantInitializerExpression(constant)); |
buffer.write(jsAst.prettyPrint(init, compiler)); |
buffer.write('$N'); |
@@ -2401,15 +2401,15 @@ class CodeEmitterTask extends CompilerTask { |
compiler.createInvocationMirrorElement); |
assert(backend.isInterceptedName(Compiler.NO_SUCH_METHOD)); |
- jsAst.Expression expression = js['this.$noSuchMethodName']( |
- [js['this'], |
- js[namer.CURRENT_ISOLATE][createInvocationMirror]([ |
+ jsAst.Expression expression = js('this.$noSuchMethodName')( |
+ [js('this'), |
+ js(namer.CURRENT_ISOLATE)[createInvocationMirror]([ |
js.string(compiler.enableMinification ? |
internalName : methodName), |
js.string(internalName), |
type, |
new jsAst.ArrayInitializer.from( |
- parameters.map((param) => js[param.name]).toList()), |
+ parameters.map((param) => js(param.name)).toList()), |
new jsAst.ArrayInitializer.from(argNames)])]); |
parameters = backend.isInterceptedName(selector.name) |
? ([new jsAst.Parameter('\$receiver')]..addAll(parameters)) |
@@ -2477,7 +2477,7 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
String key, |
Collection<ClassElement> classes) { |
jsAst.Statement buildReturnInterceptor(ClassElement cls) { |
- return js.return_(js[namer.isolateAccess(cls)]['prototype']); |
+ return js.return_(js(namer.isolateAccess(cls))['prototype']); |
} |
/** |
@@ -2488,7 +2488,7 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
jsAst.Expression condition; |
assert(backend.isInterceptorClass(cls)); |
if (cls == backend.jsBoolClass) { |
- condition = js['(typeof receiver) == "boolean"']; |
+ condition = js('(typeof receiver) == "boolean"'); |
} else if (cls == backend.jsIntClass || |
cls == backend.jsDoubleClass || |
cls == backend.jsNumberClass) { |
@@ -2497,13 +2497,13 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
cls == backend.jsMutableArrayClass || |
cls == backend.jsFixedArrayClass || |
cls == backend.jsExtendableArrayClass) { |
- condition = js['receiver.constructor == Array']; |
+ condition = js('receiver.constructor == Array'); |
} else if (cls == backend.jsStringClass) { |
- condition = js['(typeof receiver) == "string"']; |
+ condition = js('(typeof receiver) == "string"'); |
} else if (cls == backend.jsNullClass) { |
- condition = js['receiver == null']; |
+ condition = js('receiver == null'); |
} else if (cls == backend.jsFunctionClass) { |
- condition = js['(typeof receiver) == "function"']; |
+ condition = js('(typeof receiver) == "function"'); |
} else { |
throw 'internal error'; |
} |
@@ -2563,7 +2563,7 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
hasDouble ? backend.jsDoubleClass : backend.jsNumberClass); |
if (hasInt) { |
- jsAst.Expression isInt = js['Math.floor(receiver) == receiver']; |
+ jsAst.Expression isInt = js('Math.floor(receiver) == receiver'); |
whenNumber = js.block([ |
js.if_(isInt, buildReturnInterceptor(backend.jsIntClass)), |
returnNumberClass]); |
@@ -2585,7 +2585,7 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
// TypeError which is later identified as a null-error by |
// [unwrapException] in js_helper.dart. |
block.statements.add(js.if_('receiver == null', |
- js.return_(js['receiver']))); |
+ js.return_(js('receiver')))); |
} |
if (hasFunction) { |
block.statements.add(buildInterceptorCheck(backend.jsFunctionClass)); |
@@ -2602,8 +2602,8 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
if (hasNative) { |
block.statements.add( |
js.if_( |
- js['(typeof receiver) != "object"'], |
- js.return_(js['receiver']))); |
+ js('(typeof receiver) != "object"'), |
+ js.return_(js('receiver')))); |
// if (receiver instanceof $.Object) return receiver; |
// return $.getNativeInterceptor(receiver); |
@@ -2611,9 +2611,9 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
js.if_( |
new jsAst.Binary( |
"instanceof", |
- js['receiver'], |
- js[namer.isolateAccess(compiler.objectClass)]), |
- js.return_(js['receiver']))); |
+ js('receiver'), |
+ js(namer.isolateAccess(compiler.objectClass))), |
+ js.return_(js('receiver')))); |
// TODO(sra): Fold this 'Object' check into the `getNativeInterceptor` |
// check by patching `Object.prototype` with a special hook function. |
@@ -2621,20 +2621,20 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
// 'holders' are not Dart classes. |
block.statements.add( |
js.if_( |
- js['Object.getPrototypeOf(receiver) === Object.prototype'], |
+ js('Object.getPrototypeOf(receiver) === Object.prototype'), |
buildReturnInterceptor(backend.jsInterceptorClass))); |
block.statements.add( |
js.return_( |
- js[namer.isolateAccess(backend.getNativeInterceptorMethod)]( |
+ js(namer.isolateAccess(backend.getNativeInterceptorMethod))( |
['receiver']))); |
} else { |
- block.statements.add(js.return_(js['receiver'])); |
+ block.statements.add(js.return_(js('receiver'))); |
} |
buffer.write(jsAst.prettyPrint( |
- js[isolateProperties][key].assign(js.fun(['receiver'], block)), |
+ js(isolateProperties)[key].assign(js.fun(['receiver'], block)), |
compiler)); |
buffer.write(N); |
} |
@@ -2708,17 +2708,17 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
jsAst.Statement tryOptimizeOneShotInterceptor(Selector selector, |
Set<ClassElement> classes) { |
jsAst.Expression isNumber(String variable) { |
- return js[variable].typeof.equals(js.string('number')); |
+ return js(variable).typeof.equals(js.string('number')); |
} |
jsAst.Expression isNotObject(String variable) { |
- return js[variable].typeof.equals(js.string('object')).not; |
+ return js(variable).typeof.equals(js.string('object')).not; |
} |
jsAst.Expression isInt(String variable) { |
- jsAst.Expression receiver = js[variable]; |
+ jsAst.Expression receiver = js(variable); |
return isNumber(variable).binary('&&', |
- js['Math']['floor'](receiver).equals(receiver)); |
+ js('Math')['floor'](receiver).equals(receiver)); |
} |
jsAst.Expression tripleShiftZero(jsAst.Expression receiver) { |
@@ -2736,11 +2736,11 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
// :]. |
List<jsAst.Statement> body = <jsAst.Statement>[]; |
body.add(js.if_('receiver == null', |
- js.return_(js['a0'].equals(new jsAst.LiteralNull())))); |
+ js.return_(js('a0').equals(new jsAst.LiteralNull())))); |
body.add(js.if_( |
isNotObject('receiver'), |
- js.return_(js['a0'].equals(new jsAst.LiteralNull()).not.binary( |
- '&&', js['receiver'].strictEquals(js['a0']))))); |
+ js.return_(js('a0').equals(new jsAst.LiteralNull()).not.binary( |
+ '&&', js('receiver').strictEquals(js('a0')))))); |
return new jsAst.Block(body); |
} |
if (!classes.contains(backend.jsIntClass) |
@@ -2752,7 +2752,7 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
// The following operators do not map to a JavaScript |
// operator. |
if (name != '~/' && name != '<<' && name != '%' && name != '>>') { |
- jsAst.Expression result = js['receiver'].binary(name, js['a0']); |
+ jsAst.Expression result = js('receiver').binary(name, js('a0')); |
if (name == '&' || name == '|' || name == '^') { |
result = tripleShiftZero(result); |
} |
@@ -2770,13 +2770,13 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
// [: if (typeof receiver == "number") return -receiver:]. |
return js.if_( |
isNumber('receiver'), |
- js.return_(new jsAst.Prefix('-', js['receiver']))); |
+ js.return_(new jsAst.Prefix('-', js('receiver')))); |
} else { |
assert(name == '~'); |
return js.if_( |
isInt('receiver'), |
js.return_( |
- tripleShiftZero(new jsAst.Prefix(name, js['receiver'])))); |
+ tripleShiftZero(new jsAst.Prefix(name, js('receiver'))))); |
} |
} else if (selector.isIndex() || selector.isIndexSet()) { |
// For an index operation, this code generates: |
@@ -2808,8 +2808,8 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
if (!containsArray && !containsString) { |
return null; |
} |
- jsAst.Expression receiver = js['receiver']; |
- jsAst.Expression arg0 = js['a0']; |
+ jsAst.Expression receiver = js('receiver'); |
+ jsAst.Expression arg0 = js('a0'); |
jsAst.Expression isIntAndAboveZero = |
arg0.binary('>>>', js.toExpression(0)).strictEquals(arg0); |
jsAst.Expression belowLength = arg0.binary('<', receiver['length']); |
@@ -2838,7 +2838,7 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
'&&', receiver[r'immutable$list'].not); |
return js.if_(isImmutableArray.binary( |
'&&', isIntAndAboveZero.binary('&&', belowLength)), |
- js.return_(receiver[arg0].assign(js['a1']))); |
+ js.return_(receiver[arg0].assign(js('a1')))); |
} |
} |
return null; |
@@ -2857,16 +2857,16 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
List<jsAst.Parameter> parameters = <jsAst.Parameter>[]; |
List<jsAst.Expression> arguments = <jsAst.Expression>[]; |
parameters.add(new jsAst.Parameter('receiver')); |
- arguments.add(js['receiver']); |
+ arguments.add(js('receiver')); |
if (selector.isSetter()) { |
parameters.add(new jsAst.Parameter('value')); |
- arguments.add(js['value']); |
+ arguments.add(js('value')); |
} else { |
for (int i = 0; i < selector.argumentCount; i++) { |
String argName = 'a$i'; |
parameters.add(new jsAst.Parameter(argName)); |
- arguments.add(js[argName]); |
+ arguments.add(js(argName)); |
} |
} |
@@ -2879,13 +2879,13 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
String invocationName = backend.namer.invocationName(selector); |
body.add(js.return_( |
- js[isolateProperties][getInterceptorName]('receiver')[invocationName]( |
+ js(isolateProperties)[getInterceptorName]('receiver')[invocationName]( |
arguments))); |
jsAst.Fun function = js.fun(parameters, body); |
jsAst.PropertyAccess property = |
- js[isolateProperties][name]; |
+ js(isolateProperties)[name]; |
buffer.write(jsAst.prettyPrint(property.assign(function), compiler)); |
buffer.write(N); |
@@ -2902,7 +2902,7 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
void emitInterceptedNames(CodeBuffer buffer) { |
if (!compiler.enabledInvokeOn) return; |
String name = backend.namer.getName(backend.interceptedNames); |
- jsAst.PropertyAccess property = js[isolateProperties][name]; |
+ jsAst.PropertyAccess property = js(isolateProperties)[name]; |
int index = 0; |
List<jsAst.ArrayElement> elements = backend.usedInterceptors.map( |
@@ -2920,7 +2920,7 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
void emitInitFunction(CodeBuffer buffer) { |
jsAst.Fun fun = js.fun([], [ |
- js['$isolateProperties = {}'], |
+ js('$isolateProperties = {}'), |
] |
..addAll(buildDefineClassAndFinishClassFunctionsIfNecessary()) |
..addAll(buildLazyInitializerFunctionIfNecessary()) |