os.path compiles
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>
Sat, 31 Mar 2018 16:16:02 +0000 (18:16 +0200)
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>
Sat, 31 Mar 2018 16:16:02 +0000 (18:16 +0200)
modules/language/python/module/collections/abc.scm
modules/language/python/module/itertools.scm
modules/language/python/module/os.scm
modules/language/python/module/os/path.scm
modules/language/python/module/pwd.scm

index d526e73f2f7367a07e10a650bdb50e3687cb3a7b..4bd242d2c5965726c20c296c1c8b640768053ba8 100644 (file)
       ((ref (ref self '_mapping) 'values)))))
 
 
-(name-object Container Hashable Iterable Iterator Reversable Generator
-            Sized Callable Collection Sequence MutableSequence
-            ByteString Set MutableSet Mapping MutableMapping
-            MappingView ItemsView KeysView ValuesView)
-
-
index 76794595902fc4aba6e3061ea27535e25c33d186..c4958d174a356c3de5dd304ed9fc7af4acf73c22 100644 (file)
 (define starmap
   (make-generator (f seq)
    (lambda (yield f seq)
-     (for ((x : seq)) () (yield (f x))))))
+     (for ((x : seq)) () (yield (apply f x))))))
 
 (define takewhile
   (make-generator (pred seq)
index a735f131ade43fb267580909e0dba4aa717f88d4..8791626184951a1c57b9e34ee5e9ee0c4c6f4424 100644 (file)
   #:use-module ((language python module python)
                 #:select ((open . builtin:open)))
   #:use-module (language python list)
-  #:export (error name ctermid environ environb chdir fchdir getcwd
-                  fsencode fdencode fspath PathLike getenv getenvb
+  #:replace (getcwd getuid getenv)
+  #:export (error name ctermid environ environb chdir fchdir 
+                  fsencode fdencode fspath PathLike getenvb
                   get_exec_path getgid getegid geteuid fdopen
                   getgroups getgrouplist getlogin getpgid getpgrp getpid
                   getppid PRIO_PROCESS PRIO_PRGRP PRIO_USER getpriority
-                  getresgid getuid initgroups putenv setegid seteuid
+                  getresgid initgroups putenv setegid seteuid
                   setgid setgroups setpgrp setpgid setpriority setregid
                   setresgid setreuid setresuid getsid setsid setuid strerr
                   umask  uname  unsetenv
index 8846bd51e339192dd23fe27c1593e15bb871c36d..4cf96cfb1dd95a2bdefb613daf6e61f704204fae 100644 (file)
@@ -2,9 +2,14 @@
   #:use-module (language python module os)
   #:use-module (language python module pwd)
   #:use-module (language python module errno)
+  #:use-module (language python module stat)
   #:use-module (language python for)
+  #:use-module (language python try)
+  #:use-module (system foreign)
+  #:use-module (parser stis-parser)
   #:use-module (language python exceptions)
-  #:use-module (oop pg-objects)
+  #:use-module (oop pf-objects)
+  #:use-module (ice-9 match)
   #:export (abspath basename commonpath commonprefix dirname exists
                     lexists expanduser expandvars getatime getmtime
                     getctime getsize isabs isfile isdir islink ismount
 (define (basename path) (ca ((@ (guile) basename) (path-it path))))
 
 (define (commonprefix paths)
-  (letrec ((l (for ((p paths)) ((l '()))
+  (letrec ((l (for ((p paths)) ((l '()))
                    (cons (string->list (normpath p)) l)
                    #:final l))
            (f (lambda (l)
-                (let lp ((l l)) ((r #f) (d '()))
+                (let lp ((l l) (r #f) (d '()))
                      (match l
                        ((() . _) '())
                        (((x . u) . l)
@@ -53,7 +58,7 @@
 
 (define (commonpath paths)
   (define kind
-    (for ((p paths)) ((e #f))
+    (for ((p paths)) ((e #f))
          (let ((x (if (isabs (path-it p)) 'abs 'rel)))
            (if e
                (if (eq? e x)
 
   (if (not kind) (raise ValueError "No paths"))
   
-  (letrec ((l (for ((p paths)) ((l '()))
+  (letrec ((l (for ((p paths)) ((l '()))
                    (cons (string-split (normpath p) #\/) l)
                    #:final l))
            (f (lambda (l)
-                (let lp ((l l)) ((r #f) (d '()))
+                (let lp ((l l) (r #f) (d '()))
                      (match l
                        ((() . _) '())
                        (((x . u) . l)
                 (string-join (append (string-split (lookup-self) "/")
                                      (cdr (string-split path #\/)))))))))
 
-(define f-var (f-mk (f-or!
-                     (f-seq (f-tag! "$") (f+ (f-reg! "[a-zA-Z0-9]")))
-                     (f-seq (f-tag! "$") (f-tag "{") (f+ (f-not! (f-tag "}")))
-                            (f-tag "}")))))
+(define f-var (mk-token
+               (f-or!
+                (f-seq (f-tag! "$") (f+ (f-reg! "[a-zA-Z0-9]")))
+                (f-seq (f-tag! "$") (f-tag "{") (f+ (f-not! (f-tag "}")))
+                       (f-tag "}")))))
+
+(define f-other (mk-token (f* (f-not! f-var))))
+
+(define f-f (f-cons f-other (ff* (f-seq f-var f-other))))
+
 (define (expandvars p)
-  (let lp ((l (f-split (path-it p) f-var)) (r '()))
+  (let lp ((l (parse (path-it p) f-f)) (r '()))
     (match l
       ((a b . l)
        (lp l (cons* (getenv b) a r)))
              (stat:dev ((@ (guile) stat) q)))))))
 
 
-  (normpath (string-join (map path-it l) "/")))
-
 (define (normcase x) x)
 
 (define join     (@@ (language python module os) path:join))
               (free s)
               ret))))))
 
-(define* (relpath p #:optional (start curpath))
-  (define l1 (string-aplit (realpath (path-it p)) #\/))
-  (define l2 (string-split (realpath start)) #\/)
+(define* (relpath p #:optional (start curdir))
+  (define (reduce f s l)
+    (if (pair? l)
+        (reduce f (f (car l) s) (cdr l))
+        s))
+  (define l1 (string-split (realpath (path-it p)) #\/))
+  (define l2 (string-split (realpath start) #\/))
   (define red (lambda (x s) (cons ".." s)))
   (let lp ((l1 l1) (l2 l2))
     (match (cons l1 l2)
index 0996db386cddfcb275d1277f4b06c2eb4025e7b8..3922ac91f04f47ebe85223112cc652849d2270df 100644 (file)
@@ -3,7 +3,9 @@
   #:use-module (language python module collections abc)
   #:use-module (language python exceptions)
   #:use-module (language python yield)
-  #:export (getpwuid getpwname getpwall))
+  #:use-module (language python try)
+  #:replace (getpwuid)
+  #:export (getpwname getpwall))
 
 (define-python-class PWD (Sequence)
   (define __init__