some improvements
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>
Mon, 13 Aug 2018 16:24:39 +0000 (18:24 +0200)
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>
Mon, 13 Aug 2018 16:24:39 +0000 (18:24 +0200)
modules/language/python/compile.scm
modules/language/python/module.scm
modules/language/python/module/os.scm
modules/language/python/module/os/path.scm
modules/language/python/module/python.scm
modules/language/python/module/sys.scm

index c78c86832105940f44cff109521a5c7ee069d4bd..032b1c2a515aebf8ed23d0d2d793f54b6b1bdab0 100644 (file)
     ((#:global . _)
      vs)
                 
-    ((#:import (#:name ((ids ...) . as)) ...)
+    ((#:import (#:name ((ids ...) . as) ...) ...)
      (let lp ((ids ids) (as as) (vs vs))
-       (if (pair? as)
-          (lp (cdr ids) (cdr as)
-              (let ((as  (car as))
-                    (ids (car ids)))
-                (union vs (list (exp '() (if as as (car ids)))))))
-          vs)))
+       (if (pair? ids)
+           (let lp2 ((ids2 (car ids)) (as2 (car as)) (vs vs))
+             (if (pair? as2)
+                 (lp2 (cdr ids2) (cdr as2)
+                      (let ((as2  (car as2))
+                            (ids2 (car ids2)))
+                        (union vs (list (exp '() (if as2 as2 (car ids2)))))))
+                 (lp (cdr ids) (cdr as) vs)))
+           vs)))
 
     ((#:expr-stmt l (#:assign u ... v))
      (union
                                 l))))
                                              
   
-  ((_ (#:name ((ids ...) . as)) ...)
+  ((_ (#:name ((ids ...) . as) ...) ...)
    `(begin
       ,@(map
-        (lambda (ids as)            
-          (let ((path (map (g vs exp) ids)))
-            (if as
-                (exp
-                 vs
-                 `(#:expr-stmt
-                   ((#:test (#:power #f ,as ())))
-                   (#:assign 
-                    ((#:verb
-                      ((@ (language python module) import)
-                       ((@ (language python module) Module)
-                        ',(reverse (append '(language python module) path))
-                        ',(reverse path))
-                       ,(exp vs as)))))))
-                (exp
-                 vs
-                 `(#:expr-stmt
-                   ((#:test (#:power #f ,(car ids) ())))
-                   (#:assign
-                    ((#:verb
-                      ((@ (language python module) import)
-                       ((@ (language python module) Module)
-                        ',(append '(language python module) path))
-                       ,(exp vs (car ids)))))))))))
-        ids as))))
+        (lambda (ids as)
+           `(begin
+              ,@(map (lambda (ids as)
+                       (let ((path (map (g vs exp) ids)))
+                         (if as
+                             (exp
+                              vs
+                              `(#:expr-stmt
+                                ((#:test (#:power #f ,as ())))
+                                (#:assign 
+                                 ((#:verb
+                                   ((@ (language python module) import)
+                                    ((@ (language python module) Module)
+                                     ',(reverse (append
+                                                 '(language python module)
+                                                 path))
+                                     ',(reverse path))
+                                    ,(exp vs as)))))))
+                             (exp
+                              vs
+                              `(#:expr-stmt
+                                ((#:test (#:power #f ,(car ids) ())))
+                                (#:assign
+                                 ((#:verb
+                                   ((@ (language python module) import)
+                                    ((@ (language python module) Module)
+                                     ',(append '(language python module) path))
+                                    ,(exp vs (car ids)))))))))))
+                     ids as)))
+         ids as))))
               
  (#:for
   ((_ e in code . #f)
                 ((arg1 arg2)
                  (let ((v1   (gensym "va"))
                        (v2   (gensym "vb"))
+                       (x    (string->symbol x))
                        (lp  (gensym "lp")))
                    `(let ((,v1 ,(exp vs arg1))
                           (,v2 ,(exp vs arg2)))
                  (let ((v1   (gensym "va"))
                        (v2   (gensym "vb"))
                        (st   (gensym "vs"))
+                       (x    (string->symbol x))
                        (lp  (gensym "lp")))
                    `(let ((,v1 ,(exp vs arg1))
-                          (,st ,(exp vs arg2))
+                          (,st ,(exp vs arg2))                          
                           (,v2 ,(exp vs arg3)))
                       (if (> st 0)
                           (let ,lp ((,x ,v1))
index 3453a2513121baca48111acf92a353eee380a655..aacf3a1b2d721e03c2bc051136df61bbe49d79f2 100644 (file)
@@ -61,8 +61,8 @@
               ((ref it '__update__) pre l nm)
               (rawset self id (Module pre l nm)))
          #f)))
-  
-  (define __init__
+
+    (define __init__
     (case-lambda
      ((self pre l nm)
       (match l
                                 (list-ref l 1)
                                 (list-ref l 2))
                           '(language python module)))
-             (__init__ self (reverse '(language python module)) (cdddr l) '())
-             #f)
+             (__init__ self (reverse '(language python module)) (cdddr l)
+                        '())
+              (__init__ self '() l '()))
          (__init__ self
-                   (map string->symbol
-                        (string-split l #\.)))))))
+                   (append
+                     '(language python module)
+                     (map string->symbol
+                          (string-split l #\.))))))))
+
   (define __update__
     (case-lambda
      ((self pre l nm)
                       (else
                        #f)) a ...)))))
 
-(define (m? x) ((@ (language python module python) isinstance) x Module))
+(define (m? x) ((@ (language python module _python) isinstance) x Module))
 (define (import-f x f . l)
   (if x
       (if (m? x)
index d98550167ee441e3703595f91ebe6546eb47c660..afed9d177caf262ade97ae3924eb088e16f756ad 100644 (file)
@@ -11,6 +11,7 @@
   #:use-module (language python persist)
   #:use-module (language python try)
   #:use-module (language python module stat)
+  #:use-module (language python module)
   #:use-module (language python exceptions)
   #:use-module (language python yield)
   #:use-module (language python range)
@@ -36,8 +37,8 @@
                   setresgid setreuid setresuid getsid setsid setuid strerr
                   umask  uname  unsetenv
                   
-                  path curdir pardir sep extsep altsep pathsep linesep defpath
-                  devnull 
+                  curdir pardir sep extsep altsep pathsep linesep defpath
+                  devnull path
                   
                   dopen close closerange device_encoding dup dup2 fchmod fchown
                   fdatasync fpathconf fstat fstatvfs fsynch ftruncate isatty
               (bytevector-ieee-double-ref v 8  (native-endianness))
               (bytevector-ieee-double-ref v 16 (native-endianness)))))))
 
-(define path   "posixpath")
 (define curdir ".")
 (define pardir "..")
 (define sep    "/")
 (define (getrandom . l)
   (py-list (apply getrandom_ l)))
 
+(define path "posixpath")
index 0c1abde49456ba3a985d29d291b1cc246dc233b7..1853c863b856f0ef50c22b0a9c8ec02525e0dace 100644 (file)
@@ -15,7 +15,7 @@
                     getctime getsize isabs isfile isdir islink ismount
                     normcase normpath realpath relpath samefile sameopenfile
                     samestat split splitdrive splitext splitunc
-                    supports_unicode_filenames))
+                    supports_unicode_filenames join))
 
 (define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
 
index 3ae04e73ee7077a7c1e48746ecb59520e40c380d..4c274ead98ece2714db7990409f9dc89e7cf1eec 100644 (file)
@@ -1,6 +1,7 @@
 (define-module (language python module python )
   #:use-module (language python module _python)
   #:use-module (language python compile       )
+  #:use-module (language python module        )
   #:use-module ((language python format2) #:select ()))
 
 (define-syntax re-export-all
@@ -18,4 +19,7 @@
               (module-re-export! (current-module) ((@ (guile) list) name))))
         (resolve-interface 'iface)))]))
 
+(set! (@ (language python module os) path)
+  (Module '(language python module os path)))
+
 (re-export-all (language python module _python))
index 7108b45b6bff9061fad6a3d2aeac7960e4b9a912..1ca3992aa8a97ff218a42627f62f55cfe9546ac1 100644 (file)
@@ -9,7 +9,8 @@
                   __stdin__ __stdout__ __stderr__
                   exit version_info version api_version
                    warnoptions winver _xoption
-                   tarcebacklimit platform maxsize hash_info))
+                   tarcebacklimit platform maxsize hash_info
+                   base_prefix))
 
 (define-syntax stdin
   (lambda (x)
@@ -45,7 +46,7 @@
 (define abiflags         '(""))
 (define argv              (command-line))
 (define base_exec_prefix  #f)
-(define base_prefix       #f)
+(define base_prefix       "/usr")
 (define byteorder         (if (eq? (native-endianness) 'little)
                              "little"
                              "big"))