Skip to content

Commit 8650ba5

Browse files
author
Nikos M
committed
use nfe or arguments.callee or whatelse to call queue methods on linear steps (avoid passing task instance as extra param)
1 parent 94a2343 commit 8650ba5

File tree

3 files changed

+99
-65
lines changed

3 files changed

+99
-65
lines changed

build/asynchronous.js

+49-32
Original file line numberDiff line numberDiff line change
@@ -330,32 +330,20 @@
330330
};
331331

332332
// Task class/combinator
333-
var Task = function( task ) {
334-
if ( task instanceof Task ) return task;
335-
if ( !(this instanceof Task) ) return new Task( task );
336-
if ( 1 > arguments.length ) task = null;
333+
var Task = function( aTask ) {
334+
if ( aTask instanceof Task ) return aTask;
335+
if ( !(this instanceof Task) ) return new Task( aTask );
337336

338-
var self = this, aqueue = null,
337+
var self = this, aqueue = null, task = null,
339338
onComplete = null, run_once = false,
340339
times = false, loop = false, recurse = false,
341340
until = false, untilNot = false,
342341
loopObject = null, repeatCounter = 0,
343342
repeatIncrement = 1, repeatTimes = null,
344343
repeatUntil = null, repeatUntilNot = null,
345-
lastResult = undef,
346-
347-
run = function( ) {
348-
lastResult = task( self );
349-
run_once = true;
350-
return lastResult;
351-
}
344+
lastResult = undef, run
352345
;
353346

354-
self.task = function( t ) {
355-
task = t;
356-
return self;
357-
};
358-
359347
self.queue = function( q ) {
360348
if ( arguments.length )
361349
{
@@ -389,26 +377,55 @@
389377
}
390378
};
391379

392-
self.canRun = function( ) {
393-
if ( !task ) return false;
394-
if ( run_once && !times && !loop && !recurse && !until && !untilNot ) return false;
395-
if ( (times || loop) && repeatCounter >= repeatTimes ) return false;
396-
if ( loop && !loopObject ) return false;
397-
if ( (recurse || until) && lastResult === repeatUntil ) return false;
398-
return true;
380+
self.task = function( t ) {
381+
task = t;
382+
/*task.jumpNext = self.jumpNext;
383+
task.abort = self.abort;
384+
task.dispose = self.dispose;*/
385+
return self;
399386
};
400387

401-
self.run = run;
388+
if ( aTask ) self.task( aTask );
389+
390+
self.run = run = function( ) {
391+
// add queue/task methods on task func itself
392+
// instead of passing "this" as task param
393+
// use task as "nfe" or "arguments.callee" or whatelse,
394+
task.jumpNext = self.jumpNext;
395+
task.abort = self.abort;
396+
task.dispose = self.dispose;
397+
lastResult = task( /*self*/ );
398+
run_once = true;
399+
task.jumpNext = null;
400+
task.abort = null;
401+
task.dispose = null;
402+
return lastResult;
403+
};
402404

403405
self.runWithArgs = function( args ) {
406+
task.jumpNext = self.jumpNext;
407+
task.abort = self.abort;
408+
task.dispose = self.dispose;
404409
lastResult = task.apply( null, args );
405410
run_once = true;
411+
task.jumpNext = null;
412+
task.abort = null;
413+
task.dispose = null;
406414
return lastResult;
407415
};
408416

417+
self.canRun = function( ) {
418+
if ( !task ) return false;
419+
if ( run_once && !times && !loop && !recurse && !until && !untilNot ) return false;
420+
if ( (times || loop) && repeatCounter >= repeatTimes ) return false;
421+
if ( loop && !loopObject ) return false;
422+
if ( (recurse || until) && lastResult === repeatUntil ) return false;
423+
return true;
424+
};
425+
409426
self.iif = function( cond, if_true_task, else_task ) {
410-
if ( cond ) task = if_true_task;
411-
else if ( arguments.length > 2 ) task = else_task;
427+
if ( cond ) self.task( if_true_task );
428+
else if ( arguments.length > 2 ) self.task( else_task );
412429
return self;
413430
};
414431

@@ -519,7 +536,7 @@
519536
return self;
520537
};
521538
};
522-
/*Task.iif = function( ) { var args = slice(arguments), T = new Task( ); return T.iif.apply( T, args ); };
539+
/*Task.iif = function( ) { var args = arguments, T = new Task( ); return T.iif.apply( T, args ); };
523540
Task.until = function( ) { var args = slice(arguments), T = new Task( args.pop() ); return T.until.apply( T, args ); };
524541
Task.untilNot = function( ) { var args = slice(arguments), T = new Task( args.pop() ); return T.untilNot.apply( T, args ); };
525542
Task.loop = function( ) { var args = slice(arguments), T = new Task( args.pop() ); return T.loop.apply( T, args ); };
@@ -718,7 +735,7 @@
718735
queue = queue || new Asynchronous( );
719736
var serialize = function( func ) {
720737
var serialized = function( ) {
721-
var scope = this, args = slice( arguments );
738+
var scope = this, args = arguments;
722739
queue.step( function( ){ func.apply( scope, args ); } );
723740
if ( !queue.$running ) queue.run( LINEARISED );
724741
};
@@ -897,7 +914,7 @@
897914
}
898915

899916
,iif: function( ) {
900-
var args = slice(arguments), T = new Task( );
917+
var args = arguments, T = new Task( );
901918
return T.iif.apply( T, args );
902919
}
903920

@@ -933,7 +950,7 @@
933950
}
934951

935952
,steps: function( ) {
936-
var self = this, tasks = slice( arguments ), i, l;
953+
var self = this, tasks = arguments, i, l;
937954
l = tasks.length;
938955
for (i=0; i<l; i++) self.step( tasks[ i ] );
939956
return self;
@@ -975,7 +992,7 @@
975992
if ( offset < queue.length )
976993
{
977994
if ( offset > 0 ) queue.splice( 0, offset );
978-
self.run( self.$runmode, slice(arguments) );
995+
self.run( self.$runmode, arguments );
979996
}
980997
return self;
981998
};

0 commit comments

Comments
 (0)