diff options
Diffstat (limited to 'modules/language/python/compile.scm')
-rw-r--r-- | modules/language/python/compile.scm | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm index a83a781..e013130 100644 --- a/modules/language/python/compile.scm +++ b/modules/language/python/compile.scm @@ -1886,7 +1886,8 @@ #:pure #:use-module ((guile) #:select (@ @@ pk let* lambda call-with-values case-lambda - set! = * + - < <= > >= / pair? + set! = * + - < <= > >= / pair? fluid-set! + fluid-ref syntax-rules let-syntax abort-to-prompt)) #:use-module (language python module python) #:use-module ((language python compile) #:select (pks)) @@ -2220,7 +2221,7 @@ ((_ v) (begin (dont-warn (syntax->datum #'v)) - #'(if (and #f (module-defined? (current-module) 'v)) + #'(if (module-defined? (current-module) 'v) (values) (define! 'v void))))))) @@ -2753,13 +2754,38 @@ (define-syntax qset! (lambda (x) - (pkkk x) + (syntax-case x (@@ @) + ((_ (cons x y) v) + (equal? (syntax->datum #'cons) '(@ (guile) cons)) + #'(let ((w (to-list v))) + (qset! x (car w)) + (qset0! y (cdr w)))) + + ((_ ((@ (guile) q) ()) v) + (equal? (syntax->datum #'q) 'quote) + #'(if (not (null? v)) + (raise (ValueError "too many values to unpack")) + (values))) + + ((_ ((@@ u li) x) v) + (equal? (syntax->datum #'li) 'to-pylist) + #'(let ((w (to-list v))) + (qset! x w))) + + ((_ (ref v a ...) w) + #'(set-x v (a ...) w)) + + ((_ x v) + #'(set! x v))))) + +(define-syntax qset0! + (lambda (x) (syntax-case x (@@ @) ((_ (cons x y) v) (equal? (syntax->datum #'cons) '(@ (guile) cons)) #'(let ((w v)) - (qset! x (car w)) - (qset! y (cdr w)))) + (qset! x (car w)) + (qset0! y (cdr w)))) ((_ ((@ (guile) q) ()) v) (equal? (syntax->datum #'q) 'quote) |