| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart2js.js_emitter.full_emitter; | 5 part of dart2js.js_emitter.full_emitter; |
| 6 | 6 |
| 7 // TODO(ahe): Share these with js_helper.dart. | 7 // TODO(ahe): Share these with js_helper.dart. |
| 8 const FUNCTION_INDEX = 0; | 8 const FUNCTION_INDEX = 0; |
| 9 const NAME_INDEX = 1; | 9 const NAME_INDEX = 1; |
| 10 const CALL_NAME_INDEX = 2; | 10 const CALL_NAME_INDEX = 2; |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 'initializeEmptyInstance': initializeEmptyInstanceAccess, | 119 'initializeEmptyInstance': initializeEmptyInstanceAccess, |
| 120 'allClasses': allClassesAccess, | 120 'allClasses': allClassesAccess, |
| 121 'debugFastObjects': DEBUG_FAST_OBJECTS, | 121 'debugFastObjects': DEBUG_FAST_OBJECTS, |
| 122 'isTreeShakingDisabled': backend.mirrorsData.isTreeShakingDisabled, | 122 'isTreeShakingDisabled': backend.mirrorsData.isTreeShakingDisabled, |
| 123 'precompiled': precompiledAccess, | 123 'precompiled': precompiledAccess, |
| 124 'finishedClassesAccess': finishedClassesAccess, | 124 'finishedClassesAccess': finishedClassesAccess, |
| 125 'needsMixinSupport': emitter.needsMixinSupport, | 125 'needsMixinSupport': emitter.needsMixinSupport, |
| 126 'needsNativeSupport': program.needsNativeSupport, | 126 'needsNativeSupport': program.needsNativeSupport, |
| 127 'enabledJsInterop': backend.jsInteropAnalysis.enabledJsInterop, | 127 'enabledJsInterop': backend.jsInteropAnalysis.enabledJsInterop, |
| 128 'jsInteropBoostrap': backend.jsInteropAnalysis.buildJsInteropBootstrap(), | 128 'jsInteropBoostrap': backend.jsInteropAnalysis.buildJsInteropBootstrap(), |
| 129 'isInterceptorClass': namer.operatorIs(backend.helpers.jsInterceptorClass), | 129 'isInterceptorClass': |
| 130 namer.operatorIs(compiler.commonElements.jsInterceptorClass), |
| 130 'isObject': namer.operatorIs(compiler.commonElements.objectClass), | 131 'isObject': namer.operatorIs(compiler.commonElements.objectClass), |
| 131 'specProperty': js.string(namer.nativeSpecProperty), | 132 'specProperty': js.string(namer.nativeSpecProperty), |
| 132 'trivialNsmHandlers': emitter.buildTrivialNsmHandlers(), | 133 'trivialNsmHandlers': emitter.buildTrivialNsmHandlers(), |
| 133 'hasRetainedMetadata': backend.mirrorsData.hasRetainedMetadata, | 134 'hasRetainedMetadata': backend.mirrorsData.hasRetainedMetadata, |
| 134 'types': typesAccess, | 135 'types': typesAccess, |
| 135 'objectClassName': js.quoteName(namer.runtimeTypeName( | 136 'objectClassName': js.quoteName(namer.runtimeTypeName( |
| 136 // ignore: UNNECESSARY_CAST | 137 // ignore: UNNECESSARY_CAST |
| 137 compiler.commonElements.objectClass as Entity)), | 138 compiler.commonElements.objectClass as Entity)), |
| 138 'needsStructuredMemberInfo': emitter.needsStructuredMemberInfo, | 139 'needsStructuredMemberInfo': emitter.needsStructuredMemberInfo, |
| 139 'usesMangledNames': compiler.commonElements.mirrorsLibrary != null || | 140 'usesMangledNames': compiler.commonElements.mirrorsLibrary != null || |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 prototype.#deferredAction(); | 435 prototype.#deferredAction(); |
| 435 } | 436 } |
| 436 } | 437 } |
| 437 | 438 |
| 438 #trivialNsmHandlers; | 439 #trivialNsmHandlers; |
| 439 | 440 |
| 440 var properties = Object.keys(processedClasses.pending); | 441 var properties = Object.keys(processedClasses.pending); |
| 441 for (var i = 0; i < properties.length; i++) finishClass(properties[i]); | 442 for (var i = 0; i < properties.length; i++) finishClass(properties[i]); |
| 442 } | 443 } |
| 443 | 444 |
| 444 // Generic handler for deferred class setup. The handler updates the | 445 // Generic handler for deferred class setup. The handler updates the |
| 445 // prototype that it is installed on (it traverses the prototype chain | 446 // prototype that it is installed on (it traverses the prototype chain |
| 446 // of [this] to find itself) and then removes itself. It recurses by | 447 // of [this] to find itself) and then removes itself. It recurses by |
| 447 // calling deferred handling again, which terminates on Object due to | 448 // calling deferred handling again, which terminates on Object due to |
| 448 // the final handler. | 449 // the final handler. |
| 449 function finishAddStubsHelper() { | 450 function finishAddStubsHelper() { |
| 450 var prototype = this; | 451 var prototype = this; |
| 451 // Find the actual prototype that this handler is installed on. | 452 // Find the actual prototype that this handler is installed on. |
| 452 while (!prototype.hasOwnProperty(#deferredActionString)) { | 453 while (!prototype.hasOwnProperty(#deferredActionString)) { |
| 453 prototype = prototype.__proto__; | 454 prototype = prototype.__proto__; |
| 454 } | 455 } |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 var mangledNames = isStatic ? #mangledGlobalNames : #mangledNames; | 728 var mangledNames = isStatic ? #mangledGlobalNames : #mangledNames; |
| 728 var unmangledName = ${readString("array", "unmangledNameIndex")}; | 729 var unmangledName = ${readString("array", "unmangledNameIndex")}; |
| 729 // The function is either a getter, a setter, or a method. | 730 // The function is either a getter, a setter, or a method. |
| 730 // If it is a method, it might also have a tear-off closure. | 731 // If it is a method, it might also have a tear-off closure. |
| 731 // The unmangledName is the same as the getter-name. | 732 // The unmangledName is the same as the getter-name. |
| 732 var reflectionName = unmangledName; | 733 var reflectionName = unmangledName; |
| 733 if (getterStubName) mangledNames[getterStubName] = reflectionName; | 734 if (getterStubName) mangledNames[getterStubName] = reflectionName; |
| 734 if (isSetter) { | 735 if (isSetter) { |
| 735 reflectionName += "="; | 736 reflectionName += "="; |
| 736 } else if (!isGetter) { | 737 } else if (!isGetter) { |
| 737 reflectionName += ":" + | 738 reflectionName += ":" + |
| 738 (requiredParameterCount + optionalParameterCount); | 739 (requiredParameterCount + optionalParameterCount); |
| 739 } | 740 } |
| 740 mangledNames[name] = reflectionName; | 741 mangledNames[name] = reflectionName; |
| 741 funcs[0].$reflectionNameField = reflectionName; | 742 funcs[0].$reflectionNameField = reflectionName; |
| 742 funcs[0].$metadataIndexField = unmangledNameIndex + 1; | 743 funcs[0].$metadataIndexField = unmangledNameIndex + 1; |
| 743 // The following line installs the [${JsGetName.CALL_CATCH_ALL}] | 744 // The following line installs the [${JsGetName.CALL_CATCH_ALL}] |
| 744 // property for closures. | 745 // property for closures. |
| 745 if (optionalParameterCount) prototype[unmangledName + "*"] = funcs[0]; | 746 if (optionalParameterCount) prototype[unmangledName + "*"] = funcs[0]; |
| 746 } | 747 } |
| 747 } | 748 } |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 842 (function() { | 843 (function() { |
| 843 var result = $array[$index]; | 844 var result = $array[$index]; |
| 844 if ($check) { | 845 if ($check) { |
| 845 throw new Error( | 846 throw new Error( |
| 846 name + ": expected value of type \'$type\' at index " + ($index) + | 847 name + ": expected value of type \'$type\' at index " + ($index) + |
| 847 " but got " + (typeof result)); | 848 " but got " + (typeof result)); |
| 848 } | 849 } |
| 849 return result; | 850 return result; |
| 850 })()'''; | 851 })()'''; |
| 851 } | 852 } |
| OLD | NEW |