Re: [Chicken-hackers] importing modules of not yet loaded extensions

2010-12-11 Thread Moritz Heidkamp
Felix fe...@call-with-current-continuation.org writes:
 Being able to import a module without requiring the loading of the 
 libary is necessary to allow cross-compilation. Chicken separates this
 and I consider it a feature. 

Right, Christian pointed this out, too. I wonder though: Are modules
which use `require-extension' cross-compilable then at all? Or does the
compiler somehow prevent the actual loading from taking place,
effectively replacing them by just an `import'? If that is indeed the
case, why not make `import' behave like `require-extension' in the first
place? Or am I missing something obvious?

 Remember the mantra:

   If in doubt, use `require-extension'.

Amen!

Good night for now :-)
Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] Request to edit manual Foreign type specifiers

2011-05-26 Thread Moritz Heidkamp
Jim Ursetto zbignie...@gmail.com writes:

 1) A dedicated tag: typespec, foreigntypespec; importspec

I suggest adding a dash of dashes, e.g. foreign-type-spec


 Thoughts, anyone? 

I don't really get the difference between specifier and identifier,
can you elaborate on that?


 Also, let me know whether lighting up the import specifiers even makes
 sense in the first place.

I think so, yes, as I found myself searching for them in chicken-doc a
few times!


Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Add non-destructive version of alist-update!

2011-09-13 Thread Moritz Heidkamp
Hi Felix,

Felix fe...@call-with-current-continuation.org writes:
 Thanks, Moritz. Here a few suggestions:

 - alist-update copies more of the argument list than necessary, it 
   only has to copy up to the first matching entry
 - an entry for types.db is missing

thanks for the feedback, attached is an updated version of the patch. I
hope I got the types.db entry right!

By the way: I noticed that when an unknown comparison procedure is
passed alist-update! it will also accept non-alists, e.g.:

  #;1 (alist-update! 123 123 '(x y z) =)
  ((123 . 123) x y z)

Whereas for example the default (eqv?) gives:

  #;2 (alist-update! 123 123 '(x y z))
  Error: (assv) bad argument type: x

Not sure if this is really a problem.

Moritz
From fa0a758cf2bac89a5507c6aaf548527974e2ef1d Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Tue, 13 Sep 2011 15:17:10 +0200
Subject: [PATCH] add alist-update, a non-destructive version of alist-update!

alist-update only copies as much of the alist as needed (i.e. up until the matching pair)
add documentation and a types.db entry for alist-update
add tests for both alist-update and alist-update!
---
 data-structures.import.scm  |1 +
 data-structures.scm |   13 +
 manual/Unit data-structures |7 ---
 tests/data-structures-tests.scm |   18 ++
 tests/runtests.sh   |3 +++
 types.db|1 +
 6 files changed, 40 insertions(+), 3 deletions(-)
 create mode 100644 tests/data-structures-tests.scm

diff --git a/data-structures.import.scm b/data-structures.import.scm
index 245c7c4..2fd71bf 100644
--- a/data-structures.import.scm
+++ b/data-structures.import.scm
@@ -29,6 +29,7 @@
  '(-string
alist-ref
alist-update!
+   alist-update
always?; DEPRECATED
any?
atom?
diff --git a/data-structures.scm b/data-structures.scm
index 7da3698..8d47f7f 100644
--- a/data-structures.scm
+++ b/data-structures.scm
@@ -231,6 +231,19 @@ EOF
 	  lst)
 	(cons (cons x y) lst) ) ) )
 
+(define (alist-update k v lst #!optional (cmp eqv?))
+  (let loop ((lst lst))
+(if (null? lst)
+(list (cons k v))
+(let ((a (##sys#slot lst 0)))
+  (cond ((not (pair? a))
+ (error 'alist-update bad argument type a))
+((cmp (##sys#slot a 0) k)
+ (cons (cons k v) (##sys#slot lst 1)))
+(else
+ (cons (cons (##sys#slot a 0) (##sys#slot a 1))
+   (loop (##sys#slot lst 1)
+
 (define (alist-ref x lst #!optional (cmp eqv?) (default #f))
   (let* ([aq (cond [(eq? eq? cmp) assq]
 		   [(eq? eqv? cmp) assv]
diff --git a/manual/Unit data-structures b/manual/Unit data-structures
index 6f3e8c1..5412ea4 100644
--- a/manual/Unit data-structures	
+++ b/manual/Unit data-structures	
@@ -19,15 +19,16 @@ Looks up {{KEY}} in {{ALIST}} using {{TEST}} as the comparison function (or {{eq
 no test was given) and returns the cdr of the found pair, or {{DEFAULT}} (which defaults to {{#f}}).
 
 
- alist-update!
+ alist-update
 
+procedure(alist-update KEY VALUE ALIST [TEST])/procedure
 procedure(alist-update! KEY VALUE ALIST [TEST])/procedure
 
 If the list {{ALIST}} contains a pair of the form {{(KEY . X)}}, then this procedure
 replaces {{X}} with {{VALUE}} and returns {{ALIST}}. If {{ALIST}} contains no such item, then
-{{alist-update!}} returns {{((KEY . VALUE) . ALIST)}}. The optional argument
+{{alist-update}} returns {{((KEY . VALUE) . ALIST)}}. The optional argument
 {{TEST}} specifies the comparison procedure to search a matching pair in {{ALIST}}
-and defaults to {{eqv?}}.
+and defaults to {{eqv?}}. {{alist-update!}} is the destructive version of {{alist-update}}.
 
 
  atom?
diff --git a/tests/data-structures-tests.scm b/tests/data-structures-tests.scm
new file mode 100644
index 000..df4b559
--- /dev/null
+++ b/tests/data-structures-tests.scm
@@ -0,0 +1,18 @@
+ data-structures-tests.scm
+
+
+(use data-structures)
+
+(let ((alist '((foo . 123) (bar . baz
+  (alist-update! 'foo 999 alist)
+  (assert (= (alist-ref 'foo alist) 999))
+  (alist-update! 'qux 'nope alist)
+  (assert (not (alist-ref 'qux alist)))
+  (assert (eq? 'yep (alist-ref 'qux (alist-update! 'qux 'yep alist
+  (assert (eq? 'ok (alist-ref bar (alist-update! bar 'ok alist equal?) equal?
+
+(let ((alist '((foo . 123) (bar . baz
+  (alist-update 'foo 999 alist)
+  (assert (= (alist-ref 'foo alist) 123))
+  (assert (eq? 'yep (alist-ref 'qux (alist-update 'qux 'yep alist
+  (assert (eq? 'ok (alist-ref bar (alist-update bar 'ok alist equal?) equal?
\ No newline at end of file
diff --git a/tests/runtests.sh b/tests/runtests.sh
index 4a24457..f0c19ce 100644
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -294,6 +294,9 @@ echo  srfi-18 tests ...
 $interpret -s simple-thread-test.scm
 $interpret -s mutex-test.scm
 
+echo

Re: [Chicken-hackers] Remove old variant of find-files

2011-09-22 Thread Moritz Heidkamp

Christian Kellermann ck...@pestilenz.org writes:
 this is a simple patch to remove the deprecated variant of find-files.
 As it is now the old variant is always choosen when calling find-files
 with just 1 argument.

Looks good to me! I don't really get that we want `cons' inlined
comment in the original version. Why doesn't direct passing of cons lead
to inlining?


 There is one discrepancy left as we do follow symlinks by default
 and the docs say the opposite. Which way is the better behaviour?
 I will change either the default or the docs then.

I'm not entirely sure what would be a sensible default myself. FWIW the
GNU find program doesn't follow symlinks by default.


Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH] Add `module-environments' feature

2012-02-05 Thread Moritz Heidkamp
Hello Chickenauts,

the attached patch merely adds a `module-environments' feature which
indicates the availability of the new `module-environment'
function. This feature would be very nice to have for the new
environments egg implementation in order to be able to cond-expand to
the old implementation for earlier Chicken versions. I somebody agrees!

Moritz
From 4f326e219248d4de807381af9df9edad6daedf4e Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Sun, 5 Feb 2012 20:37:02 +0100
Subject: [PATCH] register `module-environments' feature to indicate
 availability of the `module-environment' function

---
 modules.scm |2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/modules.scm b/modules.scm
index f248890..8b048a3 100644
--- a/modules.scm
+++ b/modules.scm
@@ -882,6 +882,8 @@
 
 (##sys#register-module-alias 'r5rs 'scheme)
 
+(register-feature! 'module-environments)
+
 (define (module-environment mname #!optional (ename mname))
   (let* ((mod (##sys#find-module/import-library mname 'module-environment))
 	 (saved (module-saved-environments mod)))
-- 
1.7.9

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Add `module-environments' feature

2012-02-05 Thread Moritz Heidkamp
Moritz Heidkamp mor...@twoticketsplease.de writes:
 [...] I somebody agrees!
 ^ hope

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] Thrush operator

2012-02-14 Thread Moritz Heidkamp
Hello Chickeneers,

find attached a suggested addition to miscmacros: the thrush operator
family. Apparently it stems from Raymond Smullyan's book on
combinatorial logic To Mock a Mockingbird, which I haven't read
(yet). I've first learned about it through Clojure and have found it
quite nice for increasing the readability of chained calls. See Debasish
Ghosh's post [1] about it for some background.

As a practical example, consider this code:

  (write (fold + 0
   (map (lambda (i) (* 2 i)) 
(iota 10

Using the thrush operator it can be written like this:

  (- (iota 10)
   (map (lambda (i) (* 2 i)))
   (fold + 0)
   (write))

which basically expands to the expression above, i.e. it inserts each
expression as the last argument of the following expression. I find it
much easier to read though since the order of evaluation is the order of
appearance in the code. I like to think of it like `let*' as opposed to
nested `lambda':

  ((lambda (x) ((lambda (y) ((lambda (z) (+ x y z)) 3)) 2)) 1)

versus:
  
  (let* ((x 1) (y 2) (z 3)) (+ x y z))

Much easier to track what's going on there as stuff that belongs
together is visually close to each other. 

There's also `-' which inserts each expression as the first argument of
the following one. The difference:

  (- 10 (- 3)) ; = -7
  (- 10 (- 3))  ; = 7

For kicks and fun I also added starred versions (`-*' and `-*') which
are multi-value aware. Not sure how useful that is and I didn't want to
add it to the default macros to avoid the overhead. But it's good to
have them just for completeness sake!

I guess that's about it. I'm not sure if adding it to miscmacros is a
great idea, might as well just create a `thrush' egg. OTOH we have the
similar `doto' macro in there already. Comments?


Moritz

[1] http://debasishg.blogspot.com/2010/04/thrush-in-clojure.html
Index: miscmacros.scm
===
--- miscmacros.scm	(revision 25904)
+++ miscmacros.scm	(working copy)
@@ -9,13 +9,14 @@
define-optionals define-parameter define-enum
ignore-values ignore-errors
ecase
-   define-syntax-rule)
+   define-syntax-rule
+   - -* - -*)
 
   (import scheme)
   ;; No effect -- caller must import these manually.
   (import (only chicken
 when unless handle-exceptions let-optionals make-parameter
-add1 sub1))
+add1 sub1 define-for-syntax))
 
 ;;; Modify locations, T-like:
 
@@ -303,4 +304,55 @@
 clauses ...
 (else (error no valid case val
 
+(define-for-syntax (expand-thrush x weave)
+  (let loop ((y (cdr x)) (form (car x)))
+(if (null? y)
+form
+(let ((z (car y)))
+  (loop (cdr y)
+(weave z form))
+
+(define-syntax -
+  (ir-macro-transformer
+   (lambda (x i c)
+ (expand-thrush
+  (cdr x)
+  (lambda (z form)
+(cons (car z)
+  (cons form (cdr z
+
+(define-syntax -*
+  (ir-macro-transformer
+   (lambda (x i c)
+ (expand-thrush
+  (cdr x)
+  (lambda (z form)
+`(receive args ,form
+   (apply
+,(car z)
+(append args (list . ,(cdr z))
+
+(define-syntax -
+  (ir-macro-transformer 
+   (lambda (x i c)
+ (expand-thrush
+  (cdr x)
+  (lambda (z form)
+(append z (list form)))
+
+(define-syntax -*
+  (ir-macro-transformer 
+   (lambda (x i c)
+ (expand-thrush
+  (cdr x)
+  (lambda (z form)
+`(receive args ,form
+   (apply
+,(car z)
+(append (list . ,(cdr z)) args
+
 )
+
+
+
+
Index: tests/run.scm
===
--- tests/run.scm	(revision 0)
+++ tests/run.scm	(working copy)
@@ -0,0 +1,22 @@
+(use test srfi-1 miscmacros)
+
+(test 1 (- 99 (/ 11) (/ 9)))
+
+(test '(1 2 3 4)
+  (-* (values 1 2)
+   (list 3)
+   (append '(4
+
+(test 7 (- 10 (- 3)))
+(test -7 (- 10 (- 3)))
+
+(test 9 (- 1 (+ 2) (* 3)))
+
+(test 9 (- '(1 2 3)
+ (map add1)
+ (fold + 0)))
+
+(test '((foo . 100) (bar . 200))
+  (-* (values '(foo bar) '(100 200))
+(map cons)))
+
___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] Thrush operator

2012-02-14 Thread Moritz Heidkamp
Hi Jörg,

Jörg F. Wittenberger joerg.wittenber...@softeyes.net writes:
 I rather loved to think instead of inserting the (*single*)
 value of the expression into the next expression of something
 along the lines of physical wires:
 connect (pass) all the result(s) of the first expression into the next
 (which would then need to accept as many values as the stage
 before returns.

if I understand you correctly, this is exactly what the starred
versions, `-*' and `-*', do. Or did I get you wrong?

Peter had another idea worth considering: using placeholders like `cut'
and `cute' do:

  (- world
  (list hello )
  (string-intersperse  ,)
  (print  .))

As this silly example demonstrates this could be used to wire values
into arbitrary argument positions. It's a bit more flexible and it may
be clearer what's going on but also adds some line noise. I have to
think about that!


Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] Thrush operator

2012-02-19 Thread Moritz Heidkamp
Moritz Heidkamp mor...@twoticketsplease.de writes:

 find attached a suggested addition to miscmacros

Attached a syntax-rules based implementation which is much easier to
grok. I am leaning towards putting those into a separate egg now though.

Index: miscmacros.scm
===
--- miscmacros.scm	(revision 25904)
+++ miscmacros.scm	(working copy)
@@ -9,7 +9,8 @@
define-optionals define-parameter define-enum
ignore-values ignore-errors
ecase
-   define-syntax-rule)
+   define-syntax-rule
+   - -* - -*)
 
   (import scheme)
   ;; No effect -- caller must import these manually.
@@ -303,4 +304,32 @@
 clauses ...
 (else (error no valid case val
 
+(define-syntax -
+  (syntax-rules ()
+((_ x) x)
+((_ x (y z ...) rest ...)
+ (- (y x z ...) rest ...
+
+(define-syntax -
+  (syntax-rules ()
+((_ x) x)
+((_ x (y ...) rest ...)
+ (- (y ... x) rest ...
+
+(define-syntax -*
+  (syntax-rules ()
+((_ x) x)
+((_ x (y z ...) rest ...)
+ (-* (receive args x
+(apply y (append args (list z ...
+  rest ...
+
+(define-syntax -*
+  (syntax-rules ()
+((_ x) x)
+((_ x (y z ...) rest ...)
+ (-* (receive args x
+ (apply y (append (list z ...) args)))
+   rest ...
+
 )
Index: tests/run.scm
===
--- tests/run.scm	(revision 0)
+++ tests/run.scm	(working copy)
@@ -0,0 +1,22 @@
+(use test srfi-1 miscmacros)
+
+(test 1 (- 99 (/ 11) (/ 9)))
+
+(test '(1 2 3 4)
+  (-* (values 1 2)
+   (list 3)
+   (append '(4
+
+(test 7 (- 10 (- 3)))
+(test -7 (- 10 (- 3)))
+
+(test 9 (- 1 (+ 2) (* 3)))
+
+(test 9 (- '(1 2 3)
+ (map add1)
+ (fold + 0)))
+
+(test '((foo . 100) (bar . 200))
+  (-* (values '(foo bar) '(100 200))
+(map cons)))
+
___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] Thrush operator

2012-02-23 Thread Moritz Heidkamp
Felix fe...@call-with-current-continuation.org writes:

 I think that's a good idea. You could also add the doto operator
 from the miscmacros there, since I don't think it fits well into
 the set of macros provided by miscmacros.

Alright, it's done, meet http://wiki.call-cc.org/eggref/4/clojurian :-)

I took the liberty to rewrite `doto' in terms of `syntax-rules'.

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Bugfix for #791 and unpack flonums correctly for integer?

2012-03-11 Thread Moritz Heidkamp
Christian Kellermann ck...@pestilenz.org writes:
 Since I also agree and I *wrote* *this* *patch* we are deadlocked.
 Attention! Robots need your help!

I had a look at it but am too clueless about that numbers business to
give a confident review, alas. Any other takers?

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Capture length in case-lambda to make it hygienic

2012-03-25 Thread Moritz Heidkamp
Hi Christian,

Christian Kellermann ck...@pestilenz.org writes:
 the attached patch fixes #805, by capturing the core length procedure
 correctly. Thanks go to Moritz for finding and reporting this issue.

I found yet another hygiene issue in `case-lambda' in the meantime and a
similar one in `ensure'. The attached patches address these also add
some regression tests.

Thanks again for your help!

Moritz
From a441b07473a93f5216c31ae23dd993ff61958f15 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Sun, 25 Mar 2012 14:24:07 +0200
Subject: [PATCH 1/3] Fix hygiene issues in `case-lambda'

This adresses bug #805
---
 chicken-syntax.scm |   10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index 08bede2..b634d1f 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -764,7 +764,8 @@
  `((= . ,(##sys#primitive-alias '=))
(car . ,(##sys#primitive-alias 'car))
(cdr . ,(##sys#primitive-alias 'cdr))
-   (eq? . ,(##sys#primitive-alias 'eq?)))
+   (eq? . ,(##sys#primitive-alias 'eq?))
+   (length . ,(##sys#primitive-alias 'length)))
  (##sys#er-transformer
   (lambda (form r c)
 (##sys#check-syntax 'case-lambda form '(_ . _))
@@ -785,11 +786,12 @@
 	   (%= (r '=))
 	   (%eq? (r 'eq?))
 	   (%car (r 'car))
-	   (%cdr (r 'cdr)))
+	   (%cdr (r 'cdr))
+	   (%length (r 'length)))
   `(##core#lambda
 	,(append minvars rvar)
 	(##core#let
-	 ((,lvar (length ,rvar)))
+((,lvar (,%length ,rvar)))
 	 ,(fold-right
 	   (lambda (c body)
 	 (##sys#decompose-lambda-list
@@ -820,7 +822,7 @@
  bindings
  `(##core#let ,(map list vars1 minvars) ,bindings) ) ) )
 			,body) ) ) )
-	   '(##core#check (##sys#error (##core#immutable 'no matching clause in call to 'case-lambda' form)))
+	   '(##core#check (##sys#error (##core#immutable (##core#quote no matching clause in call to 'case-lambda' form
 	   (cdr form
 
 
-- 
1.7.9.4

From 7ef5a447cfdde5214b95a8648501e1483c33a805 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Sun, 25 Mar 2012 14:24:19 +0200
Subject: [PATCH 2/3] Fix hygiene issue in `ensure'

---
 chicken-syntax.scm |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index b634d1f..2ea7072 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -208,8 +208,8 @@
 		#:type-error
 		,@(if (pair? args)
 			  args
-			  `((##core#immutable 'argument has incorrect type)
-			,tmp ',pred) ) ) ) ) ) ) ) )
+			  `((##core#immutable (##core#quote argument has incorrect type))
+			,tmp (##core#quote ,pred)) ) ) ) ) ) ) ) )
 
 (##sys#extend-macro-environment
  'fluid-let '()
-- 
1.7.9.4

From 75a09261c6ae737f6f42dd44bc737fcaa060186c Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Sun, 25 Mar 2012 14:24:35 +0200
Subject: [PATCH 3/3] Add regression tests for fixes introduced in a441b074
 and 7ef5a447

---
 tests/syntax-tests.scm |7 +++
 1 file changed, 7 insertions(+)

diff --git a/tests/syntax-tests.scm b/tests/syntax-tests.scm
index 21f57e5..bb2e2d2 100644
--- a/tests/syntax-tests.scm
+++ b/tests/syntax-tests.scm
@@ -967,3 +967,10 @@
 
 (use (prefix srfi-1 list-))
 take
+
+
+;; #805: case-lambda is unhygienic (as well as ensure, see c1160ca7 and 7fe07e9c)
+(module foo ()
+  (import (prefix chicken c/) (prefix scheme s/))
+  (c/case-lambda ((a) a))
+  (c/ensure s/even? 2))
-- 
1.7.9.4

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH] Correct the types.db entry for `eval'

2012-04-14 Thread Moritz Heidkamp
Hello Chicken friends,

the attached patch corrects the types.db entry for the `eval' function
to allow multiple return values. I also added some tests to
library-tests.scm for a lack of more suitable better place.

Moritz
From 3ad6146e9b9e87c43f37ae511f025be2af117f0d Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Sat, 14 Apr 2012 20:37:06 +0200
Subject: [PATCH] Correct the types.db entry for `eval' to allow multiple
 return values.

---
 tests/library-tests.scm |6 ++
 types.db|2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/tests/library-tests.scm b/tests/library-tests.scm
index f133f3f..1268bd4 100644
--- a/tests/library-tests.scm
+++ b/tests/library-tests.scm
@@ -278,3 +278,9 @@
 
 (assert-fail (make-blob -1))
 (assert-fail (make-vector -1))
+
+;;; eval return values
+
+(assert (= 1 (eval 1)))
+(assert (eq? '() (receive (eval '(values)
+(assert (equal? '(1 2 3) (receive (eval '(values 1 2 3)
diff --git a/types.db b/types.db
index be90225..7aed56f 100644
--- a/types.db
+++ b/types.db
@@ -659,7 +659,7 @@
 			 (let ((#(tmp2) #(2)))
 			   (#(tmp2) (#(tmp1)))
 
-(eval (procedure eval (* #!optional (struct environment)) *))
+(eval (procedure eval (* #!optional (struct environment)) . *))
 (char-ready? (#(procedure #:enforce) char-ready? (#!optional input-port) boolean))
 
 (imag-part (#(procedure #:clean #:enforce) imag-part (number) number)
-- 
1.7.9.4

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Slight promise efficiency and memory improvements

2012-11-05 Thread Moritz Heidkamp
Peter Bex peter@xs4all.nl writes:
 Very clever!  I've tested and pushed this.

Cool, thank you very much!


 Are you actually using promises so much that you're running into
 performance issues with them, or was this just for fun?

I ran into memory leaks when trying to implement the lazy-seq egg based
on promises. And IIRC that was due to references that were kept in the
delay thunk's closure and thus weren't garbage collected. The
record-based implementation I came up with instead is what inspired me
to check whether the same could be applied to core. I'm now evaluating
whether using this promise implementation actually works for lazy-seq
and whether it yields any performance benefits. One drawback is that it
needs to support multi values whereas my hand-rolled version in lazy-seq
doesn't. I can post a follow-up here once I've tried it if you're
interested.

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH] Fix TO argument check in subvector procedure

2013-01-02 Thread Moritz Heidkamp
See commit message for details
From f08fc812501e9d2e5ee7e3b2154642255bedaa66 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Wed, 2 Jan 2013 22:02:10 +0100
Subject: [PATCH] Fix TO argument check in subvector procedure

The subvector procedure checked its TO argument as if it was
inclusive. However, its default value is the passed vector's length so
it must be exclusive which also corresponds with the implementation. In
effect, the erroneous check prevented producing a subvector including
the given vector's last element. This patch changes the TO argument
check to be exclusive and adds some test cases for the subvector
procedure.
---
 library.scm | 2 +-
 tests/library-tests.scm | 8 +++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/library.scm b/library.scm
index 5ed1e24..46cfe49 100644
--- a/library.scm
+++ b/library.scm
@@ -1391,7 +1391,7 @@ EOF
 	 (j (or j len))
 	 (len2 (fx- j i)))
 (##sys#check-range i 0 len 'subvector)
-(##sys#check-range j 0 len 'subvector)
+(##sys#check-range j 0 (fx+ len 1) 'subvector)
 (let ((v2 (make-vector len2)))
   (do ((k 0 (fx+ k 1)))
 	  ((fx= k len2) v2)
diff --git a/tests/library-tests.scm b/tests/library-tests.scm
index c385c1b..2d88321 100644
--- a/tests/library-tests.scm
+++ b/tests/library-tests.scm
@@ -420,4 +420,10 @@
 
 ;;; message checks for invalid strings
 
-(assert-fail (##sys#message 123\x00456))
\ No newline at end of file
+(assert-fail (##sys#message 123\x00456))
+
+;;; vector procedures
+
+(assert (equal? '#(2 3) (subvector '#(1 2 3) 1)))
+(assert (equal? '#(2)   (subvector '#(1 2 3) 1 2)))
+(assert (equal? '#()(subvector '#(1 2 3) 1 1)))
-- 
1.8.0.2

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] Updating stability...

2013-01-09 Thread Moritz Heidkamp
Jim Ursetto zbignie...@gmail.com writes:
 [ ... a lot ... ]

I just wanted to thank you guys for going through this hassle, it's
really appreciated. I will try to help in the next stabililty cycle!

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] stability/4.8.0 test release available

2013-01-17 Thread Moritz Heidkamp
Jim Ursetto zbignie...@gmail.com writes:

 I've uploaded a test distribution tarball of stability/4.8.0 [1].  This 
 should contain everything
 that will go into 4.8.0.1 unless we find a problem.  If anyone would like to 
 test it,
 it would be appreciated.

Looks good here, all my programs still do their job so far.

Thanks again!

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] substring function and bounds checks

2013-02-05 Thread Moritz Heidkamp
Hi Michele,

Michele La Monaca mikele.chic...@lamonaca.net writes:

 Maybe this is not the right list for that, sorry.

yeah, this one probably better fits chicken-users as it's not really
about Chicken's implementation, so you might be losing some broader
audience by posting it here. No problemo, though!


 In fact, it makes the usage of substring unsafe and the
 countermeasures I can imagine (manual bounds checks, padding, writing
 my-own-substring-function, whatever) are quite unsatisfactory... to me
 at least.

I felt the same when coming to Scheme (from Ruby in my case). But after
having been immersed in the langauge and community surrounding it for a
while now I came to see it in a different light: What might look like
impracticality at the beginning turns out to be a virtue in its own
right. All languages you cite (well, apart from Python perhaps, as Peter
noted) are from the DWIM-most-of-the-time spectrum which give a lot of
leeway. This often leads to what Olin Shivers vividly describes as 80%
solutions in the preamble of the SRE announcement (see
http://www.scsh.net/docu/post/sre.html). I recommend you to read that
one if you don't already know it. Scheme as a whole tries to aim for the
100% solutions (whether it's successful in that endeavor is open for
debate, of course). That's why you'll often see functions reduced to
their bare minimum purpose and correct behavior even in edge cases. This
is especially true for functions defined in the standard core such as
the one you are referring to. The nice thing is that from that solid
core as a foundation we can build libraries which allow us to be a bit
more sloppy when we want to whereas it's much harder to go the other way
around.

It may sound a bit like just drink the Kool-Aid but what I'm trying to
say is: Scheme, as any language, has its own culture and you will be
much happier when you try to embrace it rather than trying to impose
concepts from other languages on it. But you probably already know this,
so I hope my comment on the specific case of your substring issue is of
help, anyway :-)


Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Small improvement for the inline egg

2013-02-07 Thread Moritz Heidkamp
Hello again,

Moritz Heidkamp mor...@twoticketsplease.de writes:
 1. It dumps compilation results in ~/.cache by default. This, however,
is a bit like dumping stuff in /usr/share so I think it would be
better to make this ~/.cache/chicken-inline or something.

Mario just pointed out to me in #chicken that the current default is
actually .cache, not ~/.cache. It just happened to be that I ran csi
from my home when trying it out and then I didn't properly read the code
when hacking up the patch. Considering that this default directory is
apparently meant as a relative path I propose the attached new version
which sets it to .chicken-inline by default.

Moritz
Index: inline.scm
===
--- inline.scm  (revision 28291)
+++ inline.scm  (working copy)
@@ -39,7 +39,7 @@
 (define (inline-eval x . o)
   (inline-compile x (if (pair? o) (car o) ) #t))
 
-(define-constant default-inline-cache-name .cache)
+(define-constant default-inline-cache-name .chicken-inline)
 
 (define windows-shell (foreign-value C_WINDOWS_SHELL bool))
 (define inline-cache (make-parameter default-inline-cache-name))
@@ -94,7 +94,6 @@
   (zero? (system (sprintf cmp -s ~A ~A (qs a) (qs b )))
 
 (define (ensure-cache)
-  (unless (file-exists? (inline-cache))
-(create-directory (inline-cache)) ) )
+  (create-directory (inline-cache) #t) )
 
 )
___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] software-type and software-version for android

2013-02-21 Thread Moritz Heidkamp
Christian Kellermann ck...@pestilenz.org writes:
 Probably android for both, since android does not come with all
 posix things. pthreads for example.

That's not quite true, is it? See
https://android.googlesource.com/platform/prebuilts/ndk/+/master/8/platforms/android-9/arch-arm/usr/include/pthread.h

I vote for software-type unix, too, although it is unclear to me what
this actually means :-) POSIX compliance can't be sufficient factor as
Windows has that, too. Unix [tm] can't be as well as that would
disqualify Linux.

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH] Make quasiquote extensible with custom handlers

2013-02-22 Thread Moritz Heidkamp
Fellow Chickeneers,

find attached a patch which allows user code to hook into the quasiquote
code expander. What good can come from that? you might ask. Let me
elaborate! As you know, Chicken supports custom reader extensions via
set-read-syntax! and friends. This is all fine unless you try to add
custom read syntax for compound data structures. One example of those
are SRFI 10 reader constructors which are also supported by core
Chicken. Let me give you an example how they work:

  #;1 (define-record point x y)
  #;2 (define-reader-ctor 'point make-point)
  #;3 '#,(point 10 20)
  #point
  #;4 (point-x #3)
  10
  #;5 (point-y #3)
  20

That's pretty straight forward. Now try this:

  #;6 `#,(point ,(+ 5 5) 20)
  #point
  #;7 (point-x #6)
  (unquote (+ 5 5))

Oops, not quite what we'd expect! Now, this problem was also discovered
in 2004 by Bradd W. Szonye (see
http://srfi.schemers.org/srfi-10/post-mail-archive/msg0.html), alas
it was in the post-finalization phase of SRFI 10 and unfortunatley it
doesn't seem like there was much interest in that anymore then. So I
went ahead and tried to come up with a solution for that problem. What I
think is needed for this to work is to be able to hook into the
quasiquote expander (as noted above). The result of that is the attached
patch. It allows us to do this:

  #;8 (define-quasiquote-handler point? (lambda (r walk n p) (list (r 
'make-point) (walk (point-x p) n) (walk (point-y p) n
  #;9 `#,(point ,(+ 5 5) 20)
  #point
  #;10 (point-x #9)
  10

I think this kind of mechanism is something we should have in order to
provide proper support for custom read syntax and to make SRFI 10 syntax
behave as expected. Let me know if you have any suggestions for
improving the API (not sure if quasiquote-handler is the best name for
this kind of thing) or implementation (I don't know whether we need to
pass the `n' argument to handlers or if we can hide it in a closure, for
example). Also I'm not sure about where to put the code (maybe
define-quasiquote-handler should not live in expand.scm).

Thanks!
Moritz
From b4c197c93c94bbfbab781e81a058d5fc3ad90f0a Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Thu, 21 Feb 2013 18:53:08 +0100
Subject: [PATCH] Make quasiquote extensible with custom handlers

This patch introduces the define-quasiquote-handler form which allows
hooking into the quasiquote walker, allowing custom reader extensions
for compound data literals (such as SRFI 10 reader constructors) to
properly support unquoting.
---
 expand.scm | 29 +++--
 tests/reader-tests.scm | 11 +++
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/expand.scm b/expand.scm
index b278ec0..8677eff 100644
--- a/expand.scm
+++ b/expand.scm
@@ -35,7 +35,9 @@
 	macro-alias
 	check-for-multiple-bindings
 	d dd dm dx map-se
-	lookup check-for-redef) 
+	lookup check-for-redef
+	quasiquote-handler-ref
+	quasiquote-handlers)
   (not inline ##sys#syntax-error-hook ##sys#compiler-syntax-hook
##sys#toplevel-definition-hook))
 
@@ -1241,6 +1243,26 @@
 	   (car (cdr (cdr b))) ) )
 	 bindings) ) ) ) ) ) ) ) )
 
+
+(define quasiquote-handlers
+  (list))
+
+(define (define-quasiquote-handler pred handler)
+  (set! quasiquote-handlers
+(if handler
+(cons (cons pred handler) quasiquote-handlers)
+(let loop ((qh quasiquote-handlers))
+  (cond ((null? qh) '())
+((eq? (caar qh) pred) (loop (cdr qh)))
+(else (cons (car qh) (loop (cdr qh)
+
+(define (quasiquote-handler-ref x)
+  (let loop ((qh quasiquote-handlers))
+(and (pair? qh)
+ (if ((caar qh) x)
+ (cdar qh)
+ (loop (cdr qh))
+
 (##sys#extend-macro-environment
  'quasiquote
  '()
@@ -1251,7 +1273,10 @@
 	  (%unquote-splicing (r 'unquote-splicing)))
   (define (walk x n) (simplify (walk1 x n)))
   (define (walk1 x n)
-	(cond ((vector? x)
+	(cond ((quasiquote-handler-ref x) =
+   (lambda (handle)
+ (handle r walk n x)))
+  ((vector? x)
 	   `(##sys#list-vector ,(walk (vector-list x) n)) )
 	  ((not (pair? x)) `(##core#quote ,x))
 	  (else
diff --git a/tests/reader-tests.scm b/tests/reader-tests.scm
index 894e846..58ad4c5 100644
--- a/tests/reader-tests.scm
+++ b/tests/reader-tests.scm
@@ -23,3 +23,14 @@
 
 (assert (string=? output hi\nfoo\nbaz\nbye\n))
 (assert (string=?. (with-input-from-string \x20\u0020\U0020\056 read-all)))
+
+
+(define-record foo bar)
+(define-reader-ctor 'foo make-foo)
+(define-quasiquote-handler foo?
+  (lambda (rename walk n x)
+(list (rename 'make-foo)
+  (walk (foo-bar x) n
+
+(assert (= 1 (foo-bar '#,(foo 1
+(assert (= 3 (foo-bar `#,(foo ,(+ 1 2)
-- 
1.8.1.4

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman

[Chicken-hackers] Taming the egg versioning wilderness

2013-02-25 Thread Moritz Heidkamp
Fellow Chickeneers,

I just had the following problem (again): I tagged a new version of the
lowdown egg (0.0.6). While doing so I realized that the previous tag
(0.0.5) still installed itself as 0.0.4 via the install-extension
invocation in its .setup file. This lead me to think over the whole
situation of how we deal with egg versioning and I found it pretty
error-prone and inconvenient for both users and authors. Sticking to my
example:

1) Users get confused because if they run chicken-install lowdown (or
   even chicken-install lowdown:0.0.5), chicken-status will afterwards
   tell them that 0.0.4 is installed in this case.

2) Authors have to be vigilant to always keep three places in sync: The
   version in the .setup file (another issue here is that each
   invocation of install-extension and install-program require the
   version to be passed -- hopefully it's always the same one), the
   version in the .release-info file and (if a VCS is used, which is
   usually the case) the version in the tag name.

It may of course be that I misunderstand some intentions of the
versioning system as it is (e.g. why it is possible to install multiple
extensions and programs with differing versions from within an egg which
itself can have yet another differing version). If that's the case I'd
be happy to be enlightened about it!

Otherwise I'd suggest to somehow get rid of at least the versions in the
.setup file. Maybe it would be possible to make them optional and use
the egg's version as a default in this case?

Let me know what your thoughts are on this issue. I am happy to try to
come up with a patch should we agree on how to proceed.


Thanks!
Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] Taming the egg versioning wilderness

2013-02-28 Thread Moritz Heidkamp
Mario Domenech Goulart mario.goul...@gmail.com writes:
 thanks for that, this will definitely help to make maintenance less of a
 pain in the meantime unless one forgets to do the salmonella dance :-)
 It would be better if we wouldn't have to worry about these problems to
 begin with, though, or would you disagree?

 I totally agree.  I just don't know a simple way to do that, keeping
 things backward-compatible and so on.

Yeah, that's tricky. I will try to come up with a patch to make the
version argument of install-extension and install-program optional. This
should be backwards compatible unless I'm missing something!

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] ab bug or not a bug

2013-02-28 Thread Moritz Heidkamp
Jörg F. Wittenberger joerg.wittenber...@softeyes.net writes:
 In any case, it seems inconsistent.

 (DOM - RND : TYPE) for predicates I'd expect to be pure.  Wrong?

Agreed, predicates should be pure. Not sure what the intention is here!

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] Taming the egg versioning wilderness

2013-03-01 Thread Moritz Heidkamp
Moritz Heidkamp mor...@twoticketsplease.de writes:
 Yeah, that's tricky. I will try to come up with a patch to make the
 version argument of install-extension and install-program optional. This
 should be backwards compatible unless I'm missing something!

OK, having thought about it some more this doesn't work, of course, as
eggs which leave off the version argument would not be compatible with
older Chickens.

I am now thinking that it would probably be better to provide an
extension that can be used in .setup files to read the egg version from
the .release-info file and then pass it on to install-extension and
install-program. Kon, maybe this would make sense as an addition to
setup-helpers?

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH] Reimplement topological-sort with cycle detection

2013-03-03 Thread Moritz Heidkamp
Fellow Chickeneers,

I recently noticed that Chicken's topological-sort function does not
detect cycles in the passed graph. Initially I ventured into patching
this functionality into the existing implementation which originates
from SLIB. This turned out to be tricky as it is a heavily imperative
implemenatation. By the time I had figured out how it works I had
already opened the relevant chapter of Introduction to
Algorithms. According to the header comment of the SLIB implementation
(see
http://cvs.savannah.gnu.org/viewvc/slib/slib/tsort.scm?revision=1.2) it
is also based on that algorithm, but apparently without the cycle
detection (or maybe it wasn't in the 1st edition which is what the
author used, while I used the 3rd edition). Eventually I found it easier
to reimplement the algorithm in a functinal style to add the cycle
detection bit.

One thing I'm not sure about is how I raise the condition in case a
cycle is detected. Comments on that are very welcome!

Have a nice Sunday
Moritz

From 840b24477b38f1ca3815248ae9704911bd8527b0 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Sun, 3 Mar 2013 13:28:20 +0100
Subject: [PATCH] Reimplement topological-sort with cycle detection

---
 data-structures.scm | 85 ++---
 1 file changed, 41 insertions(+), 44 deletions(-)

diff --git a/data-structures.scm b/data-structures.scm
index 56944ec..d51abe4 100644
--- a/data-structures.scm
+++ b/data-structures.scm
@@ -707,52 +707,49 @@
 	(sort! (append seq '()) less?)))
 
 
-;;;  Simple topological sort:
-;
-; Taken from SLIB (slightly adapted): Copyright (C) 1995 Mikael Djurfeldt
+;;; Topological sort with cycle detection:
+;;
+;; A functional implementation of the algorithm described in Cormen,
+;; et al. (2009), Introduction to Algorithms (3rd ed.), pp. 612-615.
 
 (define (topological-sort dag pred)
-  (if (null? dag)
-  '()
-  (let* ((adj-table '())
-	 (sorted '()))
-
-	(define (insert x y)
-	  (let loop ([at adj-table])
-	(cond [(null? at) (set! adj-table (cons (cons x y) adj-table))]
-		  [(pred x (caar at)) (set-cdr! (car at) y)]
-		  [else (loop (cdr at))] ) ) )
-	
-	(define (lookup x)
-	  (let loop ([at adj-table])
-	(cond [(null? at) #f]
-		  [(pred x (caar at)) (cdar at)]
-		  [else (loop (cdr at))] ) ) )
-	
-	(define (visit u adj-list)
-	  ;; Color vertex u
-	  (insert u 'colored)
-	  ;; Visit uncolored vertices which u connects to
-	  (for-each (lambda (v)
-		  (let ((val (lookup v)))
-			(if (not (eq? val 'colored))
-			(visit v (or val '())
-		adj-list)
-	  ;; Since all vertices downstream u are visited
-	  ;; by now, we can safely put u on the output list
-	  (set! sorted (cons u sorted)) )
-	
-	;; Hash adjacency lists
-	(for-each (lambda (def) (insert (car def) (cdr def)))
-		  (cdr dag))
-	;; Visit vertices
-	(visit (caar dag) (cdar dag))
-	(for-each (lambda (def)
-		(let ((val (lookup (car def
-		  (if (not (eq? val 'colored))
-			  (visit (car def) (cdr def)
-		  (cdr dag)) 
-	sorted) ) )
+  (define (visit dag node edges path state)
+(case (alist-ref node (car state) pred)
+  ((grey)
+   (##sys#abort
+(##sys#make-structure
+ 'condition
+ '(exn cycle)
+ `((exn . message) cycle detected
+   (exn . arguments) ,(list (cons node (reverse path)))
+   (exn . call-chain) ,(##sys#get-call-chain)
+   (exn . location) topological-sort
+  ((black)
+   state)
+  (else
+   (let walk ((edges (or edges (alist-ref node dag pred '(
+  (state (cons (cons (cons node 'grey) (car state))
+   (cdr state
+ (if (null? edges)
+ (cons (alist-update! node 'black (car state) pred)
+   (cons node (cdr state)))
+ (let ((edge (car edges)))
+   (walk (cdr edges)
+ (visit dag
+edge
+#f
+(cons edge path)
+state
+  (let loop ((dag dag)
+ (state (cons (list) (list
+(if (null? dag)
+(cdr state)
+(loop (cdr dag)
+  (visit dag
+ (caar dag)
+ (cdar dag)
+ '()
+ state)
 
 
 ;;; Binary search:
-- 
1.8.1.4

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] ##sys#double-number gone; intetional?

2013-03-04 Thread Moritz Heidkamp
Hi Jörg,

Jörg F. Wittenberger joerg.wittenber...@softeyes.net writes:
 I found that ##sys#double-number is gone from library.scm .

 Still it's there in chicken.h .  Mistake or intended?
 At least I'd consider it worth a news item.

the ##sys# API is not even documented so I don't think it needs to be
mentioned in the NEWS. In fact, AFIUI the point of identifiers having
that prefix (and ##core#) is that those can be changed without
considering backwards compatibility. Otherwise they could just be
exported without the prefix.

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] strange error message, please help with interpretation

2013-03-08 Thread Moritz Heidkamp
Hi Jörg,

Jörg F. Wittenberger joerg.wittenber...@softeyes.net writes:
 So how would I interpret this message.  As far as I can see, this
 tells me that somehow a typecheck failed on a (struct uri)
 testing it to be a (struct uri) -- which would have been supposed
 to succeed.

 Am I missing something

I think your assessment is correct. Unfortunately, I don't have the
slightest clue what might be the cause of this either. I assume you are
not using ##sys#make-structure or anything to create instances of that
record type but only the proper constructor?

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH 1/2] write: escape DEL character in strings

2013-03-10 Thread Moritz Heidkamp
Hi guys,

Peter Bex peter@xs4all.nl writes:

 On Tue, Mar 05, 2013 at 06:48:44PM +0100, Florian Zumbiehl wrote:
 Thanks for this (and the other) patch!  Here's a signed-off version,
 which other team members may push.  I also nominate this patch for
 inclusion in the stability branch.

thanks a lot, signed off and pushed!

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] testcase -strict-types

2013-03-24 Thread Moritz Heidkamp
John Cowan co...@mercury.ccil.org writes:

 Jörg F. Wittenberger scripsit:

 Note: in local procedure `doloop9',
  in toplevel procedure `foo#bar':
  (strcttps.scm:10) in procedure call to `null?', the predicate is
 called with an argument of type
  `null' and will always return true 

 That strikes me as Just Wrong.  Even if a predicate is known to always
 succeed, it shouldn't be impossible to call it, any more than it should
 be impossible to call a predicate that always returns #t on any argument.

Note that it's just a Note, though :-) I think it's sensible to show
this as it might indeed point to some unnecessary / redundant check that
could just as well be removed.

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] testcase -strict-types

2013-03-24 Thread Moritz Heidkamp
Hi Jörg,

Jörg F. Wittenberger joerg.wittenber...@softeyes.net writes:
 Note: in local procedure `doloop9',
  in toplevel procedure `foo#bar':
  (strcttps.scm:10) in procedure call to `null?', the predicate is
 called with an argument of type
  `null' and will always return true gcc strcttps.c -o strcttps.o -c 
 -fno-strict-aliasing -fwrapv -DHAVE_CHICKEN_CONFIG_H
 -DC_ENABLE_PTABLES -Os -fomit-frame-pointer -I/usr/include/chicken
 rm strcttps.c gcc strcttps.o -o strcttps -L/usr/lib -Wl,-R/usr/lib
 -lchicken -lm -ldl rm strcttps.o $ ./strcttps gaga

The Note points to the problem I think: The specializer seems to just
replace your null? check with #t as can be seen when compiling the
program like this:

  $ csc -debug 3 -strict-types strcttps.scm

The output contains this:

  (if #t (k225 'gaga) (k225 foobar8))

I'm not sure how -strict-types could lead to this result. Maybe the type
declaration for null? is flawed somehow?

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] testcase -strict-types

2013-03-25 Thread Moritz Heidkamp
Jörg F. Wittenberger joerg.wittenber...@softeyes.net writes:
 Though in a way the explanation is correct.  -strict-types assumes
 '() to be null from the initialization.  Short of a way to declare
 the type of foobar as (list-of whatever) this fails when it's used
 as the initial and correct value of type (list-of whatever) with
 zero length.

You should be able to use `the' or `assume' for that purpose.


 What the optimizer should do is to see into the doloop and notice
 the ambiguous type null being refined to a list.

Given that the description of -strict-types is assume variable do not
change their type I think the behavior is correct.


 Find attached two more variants.  strcttps2.scm, which convinces
 chicken to do the right thing, ans strcttps2.scm, which fails
 the other way around.

Right, here you initialize the variable's type with list (or pair, I
don't know what's detected) and then possible change it to null while
never checking with null? on the whole list but only on the rest. Looks
fine from what I can tell!

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] testcase -strict-types

2013-03-25 Thread Moritz Heidkamp
Jörg F. Wittenberger joerg.wittenber...@softeyes.net writes:

 [1. text/plain]

 On Mar 25 2013, Moritz Heidkamp wrote:

Jörg F. Wittenberger joerg.wittenber...@softeyes.net writes:
 Though in a way the explanation is correct.  -strict-types assumes
 '() to be null from the initialization.  Short of a way to declare
 the type of foobar as (list-of whatever) this fails when it's used
 as the initial and correct value of type (list-of whatever) with
 zero length.

You should be able to use `the' or `assume' for that purpose.

 Where would I find the respective assume to be documented?

In the manual page about the type system,
e.g. http://wiki.call-cc.org/man/4/Types


 (Would the syntax break standard Scheme compatibility?)

They are regular Scheme syntax so you can stub them. You could use
http://wiki.call-cc.org/eggref/4/type-stubs for other Schemes, too (it
is intended to be used with older Chickens).

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Make tests work from symlinked paths

2013-05-25 Thread Moritz Heidkamp
Mario Domenech Goulart mario.goul...@gmail.com writes:
 Ah good catch, but unfortunately OpenBSD does not expose realpath
 as a shell command (or binary utility). Is there a way to do this
 portably? John, do you know?

 Maybe readlink -f ?

Thanks, that works, as well! Attached is an updated patch.

Moritz
From 2c9bbb077165ffc171411376a0f68e6ba6adf9f2 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Sat, 25 May 2013 01:46:02 +0200
Subject: [PATCH] Make tests work from symlinked paths

The private repository path tests didn't work when run from inside a
path containing symlinks because runtests.sh didn't expand symlinks
while the -private-repository mechanism does. This lead the test
assertion which compares the two paths to fail.
---
 tests/runtests.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/runtests.sh b/tests/runtests.sh
index 931e2f2..6a1d0e3 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -389,8 +389,8 @@ $compile -e embedded3.c embedded4.scm
 echo  private repository test ...
 mkdir -p tmp
 $compile private-repository-test.scm -private-repository -o tmp/xxx
-tmp/xxx $PWD/tmp
-PATH=$PWD/tmp:$PATH xxx $PWD/tmp
+tmp/xxx `readlink -f -- $PWD`/tmp
+PATH=$PWD/tmp:$PATH xxx `readlink -f -- $PWD`/tmp
 # this may crash, if the PATH contains a non-matching libchicken.dll on Windows:
 #PATH=$PATH:$PWD/tmp xxx $PWD/tmp
 rm -fr rev-app rev-app-2 reverser/*.import.* reverser/*.so
-- 
1.8.2.3

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Make tests work from symlinked paths

2013-05-25 Thread Moritz Heidkamp
Mario Domenech Goulart mario.goul...@gmail.com writes:
 Maybe readlink -f ?

OK, Peter found that even that is not portable so I changed the test
itself to do the path canonicalization. Turns out that while the posix
unit's read-symbolic-link has a CANONICALIZE option it doesn't quite
behave like the readlink(1) program. So I went ahead and adapted its
behavior to match that. I also noticed that the types.db entry for
read-symbolic-link did not include that optional argument so I took it
as an opportunity to fix this, as well.

Moritz

From e98ed45bcfeca57d8d0a293da4ee335ea8d1ff4b Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Sat, 25 May 2013 17:08:09 +0200
Subject: [PATCH 1/3] Improve read-symbolic-link canonicalization

Passing #t for the CANONICALIZE option of read-symbolic-link now behaves
like the --canonicalize option of readlink(1), i.e. it recursively
follows every symlink in every component of the given path. When called
like this, read-symbolic-link like readlink(1) now verifies that all
components exist.
---
 posixunix.scm | 43 +--
 1 file changed, 29 insertions(+), 14 deletions(-)

diff --git a/posixunix.scm b/posixunix.scm
index a2776da..6cdb4ef 100644
--- a/posixunix.scm
+++ b/posixunix.scm
@@ -1241,21 +1241,36 @@ EOF
 
 (define-foreign-variable _filename_max int FILENAME_MAX)
 
-(define read-symbolic-link
+(define ##sys#read-symbolic-link
   (let ((buf (make-string (fx+ _filename_max 1
-(lambda (fname #!optional canonicalize)
-  (##sys#check-string fname 'read-symbolic-link)
-  (let ((len (##core#inline 
-		  C_do_readlink
-		  (##sys#make-c-string (##sys#expand-home-path fname) 'read-symbolic-link) buf)))
-	(if (fx len 0)
-	(if canonicalize
-		fname
-		(posix-error #:file-error 'read-symbolic-link cannot read symbolic link fname))
-	(let ((pathname (substring buf 0 len)))
-	  (if (and canonicalize (symbolic-link? pathname))
-		  (read-symbolic-link pathname 'canonicalize)
-		  pathname ) ) ) ) ) ) )
+(lambda (fname location)
+  (let ((len (##core#inline
+  C_do_readlink
+  (##sys#make-c-string fname location) buf)))
+(if (fx len 0)
+(posix-error #:file-error location cannot read symbolic link fname)
+(substring buf 0 len))
+
+(define (read-symbolic-link fname #!optional canonicalize)
+  (##sys#check-string fname 'read-symbolic-link)
+  (let ((fname (##sys#expand-home-path fname)))
+(if canonicalize
+(receive (base-origin base-directory directory-components) (decompose-directory fname)
+  (let loop ((components directory-components)
+ (result (string-append (or base-origin ) (or base-directory 
+(if (null? components)
+result
+(let ((pathname (make-pathname result (car components
+  (if (file-exists? pathname)
+  (loop (cdr components)
+(if (symbolic-link? pathname)
+(let ((target (##sys#read-symbolic-link pathname 'read-symbolic-link)))
+  (if (absolute-pathname? target)
+  link
+  (make-pathname result target)))
+pathname))
+  (##sys#signal-hook #:file-error 'read-symbolic-link could not canonicalize path with symbolic links, component does not exist pathname))
+(##sys#read-symbolic-link fname 'read-symbolic-link
 
 (define file-link
   (let ([link (foreign-lambda int link c-string c-string)])
-- 
1.8.2.3

From a7de20ed3d344f9fcaa981fd746091624869be60 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Sat, 25 May 2013 17:27:55 +0200
Subject: [PATCH 2/3] Fix read-symbolic-link types.db entry

The optional CANONICALIZE argument was missing.
---
 types.db | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/types.db b/types.db
index 01d84e2..c061092 100644
--- a/types.db
+++ b/types.db
@@ -1765,7 +1765,7 @@
 (prot/none fixnum)
 (prot/read fixnum)
 (prot/write fixnum)
-(read-symbolic-link (#(procedure #:clean #:enforce) read-symbolic-link (string) string))
+(read-symbolic-link (#(procedure #:clean #:enforce) read-symbolic-link (string #!optional boolean) string))
 (regular-file? (#(procedure #:clean #:enforce) regular-file? ((or string fixnum)) boolean))
 (seconds-local-time (#(procedure #:clean #:enforce) seconds-local-time (#!optional number) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
 (seconds-string (#(procedure #:clean #:enforce) seconds-string (#!optional number) string))
-- 
1.8.2.3

From a3cea67616c7d50092e20374ebc47176c7fee660 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Sat, 25 May 2013 17:31:12 +0200
Subject: [PATCH 3/3] Make tests work

Re: [Chicken-hackers] [PATCH] Add support for R7RS named characters and string escapes (except hex escapes)

2013-05-30 Thread Moritz Heidkamp
Peter Bex peter@xs4all.nl writes:
 The attached patch supplements Peter's to handle these cases.

 I've signed this off, and added a few test cases for this as well.
 Find this version attached.

Tested, signed off and pushed.

Thanks!
Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Fix #892 by causing panic instead of crash/segfault upon heap exhaustion

2013-07-28 Thread Moritz Heidkamp
Hi Peter,

Peter Bex peter@xs4all.nl writes:
 I remembered that normally when going out of memory, we get a heap full
 while resizing panic.  Attached is an even simpler patch which removes
 the (seemingly bogus?) check whether the new size equals the old size,
 and will simply carry on reclaiming, thereby triggering the familiar
 error message.  This should simplify matters a bit.

good job finding the root cause of this issue! Tests still pass and the
reproduction case from the ticket terminates with a sensible error
now. As far as I can tell the change is good and thus I signed it off
and pushed it.

Thanks!
Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Simplify and correct C_SIXTY_FOUR check (fix #979)

2013-08-20 Thread Moritz Heidkamp
Peter Bex peter@xs4all.nl writes:
 I've tested this change on NetBSD/amd64 with GCC and LLVM/Clang,
 and on Linux/i386 with GCC.  I'd appreciate it if people on other
 platforms/compilers (especially Windows and OS X) could test this.

Since no further make check results came in we decided to push it
now. But keep the results coming anyway. You can just use the current
master version (37cf50fe7f4dd2335fa330ab9538d245f1f58a06) now.

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Fix -no-parentheses-synonyms and -no-symbol-escapes

2013-09-17 Thread Moritz Heidkamp
Hey there,

Peter Bex peter@xs4all.nl writes:
 Here's a fix for this, with some regression tests to ensure this won't
 break again.

 I've hopefully simplified it enough to make it obviously correct.
 I also noticed that even after correcting the test, pipes occurring
 inside symbols were still allowed, so I've also fixed this by adding
 an additional check (the sep check was wrong so I ripped it out).

sorry for the delay! I just tested, reviewed, and pushed this
one. Thanks a lot for improving CHICKEN, guys :-)

We should probably get rid of the unterminated string message in case
it's actually an unterminated symbol at some point but this is not very
important IMHO.

Have a nice day!
Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Another subtle GC problem

2013-10-23 Thread Moritz Heidkamp
Hi,

Peter Bex peter@xs4all.nl writes:
 I decided to take another look at the GC in an attempt to
 understand it better, and found yet another iffy line of code:

 When comparing the heap growth to the current heap size plus
 the stack size, two unsigned quantities are subtracted from
 eachother (size is a C_uword parameter to C_rereclaim2,
 heap_size is a size_t, which is also unsigned), and then
 compared to be less than stack_size * 2.

 If the heap is not growing, but shrinking, this unsigned
 subtraction will underflow and cause it to result in a
 huge value.  This happens to work, but I think the attached
 patch makes it more explicit what's really happening: it
 only does the subtraction and comparison when the new size
 is bigger than the old heap size (so we're growing the heap,
 due to memory pressure).

looks OK and works fine AFAICT. Pushed!


 When shrinking the heap, this check won't need to be run because
 we've just done a GC, so there *should be* no pressure on
 the nursery, so it won't get copied to the heap.  But I don't
 fully grok this part yet, so don't take my word for it.

So this would get rid of one comparsion operation per major GC? I'd
guess this is negligible, no?

Thanks!
Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Treat lone carriage returns as line endings in ##sys#scan-buffer-line

2013-11-03 Thread Moritz Heidkamp
Peter Bex peter@xs4all.nl writes:
 Ah, very good!

 I have nothing to comment on this, so I'm just attaching them as-is,
 plus a signed-off-by line, so the next guy can just sign it off and
 push. :)

 Thanks!

Thanks from me as well, I've pushed the patches and closed the ticket.

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Fix #566 and simplify/improve flonum printing code

2013-12-01 Thread Moritz Heidkamp
Hi Peter,

Peter Bex peter@xs4all.nl writes:

 In order to fix #566, I decided it's much easier to rip out the
 HAVE_GCVT definition in Cygwin.  After testing on several platforms,
 it turns out that gcvt() is really not required, and it's deprecated
 by POSIX as well.  So we should probably stop using it anyway; this
 also simplifies testing as it doesn't needlessly use different library
 functions on different platforms.

 I tried to figure out why HAVE_GCVT was introduced in the first place,
 but it goes all the way back to the very first commit in the NonGNU CVS
 even.  Felix mentioned that he seemed to recall that it had something
 to do with making behaviour of the various Windows builds consistent
 among eachother.

 However, I've tested all three Windows builds, and they all behave
 equally well (or better) with s[n]printf() instead of gcvt().  We no
 longer have a MSVC build, so the original problem probably was there,
 or it was in an older version of Cygwin/MingW which has been fixed in
 the meanwhile (it's been over 10 years, so a thing or two will have
 changed there, as well!).  If we ever regain a MSVC build, we can
 look at restoring this code, but in the meanwhile I prefer the
 simplicity of this solution.  I was even able to get rid of the
 MINGW hack just below the changed code!

wow, thanks going through all that trouble! Shedding some light on dusty
corners like that is definitely a good idea to keep the code clean and
to improve it, too.


 I've also taken the opportunity to convert sprintf into a checked
 snprintf.  I'm not 100% sure but I don't think this requires a CVE
 since you can't easily (at all?) cause over 4096 flonum digits to
 get printed, and flonum-print-precision is rarely, if ever
 user-controlled.  Feel free to request a CVE if you disagree.

I'm not sure about this either. I've pushed the patch though as it looks
OK to me and all tests pass, too. I also grepped for gcvt afterwards
and couldn't find traces of it anymore. Good riddance!

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] Ticket 942 - make install uses user's umask

2013-12-01 Thread Moritz Heidkamp
Peter Bex peter@xs4all.nl writes:
 Thanks guys, for making and testing the patch!

 Here's a proper git patch w/ changelog.

Thanks from me, too. Signed off and pushed!

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH] Add proper list checks to assq/assv/assoc and memq/memv/member

2014-01-24 Thread Moritz Heidkamp
Fellow Chickeneers,

please see the commit message of the attached patch for details!

Cheers
Moritz

From 16396c41c63699e261f108af4cf48e15eb54bdde Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Tue, 21 Jan 2014 12:20:11 +0100
Subject: [PATCH] Add proper list checks to assq/assv/assoc and
 memq/memv/member

Previously it was possible to pass any kind of value to these procedures
as their list argument and they would just return #f in that case. This
patch adds checks to the checked variants at the end of the loop so it
will only incur additional runtime cost if either a non-list is passed
as the list argument or if the sought element is not found.

Note that this patch has the side-effect of also erroring out on
improper lists in the not-found case. This lead to an error getting
raised in the scrutinizer which is taken care of in this patch, too.

Furthermore, the test cases added for all procedures affected by this
patch uncovered a bug in the specializations defined for assq, assv, and
assoc in types.db which would specialize to the unsafe inlined variant
of assq for any kind of list rather than lists of pairs. This is also
fixed.
---
 runtime.c   | 18 ++
 scrutinizer.scm |  2 +-
 tests/library-tests.scm | 35 +++
 types.db|  6 +++---
 4 files changed, 57 insertions(+), 4 deletions(-)

diff --git a/runtime.c b/runtime.c
index c90b9dd..58dde49 100644
--- a/runtime.c
+++ b/runtime.c
@@ -5518,6 +5518,9 @@ C_regparm C_word C_fcall C_i_assq(C_word x, C_word lst)
 lst = C_u_i_cdr(lst);
   }
 
+  if(lst!=C_SCHEME_END_OF_LIST)
+barf(C_BAD_ARGUMENT_TYPE_ERROR, assq, lst);
+
   return C_SCHEME_FALSE;
 }
 
@@ -5537,6 +5540,9 @@ C_regparm C_word C_fcall C_i_assv(C_word x, C_word lst)
 lst = C_u_i_cdr(lst);
   }
 
+  if(lst!=C_SCHEME_END_OF_LIST)
+barf(C_BAD_ARGUMENT_TYPE_ERROR, assv, lst);
+
   return C_SCHEME_FALSE;
 }
 
@@ -5556,6 +5562,9 @@ C_regparm C_word C_fcall C_i_assoc(C_word x, C_word lst)
 lst = C_u_i_cdr(lst);
   }
 
+  if(lst!=C_SCHEME_END_OF_LIST)
+barf(C_BAD_ARGUMENT_TYPE_ERROR, assoc, lst);
+
   return C_SCHEME_FALSE;
 }
 
@@ -5567,6 +5576,9 @@ C_regparm C_word C_fcall C_i_memq(C_word x, C_word lst)
 else lst = C_u_i_cdr(lst);
   }
 
+  if(lst!=C_SCHEME_END_OF_LIST)
+barf(C_BAD_ARGUMENT_TYPE_ERROR, memq, lst);
+
   return C_SCHEME_FALSE;
 }
 
@@ -5589,6 +5601,9 @@ C_regparm C_word C_fcall C_i_memv(C_word x, C_word lst)
 else lst = C_u_i_cdr(lst);
   }
 
+  if(lst!=C_SCHEME_END_OF_LIST)
+barf(C_BAD_ARGUMENT_TYPE_ERROR, memv, lst);
+
   return C_SCHEME_FALSE;
 }
 
@@ -5599,6 +5614,9 @@ C_regparm C_word C_fcall C_i_member(C_word x, C_word lst)
 if(C_equalp(C_u_i_car(lst), x)) return lst;
 else lst = C_u_i_cdr(lst);
   }
+
+  if(lst!=C_SCHEME_END_OF_LIST)
+barf(C_BAD_ARGUMENT_TYPE_ERROR, member, lst);
   
   return C_SCHEME_FALSE;
 }
diff --git a/scrutinizer.scm b/scrutinizer.scm
index 020949d..e29e847 100644
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -2029,7 +2029,7 @@
 		  t))
 	((eq? 'deprecated (car t))
 	 (and (= 2 (length t)) (symbol? (second t)) t))
-	((or (memq '-- t) (memq '- t)) =
+	((and (list? t) (or (memq '-- t) (memq '- t))) =
 	 (lambda (p)
 	   (let* ((cleanf (eq? '-- (car p)))
 		  (ok (or (not rec) (not cleanf
diff --git a/tests/library-tests.scm b/tests/library-tests.scm
index 5418fbb..df0639f 100644
--- a/tests/library-tests.scm
+++ b/tests/library-tests.scm
@@ -541,3 +541,38 @@ A
 (assert (equal? '#(2 3) (subvector '#(1 2 3) 1)))
 (assert (equal? '#(2)   (subvector '#(1 2 3) 1 2)))
 (assert (equal? '#()(subvector '#(1 2 3) 1 1)))
+
+;;; alist accessors
+
+(assert (equal? '(foo) (assq 'foo '((foo)
+(assert (not (assq 'foo '(
+(assert-fail (assq 'foo '(bar)))
+(assert-fail (assq 'foo 'bar))
+
+
+(assert (equal? '(foo) (assv 'foo '((foo)
+(assert (not (assv 'foo '(
+(assert-fail (assv 'foo '(bar)))
+(assert-fail (assv 'foo 'bar))
+
+(assert (equal? '(foo) (assoc foo '((foo)
+(assert (not (assoc foo '(
+(assert-fail (assoc foo '(bar)))
+(assert-fail (assoc foo bar))
+
+;;; list membership
+
+(assert (equal? '(foo) (memq 'foo '(bar foo
+(assert (not (memq 'foo '(bar
+(assert (not (memq 'foo '(
+(assert-fail (memq 'foo 'foo))
+
+(assert (equal? '(foo) (memv 'foo '(bar foo
+(assert (not (memv 'foo '(bar
+(assert (not (memv 'foo '(
+(assert-fail (memv 'foo 'foo))
+
+(assert (equal? '(foo) (member foo '(bar foo
+(assert (not (member foo '(bar
+(assert (not (member foo '(
+(assert-fail (member foo foo))
diff --git a/types.db b/types.db
index f1d87a3..7156c9b 100644
--- a/types.db
+++ b/types.db
@@ -189,11 +189,11 @@
 
 (assq (forall (a b) (#(procedure #:clean) assq (* (list-of (pair a b)))
 		 (or boolean (pair a b
-  ((* list) (##core#inline C_u_i_assq #(1) #(2
+  ((* (list-of pair)) (##core#inline C_u_i_assq

Re: [Chicken-hackers] [PATCH] Add proper list checks to assq/assv/assoc and memq/memv/member

2014-01-27 Thread Moritz Heidkamp
Hey Peter,

Peter Bex peter@xs4all.nl writes:

 Thanks for this one.

thanks for reviewing!


 You somehow missed C_i_memv, though, which resulted in library-tests
 to fail.  So at least the tests are complete :)

Hm, that's weird, I was sure I had given it a final run. Anyway, I might
be missing something but my patch actually does cover C_i_memv (lines
73-82), doesn't it? AFAICT you added another check to C_u_i_memq,
referring to memv in the error message. But isn't the point of C_u_*
variants to be unchecked?

Note that I made a bootstrap build before running the tests. Maybe
that's why the tests didn't fail for me?
 
Thanks again and cheers!
Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Fix validation for multiple-return procedure types

2014-01-27 Thread Moritz Heidkamp
Evan Hanson ev...@foldling.org writes:
 Please see the patch for an explanation.

For the record: The error addressed by this patch came up in building
the r7rs egg as we didn't have test cases for this particular procedure
type declaration, yet.

Thanks a lot, Evan, it looks and works well. Signed off and pushed!

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Fix problem building git egg

2014-01-27 Thread Moritz Heidkamp
Hi,

Peter Bex peter@xs4all.nl writes:

 The attached patch is simple, I hope it's also correct: it only calls
 assq if there really is any info, otherwise just fall through.
 I'm not 100% sure whether this is the correct fix, because I don't
 really understand this code.

works well, make check still passes and the git egg now builds
again. Thanks a lot, I pushed it.


 Maybe it should complain that the extension doesn't (yet) exist,
 because it hasn't been installed at that point?  In that case, the
 check should be pulled into the cond check like so:

 ((and (memq id ##sys#explicit-library-modules)
   (##sys#extension-information id 'require-extension))
   = (lambda (info)
(let ((nr (assq 'import-only info))
  (s (assq 'syntax info)))
  ...)))

Not sure about this one. Apparently the git egg works even like this so
maybe such a complaint is not really necessary?

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH] Remove list argument check from C_u_i_memq

2014-02-05 Thread Moritz Heidkamp
This was erroneously added in 0a52536b7cb6b3d5a35ecc8f4c11131041ae873a

From 32bc17d3c3a313a4f869079f3777ed7dd2b8b9f4 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp mor...@twoticketsplease.de
Date: Wed, 5 Feb 2014 23:26:39 +0100
Subject: [PATCH] Remove list argument check from C_u_i_memq

This was erroneously added in 0a52536b7cb6b3d5a35ecc8f4c11131041ae873a
---
 runtime.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/runtime.c b/runtime.c
index 9575d80..f184d71 100644
--- a/runtime.c
+++ b/runtime.c
@@ -5600,9 +5600,6 @@ C_regparm C_word C_fcall C_u_i_memq(C_word x, C_word lst)
 else lst = C_u_i_cdr(lst);
   }
 
-  if(lst!=C_SCHEME_END_OF_LIST)
-barf(C_BAD_ARGUMENT_TYPE_ERROR, memv, lst);
-
   return C_SCHEME_FALSE;
 }
 
-- 
1.8.5.2

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [Chicken-users] Testers wanted; iOS patch

2014-03-17 Thread Moritz Heidkamp
Hi again,

Moritz Heidkamp mor...@twoticketsplease.de writes:

 I have a new version of this patch on my machine which applies cleanly
 again (Felix already reviewed it). I'll post it here when I'm back at
 it!

find it attached!

Moritz
From 4064075061189c7b743b69ebbacad82a089c5c34 Mon Sep 17 00:00:00 2001
From: felix fe...@call-with-current-continuation.org
Date: Thu, 19 Dec 2013 11:02:06 +0100
Subject: [PATCH] Added basic iOS support.

---
 Makefile.ios  | 111 ++
 README|  32 +++
 distribution/manifest |   1 +
 tcp.scm   |  33 ---
 4 files changed, 171 insertions(+), 6 deletions(-)
 create mode 100644 Makefile.ios

diff --git a/Makefile.ios b/Makefile.ios
new file mode 100644
index 000..dff7875
--- /dev/null
+++ b/Makefile.ios
@@ -0,0 +1,111 @@
+# Makefile.ios - configuration for Apple iOS -*- Makefile -*-
+#
+# Copyright (c) 2013, The Chicken Team
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
+# conditions are met:
+#
+#   Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+# disclaimer. 
+#   Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided with the distribution. 
+#   Neither the name of the author nor the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written permission. 
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+
+ifneq ($(CONFIG),)
+include $(CONFIG)
+endif
+
+SRCDIR = ./
+
+# platform configuration
+
+# for simulator:  ARCH ?= i386
+ARCH ?= armv7
+XCODE_PATH ?= /Applications/Xcode.app
+XCODE_DEVELOPER ?= $(XCODE_PATH)/Contents/Developer
+# for Xcode 4:  XCODE_TOOLPATH ?= $(XCODE_DEVELOPER)/Toolchains/XCodeDefault.xctoolchain/usr/bin
+XCODE_TOOLPATH ?= $(XCODE_DEVELOPER)/usr/bin
+# for simulator:  XCODE_SDK ?= $(XCODE_DEVELOPER)/Platforms/iPhoneSimulator.platform/Developer/SDKs/ipHoneSimulator7.0.sdk
+XCODE_SDK ?= $(XCODE_DEVELOPER)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk
+STATICBUILD = 1
+HACKED_APPLY =
+
+# options
+
+# for Xcode 4:  C_COMPILER ?= $(XCODE_DEVELOPER)/Platforms/iPhoneOS.platform/iPhoneOS.platform/Developer/usr/bin
+C_COMPILER ?= $(XCODE_TOOLPATH)/gcc
+LIBRARIAN ?= $(XCODE_DEVELOPER)/Platforms/iPhoneOS.platform/Developer/usr/bin/ar
+C_COMPILER_OPTIONS ?= -no-cpp-precomp -fno-strict-aliasing -fwrapv -fno-common -DHAVE_CHICKEN_CONFIG_H -mno-thumb -isysroot $(XCODE_SDK) -arch $(ARCH)
+ifdef DEBUGBUILD
+C_COMPILER_OPTIMIZATION_OPTIONS ?= -g -Wall -Wno-unused
+else
+ifdef OPTIMIZE_FOR_SPEED
+C_COMPILER_OPTIMIZATION_OPTIONS ?= -O3 -fomit-frame-pointer
+else
+C_COMPILER_OPTIMIZATION_OPTIONS ?= -Os -fomit-frame-pointer
+endif
+endif
+LIBRARIAN_OPTIONS = scru
+ASSEMBLER_OPTIONS =
+LINKER_OPTIONS = -isysroot $(XCODE_SDK) -arch $(ARCH)
+
+# special files
+
+CHICKEN_CONFIG_H = chicken-config.h
+
+# select default and internal settings
+
+include $(SRCDIR)/defaults.make
+
+chicken-config.h: chicken-defaults.h
+	echo /* GENERATED */ $@
+	echo #define HAVE_DIRENT_H 1 $@
+	echo #define HAVE_INTTYPES_H 1 $@
+	echo #define HAVE_LIMITS_H 1 $@
+	echo #define HAVE_LONG_LONG 1 $@
+	echo #define HAVE_MEMMOVE 1 $@
+	echo #define HAVE_MEMORY_H 1 $@
+	echo #define HAVE_POSIX_POLL 1 $@
+	echo #define HAVE_SIGACTION 1 $@
+	echo #define HAVE_SIGSETJMP 1 $@
+	echo #define HAVE_SIGPROCMASK 1 $@
+	echo #define HAVE_STDINT_H 1 $@
+	echo #define HAVE_STDLIB_H 1 $@
+	echo #define HAVE_STRERROR 1 $@
+	echo #define HAVE_STRINGS_H 1 $@
+	echo #define HAVE_STRING_H 1 $@
+	echo #define HAVE_STRTOLL 1 $@
+	echo #define HAVE_STRTOQ 1 $@
+	echo #define HAVE_SYS_STAT_H 1 $@
+	echo #define HAVE_SYS_TYPES_H 1 $@
+	echo #define HAVE_UNISTD_H 1 $@
+	echo #define HAVE_UNSIGNED_LONG_LONG 1 $@
+	echo #define STDC_HEADERS 1 $@
+	echo #define HAVE_ALLOCA 1 $@
+	echo #define HAVE_ALLOCA_H 1 $@
+	echo #define HAVE_GRP_H 1 $@
+	echo #define HAVE_ERRNO_H 1 $@
+	echo #define HAVE_SYSEXITS_H 1

Re: [Chicken-hackers] [Chicken-users] Testers wanted; iOS patch

2014-03-25 Thread Moritz Heidkamp
Kon Lovett konlov...@gmail.com writes:

 If I am to be one of the two then my suggestion is to begin the
 release process w/o this patch. Don't believe I will be able to
 generate a test case that soon. (Sorry, have looming releases.)

I've finally gotten around to testing it with our application and (as it
seems to work fine) pushed the patch into master. It would still be good
to have a second tester, of course, so if you are still inclined to give
it a try that would be great!

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Consolidate NEWS for 4.9.0

2014-04-04 Thread Moritz Heidkamp
Hi Peter

Peter Bex peter@xs4all.nl writes:

 Here's a patch which consolidates the NEWS file for the upcoming
 4.9.0 release.  Please also cherry-pick (or merge?) it into the
 prerelease branch after importing it!

 I've also added notes for the Android and iOS support; we forgot
 about that when support for these platforms was added.

thank you very much, Peter. I've pushed the patch with a slight
clarification of the resizable call trace buffer item as discussed on
IRC. I've also merged the resulting master into the prerelease branch
one more time which now also includes Mario's recent manual update as
well as the removal of FILE_INFO_SIZE which I deemed safe enough.

Cheers
Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] incorrect warning during compilation

2014-06-27 Thread Moritz Heidkamp
Hi,

Felix Winkelmann felix.winkelm...@bevuta.com writes:
 So, I can't think of a solution that answers all of your questions.
 I would go with the scheme-pointer. 

 We could add another foreign type, that accepts strings but doesn't
 copy. I'll look into that.

how about extending the [nonnull-]scheme-pointer type to be
parameterizable like [nonnull-]c-pointer so that Kristian could use
(scheme-pointer char) for his case? Would that be possible somehow?

Moritz
-- 
bevuta IT GmbH - professionelle IT-Lösungen
Marktstraße 10 | http://www.bevuta.com/ | HRB 62476 AG Köln
50968 Köln | Tel.: +49 221 282678-0 | Geschäftsführer: Pablo Beyen

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH 1/2] Set HAVE_POSIX_POLL for Android

2014-08-04 Thread Moritz Heidkamp
Hi everyone,

the attached patch enables poll(2) for the Android platform. I verified
via strace on an Android device that poll(2) is actually used after the
patch. A preliminary NEWS entry is included but needs to be updated once
we have a CVE number for this issue.

Moritz
-- 
bevuta IT GmbH - professionelle IT-Lösungen
Marktstraße 10 | http://www.bevuta.com/ | HRB 62476 AG Köln
50968 Köln | Tel.: +49 221 282678-0 | Geschäftsführer: Pablo Beyen

From c902019d70e4389c447f39152e71e1ddfd58395b Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp moritz.heidk...@bevuta.com
Date: Mon, 4 Aug 2014 15:19:48 +0200
Subject: [PATCH 1/2] Set HAVE_POSIX_POLL for Android

---
 Makefile.android | 1 +
 NEWS | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/Makefile.android b/Makefile.android
index 819587f..ac72ee8 100644
--- a/Makefile.android
+++ b/Makefile.android
@@ -69,6 +69,7 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
+	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_STDINT_H 1 $@
diff --git a/NEWS b/NEWS
index 20ece38..b854f8d 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,8 @@
 4.9.1
 
+- Security fixes
+  - Use POSIX poll() on Android (CVE pending).
+
 - Core libraries
   - alist-ref from unit data-structures now gives an error when passed
 a non-list, for consistency with assv/assq/assoc.
-- 
1.9.4

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH 1/2] Set HAVE_POSIX_POLL for Android

2014-08-04 Thread Moritz Heidkamp
Moritz Heidkamp moritz.heidk...@bevuta.com writes:
 the attached patch enables poll(2) for the Android platform.

Forgot to mention that I think this should probably go into stability.

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH 2/2] Invert poll(2) flag default

2014-08-04 Thread Moritz Heidkamp
The attached patch is a follow-up to my previous patch (the one which
enables poll(2) on Android). It inverts the HAVE_POSIX_POLL flag to
HAVE_NO_POSIX_POLL which only needs to be set when poll(2) is *not*
available rather than the other way around. The purpose is to make the
safe choice the default. 

Since this is merely intended to make future changes less likely to
accidentally disable poll(2) it doesn't need to be included in the
stability branch.

I've tested the patch on Linux x86_64 only. Even though it's a rather
trivial patch it would probably be good to also test this on at least
one of the Windows platforms just in case. Any takers?

Thanks to Florian Zumbiehl for the idea for this patch.

Moritz
-- 
bevuta IT GmbH - professionelle IT-Lösungen
Marktstraße 10 | http://www.bevuta.com/ | HRB 62476 AG Köln
50968 Köln | Tel.: +49 221 282678-0 | Geschäftsführer: Pablo Beyen

From 05a5743437e255ca3402b8a56ec69c1d6b2b8f90 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp moritz.heidk...@bevuta.com
Date: Mon, 4 Aug 2014 15:23:13 +0200
Subject: [PATCH 2/2] Invert poll(2) flag default

To be on the safe side we now assume that poll(2) is available by
default and define the HAVE_NO_POSIX_POLL flag in case it isn't
available on a platform.
---
 Makefile.aix   | 1 -
 Makefile.android   | 1 -
 Makefile.bsd   | 1 -
 Makefile.cross-linux-mingw | 1 +
 Makefile.cygwin| 1 -
 Makefile.haiku | 1 -
 Makefile.hurd  | 1 -
 Makefile.ios   | 1 -
 Makefile.linux | 1 -
 Makefile.macosx| 1 -
 Makefile.mingw | 1 +
 Makefile.mingw-msys| 1 +
 Makefile.solaris   | 1 -
 runtime.c  | 4 ++--
 scheduler.scm  | 2 +-
 15 files changed, 6 insertions(+), 13 deletions(-)

diff --git a/Makefile.aix b/Makefile.aix
index 68b33b7..72e9715 100644
--- a/Makefile.aix
+++ b/Makefile.aix
@@ -74,7 +74,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_STDINT_H 1 $@
diff --git a/Makefile.android b/Makefile.android
index ac72ee8..819587f 100644
--- a/Makefile.android
+++ b/Makefile.android
@@ -69,7 +69,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_STDINT_H 1 $@
diff --git a/Makefile.bsd b/Makefile.bsd
index af28814..c69ea35 100644
--- a/Makefile.bsd
+++ b/Makefile.bsd
@@ -72,7 +72,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_SIGPROCMASK 1 $@
diff --git a/Makefile.cross-linux-mingw b/Makefile.cross-linux-mingw
index 32a6f2f..d8951eb 100644
--- a/Makefile.cross-linux-mingw
+++ b/Makefile.cross-linux-mingw
@@ -95,6 +95,7 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
+	echo #define HAVE_NO_POSIX_POLL 1 $@
 	echo #define HAVE_STDINT_H 1 $@
 	echo #define HAVE_STDLIB_H 1 $@
 	echo #define HAVE_STRERROR 1 $@
diff --git a/Makefile.cygwin b/Makefile.cygwin
index 376f6b8..f499c90 100644
--- a/Makefile.cygwin
+++ b/Makefile.cygwin
@@ -89,7 +89,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_STDINT_H 1 $@
 	echo #define HAVE_STDLIB_H 1 $@
diff --git a/Makefile.haiku b/Makefile.haiku
index a1f5841..7eeec26 100644
--- a/Makefile.haiku
+++ b/Makefile.haiku
@@ -66,7 +66,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_SIGPROCMASK 1 $@
diff --git a/Makefile.hurd b/Makefile.hurd
index 6a97db6..d2f9a1f 100644
--- a/Makefile.hurd
+++ b/Makefile.hurd
@@ -67,7 +67,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_SIGPROCMASK 1 $@
diff --git a/Makefile.ios b/Makefile.ios
index 6f82e00..6c99c47 100644
--- a/Makefile.ios
+++ b/Makefile.ios
@@ -73,7 +73,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define

[Chicken-hackers] [PATCH] Don't enable debugging on Android by default

2014-08-04 Thread Moritz Heidkamp
This was probably accidentally left in when generating the Android
patch.
-- 
bevuta IT GmbH - professionelle IT-Lösungen
Marktstraße 10 | http://www.bevuta.com/ | HRB 62476 AG Köln
50968 Köln | Tel.: +49 221 282678-0 | Geschäftsführer: Pablo Beyen
From 8d21fae15e69c65d0b3d1e721de557588f0a4dfa Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp moritz.heidk...@bevuta.com
Date: Mon, 4 Aug 2014 18:29:26 +0200
Subject: [PATCH] Don't enable debugging on Android by default

---
 runtime.c | 4 
 1 file changed, 4 deletions(-)

diff --git a/runtime.c b/runtime.c
index 1a68906..8608506 100644
--- a/runtime.c
+++ b/runtime.c
@@ -640,10 +640,6 @@ int CHICKEN_initialize(int heap, int stack, int symbols, void *toplevel)
   if(chicken_is_initialized) return 1;
   else chicken_is_initialized = 1;
 
-#ifdef __ANDROID__
-  debug_mode = 2;
-#endif
-
   if(debug_mode) 
 C_dbg(C_text(debug), C_text(application startup...\n));
 
-- 
1.9.4

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH 2/2] Invert poll(2) flag default

2014-08-20 Thread Moritz Heidkamp
HI Peter,

Peter Bex peter@xs4all.nl writes:

 This seems like a good idea.  However, could you also swap the two
 code blocks?  A double negation (#ifndef NO_...) can be confusing, and
 by making it read #ifdef NO_POSIX_POLL (I'd probably drop the
 HAVE_ prefix, as that's more idiomatic AFAICT), it becomes a little
 clearer.

you are right--my intention was to make the patch as non-invasive as
possible so its purpose is obvious. Now that the purpose should be
clear, find attached an updated version which swaps the code blocks to
avoid the double negation. I also dropped the HAVE_ prefix as per your
suggestion, I didn't see the other flags names like that. Thanks for the
hint!

Moritz
From 27097791ee5de99d52d513858b10d4e43ce0e33b Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp moritz.heidk...@bevuta.com
Date: Mon, 4 Aug 2014 15:23:13 +0200
Subject: [PATCH] Invert poll(2) flag default

To be on the safe side we now assume that poll(2) is available by
default and define the NO_POSIX_POLL flag in case it isn't available on
a platform.
---
 Makefile.aix   |  1 -
 Makefile.android   |  1 -
 Makefile.bsd   |  1 -
 Makefile.cross-linux-mingw |  1 +
 Makefile.cygwin|  1 -
 Makefile.haiku |  1 -
 Makefile.hurd  |  1 -
 Makefile.ios   |  1 -
 Makefile.linux |  1 -
 Makefile.macosx|  1 -
 Makefile.mingw |  1 +
 Makefile.mingw-msys|  1 +
 Makefile.solaris   |  1 -
 runtime.c  | 14 ++--
 scheduler.scm  | 54 +++---
 15 files changed, 37 insertions(+), 44 deletions(-)

diff --git a/Makefile.aix b/Makefile.aix
index 68b33b7..72e9715 100644
--- a/Makefile.aix
+++ b/Makefile.aix
@@ -74,7 +74,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_STDINT_H 1 $@
diff --git a/Makefile.android b/Makefile.android
index ac72ee8..819587f 100644
--- a/Makefile.android
+++ b/Makefile.android
@@ -69,7 +69,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_STDINT_H 1 $@
diff --git a/Makefile.bsd b/Makefile.bsd
index af28814..c69ea35 100644
--- a/Makefile.bsd
+++ b/Makefile.bsd
@@ -72,7 +72,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_SIGPROCMASK 1 $@
diff --git a/Makefile.cross-linux-mingw b/Makefile.cross-linux-mingw
index 32a6f2f..6e4c34a 100644
--- a/Makefile.cross-linux-mingw
+++ b/Makefile.cross-linux-mingw
@@ -95,6 +95,7 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
+	echo #define NO_POSIX_POLL 1 $@
 	echo #define HAVE_STDINT_H 1 $@
 	echo #define HAVE_STDLIB_H 1 $@
 	echo #define HAVE_STRERROR 1 $@
diff --git a/Makefile.cygwin b/Makefile.cygwin
index 376f6b8..f499c90 100644
--- a/Makefile.cygwin
+++ b/Makefile.cygwin
@@ -89,7 +89,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_STDINT_H 1 $@
 	echo #define HAVE_STDLIB_H 1 $@
diff --git a/Makefile.haiku b/Makefile.haiku
index a1f5841..7eeec26 100644
--- a/Makefile.haiku
+++ b/Makefile.haiku
@@ -66,7 +66,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_SIGPROCMASK 1 $@
diff --git a/Makefile.hurd b/Makefile.hurd
index 6a97db6..d2f9a1f 100644
--- a/Makefile.hurd
+++ b/Makefile.hurd
@@ -67,7 +67,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP 1 $@
 	echo #define HAVE_SIGPROCMASK 1 $@
diff --git a/Makefile.ios b/Makefile.ios
index 6f82e00..6c99c47 100644
--- a/Makefile.ios
+++ b/Makefile.ios
@@ -73,7 +73,6 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 $@
 	echo #define HAVE_MEMMOVE 1 $@
 	echo #define HAVE_MEMORY_H 1 $@
-	echo #define HAVE_POSIX_POLL 1 $@
 	echo #define HAVE_SIGACTION 1 $@
 	echo #define HAVE_SIGSETJMP

Re: [Chicken-hackers] [PATCH 0/5] List scrutiny special cases

2014-09-09 Thread Moritz Heidkamp
John Cowan co...@mercury.ccil.org writes:

 Thanks, that's helpful.  The trouble is that such a file is an internal
 (not publicly documented, unstable) format.  So if I want to ship portable
 code along with type information for Chicken, I have to:

 1) insert the type declarations in the code

 2) compile with the -emit-type-file option

 3) strip out the declarations again

 4) hope the .types file continues to work with new compiler releases

Wait, what? Why not just something like this:

  (cond-expand
(chicken
  (include chicken-type-decls.scm))
(else))


 That's really intolerable.  I suppose if I confine myself to : and
 define-type, then I could ship my code along with macros that turn them
 into (begin).

FTR, there is the type-stubs egg which defines those macros and some
more. It's purpose is to make code compatible with CHICKENS that didn't
yet have the type syntax but could be used for portability purposes,
too.

Moritz

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH] Fix buffer overrun in substring-index[-ci]

2014-12-14 Thread Moritz Heidkamp
Dear Chickeneers,

the attached patch fixes a potential buffer overrun in
substring-index[-ci] I ran into today (pun intended). See commit message
for details. I included a regression test but I'm not sure whether it's
ideal because it adds a dependency on object-evict to the
data-structures tests. Alternative ideas welcome. While I was at it I
also added a range check for the start index argument and got rid of the
square brackets :-)

I guess this might warrant a CVE?

Cheers
Moritz
-- 
bevuta IT GmbH - professional IT solutions
Marktstrasse 10 | http://www.bevuta.com/ | HRB 62476 AG Cologne
D-50968 Cologne | Tel.: +49 221 282678-0 | CEO: Pablo Beyen
From 230eed2745ea2b57de3c9073e8596892b1da2d8c Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp moritz.heidk...@bevuta.com
Date: Sun, 14 Dec 2014 23:33:52 +0100
Subject: [PATCH] Fix buffer overrun in substring-index[-ci]

When passing a start index greater than 0, substring-index[-ci] would
scan past the end of the subject string, leading to bogus results in
case the substring is accidentally run into beyond the end of the
subject. This patch fixes the issue and also adds a range check for the
start index.
---
 data-structures.scm | 22 ++
 tests/data-structures-tests.scm | 11 ++-
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/data-structures.scm b/data-structures.scm
index a94c163..511a3c1 100644
--- a/data-structures.scm
+++ b/data-structures.scm
@@ -307,15 +307,21 @@
   (define (traverse which where start test loc)
 (##sys#check-string which loc)
 (##sys#check-string where loc)
-(let ([wherelen (##sys#size where)]
-	  [whichlen (##sys#size which)] )
+(let* ((wherelen (##sys#size where))
+	   (whichlen (##sys#size which))
+	   (end (fx- wherelen whichlen)))
   (##sys#check-exact start loc)
-  (let loop ([istart start] [iend whichlen])
-	(cond [(fx iend wherelen) #f]
-	  [(test istart whichlen) istart]
-	  [else 
-	   (loop (fx+ istart 1)
-		 (fx+ iend 1) ) ] ) ) ) )
+  (if (and (fx= start 0)
+	   (fx wherelen start))
+	  (let loop ((istart start))
+	(cond ((fx istart end) #f)
+		  ((test istart whichlen) istart)
+		  (else (loop (fx+ istart 1)
+	  (##sys#error-hook (foreign-value C_OUT_OF_RANGE_ERROR int)
+			loc
+			start
+			wherelen
+
   (set! ##sys#substring-index 
 (lambda (which where start)
   (traverse 
diff --git a/tests/data-structures-tests.scm b/tests/data-structures-tests.scm
index 51c25a9..34ccb2f 100644
--- a/tests/data-structures-tests.scm
+++ b/tests/data-structures-tests.scm
@@ -1,6 +1,6 @@
  data-structures-tests.scm
 
-(use data-structures)
+(use data-structures lolevel)
 
 (define-syntax assert-error
   (syntax-rules ()
@@ -57,6 +57,15 @@
 (assert ( 0 (string-compare3-ci foo\x00b foo\x00a)))
 (assert ( 0 (string-compare3-ci foo\x00b foo\x00A)))
 
+
+;; This used to fail because substring-index and co. used to search
+;; beyond the end of the subject string when a start index  0 was
+;; provided. We use object-evict to ensure that the strings are placed
+;; in adjacent memory ranges so we can detect this error.
+(let* ((foo (object-evict (make-string 32 #\x)))
+   (bar (object-evict y)))
+  (assert (not (substring-index y foo 30
+
 ;; topological-sort
 
 (assert (equal? '() (topological-sort '() eq?)))
-- 
2.1.3



signature.asc
Description: PGP signature
___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH][4][5] Add arity checks for ##core#proc-class platform rewrites

2015-03-31 Thread Moritz Heidkamp
Hey Evan,

On 22 March 2015 06:36 CET, Evan Hanson wrote:

 Let me know if any of that was unclear. The patch against 5 is obviously
 more important, but I'd like them both to go in, assuming they look OK.

thanks a lot for this thorough explanation and for digging into this
issue in the first place! I've reviewed the patches and they look good
From my perspective, though I have to say that I don't know this part of
CHICKEN very well. In fact, it was the first time I've looked into it in
any detail at all, so thanks for this opportunity to learn :-)

I've done bootstrap builds and ran checks on both branches, everything
seemed to check out fine, so signed off and pushed!

Moritz


signature.asc
Description: PGP signature
___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [Chicken-announce] CHICKEN 4.10.0 release candidate 1 available

2015-06-17 Thread Moritz Heidkamp
On 10 June 2015 20:39 CEST, Mario Domenech Goulart wrote:

 I've found a small regression related to substring-index[-ci].  I hope
 the attached patch fixes it.

For posterity: Mario and I poked away at this one a bit more via IRC and
found a few more issues. Eventually, a modified version of this patch
(along with a handful of additional tests) was applied to prerelease
(dde858e), master (e6723de) and chicken-5 (5de5c6e).

We'll prepare a new RC soon. Thanks for all the test results so far!

Moritz


signature.asc
Description: PGP signature
___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Ensure try-compile cleans up tempfiles (#1213)

2015-09-06 Thread Moritz Heidkamp
Hi Peter,

On 24 August 2015 21:52 CEST, Peter Bex wrote:

> I noticed that try-compile leaves a temp.1234.o file in the current
> directory when invoked (see #1213).   The definition actually has a
> "oname" variable, but it isn't used.  So the attached patch causes it
> to explicitly pass "-o ONAME" to the compiler, to ensure that it
> writes to that file (which should now be created under the tempdir
> instead of the current directory as an added bonus), and then removes
> it.

thanks for the patch, I applied it to the latest master and everything
seems to work fine. I also manually tested it with a dummy egg which
uses try-compile.


> Perhaps we should also try adding shellpath to *target-lib-home*, but
> I decided to keep this change self-contained and ask, first.

I think this is a trivial and uncontroversial change, feel free to just
apply it!


> This change should also go into the chicken-5 branch, I think.

I did that, too, using the same test as above.

Moritz


signature.asc
Description: PGP signature
___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] [PATCH] Fix unsafe specializations in types.db

2015-09-06 Thread Moritz Heidkamp
Hi everyone,

the attached patch addresses the issue explained in
https://bugs.call-cc.org/ticket/1216 as well as similar ones I found by
sifting through the whole of types.db, though I can't guarantee that any
other instances slipped my attention, of course.

The only one I'm a bit unhappy about is `move-memory!' as I couldn't
find a safe inline version of it. Does anyone have a clue whether there
is such a thing already?

Moritz
From c40e4f11abb29c6f2451656a3c09ea3272c5ddb8 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp <moritz.heidk...@bevuta.com>
Date: Sat, 5 Sep 2015 00:24:32 +0200
Subject: [PATCH] Fix unsafe specializations in types.db

This patch fixes some specializations in types.db which could lead to
unsafe code. In all cases, the specialized versions did not only elide
runtime type checks but also range checks for their arguments. For
example, `string-ref' could have been specialized so that it would allow
for an index pointing past the end of the string to be passed.

Fixes #1216.
---
 types.db | 20 
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/types.db b/types.db
index b79020c..4058872 100644
--- a/types.db
+++ b/types.db
@@ -551,10 +551,10 @@
 	   ((string) (##sys#size #(1
 
 (string-ref (#(procedure #:clean #:enforce) string-ref (string fixnum) char)
-	((string fixnum) (##core#inline "C_subchar" #(1) #(2
+	((string fixnum) (##core#inline "C_i_string_ref" #(1) #(2
 
 (string-set! (#(procedure #:enforce) string-set! (string fixnum char) undefined)
-	 ((string fixnum char) (##core#inline "C_setsubchar" #(1) #(2) #(3
+	 ((string fixnum char) (##core#inline "C_i_string_set" #(1) #(2) #(3
 
 (string-append (#(procedure #:clean #:enforce) string-append (#!rest string) string)
 	   ((string string) (##sys#string-append #(1) #(2
@@ -731,7 +731,7 @@
 (arithmetic-shift (#(procedure #:clean #:enforce) arithmetic-shift (number number) number))
 
 (bit-set? (#(procedure #:clean #:enforce) bit-set? (number fixnum) boolean)
-	  ((fixnum fixnum) (##core#inline "C_u_i_bit_setp" #(1) #(2
+	  ((fixnum fixnum) (##core#inline "C_i_bit_setp" #(1) #(2
 
 (bitwise-and (#(procedure #:clean #:enforce) bitwise-and (#!rest number) number)
 	 ((fixnum fixnum) (fixnum)
@@ -1488,19 +1488,7 @@
 (make-record-instance (#(procedure #:clean) make-record-instance (symbol #!rest) *))
 (make-weak-locative (#(procedure #:clean #:enforce) make-weak-locative (* #!optional fixnum) locative))
 
-(move-memory! (#(procedure #:enforce) move-memory! (* * #!optional fixnum fixnum fixnum) *)
-	  ((pointer pointer fixnum)
-	   (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) '0 '0))
-	  ((pointer pointer fixnum fixnum)
-	   (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) '0 #(4)))
-	  ((pointer pointer fixnum fixnum fixnum)
-	   (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) #(5) #(4)))
-	  ((locative locative fixnum)
-	   (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) '0 '0))
-	  ((locative locative fixnum fixnum)
-	   (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) '0 #(4)))
-	  ((locative locative fixnum fixnum fixnum)
-	   (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) #(5) #(4
+(move-memory! (#(procedure #:enforce) move-memory! (* * #!optional fixnum fixnum fixnum) *))
 
 (mutate-procedure!
  (#(procedure #:enforce) mutate-procedure! (procedure (procedure (procedure) . *)) procedure))
-- 
2.4.6



signature.asc
Description: PGP signature
___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


[Chicken-hackers] Fix

2017-04-14 Thread Moritz Heidkamp
Hi everyone,

char-ready? on string input ports would return #f when they've reached
the end of their underlying string. However, char-ready? is supposed to
return #t in this case. The attached patch fixes this and adds a
corresponding regression test. It applies to both master and chicken-5.

Cheers
Moritz
>From 0fb9dd6eb4f9380e6ef44cf4ee2030e1f11ef412 Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp <moritz.heidk...@bevuta.com>
Date: Fri, 14 Apr 2017 16:22:39 +0200
Subject: [PATCH] Fix char-ready? on EOF for string input ports

char-ready? on string input ports would return #f when they've reached
the end of their underlying string. However, char-ready? is supposed
to return #t in this case.
---
 library.scm  | 3 +--
 tests/port-tests.scm | 2 ++
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/library.scm b/library.scm
index 3caba429..51d6793b 100644
--- a/library.scm
+++ b/library.scm
@@ -4255,8 +4255,7 @@ EOF
 	   (##sys#setislot p 10 (fx+ position len)) ) ) )
  void ; close
  (lambda (p) #f)			; flush-output
- (lambda (p)			; char-ready?
-   (fx< (##sys#slot p 10) (##sys#slot p 11)) )
+ (lambda (p) #t)			; char-ready?
  (lambda (p n dest start)		; read-string!
(let* ((pos (##sys#slot p 10))
 	  (n2 (fx- (##sys#slot p 11) pos) ) )
diff --git a/tests/port-tests.scm b/tests/port-tests.scm
index ec6a323b..463e31e6 100644
--- a/tests/port-tests.scm
+++ b/tests/port-tests.scm
@@ -42,6 +42,8 @@ EOF
   (read-line p)))
 (assert (= 20 (length (read-lines (open-input-string *text*)
 
+(assert (char-ready? (open-input-string "")))
+
 (let ((out (open-output-string)))
   (test-equal "Initially, output string is empty"
   (get-output-string out) "")
-- 
2.12.0

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [PATCH] Fix segfault in get-environment-variable and three C compiler warnings

2018-11-25 Thread Moritz Heidkamp
Hi Peter,

I tested building again with your patch and the warnings are now
gone. Pushed :-)

Moritz
-- 
bevuta IT GmbH
Marktstrasse 10 | http://www.bevuta.com/ | HRB 62476 AG Cologne
D-50968 Cologne | Tel.: +49 221 282678-0 | CEO: Pablo Beyen

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers