summaryrefslogtreecommitdiff
path: root/modules/language/python/compile.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/compile.scm')
-rw-r--r--modules/language/python/compile.scm36
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)