relative references in import
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>
Wed, 12 Sep 2018 19:27:03 +0000 (21:27 +0200)
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>
Wed, 12 Sep 2018 19:27:03 +0000 (21:27 +0200)
modules/language/python/compile.scm
modules/language/python/module/xml/etree/ElementInclude.py

index b4ba58f..a45cc48 100644 (file)
     ((x)
      (if (not (fluid-ref *doc*))
          (fluid-set! *doc* x)))))
-  
+
+(define (u-it m)
+  (if (and (eq? (list-ref m 0) 'language)
+           (eq? (list-ref m 1) 'python)
+           (eq? (list-ref m 0) 'module))
+      (cddr m)
+      '()))
 
 (define (tr-comp op x y)
   (match op
                 (lambda x #f))))
        (if (eq? ? #t) (for-each dont-warn (get-exported-symbols l)))       
        `(,(C 'use) ,? ,l ,l))))
+
+  ((_ (#:from (("." . nn) . nm) . #f))
+   (let* ((u   (module-name (current-module)))
+          (u   (reverse (list-cdr-ref (reverse (u-it u)) (length nn))))
+          (xl  (append u (map (lambda (nm) (exp vs nm)) nm)))
+          (l  `(language python module ,@xl)))
+
+     ;; Make sure to load the module in
+     (let ((? (catch #t
+                (lambda () (Module (reverse l) (reverse xl)) #t)
+                (lambda x #f))))
+       (if (eq? ? #t) (for-each dont-warn (get-exported-symbols l)))       
+       `(,(C 'use) ,? ,l ,l))))
+
+  ((_ (#:from ("." . nn) . #f))
+   (let* ((nm  '())
+          (u   (module-name (current-module)))
+          (u   (reverse (list-cdr-ref (reverse (u-it u)) (length nn))))
+          (xl  (append u (map (lambda (nm) (exp vs nm)) nm)))
+          (l  `(language python module ,@xl)))
+
+     ;; Make sure to load the module in
+     (let ((? (catch #t
+                (lambda () (Module (reverse l) (reverse xl)) #t)
+                (lambda x #f))))
+       (if (eq? ? #t) (for-each dont-warn (get-exported-symbols l)))       
+       `(,(C 'use) ,? ,l ,l))))
   
   ((_ (#:from (() . nm)  l))
    ;; Make sure to load the module in
                      (dont-warn s2)
                      (cons s1 s2)))))
               l)))))
-                                             
+
+  ((_ (#:from (("." . nn) . nm)  l))
+   ;; Make sure to load the module in
+   (let* ((u   (module-name (current-module)))
+          (u   (reverse (list-cdr-ref (reverse (u-it u)) (length nn))))
+          (xl  (append u (map (lambda (nm) (exp vs nm)) nm)))
+          (ll `(language python module ,@xl)))
+     
+     `(,(C 'use) #t ()
+       (,ll
+        #:select
+        ,(map (lambda (x)
+                (match x
+                  ((a . #f)
+                   (let ((s (exp vs a)))
+                     (fluid-set! ignore
+                                 (cons s (fluid-ref ignore)))
+                     (dont-warn s)
+                     s))
+                  
+                  ((a . b)
+                   (let ((s1 (exp vs a))
+                         (s2 (exp vs b)))
+                     (fluid-set! ignore
+                                 (cons s2
+                                       (fluid-ref ignore)))
+                     (dont-warn s2)
+                     (cons s1 s2)))))
+              l)))))
+
+    ((_ (#:from ("." . nn) l))
+     ;; Make sure to load the module in
+     (let* ((nm  '())
+            (u   (module-name (current-module)))
+            (u   (reverse (list-cdr-ref (reverse (u-it u)) (length nn))))
+            (xl  (append u (map (lambda (nm) (exp vs nm)) nm)))
+            (ll `(language python module ,@xl)))
+     
+       `(,(C 'use) #t ()
+         (,ll
+          #:select
+          ,(map (lambda (x)
+                  (match x
+                    ((a . #f)
+                     (let ((s (exp vs a)))
+                       (fluid-set! ignore
+                                   (cons s (fluid-ref ignore)))
+                       (dont-warn s)
+                       s))
+                    
+                    ((a . b)
+                     (let ((s1 (exp vs a))
+                           (s2 (exp vs b)))
+                       (fluid-set! ignore
+                                   (cons s2
+                                         (fluid-ref ignore)))
+                       (dont-warn s2)
+                       (cons s1 s2)))))
+                l)))))
+
   
   ((_ (#:name ((ids ...) . as) ...) ...)
    `(,(G 'begin)
index ed4b682..f69611d 100644 (file)
@@ -51,7 +51,7 @@ module(xml,etree,ElementInclude)
 ##
 
 import copy
-from . import ElementTree
+import xml.etree.ElementTree as ElementTree
 
 XINCLUDE = "{http://www.w3.org/2001/XInclude}"