OLD | NEW |
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 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 return $name in sigObj; | 384 return $name in sigObj; |
385 })()'''); | 385 })()'''); |
386 | 386 |
387 bool hasMethod(type, name) => _hasSigEntry(type, _methodSig, name); | 387 bool hasMethod(type, name) => _hasSigEntry(type, _methodSig, name); |
388 bool hasGetter(type, name) => _hasSigEntry(type, _getterSig, name); | 388 bool hasGetter(type, name) => _hasSigEntry(type, _getterSig, name); |
389 bool hasSetter(type, name) => _hasSigEntry(type, _setterSig, name); | 389 bool hasSetter(type, name) => _hasSigEntry(type, _setterSig, name); |
390 bool hasField(type, name) => _hasSigEntry(type, _fieldSig, name); | 390 bool hasField(type, name) => _hasSigEntry(type, _fieldSig, name); |
391 | 391 |
392 final _extensionType = JS('', 'Symbol("extensionType")'); | 392 final _extensionType = JS('', 'Symbol("extensionType")'); |
393 | 393 |
394 getExtensionType(obj) => JS('', '#[#]', obj, _extensionType); | 394 getExtensionType(obj) => |
| 395 JS('', '# == null ? null : #[#]', obj, obj, _extensionType); |
395 | 396 |
396 final dartx = JS('', 'dartx'); | 397 final dartx = JS('', 'dartx'); |
397 | 398 |
398 getExtensionSymbol(name) { | 399 getExtensionSymbol(name) { |
399 var sym = JS('', 'dartx[#]', name); | 400 var sym = JS('', 'dartx[#]', name); |
400 if (sym == null) { | 401 if (sym == null) { |
401 sym = JS('', 'Symbol("dartx." + #.toString())', name); | 402 sym = JS('', 'Symbol("dartx." + #.toString())', name); |
402 JS('', 'dartx[#] = #', name, sym); | 403 JS('', 'dartx[#] = #', name, sym); |
403 } | 404 } |
404 return sym; | 405 return sym; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
552 | 553 |
553 defineEnumValues(enumClass, names) { | 554 defineEnumValues(enumClass, names) { |
554 var values = []; | 555 var values = []; |
555 for (var i = 0; i < JS('int', '#.length', names); i++) { | 556 for (var i = 0; i < JS('int', '#.length', names); i++) { |
556 var value = const_(JS('', 'new #.new(#)', enumClass, i)); | 557 var value = const_(JS('', 'new #.new(#)', enumClass, i)); |
557 JS('', '#.push(#)', values, value); | 558 JS('', '#.push(#)', values, value); |
558 defineValue(enumClass, JS('', '#[#]', names, i), value); | 559 defineValue(enumClass, JS('', '#[#]', names, i), value); |
559 } | 560 } |
560 JS('', '#.values = #', enumClass, constList(values, enumClass)); | 561 JS('', '#.values = #', enumClass, constList(values, enumClass)); |
561 } | 562 } |
OLD | NEW |