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

Side by Side Diff: frog/gen.dart

Issue 8662015: fix generic const canonicalization bug (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: presubmit tests Created 9 years, 1 month 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 | « frog/frogsh ('k') | frog/leg/scanner/listener.dart » ('j') | 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) 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 /** 5 /**
6 * Top level generator object for writing code and keeping track of 6 * Top level generator object for writing code and keeping track of
7 * dependencies. 7 * dependencies.
8 * 8 *
9 * Should have two compilation models, but only one implemented so far. 9 * Should have two compilation models, but only one implemented so far.
10 * 10 *
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 hasStatics = true; 104 hasStatics = true;
105 var fullname = "${field.declaringType.jsname}.${field.jsname}"; 105 var fullname = "${field.declaringType.jsname}.${field.jsname}";
106 if (!globals.containsKey(fullname)) { 106 if (!globals.containsKey(fullname)) {
107 globals[fullname] = new GlobalValue.fromStatic( 107 globals[fullname] = new GlobalValue.fromStatic(
108 field, fieldValue, dependencies); 108 field, fieldValue, dependencies);
109 } 109 }
110 return globals[fullname]; 110 return globals[fullname];
111 } 111 }
112 112
113 GlobalValue globalForConst(EvaluatedValue exp, List<Value> dependencies) { 113 GlobalValue globalForConst(EvaluatedValue exp, List<Value> dependencies) {
114 var code = exp.canonicalCode; 114 // Include type name to ensure unique constants - this matches
115 if (!globals.containsKey(code)) { 115 // the code above that includes the type name for static fields.
116 globals[code] = 116 var key = exp.type.jsname + ':' + exp.canonicalCode;
117 if (!globals.containsKey(key)) {
118 globals[key] =
117 new GlobalValue.fromConst(globals.length, exp, dependencies); 119 new GlobalValue.fromConst(globals.length, exp, dependencies);
118 } 120 }
119 return globals[code]; 121 assert(globals[key].type == exp.type);
122 return globals[key];
120 } 123 }
121 124
122 writeTypes(Library lib) { 125 writeTypes(Library lib) {
123 if (lib.isWritten) return; 126 if (lib.isWritten) return;
124 127
125 // Do this first to be safe in the face of circular refs. 128 // Do this first to be safe in the face of circular refs.
126 lib.isWritten = true; 129 lib.isWritten = true;
127 130
128 // Ensure all imports have been written. 131 // Ensure all imports have been written.
129 for (var import in lib.imports) { 132 for (var import in lib.imports) {
(...skipping 2264 matching lines...) Expand 10 before | Expand all | Expand 10 after
2394 result.add(new Value(world.varType, '\$$i', null, /*needsTemp:*/false)); 2397 result.add(new Value(world.varType, '\$$i', null, /*needsTemp:*/false));
2395 } 2398 }
2396 for (int i = bareCount; i < length; i++) { 2399 for (int i = bareCount; i < length; i++) {
2397 var name = getName(i); 2400 var name = getName(i);
2398 if (name == null) name = '\$$i'; 2401 if (name == null) name = '\$$i';
2399 result.add(new Value(world.varType, name, null, /*needsTemp:*/false)); 2402 result.add(new Value(world.varType, name, null, /*needsTemp:*/false));
2400 } 2403 }
2401 return new Arguments(nodes, result); 2404 return new Arguments(nodes, result);
2402 } 2405 }
2403 } 2406 }
OLDNEW
« no previous file with comments | « frog/frogsh ('k') | frog/leg/scanner/listener.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698