changing load to expand each expression before evaluating
improve performance by reloading system.lsp with this loader other misc. changes
This commit is contained in:
		
							parent
							
								
									7883a5de0b
								
							
						
					
					
						commit
						c1610f0a9f
					
				|  | @ -51,16 +51,26 @@ | ||||||
| #include "flisp.h" | #include "flisp.h" | ||||||
| 
 | 
 | ||||||
| static char *builtin_names[] = | static char *builtin_names[] = | ||||||
|     { "quote", "cond", "if", "and", "or", "while", "lambda", |     { // special forms
 | ||||||
|  |       "quote", "cond", "if", "and", "or", "while", "lambda", | ||||||
|       "trycatch", "%apply", "set!", "begin", |       "trycatch", "%apply", "set!", "begin", | ||||||
| 
 | 
 | ||||||
|  |       // predicates
 | ||||||
|       "eq?", "eqv?", "equal?", "atom?", "not", "null?", "boolean?", "symbol?", |       "eq?", "eqv?", "equal?", "atom?", "not", "null?", "boolean?", "symbol?", | ||||||
|       "number?", "bound?", "pair?", "builtin?", "vector?", "fixnum?", |       "number?", "bound?", "pair?", "builtin?", "vector?", "fixnum?", | ||||||
| 
 | 
 | ||||||
|  |       // lists
 | ||||||
|       "cons", "list", "car", "cdr", "set-car!", "set-cdr!", |       "cons", "list", "car", "cdr", "set-car!", "set-cdr!", | ||||||
|  | 
 | ||||||
|  |       // execution
 | ||||||
|       "eval", "eval*", "apply", "prog1", "raise", |       "eval", "eval*", "apply", "prog1", "raise", | ||||||
|  | 
 | ||||||
|  |       // arithmetic
 | ||||||
|       "+", "-", "*", "/", "<", "lognot", "logand", "logior", "logxor", |       "+", "-", "*", "/", "<", "lognot", "logand", "logior", "logxor", | ||||||
|       "vector", "aref", "aset!", "length", "assq", "compare", "for", |       "compare", | ||||||
|  | 
 | ||||||
|  |       // sequences
 | ||||||
|  |       "vector", "aref", "aset!", "length", "assq", "for", | ||||||
|       "", "", "" }; |       "", "", "" }; | ||||||
| 
 | 
 | ||||||
| #define N_STACK 98304 | #define N_STACK 98304 | ||||||
|  |  | ||||||
|  | @ -111,7 +111,8 @@ enum { | ||||||
|     F_CONS, F_LIST, F_CAR, F_CDR, F_SETCAR, F_SETCDR, |     F_CONS, F_LIST, F_CAR, F_CDR, F_SETCAR, F_SETCDR, | ||||||
|     F_EVAL, F_EVALSTAR, F_APPLY, F_PROG1, F_RAISE, |     F_EVAL, F_EVALSTAR, F_APPLY, F_PROG1, F_RAISE, | ||||||
|     F_ADD, F_SUB, F_MUL, F_DIV, F_LT, F_BNOT, F_BAND, F_BOR, F_BXOR, |     F_ADD, F_SUB, F_MUL, F_DIV, F_LT, F_BNOT, F_BAND, F_BOR, F_BXOR, | ||||||
|     F_VECTOR, F_AREF, F_ASET, F_LENGTH, F_ASSQ, F_COMPARE, F_FOR, |     F_COMPARE, | ||||||
|  |     F_VECTOR, F_AREF, F_ASET, F_LENGTH, F_ASSQ, F_FOR, | ||||||
|     F_TRUE, F_FALSE, F_NIL, |     F_TRUE, F_FALSE, F_NIL, | ||||||
|     N_BUILTINS, |     N_BUILTINS, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -3,12 +3,14 @@ | ||||||
| ; by Jeff Bezanson (C) 2009 | ; by Jeff Bezanson (C) 2009 | ||||||
| ; Distributed under the BSD License | ; Distributed under the BSD License | ||||||
| 
 | 
 | ||||||
| (set-constant! 'eq       eq?) | (if (not (bound? 'eq)) | ||||||
| (set-constant! 'eqv      eqv?) |     (begin | ||||||
| (set-constant! 'equal    equal?) |       (set-constant! 'eq       eq?) | ||||||
| (set-constant! 'rplaca   set-car!) |       (set-constant! 'eqv      eqv?) | ||||||
| (set-constant! 'rplacd   set-cdr!) |       (set-constant! 'equal    equal?) | ||||||
| (set-constant! 'char?    (lambda (x) (eq? (typeof x) 'wchar))) |       (set-constant! 'rplaca   set-car!) | ||||||
|  |       (set-constant! 'rplacd   set-cdr!) | ||||||
|  |       (set-constant! 'char?    (lambda (x) (eq? (typeof x) 'wchar))))) | ||||||
| 
 | 
 | ||||||
| ; convert a sequence of body statements to a single expression. | ; convert a sequence of body statements to a single expression. | ||||||
| ; this allows define, defun, defmacro, let, etc. to contain multiple | ; this allows define, defun, defmacro, let, etc. to contain multiple | ||||||
|  | @ -149,16 +151,6 @@ | ||||||
|                     (#t e))))) |                     (#t e))))) | ||||||
|    e () ())) |    e () ())) | ||||||
| 
 | 
 | ||||||
| (define-macro (define form . body) |  | ||||||
|   (if (symbol? form) |  | ||||||
|       (list 'set! form (car body)) |  | ||||||
|       (list 'set! (car form) |  | ||||||
| 	    (macroexpand (list 'lambda (cdr form) (f-body body)))))) |  | ||||||
| (define-macro (define-macro form . body) |  | ||||||
|   (list 'set-syntax! (list 'quote (car form)) |  | ||||||
| 	(macroexpand (list 'lambda (cdr form) (f-body body))))) |  | ||||||
| (define macroexpand (macroexpand macroexpand)) |  | ||||||
| 
 |  | ||||||
| (define (delete-duplicates lst) | (define (delete-duplicates lst) | ||||||
|   (if (atom? lst) |   (if (atom? lst) | ||||||
|       lst |       lst | ||||||
|  | @ -198,9 +190,11 @@ | ||||||
| 
 | 
 | ||||||
| (define-macro (body . forms) (f-body forms)) | (define-macro (body . forms) (f-body forms)) | ||||||
| 
 | 
 | ||||||
|  | (define (expand x) (macroexpand x)) | ||||||
|  | 
 | ||||||
| (define =   eqv) | (define =   eqv) | ||||||
| (define eql eqv) | (define eql eqv) | ||||||
| (define (/= a b) (not (equal a b))) | (define (/= a b) (not (eqv a b))) | ||||||
| (define != /=) | (define != /=) | ||||||
| (define (>  a b) (< b a)) | (define (>  a b) (< b a)) | ||||||
| (define (<= a b) (not (< b a))) | (define (<= a b) (not (< b a))) | ||||||
|  | @ -533,9 +527,9 @@ | ||||||
|        (if (not (io.eof? F)) |        (if (not (io.eof? F)) | ||||||
| 	   (next (read F) | 	   (next (read F) | ||||||
|                  prev |                  prev | ||||||
| 		 (eval E)) | 		 (eval (expand E))) | ||||||
| 	   (begin (io.close F) | 	   (begin (io.close F) | ||||||
| 		  (eval E)))) ; evaluate last form in almost-tail position | 		  (eval (expand E))))) ; evaluate last form in almost-tail position | ||||||
|      (lambda (e) |      (lambda (e) | ||||||
|        (begin |        (begin | ||||||
| 	 (io.close F) | 	 (io.close F) | ||||||
|  | @ -614,7 +608,15 @@ | ||||||
| 	    (lambda (e) (begin (print-exception e) | 	    (lambda (e) (begin (print-exception e) | ||||||
| 			       (exit 1))))) | 			       (exit 1))))) | ||||||
| 
 | 
 | ||||||
|  | (if (or (eq? *os-name* 'win32) | ||||||
|  | 	(eq? *os-name* 'win64) | ||||||
|  | 	(eq? *os-name* 'windows)) | ||||||
|  |     (define *directory-separator* "\\") | ||||||
|  |     (define *directory-separator* "/")) | ||||||
|  | 
 | ||||||
| (define (__start . argv) | (define (__start . argv) | ||||||
|  |   ; reload this file with our new definition of load | ||||||
|  |   (load (string *install-dir* *directory-separator* "system.lsp")) | ||||||
|   (if (pair? (cdr argv)) |   (if (pair? (cdr argv)) | ||||||
|       (begin (set! *argv* (cdr argv)) |       (begin (set! *argv* (cdr argv)) | ||||||
| 	     (__script (cadr argv))) | 	     (__script (cadr argv))) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 JeffBezanson
						JeffBezanson