summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-09-03 23:53:19 +0200
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-09-03 23:53:19 +0200
commit8223db0b1a660ad10830e9a5a2fe71858cf52481 (patch)
tree28b1659900a411318e567914a66c7695f1966dbc
parentd75a196fe299e3661e23d6f216008ab49660edec (diff)
bytes64 copmiles and testprogram works
-rw-r--r--modules/language/python/bytes.scm4
-rw-r--r--modules/language/python/compile.scm23
-rw-r--r--modules/language/python/module/_socket.scm10
-rw-r--r--modules/language/python/module/binascii.scm20
-rw-r--r--modules/language/python/module/python.scm4
-rw-r--r--modules/language/python/module/random.py4
-rw-r--r--modules/oop/pf-objects.scm16
7 files changed, 52 insertions, 29 deletions
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 <p>)
+ (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))