Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Side by Side Diff: dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart

Issue 24331012: Remove dead code. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 js_backend; 5 part of js_backend;
6 6
7 /// Enables debugging of fast/slow objects using V8-specific primitives. 7 /// Enables debugging of fast/slow objects using V8-specific primitives.
8 const DEBUG_FAST_OBJECTS = false; 8 const DEBUG_FAST_OBJECTS = false;
9 9
10 /** 10 /**
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 'existingIsolateProperties[superclass]')), 852 'existingIsolateProperties[superclass]')),
853 853
854 js('prototype = inheritFrom(constructor, superConstructor)'), 854 js('prototype = inheritFrom(constructor, superConstructor)'),
855 ]); 855 ]);
856 856
857 return new jsAst.FunctionDeclaration( 857 return new jsAst.FunctionDeclaration(
858 new jsAst.VariableDeclaration('finishClass'), 858 new jsAst.VariableDeclaration('finishClass'),
859 fun); 859 fun);
860 } 860 }
861 861
862 jsAst.Fun get finishIsolateConstructorFunction_NO_CSP {
863 String isolate = namer.isolateName;
864 // We replace the old Isolate function with a new one that initializes
865 // all its field with the initial (and often final) value of all globals.
866 // This has two advantages:
867 // 1. the properties are in the object itself (thus avoiding to go through
868 // the prototype when looking up globals.
869 // 2. a new isolate goes through a (usually well optimized) constructor
870 // function of the form: "function() { this.x = ...; this.y = ...; }".
871 //
872 // Example: If [isolateProperties] is an object containing: x = 3 and
873 // A = function A() { /* constructor of class A. */ }, then we generate:
874 // str = "{
875 // var isolateProperties = Isolate.$isolateProperties;
876 // this.x = isolateProperties.x;
877 // this.A = isolateProperties.A;
878 // }";
879 // which is then dynamically evaluated:
880 // var newIsolate = new Function(str);
881 //
882 // We also copy over old values like the prototype, and the
883 // isolateProperties themselves.
884
885 List copyFinishClasses = [];
886 if (needsDefineClass) {
887 copyFinishClasses.add(
888 js('newIsolate.$finishClassesProperty = '
889 ' oldIsolate.$finishClassesProperty'));
890 }
891
892 // function(oldIsolate) {
893 return js.fun('oldIsolate', [
894 js('var isolateProperties = oldIsolate.${namer.isolatePropertiesName}'),
895
896 js('var isolatePrototype = oldIsolate.prototype'),
897 js('var str = "{\\n"'),
898 js('str += "var properties = '
899 'arguments.callee.${namer.isolatePropertiesName};\\n"'),
900 js('var hasOwnProperty = Object.prototype.hasOwnProperty'),
901
902 // for (var staticName in isolateProperties) {
903 js.forIn('staticName', 'isolateProperties', [
904 js.if_('hasOwnProperty.call(isolateProperties, staticName)', [
905 js('str += ("this." + staticName + "= properties." + staticName + '
906 '";\\n")')
907 ])
908 ]),
909
910 js('str += "}\\n"'),
911
912 js('var newIsolate = new Function(str)'),
913 js('newIsolate.prototype = isolatePrototype'),
914 js('isolatePrototype.constructor = newIsolate'),
915 js('newIsolate.${namer.isolatePropertiesName} = isolateProperties'),
916 // TODO(ahe): Only copy makeConstantList when it is used.
917 js('newIsolate.makeConstantList = oldIsolate.makeConstantList'),
918 ]..addAll(copyFinishClasses)
919 ..addAll([
920
921 // return newIsolate;
922 js.return_('newIsolate')
923 ]));
924 }
925
926 jsAst.Fun get finishIsolateConstructorFunction { 862 jsAst.Fun get finishIsolateConstructorFunction {
927 // We replace the old Isolate function with a new one that initializes 863 // We replace the old Isolate function with a new one that initializes
928 // all its fields with the initial (and often final) value of all globals. 864 // all its fields with the initial (and often final) value of all globals.
929 // 865 //
930 // We also copy over old values like the prototype, and the 866 // We also copy over old values like the prototype, and the
931 // isolateProperties themselves. 867 // isolateProperties themselves.
932 return js.fun('oldIsolate', [ 868 return js.fun('oldIsolate', [
933 js('var isolateProperties = oldIsolate.${namer.isolatePropertiesName}'), 869 js('var isolateProperties = oldIsolate.${namer.isolatePropertiesName}'),
934 new jsAst.FunctionDeclaration( 870 new jsAst.FunctionDeclaration(
935 new jsAst.VariableDeclaration('Isolate'), 871 new jsAst.VariableDeclaration('Isolate'),
(...skipping 2898 matching lines...) Expand 10 before | Expand all | Expand 10 after
3834 buffer.write(metadata); 3770 buffer.write(metadata);
3835 } 3771 }
3836 } else { 3772 } else {
3837 throw 'Unexpected value in metadata: ${Error.safeToString(metadata)}'; 3773 throw 'Unexpected value in metadata: ${Error.safeToString(metadata)}';
3838 } 3774 }
3839 buffer.write(',$n'); 3775 buffer.write(',$n');
3840 } 3776 }
3841 buffer.write('];$n'); 3777 buffer.write('];$n');
3842 } 3778 }
3843 3779
3844 void emitConvertToFastObjectFunction_NO_CSP() {
3845 mainBuffer.add(r'''
3846 function convertToFastObject(properties) {
3847 function makeConstructor() {
3848 var str = "{\n";
3849 var hasOwnProperty = Object.prototype.hasOwnProperty;
3850 for (var property in properties) {
3851 if (hasOwnProperty.call(properties, property)) {
3852 str += "this." + property + "= properties." + property + ";\n";
3853 }
3854 }
3855 str += "}\n";
3856 return new Function("properties", str);
3857 };
3858 var constructor = makeConstructor();
3859 return makeConstructor.prototype = new constructor(properties);
3860 }
3861 ''');
3862 }
3863
3864 void emitConvertToFastObjectFunction() { 3780 void emitConvertToFastObjectFunction() {
3865 // Create an instance that uses 'properties' as prototype. This should make 3781 // Create an instance that uses 'properties' as prototype. This should make
3866 // 'properties' a fast object. 3782 // 'properties' a fast object.
3867 mainBuffer.add(r'''function convertToFastObject(properties) { 3783 mainBuffer.add(r'''function convertToFastObject(properties) {
3868 function MyClass() {}; 3784 function MyClass() {};
3869 MyClass.prototype = properties; 3785 MyClass.prototype = properties;
3870 new MyClass(); 3786 new MyClass();
3871 '''); 3787 ''');
3872 if (DEBUG_FAST_OBJECTS) { 3788 if (DEBUG_FAST_OBJECTS) {
3873 ClassElement primitives = 3789 ClassElement primitives =
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
4451 4367
4452 const String HOOKS_API_USAGE = """ 4368 const String HOOKS_API_USAGE = """
4453 // The code supports the following hooks: 4369 // The code supports the following hooks:
4454 // dartPrint(message) - if this function is defined it is called 4370 // dartPrint(message) - if this function is defined it is called
4455 // instead of the Dart [print] method. 4371 // instead of the Dart [print] method.
4456 // dartMainRunner(main) - if this function is defined, the Dart [main] 4372 // dartMainRunner(main) - if this function is defined, the Dart [main]
4457 // method will not be invoked directly. 4373 // method will not be invoked directly.
4458 // Instead, a closure that will invoke [main] is 4374 // Instead, a closure that will invoke [main] is
4459 // passed to [dartMainRunner]. 4375 // passed to [dartMainRunner].
4460 """; 4376 """;
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698