lists improvements ordering and dir
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>
Thu, 28 Sep 2017 21:25:07 +0000 (23:25 +0200)
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>
Thu, 28 Sep 2017 21:25:07 +0000 (23:25 +0200)
modules/language/python/compile.scm
modules/language/python/dir.scm
modules/language/python/list.scm
modules/language/python/string.scm
modules/oop/pf-objects.scm

index 766c718d591e555a3171fc62ae98cc969061d2fb..a338bf9ccbe45710486eff23cda058d80cc8eb99 100644 (file)
                            ,class
                            ,(map (lambda (x) `(,(O 'get-class) ,x)) parents)
                            #:const
+                           ()
+                           #:dynamic
                            ,(match (exp vs defs)
                               (('begin . l)
                                l)
                               ((('begin . l))
                                l)
-                              (l l))
-                           #:dynamic
-                           ())))))))
+                              (l l)))))))))
 
  (#:scm
   ((_ (#:string _ s)) (with-input-from-string s read)))
 (define-syntax set-x-2
   (syntax-rules ()
     ((_ v (#:identifier x) val)
-     (set v 'x val)) 
+     (set v x val)) 
     ((_ v (#:vecref n) val)
      (pylist-set! v n val))
     ((_ v (#:vecsub x ...) val)
index ecd85cf7bb97d03cc70077c403d8f7510c064d6f..2f23e3582e5432495851ed29316390552095f380 100644 (file)
@@ -13,8 +13,8 @@
 (define-method (dir) (pylist))
 
 (define (get-from-class c f)
-  (let lp ((c c))
-    (hash-for-each f c)
+  (let lp ((c c))    
+    (hash-for-each f (slot-ref c 'h))
     (let lpp ((pl (ref c '__parents__)))
       (if (pair? pl)
           (begin
@@ -23,7 +23,7 @@
 
 (define (get-from-class-f c f)
   (let lp ((c c))
-    (vhash-fold f 0 c)
+    (vhash-fold f 0 (slot-ref c 'h))
     (let lpp ((pl (ref c '__parents__)))
       (if (pair? pl)
           (begin
             (lpp (cdr pl)))))))
 
 (define-method (dir (o <p>))
-  (if (pyclass? o)
+  (if (not (pyclass? o))
       (aif it (ref o '__dir__)
            (it)
            (aif it (ref o '__dict__)
                 (let ((l (pylist)))
                   (for ((k v : it)) ()
                        (pylist-append! l k))
+                  (pylist-sort! l)
                   l)
                 (let* ((h (make-hash-table))
                        (c (ref o '__class__))
-                       (l (pylist))
-                       (f (lambda (k v) (pylist-append! h k #t))))
-                  (hash-for-each f o)
+                       (l '())
+                       (f (lambda (k v) (set! l (cons k l)))))
+                  (hash-for-each f (slot-ref o 'h))
                   (get-from-class c f)
                   (hash-for-each (lambda (k v) (pylist-append! l k)) h)
-                  (pylist-sort! l)
-                  l)))
+                  (to-pylist (map symbol->string (sort l <))))))
       (let* ((h (make-hash-table))
              (c o)
              (l '())
-             (f (lambda (k v) (pylist-append! h k #t))))
+             (f (lambda (k v) (hash-set! h k #t))))
         (get-from-class c f)
         (hash-for-each (lambda (k v) (set! l (cons k l))) h)
         (to-pylist (map symbol->string (sort l <))))))
 
 (define-method (dir (o <pf>))
-  (if (pyclass? o)
+  (if (not (pyclass? o))
       (aif it (ref o '__dir__)
            (it)
            (aif it (ref o '__dict__)
                 (let ((l (pylist)))
                   (for ((k v : it)) ()
                        (pylist-append! l k))
+                  (pylist-sort! l)
                   l)
                 (let* ((h (make-hash-table))
                        (c (ref o '__class__))
-                       (l (pylist))
-                       (f (lambda (k v s) (pylist-append! h k #t))))
-                  (vhash-fold f 0 o)
+                       (l '())
+                       (f (lambda (k v s) (set! l (cons k l)))))
+                  (vhash-fold f 0 (slot-ref o 'h))
                   (get-from-class-f c f)
                   (hash-for-each (lambda (k v) (pylist-append! l k)) h)
-                  (pylist-sort! l)
-                  l)))
+                  (to-pylist (map symbol->string (sort l <))))))      
       (let* ((h (make-hash-table))
              (c o)
              (l '())
         (hash-for-each (lambda (k v) (set! l (cons k l))) h)
         (to-pylist (map symbol->string (sort l <))))))
 
-(define-method (dir (o <py-list>     )) (pylist-listing))
+(define-method (dir (o <py-list>     ))
+  (let ((l1 (pylist-listing)))
+    (if (is-a? o <p>)
+        (let* ((l2 (next-method))
+               (l  (+ l1 l2)))
+          (pylist-sort! l)
+          l))))
+          
+    
 (define-method (dir (o <hashtable>   )) pyhash-listing)
 (define-method (dir (o <py-hashtable>)) pyhash-listing)
 (define-method (dir (o <string>      )) string-listing)
index 532868b72fa78b6c31f081b4e83ddcb87eefed33..779ed7350f63339ef8a2095f7a26776e0a151c1a 100644 (file)
                  __rmul__
                  __radd__
                  __repr__
-                 __containes__
+                 __contains__
                  __getattr__
                  __setattr__
                  __delattr__
index 8eb84aab832ff26e72688fb233c6c4c36cee5d42..27dd8b87f5f09577256510d1d8bdd1ab3e27f9ec 100644 (file)
               w
               (pylist-slice w 0 k 1))))))
 
+(define-syntax-rule (a b x y) (b (symbol->string x) (symbol->string y)))
+
 (define-method (<  (s1 <string>) (s2 <string>)) (string-ci<  s1 s2))
 (define-method (<= (s1 <string>) (s2 <string>)) (string-ci<= s1 s2))
 (define-method (>  (s1 <string>) (s2 <string>)) (string-ci>  s1 s2))
 (define-method (>= (s1 <string>) (s2 <string>)) (string-ci>= s1 s2))
 
+(define-method (<  (s1 <symbol>) (s2 <symbol>)) (a string-ci<  s1 s2))
+(define-method (<= (s1 <symbol>) (s2 <symbol>)) (a string-ci<= s1 s2))
+(define-method (>  (s1 <symbol>) (s2 <symbol>)) (a string-ci>  s1 s2))
+(define-method (>= (s1 <symbol>) (s2 <symbol>)) (a string-ci>= s1 s2))
+
+
 (define-py (py-zfill zfill s width)
   (let* ((n (len s))
          (w (pk (pylist-slice s 0 n 1))))
index e84605be449024eda867935a4fec9cd2767b693c..68475243fc085c84f0c819d67455f4269da1ad16 100644 (file)
@@ -686,10 +686,5 @@ explicitly tell it to not update etc.
                  (code ...))))
 
 (define (pyclass? x)
-   (and (is-a? x <p>) (not (ref x '__class__))))
+  (and (is-a? x <p>) (not (ref x '__class__))))
 
-
-
-
-
-