Christian Kellermann committed cb948fe

Make world-* procedures fall back to old version on errors.

This should make it easier for interactive development on a REPL.

Comments (0)

Files changed (1)

 (define doodle-height #f)
-(define *world-inits* values)
-(define *world-changes* values)
-(define *world-ends* values)
+(define *world-inits* (cons values values))
+(define *world-changes* (cons values values))
+(define *world-ends* (cons values values))
 (define *minimum-wait* 0)
-(define (world-ends f) (set! *world-ends* f))
-(define (world-changes f) (set! *world-changes* f))
-(define (world-inits f) (set! *world-inits* f))
+(define (world-ends f)
+  (set-cdr! *world-ends* (car *world-ends*))
+  (set-car! *world-ends* f))
+(define (world-changes f)
+  (set-cdr! *world-changes* (car *world-changes*))
+  (set-car! *world-changes* f))
+(define (world-inits f)
+  (set-cdr! *world-inits* (car *world-inits*))
+  (set-car! *world-inits* f))
 (define (world-update-delay . d)
   (if (null? d)
               (lambda (k)
                  (lambda (e)
-                   (fprintf (current-error-port) "Exception in world-changes: ~a, disabling world-changes.~%" ((condition-property-accessor 'exn 'message) e))
+                   (fprintf (current-error-port)
+                            "Exception in world-changes: ~a ~a.~%"
+                            ((condition-property-accessor 'exn 'message) e)
+                            ((condition-property-accessor 'exn 'arguments) e))
                    (print-call-chain (current-error-port))
-                   (k (world-changes values)))
+                   (k (world-changes (cdr *world-changes*))))
                  (lambda ()
-                   (*world-changes*
+                   ((car *world-changes*)
                     (map (cut translate-events <> escape)
               (lambda (k)
                  (lambda (e)
-                   (fprintf (current-error-port) "Exception in world-ends: ~a, ignoring world-ends.~%" ((condition-property-accessor 'exn 'message) e))
+                   (fprintf (current-error-port) "Exception in world-ends: ~a ~a~%"
+                            ((condition-property-accessor 'exn 'message) e)
+                            ((condition-property-accessor 'exn 'arguments) e))
                    (print-call-chain (current-error-port))
-                   (k (world-ends values)))
+                   (k (world-ends (cdr *world-ends*))))
                  (lambda ()
-                   (*world-ends*)))))
+                   ((car *world-ends*))))))
 (define (run-event-loop #!key
    (lambda (k)
       (lambda (e)
-        (fprintf (current-error-port) "Exception in world-inits: ~a, ignoring world-inits.~%" ((condition-property-accessor 'exn 'message) e))
+        (fprintf (current-error-port) "Exception in world-inits: ~a ~a.~%"
+                 ((condition-property-accessor 'exn 'message) e)
+                 ((condition-property-accessor 'exn 'arguments) e))
         (print-call-chain (current-error-port))
-        (k (world-inits values)))
+        (k (cdr *world-inits*)))
       (lambda ()
-        (*world-inits*)))))
+        ((car *world-inits*))))))
   (sdl-flip *s*)
   (if run-in-background
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.