Changeset 27390 in project


Ignore:
Timestamp:
09/07/12 23:11:24 (9 years ago)
Author:
felix winkelmann
Message:

spock 0.9: now with less throwing up

Location:
release/4/spock
Files:
4 deleted
13 edited
7 copied

Legend:

Unmodified
Added
Removed
  • release/4/spock/tags/0.9

  • release/4/spock/tags/0.9/codegen.scm

    r23521 r27390  
    9595                (when dest (emit "\t// " dest))
    9696                (when (and (pair? llist) (pair? (cdr llist))) ;XXX not really correct
    97                   (emit nl "SPOCK.count(arguments"
     97                  (emit nl "var r = SPOCK.count(arguments"
    9898                        (if (and debug-mode dest)
    9999                            (string-append ", " (constant (stringify dest)))
    100100                            "")
    101                         ");"))
     101                        ");")
     102                  (emit nl "if(r) return r;"))
    102103                (when rest
    103104                  (emit nl "var " rest " = SPOCK.rest(arguments, "  (- (length vars) 1))
     
    177178           (indent
    178179            (lambda ()
     180              ;;XXX this will not unwind, but at least decrease the counter
    179181              (emit nl "SPOCK.count(arguments")
    180182              (if dest
  • release/4/spock/tags/0.9/debug.js

    r22775 r27390  
    4141    if(--SPOCK.stack <= 0) {
    4242        ++SPOCK.restartCount;
    43         throw new SPOCK.Continuation(args.callee, Array.prototype.slice.call(args));
     43        return new SPOCK.Continuation(args.callee, Array.prototype.slice.call(args));
    4444    }
    4545
    4646    if(loc) SPOCK.trace(loc, args);
     47
     48    return false;
    4749};
    4850
  • release/4/spock/tags/0.9/runtime.js

    r23047 r27390  
    255255SPOCK.count = function(args, loc) {
    256256    if(--SPOCK.stack <= 0)
    257         throw new SPOCK.Continuation(args.callee, Array.prototype.slice.call(args));
     257        return new SPOCK.Continuation(args.callee, Array.prototype.slice.call(args));
     258    else return false;
    258259};
    259260
    260261SPOCK.rest = function(args, count, loc) {
    261262    var rest = null;
    262 
     263   
     264    // this will not unwind, but decrease the counter
    263265    SPOCK.count(args, loc);
    264266
     
    273275SPOCK.run = function(func) {    // optional arguments
    274276    function terminate(result) {
    275         throw new SPOCK.Result(result);
     277        return new SPOCK.Result(result);
    276278    }
    277279
     
    304306
    305307    while(true) {
    306         try {
    307             result = func.apply(SPOCK.global, args);
    308             break;
    309         }
    310         catch(x) {
    311             if(x instanceof SPOCK.Continuation) {
    312                 SPOCK.stack = SPOCK.STACKSIZE;
    313                 func = x.k_callee;
    314                 args = x.k_arguments;
    315             }
    316             else if(x instanceof SPOCK.Result) {
    317                 result = x.value;
    318                 break;
    319             }
    320             else {
    321                 restore();
    322                 SPOCK.error(x);
    323             }
    324         }
    325     }
    326 
    327     restore();
     308        result = func.apply(SPOCK.global, args);
     309
     310        if(result instanceof SPOCK.Continuation) {
     311            SPOCK.stack = SPOCK.STACKSIZE;
     312            func = result.k_callee;
     313            args = result.k_arguments;
     314        }
     315        else if(result instanceof SPOCK.Result) {
     316            restore();
     317            return result.value;
     318        }
     319        else {
     320            restore();
     321            SPOCK.error("unexpected return of non-continuation", result);
     322        }
     323    }
     324
    328325    return result;
    329326};
  • release/4/spock/tags/0.9/spock.setup

    r26847 r27390  
    7373 '("spock.so" "spock" "spock.import.so"
    7474   "spock-compiler.so" "spock-compiler.import.so")
    75  '((version 0.08)))
     75 '((version 0.09)))
    7676
    7777(install-program
    7878 'chicken-spock
    7979 (list executable)
    80  '((version 0.08)))
     80 '((version 0.09)))
  • release/4/spock/tags/0.9/spock/library.scm

    r26843 r27390  
    15131513           (lambda (k)
    15141514             (proc (%get-context k))
    1515              ((%native-lambda "throw new SPOCK.Result(undefined);")))))
     1515             ((%native-lambda "return new SPOCK.Result(undefined);")))))
    15161516
    15171517        ;;XXX currently undocumented and untested
  • release/4/spock/tags/0.9/tests/drag.html

    r22837 r27390  
    1515        right-margin: auto;
    1616        left: 0px;
    17         top-margin; auto;
     17        top-margin: auto;
    1818        bottom: 0px;
    1919      }
  • release/4/spock/trunk

  • release/4/spock/trunk/codegen.scm

    r23521 r27390  
    9595                (when dest (emit "\t// " dest))
    9696                (when (and (pair? llist) (pair? (cdr llist))) ;XXX not really correct
    97                   (emit nl "SPOCK.count(arguments"
     97                  (emit nl "var r = SPOCK.count(arguments"
    9898                        (if (and debug-mode dest)
    9999                            (string-append ", " (constant (stringify dest)))
    100100                            "")
    101                         ");"))
     101                        ");")
     102                  (emit nl "if(r) return r;"))
    102103                (when rest
    103104                  (emit nl "var " rest " = SPOCK.rest(arguments, "  (- (length vars) 1))
     
    177178           (indent
    178179            (lambda ()
     180              ;;XXX this will not unwind, but at least decrease the counter
    179181              (emit nl "SPOCK.count(arguments")
    180182              (if dest
  • release/4/spock/trunk/debug.js

    r22775 r27390  
    4141    if(--SPOCK.stack <= 0) {
    4242        ++SPOCK.restartCount;
    43         throw new SPOCK.Continuation(args.callee, Array.prototype.slice.call(args));
     43        return new SPOCK.Continuation(args.callee, Array.prototype.slice.call(args));
    4444    }
    4545
    4646    if(loc) SPOCK.trace(loc, args);
     47
     48    return false;
    4749};
    4850
  • release/4/spock/trunk/runtime.js

    r23047 r27390  
    255255SPOCK.count = function(args, loc) {
    256256    if(--SPOCK.stack <= 0)
    257         throw new SPOCK.Continuation(args.callee, Array.prototype.slice.call(args));
     257        return new SPOCK.Continuation(args.callee, Array.prototype.slice.call(args));
     258    else return false;
    258259};
    259260
    260261SPOCK.rest = function(args, count, loc) {
    261262    var rest = null;
    262 
     263   
     264    // this will not unwind, but decrease the counter
    263265    SPOCK.count(args, loc);
    264266
     
    273275SPOCK.run = function(func) {    // optional arguments
    274276    function terminate(result) {
    275         throw new SPOCK.Result(result);
     277        return new SPOCK.Result(result);
    276278    }
    277279
     
    304306
    305307    while(true) {
    306         try {
    307             result = func.apply(SPOCK.global, args);
    308             break;
    309         }
    310         catch(x) {
    311             if(x instanceof SPOCK.Continuation) {
    312                 SPOCK.stack = SPOCK.STACKSIZE;
    313                 func = x.k_callee;
    314                 args = x.k_arguments;
    315             }
    316             else if(x instanceof SPOCK.Result) {
    317                 result = x.value;
    318                 break;
    319             }
    320             else {
    321                 restore();
    322                 SPOCK.error(x);
    323             }
    324         }
    325     }
    326 
    327     restore();
     308        result = func.apply(SPOCK.global, args);
     309
     310        if(result instanceof SPOCK.Continuation) {
     311            SPOCK.stack = SPOCK.STACKSIZE;
     312            func = result.k_callee;
     313            args = result.k_arguments;
     314        }
     315        else if(result instanceof SPOCK.Result) {
     316            restore();
     317            return result.value;
     318        }
     319        else {
     320            restore();
     321            SPOCK.error("unexpected return of non-continuation", result);
     322        }
     323    }
     324
    328325    return result;
    329326};
  • release/4/spock/trunk/spock.setup

    r26847 r27390  
    7373 '("spock.so" "spock" "spock.import.so"
    7474   "spock-compiler.so" "spock-compiler.import.so")
    75  '((version 0.08)))
     75 '((version 0.09)))
    7676
    7777(install-program
    7878 'chicken-spock
    7979 (list executable)
    80  '((version 0.08)))
     80 '((version 0.09)))
  • release/4/spock/trunk/spock/library.scm

    r26843 r27390  
    15131513           (lambda (k)
    15141514             (proc (%get-context k))
    1515              ((%native-lambda "throw new SPOCK.Result(undefined);")))))
     1515             ((%native-lambda "return new SPOCK.Result(undefined);")))))
    15161516
    15171517        ;;XXX currently undocumented and untested
  • release/4/spock/trunk/tests/drag.html

    r22837 r27390  
    1515        right-margin: auto;
    1616        left: 0px;
    17         top-margin; auto;
     17        top-margin: auto;
    1818        bottom: 0px;
    1919      }
Note: See TracChangeset for help on using the changeset viewer.