From 8223db0b1a660ad10830e9a5a2fe71858cf52481 Mon Sep 17 00:00:00 2001 From: Stefan Israelsson Tampe Date: Mon, 3 Sep 2018 23:53:19 +0200 Subject: bytes64 copmiles and testprogram works --- modules/language/python/bytes.scm | 4 ++-- modules/language/python/compile.scm | 23 +++++++++++++++++------ modules/language/python/module/_socket.scm | 10 +++++++++- modules/language/python/module/binascii.scm | 20 +++++++++++--------- modules/language/python/module/python.scm | 4 +++- modules/language/python/module/random.py | 4 ++-- modules/oop/pf-objects.scm | 16 ++++++++-------- 7 files changed, 52 insertions(+), 29 deletions(-) (limited to 'modules') diff --git a/modules/language/python/bytes.scm b/modules/language/python/bytes.scm index ceaa5b6..1e3a0cd 100644 --- a/modules/language/python/bytes.scm +++ b/modules/language/python/bytes.scm @@ -121,7 +121,7 @@ (else (for ((x : s)) ((r '())) (cons (b-char x) r) - + #:final (let* ((n (length r)) (bytes (b-make n))) @@ -349,7 +349,7 @@ (raise IndexError))) (define-py* slice (pylist-slice bytes o N n1 n2 n3) - (define (f n) (if (< n 0) (+ N n) n)) + (define (f n) (max 0 (min N (if (< n 0) (+ N n) n)))) (let* ((n1 (f (if (eq? n1 None) 0 n1))) (n2 (f (if (eq? n2 None) N n2))) diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm index d715c8d..3f02f38 100644 --- a/modules/language/python/compile.scm +++ b/modules/language/python/compile.scm @@ -1116,8 +1116,8 @@ ,@(if else `((else ,(exp vs else))) '())))) (#:suite - ((_ #:stmt . l) (cons* (G 'begin) `(,(G 'values)) (map (g vs exp) l))) - ((_ . l) (list (G 'begin) `(,(G 'values)) (map (g vs exp) l)))) + ((_ #:stmt . l) (cons (G 'begin) (map (g vs exp) l))) + ((_ . l) (cons (G 'begin) (map (g vs exp) l)))) (#:classdef ((_ class parents code) @@ -2583,8 +2583,14 @@ (syntax-case x (quote __dict__) ((_ v) #'v) - ((_ v (#:fastfkn-ref f _) . l) - #'(ref-x (lambda x (if (pyclass? v) (apply f x) (apply f v x))) . l)) + ((_ v (#:fastfkn-ref f tag) . l) + #'(let ((vv v)) + (if (is-a? vv

) + (ref-x v (#:identifier tag) . l) + (ref-x (lambda x + (if (pyclass? v) + (apply f x) + (apply f v x))) . l)))) ((_ v (#:fast-id f _) . l) #'(ref-x (f v) . l)) ((_ v (#:identifier '__dict__) . l) @@ -2728,7 +2734,11 @@ (cons x l) l)) #:final l))))) - + +(define (pkkk x) + (pk (syntax->datum x)) + x) + (define-syntax qset! (lambda (x) (syntax-case x () @@ -2740,7 +2750,8 @@ ((_ '() v) #'(if (not (null? v)) - (raise (ValueError "too many values to unpack")))) + (raise (ValueError "too many values to unpack")) + (values))) ((_ x v) #'(set! x v))))) diff --git a/modules/language/python/module/_socket.scm b/modules/language/python/module/_socket.scm index 5d7730b..000428f 100644 --- a/modules/language/python/module/_socket.scm +++ b/modules/language/python/module/_socket.scm @@ -128,7 +128,9 @@ gethostbyname_ex gethostname getnameinfo getprotobyn getservbyname htonl htons if_indextoname if_nameindex if_nametoindex inet_aton inet_ntop ntohl setdefaulttimeout - getservbyport + getservbyport gethostbyaddr + + error timeout )) (define-syntax-rule (aif it p . l) (let ((it p)) (if it . l))) @@ -471,6 +473,9 @@ (define scm-socket (@ (guile) socket)) +(define-python-class error (Exception)) +(define-python-class timeout (Exception)) + (define-python-class socket () (define __init__ (lam (self (= family AF_INET) (= type SOCK_STREAM) (= proto 0) @@ -630,6 +635,9 @@ (define (gethostbyname host) ((@ (guile) gethostbyname) host)) +(define (gethostbyaddr addr) + ((@ (guile) gethostbyname) addr)) + (define (gethostbyname_ex host) (error "not implemented")) diff --git a/modules/language/python/module/binascii.scm b/modules/language/python/module/binascii.scm index bda660e..ab3dd69 100644 --- a/modules/language/python/module/binascii.scm +++ b/modules/language/python/module/binascii.scm @@ -138,16 +138,19 @@ (bytes (list)) (let lp ((i 0) (r '())) (cond + ((>= i n) + (bytes (reverse r))) + ((or (= (get1 n i) 10) (= (get1 n i) 13)) (lp (+ i 1) r)) - ((< i n) + (else (let ((b1 (get1 n i)) (b2 (get1 n (+ i 1))) - (b3 (get1 n (+ i 2))) - (b4 (get1 n (+ i 3)))) + (b3 (get1 n (+ i 2))) + (b4 (get1 n (+ i 3)))) (let ((b1 (get2 b1)) - (b2 (get2 b1))) + (b2 (get2 b2))) (if (= x=x b4) (if (= x=x b3) (let* ((x (logior b1 (ash b2 6))) @@ -164,9 +167,8 @@ (ch1 (logand x #xff)) (ch2 (ash (logand x #xff00) -8)) (ch3 (ash (logand x #xff0000) -16))) - (lp (+ i 4) (cons* ch3 ch2 ch1 r))))))) - (else - (bytes (reverse (cons 10 r))))))))) + (lp (+ i 4) (cons* ch3 ch2 ch1 r)))))))))))) + (def (b2a_base64 data (= newline #t)) (define x=x (char->integer #\=)) @@ -182,7 +184,7 @@ (define (get2 i) (bytevector-u8-ref to64 i)) (cond - ((= i (- n 1)) + ((= i (- n 2)) (let* ((b1 (get i)) (b2 (get (+ i 1))) (x (logior b1 (ash b2 8))) @@ -192,7 +194,7 @@ (a4 x=x)) (lp (+ i 3) (cons* a4 a3 a2 a1 r)))) - ((= i (- n 2)) + ((= i (- n 1)) (let* ((x (get i)) (a1 (get2 (logand #x3f x))) (a2 (get2 (ash (logand #xfc0 x) -6))) diff --git a/modules/language/python/module/python.scm b/modules/language/python/module/python.scm index f105f22..00472b3 100644 --- a/modules/language/python/module/python.scm +++ b/modules/language/python/module/python.scm @@ -2,7 +2,9 @@ #:use-module (language python module _python) #:use-module (language python compile ) #:use-module (language python module ) - #:use-module ((language python format2) #:select ())) + #:use-module (language python memoryview ) + #:use-module ((language python format2) #:select ()) + #:re-export (memoryview)) (define-syntax re-export-all (syntax-rules () diff --git a/modules/language/python/module/random.py b/modules/language/python/module/random.py index be8f9ef..c88d1cf 100644 --- a/modules/language/python/module/random.py +++ b/modules/language/python/module/random.py @@ -38,6 +38,7 @@ General notes on the underlying Mersenne Twister core generator: and is, therefore, threadsafe. """ + from warnings import warn as _warn from types import MethodType as _MethodType, BuiltinMethodType as _BuiltinMethodType from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil @@ -62,7 +63,6 @@ SG_MAGICCONST = 1.0 + _log(4.5) BPF = 53 # Number of bits in a float RECIP_BPF = 2**-BPF - # Translated by Guido van Rossum from C source provided by # Adrian Baddeley. Adapted by Raymond Hettinger for use with # the Mersenne Twister and os.urandom() core generators. @@ -93,7 +93,7 @@ class Random (_random.Random): self.seed(x) self.gauss_next = False - + def seed(self, a=None, version=2): """Initialize internal state from hashable object. diff --git a/modules/oop/pf-objects.scm b/modules/oop/pf-objects.scm index 47dea90..988e282 100644 --- a/modules/oop/pf-objects.scm +++ b/modules/oop/pf-objects.scm @@ -1198,14 +1198,14 @@ explicitly tell it to not update etc. #'(let () (define name (letruc2 ((dname (make-up dval)) ...) - body - (let ((ret - (make-p-class 'name doc - parents - (lambda (dict) - (pylist-set! dict 'dname dname) - ... - dict)))) + body + (let ((ret + (make-p-class 'name doc + parents + (lambda (dict) + (pylist-set! dict 'dname dname) + ... + dict)))) (begin (module-define! (current-module) 'ddname dname) (name-object ddname)) -- cgit v1.2.3