| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 560cbc5 commit 9256728
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -136,9 +136,6 @@ let timerListId = NumberMIN_SAFE_INTEGER; | |||
| 136 | 136 | ||
| 137 | 137 | const kRefed = Symbol('refed'); | |
| 138 | 138 | ||
| 139 | - // Create a single linked list instance only once at startup | ||
| 140 | - const immediateQueue = new ImmediateList(); | ||
| 141 | - | ||
| 142 | 139 | let nextExpiry = Infinity; | |
| 143 | 140 | let refCount = 0; | |
| 144 | 141 | ||
@@ -161,140 +158,148 @@ function initAsyncResource(resource, type) { | |||
| 161 | 158 | if (initHooksExist()) | |
| 162 | 159 | emitInit(asyncId, type, triggerAsyncId, resource); | |
| 163 | 160 | } | |
| 164 | - | ||
| 165 | - // Timer constructor function. | ||
| 166 | - // The entire prototype is defined in lib/timers.js | ||
| 167 | - function Timeout(callback, after, args, isRepeat, isRefed) { | ||
| 168 | - after *= 1; // Coalesce to number or NaN | ||
| 169 | - if (!(after >= 1 && after <= TIMEOUT_MAX)) { | ||
| 170 | - if (after > TIMEOUT_MAX) { | ||
| 171 | - process.emitWarning(`${after} does not fit into` + | ||
| 172 | - ' a 32-bit signed integer.' + | ||
| 173 | - '\nTimeout duration was set to 1.', | ||
| 174 | - 'TimeoutOverflowWarning'); | ||
| 161 | + class Timeout { | ||
| 162 | + // Timer constructor function. | ||
| 163 | + // The entire prototype is defined in lib/timers.js | ||
| 164 | + constructor(callback, after, args, isRepeat, isRefed) { | ||
| 165 | + after *= 1; // Coalesce to number or NaN | ||
| 166 | + if (!(after >= 1 && after <= TIMEOUT_MAX)) { | ||
| 167 | + if (after > TIMEOUT_MAX) { | ||
| 168 | + process.emitWarning(`${after} does not fit into` + | ||
| 169 | + ' a 32-bit signed integer.' + | ||
| 170 | + '\nTimeout duration was set to 1.', | ||
| 171 | + 'TimeoutOverflowWarning'); | ||
| 172 | + } | ||
| 173 | + after = 1; // Schedule on next tick, follows browser behavior | ||
| 175 | 174 | } | |
| 176 | - after = 1; // Schedule on next tick, follows browser behavior | ||
| 177 | - } | ||
| 178 | 175 | ||
| 179 | - this._idleTimeout = after; | ||
| 180 | - this._idlePrev = this; | ||
| 181 | - this._idleNext = this; | ||
| 182 | - this._idleStart = null; | ||
| 183 | - // This must be set to null first to avoid function tracking | ||
| 184 | - // on the hidden class, revisit in V8 versions after 6.2 | ||
| 185 | - this._onTimeout = null; | ||
| 186 | - this._onTimeout = callback; | ||
| 187 | - this._timerArgs = args; | ||
| 188 | - this._repeat = isRepeat ? after : null; | ||
| 189 | - this._destroyed = false; | ||
| 190 | - | ||
| 191 | - if (isRefed) | ||
| 192 | - incRefCount(); | ||
| 193 | - this[kRefed] = isRefed; | ||
| 194 | - this[kHasPrimitive] = false; | ||
| 195 | - | ||
| 196 | - initAsyncResource(this, 'Timeout'); | ||
| 197 | - } | ||
| 176 | + this._idleTimeout = after; | ||
| 177 | + this._idlePrev = this; | ||
| 178 | + this._idleNext = this; | ||
| 179 | + this._idleStart = null; | ||
| 180 | + // This must be set to null first to avoid function tracking | ||
| 181 | + // on the hidden class, revisit in V8 versions after 6.2 | ||
| 182 | + this._onTimeout = null; | ||
| 183 | + this._onTimeout = callback; | ||
| 184 | + this._timerArgs = args; | ||
| 185 | + this._repeat = isRepeat ? after : null; | ||
| 186 | + this._destroyed = false; | ||
| 198 | 187 | ||
| 199 | - // Make sure the linked list only shows the minimal necessary information. | ||
| 200 | - Timeout.prototype[inspect.custom] = function(_, options) { | ||
| 201 | - return inspect(this, { | ||
| 202 | - ...options, | ||
| 203 | - // Only inspect one level. | ||
| 204 | - depth: 0, | ||
| 205 | - // It should not recurse. | ||
| 206 | - customInspect: false | ||
| 207 | - }); | ||
| 208 | - }; | ||
| 188 | + if (isRefed) | ||
| 189 | + incRefCount(); | ||
| 190 | + this[kRefed] = isRefed; | ||
| 191 | + this[kHasPrimitive] = false; | ||
| 209 | 192 | ||
| 210 | - Timeout.prototype.refresh = function() { | ||
| 211 | - if (this[kRefed]) | ||
| 212 | - active(this); | ||
| 213 | - else | ||
| 214 | - unrefActive(this); | ||
| 193 | + initAsyncResource(this, 'Timeout'); | ||
| 194 | + } | ||
| 215 | 195 | ||
| 216 | - return this; | ||
| 217 | - }; | ||
| 196 | + // Make sure the linked list only shows the minimal necessary information. | ||
| 197 | + [inspect.custom](_, options) { | ||
| 198 | + return inspect(this, { | ||
| 199 | + ...options, | ||
| 200 | + // Only inspect one level. | ||
| 201 | + depth: 0, | ||
| 202 | + // It should not recurse. | ||
| 203 | + customInspect: false | ||
| 204 | + }); | ||
| 205 | + } | ||
| 218 | 206 | ||
| 219 | - Timeout.prototype.unref = function() { | ||
| 220 | - if (this[kRefed]) { | ||
| 221 | - this[kRefed] = false; | ||
| 222 | - if (!this._destroyed) | ||
| 223 | - decRefCount(); | ||
| 207 | + refresh() { | ||
| 208 | + if (this[kRefed]) | ||
| 209 | + active(this); | ||
| 210 | + else | ||
| 211 | + unrefActive(this); | ||
| 212 | + | ||
| 213 | + return this; | ||
| 224 | 214 | } | |
| 225 | - return this; | ||
| 226 | - }; | ||
| 227 | 215 | ||
| 228 | - Timeout.prototype.ref = function() { | ||
| 229 | - if (!this[kRefed]) { | ||
| 230 | - this[kRefed] = true; | ||
| 231 | - if (!this._destroyed) | ||
| 232 | - incRefCount(); | ||
| 216 | + unref() { | ||
| 217 | + if (this[kRefed]) { | ||
| 218 | + this[kRefed] = false; | ||
| 219 | + if (!this._destroyed) | ||
| 220 | + decRefCount(); | ||
| 221 | + } | ||
| 222 | + return this; | ||
| 233 | 223 | } | |
| 234 | - return this; | ||
| 235 | - }; | ||
| 236 | 224 | ||
| 237 | - Timeout.prototype.hasRef = function() { | ||
| 238 | - return this[kRefed]; | ||
| 239 | - }; | ||
| 225 | + ref() { | ||
| 226 | + if (!this[kRefed]) { | ||
| 227 | + this[kRefed] = true; | ||
| 228 | + if (!this._destroyed) | ||
| 229 | + incRefCount(); | ||
| 230 | + } | ||
| 231 | + return this; | ||
| 232 | + } | ||
| 240 | 233 | ||
| 241 | - function TimersList(expiry, msecs) { | ||
| 242 | - this._idleNext = this; // Create the list with the linkedlist properties to | ||
| 243 | - this._idlePrev = this; // Prevent any unnecessary hidden class changes. | ||
| 244 | - this.expiry = expiry; | ||
| 245 | - this.id = timerListId++; | ||
| 246 | - this.msecs = msecs; | ||
| 247 | - this.priorityQueuePosition = null; | ||
| 234 | + hasRef() { | ||
| 235 | + return this[kRefed]; | ||
| 236 | + } | ||
| 248 | 237 | } | |
| 249 | 238 | ||
| 250 | - // Make sure the linked list only shows the minimal necessary information. | ||
| 251 | - TimersList.prototype[inspect.custom] = function(_, options) { | ||
| 252 | - return inspect(this, { | ||
| 253 | - ...options, | ||
| 254 | - // Only inspect one level. | ||
| 255 | - depth: 0, | ||
| 256 | - // It should not recurse. | ||
| 257 | - customInspect: false | ||
| 258 | - }); | ||
| 259 | - }; | ||
| 239 | + class TimersList { | ||
| 240 | + constructor(expiry, msecs) { | ||
| 241 | + this._idleNext = this; // Create the list with the linkedlist properties to | ||
| 242 | + this._idlePrev = this; // Prevent any unnecessary hidden class changes. | ||
| 243 | + this.expiry = expiry; | ||
| 244 | + this.id = timerListId++; | ||
| 245 | + this.msecs = msecs; | ||
| 246 | + this.priorityQueuePosition = null; | ||
| 247 | + } | ||
| 260 | 248 | ||
| 261 | - // A linked list for storing `setImmediate()` requests | ||
| 262 | - function ImmediateList() { | ||
| 263 | - this.head = null; | ||
| 264 | - this.tail = null; | ||
| 249 | + // Make sure the linked list only shows the minimal necessary information. | ||
| 250 | + [inspect.custom](_, options) { | ||
| 251 | + return inspect(this, { | ||
| 252 | + ...options, | ||
| 253 | + // Only inspect one level. | ||
| 254 | + depth: 0, | ||
| 255 | + // It should not recurse. | ||
| 256 | + customInspect: false | ||
| 257 | + }); | ||
| 258 | + } | ||
| 265 | 259 | } | |
| 266 | 260 | ||
| 267 | - // Appends an item to the end of the linked list, adjusting the current tail's | ||
| 268 | - // next pointer and the item's previous pointer where applicable | ||
| 269 | - ImmediateList.prototype.append = function(item) { | ||
| 270 | - if (this.tail !== null) { | ||
| 271 | - this.tail._idleNext = item; | ||
| 272 | - item._idlePrev = this.tail; | ||
| 273 | - } else { | ||
| 274 | - this.head = item; | ||
| 261 | + // A linked list for storing `setImmediate()` requests | ||
| 262 | + class ImmediateList { | ||
| 263 | + constructor() { | ||
| 264 | + this.head = null; | ||
| 265 | + this.tail = null; | ||
| 275 | 266 | } | |
| 276 | - this.tail = item; | ||
| 277 | - }; | ||
| 278 | 267 | ||
| 279 | - // Removes an item from the linked list, adjusting the pointers of adjacent | ||
| 280 | - // items and the linked list's head or tail pointers as necessary | ||
| 281 | - ImmediateList.prototype.remove = function(item) { | ||
| 282 | - if (item._idleNext) { | ||
| 283 | - item._idleNext._idlePrev = item._idlePrev; | ||
| 268 | + // Appends an item to the end of the linked list, adjusting the current tail's | ||
| 269 | + // next pointer and the item's previous pointer where applicable | ||
| 270 | + append(item) { | ||
| 271 | + if (this.tail !== null) { | ||
| 272 | + this.tail._idleNext = item; | ||
| 273 | + item._idlePrev = this.tail; | ||
| 274 | + } else { | ||
| 275 | + this.head = item; | ||
| 276 | + } | ||
| 277 | + this.tail = item; | ||
| 284 | 278 | } | |
| 285 | 279 | ||
| 286 | - if (item._idlePrev) { | ||
| 287 | - item._idlePrev._idleNext = item._idleNext; | ||
| 288 | - } | ||
| 280 | + // Removes an item from the linked list, adjusting the pointers of adjacent | ||
| 281 | + // items and the linked list's head or tail pointers as necessary | ||
| 282 | + remove(item) { | ||
| 283 | + if (item._idleNext) { | ||
| 284 | + item._idleNext._idlePrev = item._idlePrev; | ||
| 285 | + } | ||
| 289 | 286 | ||
| 290 | - if (item === this.head) | ||
| 291 | - this.head = item._idleNext; | ||
| 292 | - if (item === this.tail) | ||
| 293 | - this.tail = item._idlePrev; | ||
| 287 | + if (item._idlePrev) { | ||
| 288 | + item._idlePrev._idleNext = item._idleNext; | ||
| 289 | + } | ||
| 294 | 290 | ||
| 295 | - item._idleNext = null; | ||
| 296 | - item._idlePrev = null; | ||
| 297 | - }; | ||
| 291 | + if (item === this.head) | ||
| 292 | + this.head = item._idleNext; | ||
| 293 | + if (item === this.tail) | ||
| 294 | + this.tail = item._idlePrev; | ||
| 295 | + | ||
| 296 | + item._idleNext = null; | ||
| 297 | + item._idlePrev = null; | ||
| 298 | + } | ||
| 299 | + } | ||
| 300 | + | ||
| 301 | + // Create a single linked list instance only once at startup | ||
| 302 | + const immediateQueue = new ImmediateList(); | ||
| 298 | 303 | ||
| 299 | 304 | function incRefCount() { | |
| 300 | 305 | if (refCount++ === 0) | |
| Back | FazBrowse Home | New Git URL |
0 commit comments