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

Side by Side Diff: lib/src/compiler/extension_types.dart

Issue 1949163003: fix for #520, ListMixin should work again (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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import 'package:analyzer/dart/element/element.dart' show Element; 5 import 'dart:collection';
6 import 'package:analyzer/dart/element/visitor.dart' 6 import 'package:analyzer/dart/element/element.dart'
7 show GeneralizingElementVisitor; 7 show ClassElement, CompilationUnitElement, Element;
8 import 'package:collection/collection.dart' show binarySearch; 8 import 'package:analyzer/dart/element/type.dart' show DartType, InterfaceType;
9 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
9 10
10 class ExtensionTypeSet extends GeneralizingElementVisitor { 11 /// Contains information about native JS types (those types provided by the
11 bool contains(Element element) { 12 /// implementation) that are also provided by the Dart SDK.
12 var library = element?.library; 13 ///
13 if (library == null) return false; 14 /// For types provided by JavaScript, it is important that we don't add methods
15 /// directly to those types. Instead, we must call through a special set of
16 /// JS Symbol names, that are used for the "Dart extensions". For example:
17 ///
18 /// // Dart
19 /// Iterable iter = myList;
20 /// print(iter.first);
21 ///
22 /// // JS
23 /// let iter = myLib.myList;
24 /// core.print(iter[dartx.first]);
25 ///
26 /// This will provide the [Iterable.first] property, without needing to add
27 /// `first` to the `Array.prototype`.
28 class ExtensionTypeSet {
29 final AnalysisContext _context;
14 30
15 var source = library.source; 31 // Abstract types that may be implemented by both native and non-native
16 if (source.isInSystemLibrary) { 32 // classes.
17 var types = _extensionTypes[source.uri.toString()]; 33 final _extensibleTypes = new HashSet<ClassElement>();
18 if (types != null) { 34
19 int index = binarySearch(types, element.name); 35 // Concrete native types.
20 return index >= 0; 36 final _nativeTypes = new HashSet<ClassElement>();
37 final _pendingLibraries = new HashSet<String>();
38
39 ExtensionTypeSet(this._context) {
40 // TODO(vsm): Eventually, we want to make this extensible - i.e., find
41 // annotations in user code as well. It would need to be summarized in
42 // the element model - not searched this way on every compile. To make this
43 // a little more efficient now, we do this in two phases.
44
45 // First, core types:
46 // TODO(vsm): If we're analyzing against the main SDK, those
47 // types are not explicitly annotated.
48 var types = _context.typeProvider;
49 _addExtensionType(types.intType, true);
50 _addExtensionType(types.doubleType, true);
51 _addExtensionType(types.boolType, true);
52 _addExtensionType(types.stringType, true);
53 _addExtensionTypes('dart:_interceptors');
54 _addExtensionTypes('dart:_native_typed_data');
55
56 // These are used natively by dart:html but also not annotated.
57 _addExtensionTypesForLibrary('dart:core', ['Comparable', 'Map']);
58 _addExtensionTypesForLibrary('dart:collection', ['ListMixin']);
59 _addExtensionTypesForLibrary('dart:math', ['Rectangle']);
60
61 // Second, html types - these are only searched if we use dart:html, etc.:
62 _addPendingExtensionTypes('dart:html');
63 _addPendingExtensionTypes('dart:indexed_db');
64 _addPendingExtensionTypes('dart:svg');
65 _addPendingExtensionTypes('dart:web_audio');
66 _addPendingExtensionTypes('dart:web_gl');
67 _addPendingExtensionTypes('dart:web_sql');
68 }
69
70 void _visitCompilationUnit(CompilationUnitElement unit) {
71 unit.types.forEach(_visitClass);
72 }
73
74 void _visitClass(ClassElement element) {
75 if (_isNative(element)) {
76 _addExtensionType(element.type, true);
77 }
78 }
79
80 bool _isNative(ClassElement element) {
81 for (var metadata in element.metadata) {
82 var e = metadata.element?.enclosingElement;
83 if (e.name == 'Native' || e.name == 'JsPeerInterface') {
84 if (e.source.isInSystemLibrary) return true;
21 } 85 }
22 } 86 }
23 return false; 87 return false;
24 } 88 }
25 89
26 // TODO(vsm): Eventually, we want to make this extensible - i.e., find 90 void _addExtensionType(InterfaceType t, [bool mustBeNative = false]) {
27 // annotations in user code as well. It would need to be summarized in 91 if (t.isObject) return;
28 // the element model - not searched this way on every compile. To make this 92 var element = t.element;
29 // a little more efficient now, we do this in two phases. 93 if (_extensibleTypes.contains(element) || _nativeTypes.contains(element)) {
30 final _extensionTypes = { 94 return;
31 'dart:_interceptors': [ 95 }
32 'Interceptor', 96 bool isNative = mustBeNative || _isNative(element);
33 'JSArray', 97 if (isNative) {
34 'JSBool', 98 _nativeTypes.add(element);
35 'JSIndexable', 99 } else {
36 'JSMutableIndexable', 100 _extensibleTypes.add(element);
37 'JSNumber', 101 }
38 'JSString' 102 element.interfaces.forEach(_addExtensionType);
39 ], 103 element.mixins.forEach(_addExtensionType);
40 'dart:_internal': ['FixedLengthListMixin'], 104 _addExtensionType(element.supertype);
41 'dart:_js_helper': ['JavaScriptIndexingBehavior'], 105 }
42 'dart:_native_typed_data': [ 106
43 'NativeByteBuffer', 107 void _addExtensionTypesForLibrary(String libraryUri, List<String> typeNames) {
44 'NativeByteData', 108 var sourceFactory = _context.sourceFactory.forUri(libraryUri);
45 'NativeFloat32List', 109 var library = _context.computeLibraryElement(sourceFactory);
46 'NativeFloat64List', 110 for (var typeName in typeNames) {
47 'NativeInt16List', 111 _addExtensionType(library.getType(typeName).type);
48 'NativeInt32List', 112 }
49 'NativeInt8List', 113 }
50 'NativeTypedArray', 114
51 'NativeTypedArrayOfDouble', 115 void _addExtensionTypes(String libraryUri) {
52 'NativeTypedArrayOfInt', 116 var sourceFactory = _context.sourceFactory.forUri(libraryUri);
53 'NativeTypedData', 117 var library = _context.computeLibraryElement(sourceFactory);
54 'NativeUint16List', 118 _visitCompilationUnit(library.definingCompilationUnit);
55 'NativeUint32List', 119 library.parts.forEach(_visitCompilationUnit);
56 'NativeUint8ClampedList', 120 }
57 'NativeUint8List' 121
58 ], 122 void _addPendingExtensionTypes(String libraryUri) {
59 'dart:collection': ['ListMixin'], 123 _pendingLibraries.add(libraryUri);
60 'dart:core': [ 124 }
61 'Comparable', 125
62 'Iterable', 126 bool _processPending(Element element) {
63 'List', 127 if (_pendingLibraries.isEmpty) return false;
64 'Map', 128 if (element is ClassElement) {
65 'Pattern', 129 var uri = element.library.source.uri.toString();
66 'String', 130 if (_pendingLibraries.contains(uri)) {
67 'bool', 131 // Load all pending libraries
68 'double', 132 _pendingLibraries.forEach(_addExtensionTypes);
69 'int', 133 _pendingLibraries.clear();
70 'num' 134 return true;
71 ], 135 }
72 'dart:indexed_db': [ 136 }
73 'Cursor', 137 return false;
74 'CursorWithValue', 138 }
75 'Database', 139
76 'IdbFactory', 140 bool _setContains(HashSet<ClassElement> set, Element element) {
77 'Index', 141 return set.contains(element) ||
78 'KeyRange', 142 _processPending(element) && set.contains(element);
79 'ObjectStore', 143 }
80 'OpenDBRequest', 144
81 'Request', 145 bool isNativeClass(Element element) => _setContains(_nativeTypes, element);
82 'Transaction', 146
83 'VersionChangeEvent' 147 bool _isNativeInterface(Element element) =>
84 ], 148 _setContains(_extensibleTypes, element);
85 'dart:math': ['Rectangle', '_RectangleBase'], 149
86 'dart:typed_data': [ 150 bool hasNativeSubtype(DartType type) =>
87 'ByteBuffer', 151 _isNativeInterface(type.element) || isNativeClass(type.element);
88 'ByteData', 152
89 'Float32List', 153 /// Collects all supertypes that may themselves contain native subtypes,
90 'Float64List', 154 /// excluding [Object], for example `List` is implemented by several native
91 'Int16List', 155 /// types.
92 'Int32List', 156 LinkedHashSet<ClassElement> collectNativeInterfaces(ClassElement element) {
93 'Int8List', 157 var types = new LinkedHashSet<ClassElement>();
94 'TypedData', 158 _collectNativeInterfaces(element.type, types);
95 'Uint16List', 159 return types;
96 'Uint32List', 160 }
97 'Uint8ClampedList', 161
98 'Uint8List' 162 void _collectNativeInterfaces(InterfaceType type, Set<ClassElement> types) {
99 ], 163 if (type.isObject) return;
100 'dart:html': [ 164 var element = type.element;
101 'AbstractWorker', 165 if (_isNativeInterface(element)) types.add(element);
102 'AnchorElement', 166 for (var m in element.mixins.reversed) {
103 'Animation', 167 _collectNativeInterfaces(m, types);
104 'AnimationEffect', 168 }
105 'AnimationEvent', 169 for (var i in element.interfaces) {
106 'AnimationNode', 170 _collectNativeInterfaces(i, types);
107 'AnimationPlayer', 171 }
108 'AnimationPlayerEvent', 172 _collectNativeInterfaces(element.supertype, types);
109 'AnimationTimeline', 173 }
110 'ApplicationCache',
111 'ApplicationCacheErrorEvent',
112 'AreaElement',
113 'AudioElement',
114 'AudioTrack',
115 'AudioTrackList',
116 'AutocompleteErrorEvent',
117 'BRElement',
118 'BarProp',
119 'BaseElement',
120 'BatteryManager',
121 'BeforeUnloadEvent',
122 'Blob',
123 'Body',
124 'BodyElement',
125 'ButtonElement',
126 'ButtonInputElement',
127 'CDataSection',
128 'CacheStorage',
129 'Canvas2DContextAttributes',
130 'CanvasElement',
131 'CanvasGradient',
132 'CanvasImageSource',
133 'CanvasPattern',
134 'CanvasRenderingContext',
135 'CanvasRenderingContext2D',
136 'CharacterData',
137 'CheckboxInputElement',
138 'ChildNode',
139 'CircularGeofencingRegion',
140 'CloseEvent',
141 'Comment',
142 'CompositionEvent',
143 'ConsoleBase',
144 'ContentElement',
145 'Coordinates',
146 'Credential',
147 'CredentialsContainer',
148 'Crypto',
149 'CryptoKey',
150 'Css',
151 'CssCharsetRule',
152 'CssFilterRule',
153 'CssFontFaceRule',
154 'CssImportRule',
155 'CssKeyframeRule',
156 'CssKeyframesRule',
157 'CssMediaRule',
158 'CssPageRule',
159 'CssRule',
160 'CssStyleDeclaration',
161 'CssStyleDeclarationBase',
162 'CssStyleRule',
163 'CssStyleSheet',
164 'CssSupportsRule',
165 'CssViewportRule',
166 'CustomEvent',
167 'DListElement',
168 'DataListElement',
169 'DataTransfer',
170 'DataTransferItem',
171 'DataTransferItemList',
172 'DateInputElement',
173 'DedicatedWorkerGlobalScope',
174 'DeprecatedStorageInfo',
175 'DeprecatedStorageQuota',
176 'DetailsElement',
177 'DeviceAcceleration',
178 'DeviceLightEvent',
179 'DeviceMotionEvent',
180 'DeviceOrientationEvent',
181 'DeviceRotationRate',
182 'DialogElement',
183 'DirectoryEntry',
184 'DirectoryReader',
185 'DivElement',
186 'Document',
187 'DocumentFragment',
188 'DomError',
189 'DomException',
190 'DomImplementation',
191 'DomIterator',
192 'DomMatrix',
193 'DomMatrixReadOnly',
194 'DomParser',
195 'DomPoint',
196 'DomPointReadOnly',
197 'DomRectReadOnly',
198 'DomSettableTokenList',
199 'DomStringList',
200 'DomTokenList',
201 'Element',
202 'EmailInputElement',
203 'EmbedElement',
204 'Entry',
205 'ErrorEvent',
206 'Event',
207 'EventSource',
208 'EventTarget',
209 'ExtendableEvent',
210 'FederatedCredential',
211 'FetchEvent',
212 'FieldSetElement',
213 'File',
214 'FileEntry',
215 'FileError',
216 'FileList',
217 'FileReader',
218 'FileStream',
219 'FileSystem',
220 'FileUploadInputElement',
221 'FileWriter',
222 'FocusEvent',
223 'FontFace',
224 'FontFaceSet',
225 'FontFaceSetLoadEvent',
226 'FormData',
227 'FormElement',
228 'Gamepad',
229 'GamepadButton',
230 'GamepadEvent',
231 'Geofencing',
232 'GeofencingRegion',
233 'Geolocation',
234 'Geoposition',
235 'GlobalEventHandlers',
236 'HRElement',
237 'HashChangeEvent',
238 'HeadElement',
239 'Headers',
240 'HeadingElement',
241 'HiddenInputElement',
242 'History',
243 'HistoryBase',
244 'HtmlCollection',
245 'HtmlDocument',
246 'HtmlElement',
247 'HtmlFormControlsCollection',
248 'HtmlHtmlElement',
249 'HtmlOptionsCollection',
250 'HttpRequest',
251 'HttpRequestEventTarget',
252 'HttpRequestUpload',
253 'IFrameElement',
254 'ImageBitmap',
255 'ImageButtonInputElement',
256 'ImageData',
257 'ImageElement',
258 'ImmutableListMixin',
259 'InjectedScriptHost',
260 'InputElement',
261 'InputElementBase',
262 'InputMethodContext',
263 'InstallEvent',
264 'KeyboardEvent',
265 'KeygenElement',
266 'LIElement',
267 'LabelElement',
268 'LegendElement',
269 'LinkElement',
270 'LocalCredential',
271 'LocalDateTimeInputElement',
272 'Location',
273 'LocationBase',
274 'MapElement',
275 'MediaController',
276 'MediaDeviceInfo',
277 'MediaElement',
278 'MediaError',
279 'MediaKeyError',
280 'MediaKeyEvent',
281 'MediaKeyMessageEvent',
282 'MediaKeyNeededEvent',
283 'MediaKeySession',
284 'MediaKeys',
285 'MediaList',
286 'MediaQueryList',
287 'MediaQueryListEvent',
288 'MediaSource',
289 'MediaStream',
290 'MediaStreamEvent',
291 'MediaStreamTrack',
292 'MediaStreamTrackEvent',
293 'MemoryInfo',
294 'MenuElement',
295 'MenuItemElement',
296 'MessageChannel',
297 'MessageEvent',
298 'MessagePort',
299 'MetaElement',
300 'Metadata',
301 'MeterElement',
302 'MidiAccess',
303 'MidiConnectionEvent',
304 'MidiInput',
305 'MidiInputMap',
306 'MidiMessageEvent',
307 'MidiOutput',
308 'MidiOutputMap',
309 'MidiPort',
310 'MimeType',
311 'MimeTypeArray',
312 'ModElement',
313 'MonthInputElement',
314 'MouseEvent',
315 'MutationObserver',
316 'MutationRecord',
317 'Navigator',
318 'NavigatorCpu',
319 'NavigatorID',
320 'NavigatorLanguage',
321 'NavigatorOnLine',
322 'NavigatorUserMediaError',
323 'NetworkInformation',
324 'Node',
325 'NodeFilter',
326 'NodeIterator',
327 'NodeList',
328 'Notification',
329 'NumberInputElement',
330 'OListElement',
331 'ObjectElement',
332 'OptGroupElement',
333 'OptionElement',
334 'OutputElement',
335 'OverflowEvent',
336 'PageTransitionEvent',
337 'ParagraphElement',
338 'ParamElement',
339 'ParentNode',
340 'PasswordInputElement',
341 'Path2D',
342 'Performance',
343 'PerformanceEntry',
344 'PerformanceMark',
345 'PerformanceMeasure',
346 'PerformanceNavigation',
347 'PerformanceResourceTiming',
348 'PerformanceTiming',
349 'PictureElement',
350 'Plugin',
351 'PluginArray',
352 'PluginPlaceholderElement',
353 'PopStateEvent',
354 'PositionError',
355 'PreElement',
356 'Presentation',
357 'ProcessingInstruction',
358 'ProgressElement',
359 'ProgressEvent',
360 'PushEvent',
361 'PushManager',
362 'PushRegistration',
363 'QuoteElement',
364 'RadioButtonInputElement',
365 'Range',
366 'RangeInputElement',
367 'RangeInputElementBase',
368 'ReadableStream',
369 'RelatedEvent',
370 'ResetButtonInputElement',
371 'ResourceProgressEvent',
372 'RtcDataChannel',
373 'RtcDataChannelEvent',
374 'RtcDtmfSender',
375 'RtcDtmfToneChangeEvent',
376 'RtcIceCandidate',
377 'RtcIceCandidateEvent',
378 'RtcPeerConnection',
379 'RtcSessionDescription',
380 'RtcStatsReport',
381 'RtcStatsResponse',
382 'Screen',
383 'ScreenOrientation',
384 'ScriptElement',
385 'SearchInputElement',
386 'SecurityPolicyViolationEvent',
387 'SelectElement',
388 'Selection',
389 'ServiceWorkerClient',
390 'ServiceWorkerClients',
391 'ServiceWorkerContainer',
392 'ServiceWorkerGlobalScope',
393 'ServiceWorkerRegistration',
394 'ShadowElement',
395 'ShadowRoot',
396 'SharedWorker',
397 'SharedWorkerGlobalScope',
398 'SourceBuffer',
399 'SourceBufferList',
400 'SourceElement',
401 'SourceInfo',
402 'SpanElement',
403 'SpeechGrammar',
404 'SpeechGrammarList',
405 'SpeechRecognition',
406 'SpeechRecognitionAlternative',
407 'SpeechRecognitionError',
408 'SpeechRecognitionEvent',
409 'SpeechRecognitionResult',
410 'SpeechSynthesis',
411 'SpeechSynthesisEvent',
412 'SpeechSynthesisUtterance',
413 'SpeechSynthesisVoice',
414 'Storage',
415 'StorageEvent',
416 'StorageInfo',
417 'StorageQuota',
418 'StyleElement',
419 'StyleMedia',
420 'StyleSheet',
421 'SubmitButtonInputElement',
422 'TableCaptionElement',
423 'TableCellElement',
424 'TableColElement',
425 'TableElement',
426 'TableRowElement',
427 'TableSectionElement',
428 'TelephoneInputElement',
429 'TemplateElement',
430 'Text',
431 'TextAreaElement',
432 'TextEvent',
433 'TextInputElement',
434 'TextInputElementBase',
435 'TextMetrics',
436 'TextTrack',
437 'TextTrackCue',
438 'TextTrackCueList',
439 'TextTrackList',
440 'TimeInputElement',
441 'TimeRanges',
442 'Timing',
443 'TitleElement',
444 'Touch',
445 'TouchEvent',
446 'TouchList',
447 'TrackElement',
448 'TrackEvent',
449 'TransitionEvent',
450 'TreeWalker',
451 'UIEvent',
452 'UListElement',
453 'UnknownElement',
454 'Url',
455 'UrlInputElement',
456 'UrlUtils',
457 'UrlUtilsReadOnly',
458 'ValidityState',
459 'VideoElement',
460 'VideoPlaybackQuality',
461 'VideoTrack',
462 'VideoTrackList',
463 'VttCue',
464 'VttRegion',
465 'VttRegionList',
466 'WebSocket',
467 'WeekInputElement',
468 'WheelEvent',
469 'Window',
470 'WindowBase',
471 'WindowBase64',
472 'WindowEventHandlers',
473 'Worker',
474 'WorkerConsole',
475 'WorkerGlobalScope',
476 'WorkerPerformance',
477 'XPathEvaluator',
478 'XPathExpression',
479 'XPathNSResolver',
480 'XPathResult',
481 'XmlDocument',
482 'XmlSerializer',
483 'XsltProcessor',
484 '_Attr',
485 '_CSSPrimitiveValue',
486 '_CSSUnknownRule',
487 '_CSSValue',
488 '_Cache',
489 '_CanvasPathMethods',
490 '_ClientRect',
491 '_ClientRectList',
492 '_Counter',
493 '_CssRuleList',
494 '_CssValueList',
495 '_DOMFileSystemSync',
496 '_DirectoryEntrySync',
497 '_DirectoryReaderSync',
498 '_DocumentType',
499 '_DomRect',
500 '_EntryArray',
501 '_EntrySync',
502 '_FileEntrySync',
503 '_FileReaderSync',
504 '_FileWriterSync',
505 '_GamepadList',
506 '_HTMLAllCollection',
507 '_HTMLAppletElement',
508 '_HTMLDirectoryElement',
509 '_HTMLFontElement',
510 '_HTMLFrameElement',
511 '_HTMLFrameSetElement',
512 '_HTMLMarqueeElement',
513 '_MutationEvent',
514 '_NamedNodeMap',
515 '_PagePopupController',
516 '_RGBColor',
517 '_Rect',
518 '_Request',
519 '_Response',
520 '_ServiceWorker',
521 '_SpeechRecognitionResultList',
522 '_StyleSheetList',
523 '_SubtleCrypto',
524 '_WebKitCSSFilterValue',
525 '_WebKitCSSMatrix',
526 '_WebKitCSSTransformValue',
527 '_WindowTimers',
528 '_WorkerLocation',
529 '_WorkerNavigator',
530 '_XMLHttpRequestProgressEvent'
531 ],
532 'dart:svg': [
533 'AElement',
534 'AltGlyphElement',
535 'Angle',
536 'AnimateElement',
537 'AnimateMotionElement',
538 'AnimateTransformElement',
539 'AnimatedAngle',
540 'AnimatedBoolean',
541 'AnimatedEnumeration',
542 'AnimatedInteger',
543 'AnimatedLength',
544 'AnimatedLengthList',
545 'AnimatedNumber',
546 'AnimatedNumberList',
547 'AnimatedPreserveAspectRatio',
548 'AnimatedRect',
549 'AnimatedString',
550 'AnimatedTransformList',
551 'AnimationElement',
552 'CircleElement',
553 'ClipPathElement',
554 'DefsElement',
555 'DescElement',
556 'DiscardElement',
557 'EllipseElement',
558 'FEBlendElement',
559 'FEColorMatrixElement',
560 'FEComponentTransferElement',
561 'FECompositeElement',
562 'FEConvolveMatrixElement',
563 'FEDiffuseLightingElement',
564 'FEDisplacementMapElement',
565 'FEDistantLightElement',
566 'FEFloodElement',
567 'FEFuncAElement',
568 'FEFuncBElement',
569 'FEFuncGElement',
570 'FEFuncRElement',
571 'FEGaussianBlurElement',
572 'FEImageElement',
573 'FEMergeElement',
574 'FEMergeNodeElement',
575 'FEMorphologyElement',
576 'FEOffsetElement',
577 'FEPointLightElement',
578 'FESpecularLightingElement',
579 'FESpotLightElement',
580 'FETileElement',
581 'FETurbulenceElement',
582 'FilterElement',
583 'FilterPrimitiveStandardAttributes',
584 'FitToViewBox',
585 'ForeignObjectElement',
586 'GElement',
587 'GeometryElement',
588 'GraphicsElement',
589 'ImageElement',
590 'Length',
591 'LengthList',
592 'LineElement',
593 'LinearGradientElement',
594 'MarkerElement',
595 'MaskElement',
596 'Matrix',
597 'MetadataElement',
598 'Number',
599 'NumberList',
600 'PathElement',
601 'PathSeg',
602 'PathSegArcAbs',
603 'PathSegArcRel',
604 'PathSegClosePath',
605 'PathSegCurvetoCubicAbs',
606 'PathSegCurvetoCubicRel',
607 'PathSegCurvetoCubicSmoothAbs',
608 'PathSegCurvetoCubicSmoothRel',
609 'PathSegCurvetoQuadraticAbs',
610 'PathSegCurvetoQuadraticRel',
611 'PathSegCurvetoQuadraticSmoothAbs',
612 'PathSegCurvetoQuadraticSmoothRel',
613 'PathSegLinetoAbs',
614 'PathSegLinetoHorizontalAbs',
615 'PathSegLinetoHorizontalRel',
616 'PathSegLinetoRel',
617 'PathSegLinetoVerticalAbs',
618 'PathSegLinetoVerticalRel',
619 'PathSegList',
620 'PathSegMovetoAbs',
621 'PathSegMovetoRel',
622 'PatternElement',
623 'Point',
624 'PointList',
625 'PolygonElement',
626 'PolylineElement',
627 'PreserveAspectRatio',
628 'RadialGradientElement',
629 'Rect',
630 'RectElement',
631 'RenderingIntent',
632 'ScriptElement',
633 'SetElement',
634 'StopElement',
635 'StringList',
636 'StyleElement',
637 'SvgElement',
638 'SvgSvgElement',
639 'SwitchElement',
640 'SymbolElement',
641 'TSpanElement',
642 'Tests',
643 'TextContentElement',
644 'TextElement',
645 'TextPathElement',
646 'TextPositioningElement',
647 'TitleElement',
648 'Transform',
649 'TransformList',
650 'UnitTypes',
651 'UriReference',
652 'UseElement',
653 'ViewElement',
654 'ViewSpec',
655 'ZoomAndPan',
656 'ZoomEvent',
657 '_GradientElement',
658 '_SVGAltGlyphDefElement',
659 '_SVGAltGlyphItemElement',
660 '_SVGComponentTransferFunctionElement',
661 '_SVGCursorElement',
662 '_SVGFEDropShadowElement',
663 '_SVGFontElement',
664 '_SVGFontFaceElement',
665 '_SVGFontFaceFormatElement',
666 '_SVGFontFaceNameElement',
667 '_SVGFontFaceSrcElement',
668 '_SVGFontFaceUriElement',
669 '_SVGGlyphElement',
670 '_SVGGlyphRefElement',
671 '_SVGHKernElement',
672 '_SVGMPathElement',
673 '_SVGMissingGlyphElement',
674 '_SVGVKernElement'
675 ],
676 'dart:web_audio': [
677 'AnalyserNode',
678 'AudioBuffer',
679 'AudioBufferSourceNode',
680 'AudioContext',
681 'AudioDestinationNode',
682 'AudioListener',
683 'AudioNode',
684 'AudioParam',
685 'AudioProcessingEvent',
686 'AudioSourceNode',
687 'BiquadFilterNode',
688 'ChannelMergerNode',
689 'ChannelSplitterNode',
690 'ConvolverNode',
691 'DelayNode',
692 'DynamicsCompressorNode',
693 'GainNode',
694 'MediaElementAudioSourceNode',
695 'MediaStreamAudioDestinationNode',
696 'MediaStreamAudioSourceNode',
697 'OfflineAudioCompletionEvent',
698 'OfflineAudioContext',
699 'OscillatorNode',
700 'PannerNode',
701 'PeriodicWave',
702 'ScriptProcessorNode',
703 'WaveShaperNode'
704 ],
705 'dart:web_gl': [
706 'ActiveInfo',
707 'AngleInstancedArrays',
708 'Buffer',
709 'CompressedTextureAtc',
710 'CompressedTextureETC1',
711 'CompressedTexturePvrtc',
712 'CompressedTextureS3TC',
713 'ContextAttributes',
714 'ContextEvent',
715 'DebugRendererInfo',
716 'DebugShaders',
717 'DepthTexture',
718 'DrawBuffers',
719 'ExtBlendMinMax',
720 'ExtFragDepth',
721 'ExtShaderTextureLod',
722 'ExtTextureFilterAnisotropic',
723 'Framebuffer',
724 'LoseContext',
725 'OesElementIndexUint',
726 'OesStandardDerivatives',
727 'OesTextureFloat',
728 'OesTextureFloatLinear',
729 'OesTextureHalfFloat',
730 'OesTextureHalfFloatLinear',
731 'OesVertexArrayObject',
732 'Program',
733 'Renderbuffer',
734 'RenderingContext',
735 'Shader',
736 'ShaderPrecisionFormat',
737 'Texture',
738 'UniformLocation',
739 'VertexArrayObject'
740 ],
741 'dart:web_sql': [
742 'SqlDatabase',
743 'SqlError',
744 'SqlResultSet',
745 'SqlResultSetRowList',
746 'SqlTransaction'
747 ]
748 };
749 } 174 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698