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

Side by Side Diff: frog/world.dart

Issue 9110027: Some cleanups to Frog to avoid looking up its builtin types too much (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: updated Created 8 years, 11 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
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 /** The one true [World]. */ 5 /** The one true [World]. */
6 World world; 6 World world;
7 7
8 /** 8 /**
9 * Experimental phase to enable await, only set when using the 9 * Experimental phase to enable await, only set when using the
10 * await/awaitc.dart entrypoint. 10 * await/awaitc.dart entrypoint.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 /** Represents a Dart "world" of code. */ 61 /** Represents a Dart "world" of code. */
62 class World { 62 class World {
63 WorldGenerator gen; 63 WorldGenerator gen;
64 String legCode; // TODO(kasperl): Remove this temporary kludge. 64 String legCode; // TODO(kasperl): Remove this temporary kludge.
65 65
66 FileSystem files; 66 FileSystem files;
67 final LibraryReader reader; 67 final LibraryReader reader;
68 68
69 Map<String, Library> libraries; 69 Map<String, Library> libraries;
70 Library corelib; 70 Library corelib;
71 Library coreimpl;
71 72
72 Library get coreimpl() => libraries['dart:coreimpl']; 73 // TODO(jmesserly): we shouldn't be special casing DOM anywhere.
73 Library get dom() => libraries['dart:dom']; 74 Library dom;
74 75
75 List<Library> _todo; 76 List<Library> _todo;
76 77
77 /** Internal map to track name conflicts in the generated javascript. */ 78 /** Internal map to track name conflicts in the generated javascript. */
78 Map<String, Element> _topNames; 79 Map<String, Element> _topNames;
79 80
80 Map<String, MemberSet> _members; 81 Map<String, MemberSet> _members;
81 82
82 MessageHandler messageHandler; 83 MessageHandler messageHandler;
83 84
84 int errors = 0, warnings = 0; 85 int errors = 0, warnings = 0;
85 int dartBytesRead = 0, jsBytesWritten = 0; 86 int dartBytesRead = 0, jsBytesWritten = 0;
86 bool seenFatal = false; 87 bool seenFatal = false;
87 88
88 // Special types to Dart. 89 // Special types to Dart.
89 DefinedType varType; 90 DefinedType varType;
90 // TODO(jimhug): Is this ever not === varType? 91 // TODO(jimhug): Is this ever not === varType?
91 DefinedType dynamicType; 92 DefinedType dynamicType;
92 93
93 DefinedType voidType; 94 DefinedType voidType;
94
95 DefinedType objectType; 95 DefinedType objectType;
96 DefinedType numType; 96 DefinedType numType;
97 DefinedType intType; 97 DefinedType intType;
98 DefinedType doubleType; 98 DefinedType doubleType;
99 DefinedType boolType; 99 DefinedType boolType;
100 DefinedType stringType; 100 DefinedType stringType;
101 DefinedType listType; 101 DefinedType listType;
102 DefinedType mapType; 102 DefinedType mapType;
103 DefinedType functionType; 103 DefinedType functionType;
104 DefinedType typeErrorType;
105
106 // Types from dart:coreimpl that the compiler needs
107 DefinedType numImplType;
108 DefinedType stringImplType;
109 DefinedType functionImplType;
110 DefinedType listFactoryType;
111 DefinedType immutableListType;
104 112
105 NonNullableType nonNullBool; 113 NonNullableType nonNullBool;
106 114
107 World(this.files) 115 World(this.files)
108 : libraries = {}, _todo = [], _members = {}, _topNames = {}, 116 : libraries = {}, _todo = [], _members = {}, _topNames = {},
109 // TODO(jmesserly): these two types don't actually back our Date and 117 // TODO(jmesserly): these two types don't actually back our Date and
110 // RegExp yet, so we need to add them manually. 118 // RegExp yet, so we need to add them manually.
111 reader = new LibraryReader() { 119 reader = new LibraryReader() {
112 } 120 }
113 121
114 void reset() { 122 void reset() {
115 // TODO(jimhug): Use a smaller hammer in the future. 123 // TODO(jimhug): Use a smaller hammer in the future.
116 libraries = {}; _todo = []; _members = {}; _topNames = {}; 124 libraries = {}; _todo = []; _members = {}; _topNames = {};
117 errors = warnings = 0; 125 errors = warnings = 0;
118 seenFatal = false; 126 seenFatal = false;
119 init(); 127 init();
120 } 128 }
121 129
122 init() { 130 init() {
123 // Setup well-known libraries and types. 131 // Setup well-known libraries and types.
124 corelib = new Library(readFile('dart:core')); 132 corelib = new Library(readFile('dart:core'));
125 libraries['dart:core'] = corelib; 133 libraries['dart:core'] = corelib;
126 _todo.add(corelib); 134 _todo.add(corelib);
127 135
128 voidType = _addToCoreLib('void', false); 136 coreimpl = getOrAddLibrary('dart:coreimpl');
129 dynamicType = _addToCoreLib('Dynamic', false); 137
138 voidType = corelib.addType('void', null, false);
139 dynamicType = corelib.addType('Dynamic', null, false);
130 varType = dynamicType; 140 varType = dynamicType;
131 141
132 objectType = _addToCoreLib('Object', true); 142 objectType = corelib.addType('Object', null, true);
133 numType = _addToCoreLib('num', false); 143 numType = corelib.addType('num', null, false);
134 intType = _addToCoreLib('int', false); 144 intType = corelib.addType('int', null, false);
135 doubleType = _addToCoreLib('double', false); 145 doubleType = corelib.addType('double', null, false);
136 boolType = _addToCoreLib('bool', false); 146 boolType = corelib.addType('bool', null, false);
137 stringType = _addToCoreLib('String', false); 147 stringType = corelib.addType('String', null, false);
138 listType = _addToCoreLib('List', false); 148 listType = corelib.addType('List', null, false);
139 mapType = _addToCoreLib('Map', false); 149 mapType = corelib.addType('Map', null, false);
140 functionType = _addToCoreLib('Function', false); 150 functionType = corelib.addType('Function', null, false);
151 typeErrorType = corelib.addType('TypeError', null, false);
152
153 numImplType = coreimpl.addType('NumImplementation', null, true);
154 stringImplType = coreimpl.addType('StringImplementation', null, true);
155 immutableListType = coreimpl.addType('ImmutableList', null, true);
156 listFactoryType = coreimpl.addType('ListFactory', null, true);
157 functionImplType = coreimpl.addType('_FunctionImplementation', null, true);
141 158
142 nonNullBool = new NonNullableType(boolType); 159 nonNullBool = new NonNullableType(boolType);
143 } 160 }
144 161
145 _addMember(Member member) { 162 _addMember(Member member) {
146 // Private members are only visible in their own library. 163 // Private members are only visible in their own library.
147 assert(!member.isPrivate); 164 assert(!member.isPrivate);
148 if (member.isStatic) { 165 if (member.isStatic) {
149 if (member.declaringType.isTop) { 166 if (member.declaringType.isTop) {
150 _addTopName(member); 167 _addTopName(member);
151 } 168 }
152 return; 169 return;
153 } 170 }
154 171
155 var mset = _members[member.name]; 172 var mset = _members[member.name];
156 if (mset == null) { 173 if (mset == null) {
157 mset = new MemberSet(member, isVar:true); 174 mset = new MemberSet(member, isVar:true);
158 _members[mset.name] = mset; 175 _members[mset.name] = mset;
159 } else { 176 } else {
160 mset.members.add(member); 177 mset.members.add(member);
161 } 178 }
162 } 179 }
163 180
164 /** 181 /**
165 * Adds a top level named [Element] so we track which names will be used in 182 * Adds a top level named [Element] so we track which names will be used in
166 * the generated JS. 183 * the generated JS.
167 */ 184 */
168 _addTopName(Element named) { 185 _addTopName(Element named) {
169 if (named.nativeName != null) { 186 if (named is Type && named.isNative) {
170 // Reserve the native name if we have one. This ensures no other type 187 // Reserve the native name if we have one. This ensures no other type
171 // will take our native name. 188 // will take our native name.
172 _addJavascriptTopName(named, named.nativeName); 189 _addJavascriptTopName(named, named.nativeName);
173 } 190 }
174 _addJavascriptTopName(named, named.jsname); 191 _addJavascriptTopName(named, named.jsname);
175 } 192 }
176 193
177 /** 194 /**
178 * Reserves [name] in the generated JS, or renames the lower priority 195 * Reserves [name] in the generated JS, or renames the lower priority
179 * [Element] if the name we wanted was already taken. 196 * [Element] if the name we wanted was already taken.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 } 265 }
249 _topNames[named.jsname] = named; 266 _topNames[named.jsname] = named;
250 } 267 }
251 268
252 _addType(Type type) { 269 _addType(Type type) {
253 // Top types don't have a name - we will capture their members in 270 // Top types don't have a name - we will capture their members in
254 // [_addMember]. 271 // [_addMember].
255 if (!type.isTop) _addTopName(type); 272 if (!type.isTop) _addTopName(type);
256 } 273 }
257 274
258 _addToCoreLib(String name, bool isClass) {
259 var ret = new DefinedType(name, corelib, null, isClass);
260 corelib.types[name] = ret;
261 return ret;
262 }
263
264 // TODO(jimhug): Can this just be a const Set? 275 // TODO(jimhug): Can this just be a const Set?
265 Set<String> _jsKeywords; 276 Set<String> _jsKeywords;
266 277
267 /** Ensures that identifiers are legal in the generated JS. */ 278 /** Ensures that identifiers are legal in the generated JS. */
268 String toJsIdentifier(String name) { 279 String toJsIdentifier(String name) {
269 if (name == null) return null; 280 if (name == null) return null;
270 if (_jsKeywords == null) { 281 if (_jsKeywords == null) {
271 // TODO(jmesserly): this doesn't work if I write "new Set<String>.from" 282 // TODO(jmesserly): this doesn't work if I write "new Set<String>.from"
272 // List of JS reserved words. 283 // List of JS reserved words.
273 _jsKeywords = new Set.from([ 284 _jsKeywords = new Set.from([
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 394
384 if (library == null) { 395 if (library == null) {
385 library = new Library(readFile(filename)); 396 library = new Library(readFile(filename));
386 info('read library ${filename}'); 397 info('read library ${filename}');
387 if (!library.isCore && 398 if (!library.isCore &&
388 !library.imports.some((li) => li.library.isCore)) { 399 !library.imports.some((li) => li.library.isCore)) {
389 library.imports.add(new LibraryImport(corelib)); 400 library.imports.add(new LibraryImport(corelib));
390 } 401 }
391 libraries[filename] = library; 402 libraries[filename] = library;
392 _todo.add(library); 403 _todo.add(library);
404
405 if (filename == 'dart:dom') {
406 dom = library;
407 }
393 } 408 }
394 return library; 409 return library;
395 } 410 }
396 411
397 process() { 412 process() {
398 while (_todo.length > 0) { 413 while (_todo.length > 0) {
399 final todo = _todo; 414 final todo = _todo;
400 _todo = []; 415 _todo = [];
401 for (var lib in todo) { 416 for (var lib in todo) {
402 lib.visitSources(); 417 lib.visitSources();
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 568
554 withTiming(String name, f()) { 569 withTiming(String name, f()) {
555 final sw = new Stopwatch(); 570 final sw = new Stopwatch();
556 sw.start(); 571 sw.start();
557 var result = f(); 572 var result = f();
558 sw.stop(); 573 sw.stop();
559 info('$name in ${sw.elapsedInMs()}msec'); 574 info('$name in ${sw.elapsedInMs()}msec');
560 return result; 575 return result;
561 } 576 }
562 } 577 }
OLDNEW
« no previous file with comments | « frog/var_member.dart ('k') | utils/apidoc/html_diff.dart » ('j') | utils/apidoc/html_diff.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698