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

Side by Side Diff: tool/input_sdk/private/ddc_runtime/classes.dart

Issue 1926283002: implement generic method runtime behavior, fixes #301 (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 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
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 /// This library defines the operations that define and manipulate Dart 5 /// This library defines the operations that define and manipulate Dart
6 /// classes. Included in this are: 6 /// classes. Included in this are:
7 /// - Generics 7 /// - Generics
8 /// - Class metadata 8 /// - Class metadata
9 /// - Extension methods 9 /// - Extension methods
10 /// 10 ///
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 185
186 // Set up the static signature field on the constructor 186 // Set up the static signature field on the constructor
187 _setStaticSignature(f, sigF) => 187 _setStaticSignature(f, sigF) =>
188 JS('', '$defineMemoizedGetter($f, $_staticSig, $sigF)'); 188 JS('', '$defineMemoizedGetter($f, $_staticSig, $sigF)');
189 189
190 // Set the lazily computed runtime type field on static methods 190 // Set the lazily computed runtime type field on static methods
191 _setStaticTypes(f, names) => JS('', '''(() => { 191 _setStaticTypes(f, names) => JS('', '''(() => {
192 for (let name of $names) { 192 for (let name of $names) {
193 // TODO(vsm): Need to generate static methods. 193 // TODO(vsm): Need to generate static methods.
194 if (!$f[name]) continue; 194 if (!$f[name]) continue;
195 $tagMemoized($f[name], function() { 195 $tagLazy($f[name], function() {
196 let parts = $f[$_staticSig][name]; 196 let parts = $f[$_staticSig][name];
197 return $definiteFunctionType.apply(null, parts); 197 return $definiteFunctionType.apply(null, parts);
198 }) 198 })
199 } 199 }
200 })()'''); 200 })()''');
201 201
202 /// Set up the type signature of a class (constructor object) 202 /// Set up the type signature of a class (constructor object)
203 /// f is a constructor object 203 /// f is a constructor object
204 /// signature is an object containing optional properties as follows: 204 /// signature is an object containing optional properties as follows:
205 /// methods: A function returning an object mapping method names 205 /// methods: A function returning an object mapping method names
(...skipping 10 matching lines...) Expand all
216 let methods = 216 let methods =
217 ('methods' in signature) ? signature.methods : () => ({}); 217 ('methods' in signature) ? signature.methods : () => ({});
218 let statics = 218 let statics =
219 ('statics' in signature) ? signature.statics : () => ({}); 219 ('statics' in signature) ? signature.statics : () => ({});
220 let names = 220 let names =
221 ('names' in signature) ? signature.names : []; 221 ('names' in signature) ? signature.names : [];
222 $_setConstructorSignature($f, constructors); 222 $_setConstructorSignature($f, constructors);
223 $_setMethodSignature($f, methods); 223 $_setMethodSignature($f, methods);
224 $_setStaticSignature($f, statics); 224 $_setStaticSignature($f, statics);
225 $_setStaticTypes($f, names); 225 $_setStaticTypes($f, names);
226 $tagMemoized($f, () => $Type); 226 $tagLazy($f, () => $Type);
227 })()'''); 227 })()''');
228 228
229 hasMethod(obj, name) => JS('', '$getMethodType($obj, $name) !== void 0'); 229 hasMethod(obj, name) => JS('', '$getMethodType($obj, $name) !== void 0');
230 230
231 /// 231 ///
232 /// Given a class and an initializer method name, creates a constructor 232 /// Given a class and an initializer method name, creates a constructor
233 /// function with the same name. For example `new SomeClass.name(args)`. 233 /// function with the same name. For example `new SomeClass.name(args)`.
234 /// 234 ///
235 defineNamedConstructor(clazz, name) => JS('', '''(() => { 235 defineNamedConstructor(clazz, name) => JS('', '''(() => {
236 let proto = $clazz.prototype; 236 let proto = $clazz.prototype;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 })()'''); 350 })()''');
351 351
352 /// Sets the element type of a list literal. 352 /// Sets the element type of a list literal.
353 list(obj, elementType) => 353 list(obj, elementType) =>
354 JS('', '$setType($obj, ${getGenericClass(JSArray)}($elementType))'); 354 JS('', '$setType($obj, ${getGenericClass(JSArray)}($elementType))');
355 355
356 setBaseClass(derived, base) => JS('', '''(() => { 356 setBaseClass(derived, base) => JS('', '''(() => {
357 // Link the extension to the type it's extending as a base class. 357 // Link the extension to the type it's extending as a base class.
358 $derived.prototype.__proto__ = $base.prototype; 358 $derived.prototype.__proto__ = $base.prototype;
359 })()'''); 359 })()''');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698