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

Side by Side Diff: pkg/dev_compiler/tool/input_sdk/patch/async_patch.dart

Issue 2558133002: Enable more async code on node (Closed)
Patch Set: Created 4 years 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 // Patch file for the dart:async library. 5 // Patch file for the dart:async library.
6 6
7 import 'dart:_js_helper' show 7 import 'dart:_js_helper' show
8 patch, 8 patch,
9 Primitives; 9 Primitives;
10 import 'dart:_isolate_helper' show 10 import 'dart:_isolate_helper' show
11 IsolateNatives, 11 IsolateNatives,
12 TimerImpl, 12 TimerImpl,
13 global,
13 leaveJsAsync, 14 leaveJsAsync,
14 enterJsAsync, 15 enterJsAsync,
15 isWorker; 16 isWorker;
16 17
17 import 'dart:_foreign_helper' show JS; 18 import 'dart:_foreign_helper' show JS;
18 19
19 typedef void _Callback(); 20 typedef void _Callback();
20 typedef void _TakeCallback(_Callback callback); 21 typedef void _TakeCallback(_Callback callback);
21 22
22 @patch 23 @patch
23 class _AsyncRun { 24 class _AsyncRun {
24 @patch 25 @patch
25 static void _scheduleImmediate(void callback()) { 26 static void _scheduleImmediate(void callback()) {
26 _scheduleImmediateClosure(callback); 27 _scheduleImmediateClosure(callback);
27 } 28 }
28 29
29 // Lazily initialized. 30 // Lazily initialized.
30 static final _TakeCallback _scheduleImmediateClosure = 31 static final _TakeCallback _scheduleImmediateClosure =
31 _initializeScheduleImmediate(); 32 _initializeScheduleImmediate();
32 33
33 static _TakeCallback _initializeScheduleImmediate() { 34 static _TakeCallback _initializeScheduleImmediate() {
34 // TODO(rnystrom): Not needed by dev_compiler. 35 // TODO(rnystrom): Not needed by dev_compiler.
35 // requiresPreamble(); 36 // requiresPreamble();
36 if (JS('', 'self.scheduleImmediate') != null) { 37 if (JS('', '#.scheduleImmediate', global) != null) {
37 return _scheduleImmediateJsOverride; 38 return _scheduleImmediateJsOverride;
38 } 39 }
39 if (JS('', 'self.MutationObserver') != null && 40 if (JS('', '#.MutationObserver', global) != null &&
40 JS('', 'self.document') != null) { 41 JS('', '#.document', global) != null) {
41 // Use mutationObservers. 42 // Use mutationObservers.
42 var div = JS('', 'self.document.createElement("div")'); 43 var div = JS('', '#.document.createElement("div")', global);
43 var span = JS('', 'self.document.createElement("span")'); 44 var span = JS('', '#.document.createElement("span")', global);
44 _Callback storedCallback; 45 _Callback storedCallback;
45 46
46 internalCallback(_) { 47 internalCallback(_) {
47 leaveJsAsync(); 48 leaveJsAsync();
48 var f = storedCallback; 49 var f = storedCallback;
49 storedCallback = null; 50 storedCallback = null;
50 f(); 51 f();
51 }; 52 };
52 53
53 var observer = JS('', 'new self.MutationObserver(#)', internalCallback); 54 var observer = JS('', 'new #.MutationObserver(#)', global, internalCallbac k);
54 JS('', '#.observe(#, { childList: true })', 55 JS('', '#.observe(#, { childList: true })',
55 observer, div); 56 observer, div);
56 57
57 return (void callback()) { 58 return (void callback()) {
58 assert(storedCallback == null); 59 assert(storedCallback == null);
59 enterJsAsync(); 60 enterJsAsync();
60 storedCallback = callback; 61 storedCallback = callback;
61 // Because of a broken shadow-dom polyfill we have to change the 62 // Because of a broken shadow-dom polyfill we have to change the
62 // children instead a cheap property. 63 // children instead a cheap property.
63 // See https://github.com/Polymer/ShadowDOM/issues/468 64 // See https://github.com/Polymer/ShadowDOM/issues/468
64 JS('', '#.firstChild ? #.removeChild(#): #.appendChild(#)', 65 JS('', '#.firstChild ? #.removeChild(#): #.appendChild(#)',
65 div, div, span, div, span); 66 div, div, span, div, span);
66 }; 67 };
67 } else if (JS('', 'self.setImmediate') != null) { 68 } else if (JS('', '#.setImmediate', global) != null) {
68 return _scheduleImmediateWithSetImmediate; 69 return _scheduleImmediateWithSetImmediate;
69 } 70 }
70 // TODO(20055): We should use DOM promises when available. 71 // TODO(20055): We should use DOM promises when available.
71 return _scheduleImmediateWithTimer; 72 return _scheduleImmediateWithTimer;
72 } 73 }
73 74
74 static void _scheduleImmediateJsOverride(void callback()) { 75 static void _scheduleImmediateJsOverride(void callback()) {
75 internalCallback() { 76 internalCallback() {
76 leaveJsAsync(); 77 leaveJsAsync();
77 callback(); 78 callback();
78 }; 79 };
79 enterJsAsync(); 80 enterJsAsync();
80 JS('void', 'self.scheduleImmediate(#)', internalCallback); 81 JS('void', '#.scheduleImmediate(#)', global, internalCallback);
81 } 82 }
82 83
83 static void _scheduleImmediateWithSetImmediate(void callback()) { 84 static void _scheduleImmediateWithSetImmediate(void callback()) {
84 internalCallback() { 85 internalCallback() {
85 leaveJsAsync(); 86 leaveJsAsync();
86 callback(); 87 callback();
87 }; 88 };
88 enterJsAsync(); 89 enterJsAsync();
89 JS('void', 'self.setImmediate(#)', internalCallback); 90 JS('void', '#.setImmediate(#)', global, internalCallback);
90 } 91 }
91 92
92 static void _scheduleImmediateWithTimer(void callback()) { 93 static void _scheduleImmediateWithTimer(void callback()) {
93 Timer._createTimer(Duration.ZERO, callback); 94 Timer._createTimer(Duration.ZERO, callback);
94 } 95 }
95 } 96 }
96 97
97 @patch 98 @patch
98 class DeferredLibrary { 99 class DeferredLibrary {
99 @patch 100 @patch
(...skipping 21 matching lines...) Expand all
121 } 122 }
122 } 123 }
123 124
124 @patch 125 @patch
125 void _rethrow(Object error, StackTrace stackTrace) { 126 void _rethrow(Object error, StackTrace stackTrace) {
126 // TODO(rnystrom): Not needed by dev_compiler. 127 // TODO(rnystrom): Not needed by dev_compiler.
127 // error = wrapException(error); 128 // error = wrapException(error);
128 JS("void", "#.stack = #", error, stackTrace.toString()); 129 JS("void", "#.stack = #", error, stackTrace.toString());
129 JS("void", "throw #", error); 130 JS("void", "throw #", error);
130 } 131 }
OLDNEW
« no previous file with comments | « pkg/dev_compiler/lib/sdk/ddc_sdk.sum ('k') | pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698