Fixed :final and make to, by => :to :by
I had a bug. I had an inconsistency. Don't worry. All is fixed.
This commit is contained in:
		
							parent
							
								
									f6d7b01793
								
							
						
					
					
						commit
						5847bd21d4
					
				
					 3 changed files with 22 additions and 16 deletions
				
			
		|  | @ -35,11 +35,13 @@ | ||||||
|   ;; auxiliary auxiliary syntax |   ;; auxiliary auxiliary syntax | ||||||
|   ;; for vectoring |   ;; for vectoring | ||||||
|   :length :fill |   :length :fill | ||||||
|  |   ;;for up-from and down-to | ||||||
|  |   :to :by | ||||||
|   ;; Internal syntax. %acc is turned into :acc by the forify macro |   ;; Internal syntax. %acc is turned into :acc by the forify macro | ||||||
|   ;; it is used make it possible to report an error if :acc is used in |   ;; it is used make it possible to report an error if :acc is used in | ||||||
|   ;; one of the simple macros. |   ;; one of the simple macros. | ||||||
|   %acc |   %acc) | ||||||
|   ) | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| (include "goof/iterators.scm") | (include "goof/iterators.scm") | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								goof.scm
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								goof.scm
									
										
									
									
									
								
							|  | @ -50,6 +50,7 @@ | ||||||
|              |              | ||||||
|             :when :unless :break :final :let :let* :subloop :for :acc |             :when :unless :break :final :let :let* :subloop :for :acc | ||||||
|             :length :fill |             :length :fill | ||||||
|  |             :to :by | ||||||
| 
 | 
 | ||||||
|             in |             in | ||||||
|             in-list |             in-list | ||||||
|  | @ -178,11 +179,14 @@ | ||||||
|   (syntax-rules () |   (syntax-rules () | ||||||
|     ((_ loop-name final-fun () ((v s) ...)) |     ((_ loop-name final-fun () ((v s) ...)) | ||||||
|      (loop-name s ...)) |      (loop-name s ...)) | ||||||
|  |     ;; This is somewhat of an ugly thing. We want to test (or user-finals ...) | ||||||
|  |     ;; before updating the loop variables, but we want to update the loop variables | ||||||
|  |     ;; before running the final-fun. | ||||||
|     ((_ loop-name final-fun (user-finals ...) ((v s) ...)) |     ((_ loop-name final-fun (user-finals ...) ((v s) ...)) | ||||||
|      (let ((v s) ...) |      (if (or user-finals ...) | ||||||
|        (if (or user-finals ...) |          (let ((v s) ...) | ||||||
|            final-fun |            final-fun) | ||||||
|            (loop-name v ...)))))) |          (loop-name s ...))))) | ||||||
| 
 | 
 | ||||||
|       |       | ||||||
| (define (syntax->list stx) | (define (syntax->list stx) | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| ;; iterators.scm - iterators for goof-loop.  | ;; iterators.scm - iterators for goof-loop.  | ||||||
| ;; | ;; | ||||||
| ;; Copyright 2020 Linus Björnstam | ;; Copyright 2020-2021 Linus Björnstam | ||||||
| ;; Copyright 2000-2015 Alex Shinn (original author of chibi-loop) | ;; Copyright 2000-2015 Alex Shinn (original author of chibi-loop) | ||||||
| ;; All rights reserved. | ;; All rights reserved. | ||||||
| ;; | ;; | ||||||
|  | @ -258,18 +258,18 @@ | ||||||
|          (g)))))) |          (g)))))) | ||||||
| 
 | 
 | ||||||
| (define-syntax up-from | (define-syntax up-from | ||||||
|   (syntax-rules (to by) |   (syntax-rules (:to :by) | ||||||
|     ((up-from :for (() . args) next . rest) |     ((up-from :for (() . args) next . rest) | ||||||
|      (up-from :for ((var) . args) next . rest)) |      (up-from :for ((var) . args) next . rest)) | ||||||
|     ((up-from :for ((var) (start (to limit) (by step))) next . rest) |     ((up-from :for ((var) (start (:to limit) (:by step))) next . rest) | ||||||
|      (next ((s start) (l limit) (e step)) |      (next ((s start) (l limit) (e step)) | ||||||
|            ((var s (+ var e))) |            ((var s (+ var e))) | ||||||
|            ((>= var l)) |            ((>= var l)) | ||||||
|            () () . rest)) |            () () . rest)) | ||||||
|     ((up-from :for ((var) (start (to limit))) next . rest) |     ((up-from :for ((var) (start (:to limit))) next . rest) | ||||||
|      (next ((s start) (l limit)) ((var s (+ var 1))) |      (next ((s start) (l limit)) ((var s (+ var 1))) | ||||||
|            ((>= var l)) () () . rest)) |            ((>= var l)) () () . rest)) | ||||||
|     ((up-from :for ((var) (start (by step))) next . rest) |     ((up-from :for ((var) (start (:by step))) next . rest) | ||||||
|      (next ((s start) (e step)) |      (next ((s start) (e step)) | ||||||
|            ((var s (+ var e))) () () () . rest)) |            ((var s (+ var e))) () () () . rest)) | ||||||
|     ((up-from :for ((var) (start)) next . rest) |     ((up-from :for ((var) (start)) next . rest) | ||||||
|  | @ -282,18 +282,18 @@ | ||||||
|      (up-from :for ((var) (start limit 1)) next . rest)))) |      (up-from :for ((var) (start limit 1)) next . rest)))) | ||||||
| 
 | 
 | ||||||
| (define-syntax down-from | (define-syntax down-from | ||||||
|   (syntax-rules (to by) |   (syntax-rules (:to :by) | ||||||
|     ((down-from :for (() . args) next . rest) |     ((down-from :for (() . args) next . rest) | ||||||
|      (down-from :for ((var) . args) next . rest)) |      (down-from :for ((var) . args) next . rest)) | ||||||
|     ((down-from :for ((var) (start (to limit) (by step))) next . rest) |     ((down-from :for ((var) (start (:to limit) (:by step))) next . rest) | ||||||
|      (next ((s start) (l limit) (e step)) |      (next ((s start) (l limit) (e step)) | ||||||
|            ((var (- s e) (- var e))) |            ((var (- s e) (- var e))) | ||||||
|            ((< var l)) |            ((< var l)) | ||||||
|            () () . rest)) |            () () . rest)) | ||||||
|     ((down-from :for ((var) (start (to limit))) next . rest) |     ((down-from :for ((var) (start (:to limit))) next . rest) | ||||||
|      (next ((s start) (l limit)) ((var (- s 1) (- var 1))) |      (next ((s start) (l limit)) ((var (- s 1) (- var 1))) | ||||||
|            ((< var l)) () () . rest)) |            ((< var l)) () () . rest)) | ||||||
|     ((down-from :for ((var) (start (by step))) next . rest) |     ((down-from :for ((var) (start (:by step))) next . rest) | ||||||
|      (next ((s start) (e step)) ((var (- s e) (- var e))) |      (next ((s start) (e step)) ((var (- s e) (- var e))) | ||||||
|            () () () . rest)) |            () () () . rest)) | ||||||
|     ((down-from :for ((var) (start)) next . rest) |     ((down-from :for ((var) (start)) next . rest) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Linus
						Linus