symbol warnings removed for imported symbols
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>
Mon, 20 Aug 2018 17:18:20 +0000 (19:18 +0200)
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>
Mon, 20 Aug 2018 17:18:20 +0000 (19:18 +0200)
modules/language/python/compile.scm
modules/language/python/exceptions.scm
modules/language/python/module/sys.scm

index 3bf81ef282b5f1a0e7f78110c7e49d50f77247f4..619ef1bdb4c02ab52ac70e86e6e2127dd12e3771 100644 (file)
@@ -21,7 +21,7 @@
   #:use-module ((language python format2) #:select (fnm))
   #:use-module ((language python with) #:select ())
   #:use-module (ice-9 pretty-print)
-  #:export (comp))
+  #:export (comp exit-fluid exit-prompt))
 
 (define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
 
 (define-inlinable (H   x) `(@  (language python hash)    ,x))
 (define-inlinable (W   x) `(@  (language python with)    ,x))
 
+(define exit-prompt (make-prompt-tag))
+(define exit-fluid  (make-fluid #f))
+
+(define-syntax-rule (with-exit code ...)
+  (with-fluids ((exit-fluid #t))
+    (call-with-prompt exit-prompt
+      (lambda () code ...)
+      (lambda (k val)
+        (if (not (= val 0))
+            (format #t "exit with error ~a~%" val))))))
+
+(define (get-exported-symbols x)
+  (aif it (resolve-module x)
+       (aif it (module-public-interface it)
+            (let ((l '()))
+              (module-for-each
+               (lambda (k b)
+                 (set! l (cons k l)))
+               it)
+              l)
+            '())
+       '()))
+
 (define cvalues (G 'values))
 
 (define-syntax-rule (wth code)
       (fold f (f (car l) init) (cdr l))
       init))
 
+(define do-pr #t)
+
 (define (pr . x)
-  (define port (open-file "/home/stis/src/python-on-guile/log.txt" "a"))
-  (with-output-to-port port
-    (lambda ()
-      (pretty-print (syntax->datum x))))
-  (close port)
+  (if do-pr
+      (let ()
+        (define port (open-file "/home/stis/src/python-on-guile/log.txt" "a"))
+        (with-output-to-port port
+          (lambda ()
+            (pretty-print (syntax->datum x))))
+        (close port)))
   (car (reverse x)))
 
 (define (pf x)
  
  (#:import
   ((_ (#:from (() . nm) . #f))
-   `(,(C 'use) (language python module ,@(map (lambda (nm) (exp vs nm))
-                                               nm))))
+   (let* ((xl  (map (lambda (nm) (exp vs nm)) nm))
+          (l `(language python module ,@xl)))
+
+     ;; Make sure to load the module in
+     (catch #t
+       (lambda () (Module (reverse l) (reverse xl)))
+       (lambda x #f))
+     
+     (for-each dont-warn (get-exported-symbols l))
+     
+     `(,(C 'use) ,l)))
+  
   ((_ (#:from (() . nm)  l))
-   `(,(C 'use)  ((language python module ,@(map (lambda (nm) (exp vs nm))
-                                                nm))
-                 #: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))
+   `(,(C 'use)  ((language python module ,@(map (lambda (nm) (exp vs nm)) nm))
+                 #: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))))
+                           ((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) ...) ...)
        (if (pair? start)
            (set! x (cdr x)))
 
-       (clear-warning-data)
-       
        (let* ((globs (get-globals x))
               (e     (map (g globs exp) x)))
          `(begin
             ,@start
-            (fluid-set! (@@ (system base message) %dont-warn-list) '())
             (define ,fnm (make-hash-table))
             ,@(map (lambda (s)
                      (if (member s (fluid-ref ignore))
         (if (pair? start)
             (set! x (cdr x)))
 
-       (clear-warning-data)
-       
         (let* ((globs (get-globals x))
                (res   (gensym "res"))
                (e     (map (g globs exp) x)))
           `(begin
              ,@start
-             (fluid-set! (@@ (system base message) %dont-warn-list) '())
              ,@(map (lambda (s)
                       (if (member s (fluid-ref ignore))
                           `(,cvalues)
                           `(,(C 'var) ,s))) globs)
-             ,@e)))))
+             (,(C 'with-exit) ,@e))))))
               
                     
 
index 990f9c31bc3254438629c0156eabf5f5997bc532..80d1e7d4a7386293d4ce33aeca56e5ec8c38bcaa 100644 (file)
@@ -12,7 +12,9 @@
                           InterruptedError BaseException
                          ZeroDivisionError ArithmeticError
                          OverflowError RecursionError
-                         Warning DeprecationWarning BytesWarning))
+                         Warning DeprecationWarning BytesWarning
+                          UnicodeDecodeError LookupError IndentationError
+                          KeyboardInterrupt))
 
 (define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
 
 
 (define StopIteration           'StopIteration)
 (define GeneratorExit           'GeneratorExit)
-(define-er  OverflowError       'OverflowError)
-(define-er  RecursionError      'RecursionError)
-(define-er  ArithmeticError     'ArithmeticError)
-(define-er  BaseException       'BaseException)
-(define-er  ZeroDivisionError   'ZeroDivisionError)
-(define-er SystemException     'SystemException)
-(define-er RuntimeError        'RuntimeError)
-(define-er IndexError          'IndexError)
-(define-er ArgumentError       'IndexError)
-(define-er ValueError          'ValueError)
+
+(define-er UnicodeDecodeError   'UnicodeDecodeError)
+(define-er LookupError          'LookupError)
+(define-er IndentationError     'IndentationError)
+(define-er OverflowError        'OverflowError)
+(define-er KeyboardInterrupt    'KeyboardInterrupt)
+(define-er RecursionError       'RecursionError)
+(define-er ArithmeticError      'ArithmeticError)
+(define-er BaseException        'BaseException)
+(define-er ZeroDivisionError    'ZeroDivisionError)
+(define-er SystemException      'SystemException)
+(define-er RuntimeError         'RuntimeError)
+(define-er IndexError           'IndexError)
+(define-er ArgumentError        'IndexError)
+(define-er ValueError           'ValueError)
+
 (define None                    'None)
-(define-er KeyError            'KeyError)
-(define-er TypeError           'TypeError)
-(define-er AttributeError      'AttributeError)
-(define-er SyntaxError         'SyntaxError)
-(define-er OSError             'OSError)
-(define-er ProcessLookupError  'ProcessLookupError)
-(define-er PermissionError     'PermissionError)
-(define-er NotImplementedError 'NotImplementedError)
-(define-er RunTimeError        'RunTimeError)
+
+(define-er KeyError             'KeyError)
+(define-er TypeError            'TypeError)
+(define-er AttributeError       'AttributeError)
+(define-er SyntaxError          'SyntaxError)
+(define-er OSError              'OSError)
+(define-er ProcessLookupError   'ProcessLookupError)
+(define-er PermissionError      'PermissionError)
+(define-er NotImplementedError  'NotImplementedError)
+(define-er RunTimeError         'RunTimeError)
+
 (define AssertionError          'AssertionError)
-(define-er ImportError         'ImportError)      
-(define-er ModuleNotFoundError (ImportError) 'ModuleNotFoundError)
-(define-er BlockingIOError     'BlockingIOError)
-(define-er InterruptedError    'OSError)
+(define-er ImportError          'ImportError)      
+(define-er ModuleNotFoundError  (ImportError) 'ModuleNotFoundError)
+(define-er BlockingIOError      'BlockingIOError)
+(define-er InterruptedError     'OSError)
 
 (define NotImplemented (list 'NotImplemented))
 
index d24b7e2677412345b251fef843dab9272cf50790..aa4a166ad7483bf09b6b4e25319f898198e4de84 100644 (file)
@@ -2,6 +2,7 @@
   #:use-module (rnrs bytevectors)
   #:use-module (language python exceptions)
   #:use-module (language python hash)
+  #:use-module (language python compile)
   #:use-module (language python module io)
   #:use-module (language python try)
   #:use-module (language python string)
@@ -94,8 +95,9 @@
 (define executable "")
 (define exit
   (lambda (arg)
-    (raise (SystemException ((@ (guile) format)
-                             #f "exit called with arg ~a" arg)))))
+    (if (fluid-ref exit-fluid)
+        (abort-to-prompt exit-prompt arg)
+        ((@ (guile) exit) arg))))
 
 (define flags '())
 (define float_info '())