From 2f45bdc83670254c9905b0f7a6b49bce7b0f60db Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20V=C3=A1zquez?= Date: Sat, 22 Feb 2014 02:46:05 +0100 Subject: [PATCH] block/return-from uses BlockNLX instead of plain object --- src/compiler/compiler.lisp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/compiler/compiler.lisp b/src/compiler/compiler.lisp index c5c69bd..6773974 100644 --- a/src/compiler/compiler.lisp +++ b/src/compiler/compiler.lisp @@ -773,8 +773,7 @@ (var (,idvar #())) ,cbody) (catch (cf) - (if (and (== (get cf "type") "block") - (== (get cf "id") ,idvar)) + (if (and (instanceof cf |BlockNLX|) (== (get cf "id") ,idvar)) ,(if *multiple-value-p* `(return (method-call |values| "apply" this (call |forcemv| (get cf "values")))) `(return (get cf "values"))) @@ -793,12 +792,10 @@ ;; capture it in a closure. `(selfcall ,(when multiple-value-p `(var (|values| |mv|))) - (throw - (object - "type" "block" - "id" ,(binding-value b) - "values" ,(convert value multiple-value-p) - "message" ,(concat "Return from unknown block '" (symbol-name name) "'.")))))) + (throw (new (call |BlockNLX| + ,(binding-value b) + ,(convert value multiple-value-p) + ,(symbol-name name))))))) (define-compilation catch (id &rest body) (let ((values (if *multiple-value-p* '|values| '|pv|))) -- 1.7.10.4