Changeset 12594 for lang/elisp
- Timestamp:
- 05/28/08 16:31:52 (6 months ago)
- Location:
- lang/elisp/escm/trunk
- Files:
-
- 9 added
- 13 modified
- 1 moved
-
DEVELOPERSTOOLS.el (modified) (8 diffs)
-
Makefile.in (modified) (1 diff)
-
escm-base.el (modified) (1 diff)
-
escm-cbos.el (modified) (1 diff)
-
escm-compile.el (modified) (13 diffs)
-
escm-devel.el (added)
-
escm-env.el (modified) (4 diffs)
-
escm-macro.el (moved) (moved from lang/elisp/escm/trunk/escm-syntax.el) (2 diffs)
-
escm-proc.el (modified) (2 diffs)
-
escm-test.el (modified) (2 diffs)
-
escm-util.el (modified) (11 diffs)
-
escm-util.minimal.el (modified) (1 diff)
-
escm-vm.el (modified) (7 diffs)
-
escm.el (modified) (4 diffs)
-
escm/basic-proc.escm (added)
-
escm/brainfuck.escm (added)
-
escm/core-proc.escm (added)
-
escm/init.escm (modified) (1 diff)
-
escm/port.escm (added)
-
escm/quasi-quote.escm (added)
-
escm/syntax-case.escm (added)
-
escm/vector.escm (added)
-
genprelude (added)
Legend:
- Unmodified
- Added
- Removed
-
lang/elisp/escm/trunk/DEVELOPERSTOOLS.el
r10671 r12594 13 13 (setq escm-default-vm nil) 14 14 (message "default vm is resetted."))) 15 (global-set-key [?\C-c ?e ?e] 'escm-eval-last-sexp) 16 nil) 15 (global-set-key [?\C-c ?e ?e] 'escm-eval-last-sexp)) 17 16 18 17 … … 23 22 ;; sample codes 24 23 (when nil 24 25 25 (escm-vm::eval (escm-vm::new) '(+ 0 1 (* 2 3) 4)) 26 27 26 (escm-vm::eval (escm-vm::new) '(if nil 1 2)) 28 29 27 (escm-vm::eval (escm-vm::new) 30 28 '((lambda () 31 29 (define (fact n) (if (= n 1) n (* n (fact (- n 1))))) 32 (fact 10)))) 33 34 (progn 35 36 (defun fib (n) 37 (if (< n 2) 38 1 39 (+ (fib (- n 2)) 40 (fib (- n 1))))) 41 42 (escm-eval '(fib 10)) 43 44 ) 30 (fact 1 45 31 46 32 (escm-vm::eval … … 60 46 61 47 (insert (format "%S" 62 (escm-vm::byte-compile -sexp-list48 (escm-vm::byte-compile 63 49 (escm-vm::new) 64 50 '((define (fib n) … … 66 52 (if (= n 0) (+ a b) (iter b (+ a b) (- n 1)))) 67 53 (iter 0 1 n)) 68 (fib 10))) 69 )) 54 (fib 10))))) 70 55 71 56 (when nil … … 85 70 '((lambda () 86 71 (define (fib-iter a b n) 87 (if ( zero?n)72 (if (= 0 n) 88 73 (+ a b) 89 74 (fib-iter b … … 95 80 96 81 (let* ((def '((define (fib-iter a b n) 97 (if ( zero?n)82 (if (= 0 n) 98 83 (+ a b) 99 84 (fib-iter b … … 113 98 (escm-vm::eval (escm-vm::new) '`a) 114 99 100 115 101 (escm-vm::eval 116 102 (escm-vm::new) '((lambda () … … 118 104 (a b c)))) 119 105 106 120 107 (define (fact n) (if (= n 1) 121 108 n 122 109 (* n (fact (- n 1))))) 123 (escm-eval '(fact 20)) 124 (fact 1) 125 126 ((elambda (a b) (+ a b)) 1 2) ) 127 ) 110 (fact 20) 111 ) -
lang/elisp/escm/trunk/Makefile.in
r10671 r12594 40 40 $(EMACS) $(EMACSFLAGS) -l escm.el -f escm-batch-byte-compile $< 41 41 42 prelude.escm: genprelude escm/init.escm 43 ./genprelude escm/init.escm >$@ 42 44 45 all: elc escmc 43 46 44 elc: 45 cd src/elisp; \ 46 make -f ../../Makefile.in elcs EMACS=$(EMACS) 47 elc: $(ELS:.el=.elc) 47 48 48 elcs: $(ELS:.el=.elc) 49 49 escmc: prelude.escmc 50 50 51 51 clean: 52 52 find . -type f -name \*.elc |xargs rm 53 find . -type f -name \*.escmc |xargs rm 53 54 54 install: install.el elc 55 cp 55 install: install.el all 56 mkdir -p $(SITELISP)/escm 57 cp -r escm test $(SITELISP)/escm/escm 58 cp $(ELS) $(ELS:.el=.elc) $(SITELISP)/escm 59 60 uninstall: 61 rm -rf $(SITELISP)/escm 56 62 57 63 distclean: clean -
lang/elisp/escm/trunk/escm-base.el
r10671 r12594 37 37 ((test) "test") 38 38 ((escm) "escm") 39 ((tmp) (or (getenv "TMP") 40 (getenv "TEMP") 41 "/tmp")) 39 42 (t (signal 'error (list "unknown project-directory type" purpose)))) 40 (expand-file-name 41 "../" 42 (file-name-directory (locate-library "escm"))))) 43 (file-name-directory (locate-library "escm")))) 43 44 44 45 (provide 'escm-base) -
lang/elisp/escm/trunk/escm-cbos.el
r10671 r12594 75 75 (put 'escm-cbos::class-fields ',name ',fields) 76 76 (put 'escm-cbos::class-vmt 77 ',name (let ((*tbl* (make-symbol (format "*spec:%s*" ',name)))) 77 ',name (let ((*tbl* (make-symbol 78 (format "*spec:%s*" ',name)))) 78 79 (set *tbl* 79 80 (cons ',name -
lang/elisp/escm/trunk/escm-compile.el
r10671 r12594 28 28 29 29 (require 'escm-base ) 30 (require 'escm- syntax)30 (require 'escm-macro ) 31 31 (require 'escm-icode ) 32 33 32 (require 'escm-env ) 34 33 (require 'escm-arity ) … … 59 58 (escm-context::build-vm-manupilator context)))) 60 59 61 60 (defun escm-get-all-identifiers (sexp) 61 (let ((stack (list sexp)) 62 (result (make-symbol "result"))) 63 (while stack 64 (let ((sexp (car stack))) 65 (setq stack (cdr stack)) 66 (cond ((null sexp)) 67 ((symbolp sexp) 68 (put result sexp t)) 69 ((or (listp sexp) 70 (vectorp sexp)) 71 (mapcar (lambda (s) (setq stack (cons s stack))) 72 sexp))))) 73 (mapcar 'car (escm-util::plist-to-alist (symbol-plist result))))) 62 74 63 75 (defsubst escm-compile::sympp (sym) … … 66 78 ((",") 'unquote) 67 79 ((",@") 'unquote-splicing) 68 (t sym)))80 (t sym))) 69 81 70 82 (defun escm-compile (context sexp) … … 75 87 (let* ((head (car sexp)) 76 88 (env (escm-context::get-env context)) 77 (headv (when (symbolp head) 78 (condition-case *err* 79 (escm-env::gref env (escm-compile::sympp head)) 80 (escm-void-variable))))) 81 (cond 82 ((escm-syntax-p headv) 83 (escm-syntax::apply headv context sexp)) 84 (t (escm-compile-apply context sexp))))) 89 (headv (condition-case *err* 90 (cond ((symbolp head) 91 (escm-env::gref env (escm-compile::sympp head))) 92 ((escm-identifier-p head) 93 (escm-identifier::value head))) 94 (escm-void-variable)))) 95 96 (cond ((escm-macro-p headv) 97 (escm-macro::apply headv context sexp)) 98 (t (escm-compile-apply context sexp))))) 85 99 86 100 ;; refering symbol-value 87 ((and sexp 88 (symbolp sexp)) 101 ((and sexp (symbolp sexp)) 89 102 (escm-icode (list (list (if (escm-context::get-func? context) 'fref 'ref) 90 sexp 91 (escm-context::get-env context))))) 103 sexp (escm-context::get-env context))))) 104 105 ((escm-identifier-p sexp) 106 (escm-icode (list (list (if (escm-context::get-func? context) 'fref 'ref) 107 (escm-identifier::get-symbol sexp) 108 (escm-identifier::get-env sexp))))) 92 109 93 110 ;; sexp … … 125 142 (escm-context::set-func? context t) head)) 126 143 (escm-iproc::merge ret 127 (escm-icode (list (list (if (escm-context::get-tail? context) 128 'tcall 129 'call))))))) 144 (escm-icode 145 (list 146 (list (if (escm-context::get-tail? context) 147 'tcall 148 'call))))))) 130 149 ;;; test code 131 150 (escm-test::define-test escm escm-compile-apply … … 176 195 "" 177 196 (escm-iproc::merge negativex 178 (escm-icode (list (list 'jmp (escm-iproc::length positivex))))) 197 (escm-icode (list (list 'jmp 198 (escm-iproc::length 199 positivex))))) 179 200 (escm-iproc::merge condx 180 (escm-icode (list (list 'jt (escm-iproc::length negativex))))) 201 (escm-icode (list (list 'jt 202 (escm-iproc::length 203 negativex))))) 181 204 (escm-iproc::merge condx negativex) 182 205 (escm-iproc::merge condx positivex)) … … 184 207 (defsubst escm-compile-if (context sexp) 185 208 "" 186 (let ((condx (escm-compile (escm-context::set-tail? context nil) (cadr sexp))) 209 (let ((condx (escm-compile (escm-context::set-tail? 210 context nil) (cadr sexp))) 187 211 (positivex (escm-compile context (caddr sexp))) 188 212 (negativex (escm-compile context (cadddr sexp)))) … … 242 266 (val (caddr sexp)) 243 267 (iproc (escm-compile (escm-context::set-tail? context nil) val))) 244 (escm-iproc::merge iproc 245 (escm-icode (list (list 'set! sym (escm-context::get-env context))))))) 246 247 248 (defun escm-compile-let (context sexp) 249 (let* ((bindings (cadr sexp)) 250 (body (cddr sexp)) 251 (name (unless (listp bindings) 252 (let ((name bindings)) 253 (setq bindings (car body)) 254 (setq body (cdr body)) 255 name))) 256 (syms ()) 257 (vals ())) 258 (mapcar 259 (lambda (b) 260 (setq syms (cons (car b) syms)) 261 (setq vals (cons (escm-compile 262 (escm-context::set-tail? context nil) 263 (cadr b)) vals)) bindings) 264 bindings) 265 (when name (setq syms (cons name syms))) 266 (let ((proc (escm-compile context (list 'lambda syms body))) 267 (ret (escm-iproc::new ()))) 268 269 (mapcar 270 (lambda (v) (escm-iproc::merge ret v)) 271 (if name (cons (escm-iproc (list (list 'store-to-arg proc))) vals) 272 vals)) 273 ret))) 274 ;; 268 (escm-iproc::merge 269 iproc 270 (escm-icode (list (list 'set! sym (escm-context::get-env context))))))) 275 271 276 272 ;; 277 273 (defun escm-compile-define-syntax (context sexp) 278 (let ((name (cadr sexp)) 279 (proc (escm-vm::eval 280 (escm-context::get-vm context) 281 (caddr sexp)))) 274 (let* ((vm (escm-context::get-vm context)) 275 (name (cadr sexp)) 276 (proc (progn 277 (escm-env::gset! (escm-context::get-env context) 278 '*syntax-context* 279 context) 280 (escm-vm::eval 281 vm 282 (caddr sexp))))) 282 283 (escm-env::define (escm-context::get-env context) 283 284 name 284 (escm-s yntax::new proc))285 (escm-smacro::new proc)) 285 286 (escm-icode (list (list 'store (list 'quote name)))))) 286 287 287 288 (escm-test::define-test escm define-syntax 289 288 290 (let* ((vm (escm-vm::new)) 289 291 (env (escm-vm::current-env vm)) 290 292 (ctx (escm-context::new env vm))) 291 (escm-test compile0 (escm-compile-define-syntax 292 ctx 293 '(define-syntax x (lambda (_ . body) 294 1))) 295 t) 296 (escm-test compile1 (escm-syntax-p (escm-env::gref env 'x))) 297 (escm-test expand (escm-iproc::equal 298 (escm-icode '((store 1))) 299 (escm-test::p "result" (escm-compile ctx '(x))))) 300 )) 293 294 (escm-test compile0 (escm-compile-define-syntax 295 ctx 296 '(define-syntax x (lambda (_ . body) 297 1))) t) 298 299 (escm-test compile1 (escm-macro-p (escm-env::gref env 'x))) 300 301 (escm-test expand (escm-iproc::equal 302 (escm-icode '((store 1))) 303 (escm-test::p 304 "result" 305 (escm-compile ctx '(x))))))) 306 301 307 ;; (escm-test::run 'escm 'define-syntax) 302 303 308 304 309 … … 315 320 ctx 316 321 (car b) 317 (escm- syntax::new (escm-compile context (cdr b)))))322 (escm-macro::new (escm-compile context (cdr b))))) 318 323 bind) 319 324 (mapcar (lambda (x) (escm-iproc::merge ret (escm-compile ctx x)) … … 366 371 "compiled" 367 372 (escm-iproc::to-string 368 (escm-icode (list (list 'store-proc (escm-compile-lambda1 context sexp)))))) 373 (escm-icode (list (list 'store-proc 374 (escm-compile-lambda1 context sexp)))))) 369 375 (funcall test (escm-compile-lambda1 context sexp)) 370 376 (funcall test (escm-vm::eval vm sexp)))) … … 433 439 (escm-icode (list (list 'store (list 'quote (cadr sexp)))))) 434 440 441 ;; ToDo: Make library form. 442 ;;: - compile-time - 443 ;;: 444 ;;: 1. load library file. 445 ;;: 2. import symbols from loaded library. 446 ;;: 3. process body of the library. 447 ;;: 4. fix library. 448 ;;; - load 449 ;;; - 450 ;;; - 451 ;;; 5. define itself. 452 ;;: 453 ;;: - run time (precompiled) - 454 ;;: 455 ;;: 1. read itself from file. 456 ;;; 2. load library files. 457 ;;; 3. set procedures and macros to slots. 458 ;;: 459 (defun escm-compile-library (context sexp) 460 (let ((name (cdr sexp)) 461 (import (caddr sexp)) 462 (export (cadddr sexp)) 463 (body (cddddr sexp))) 464 (escm-icode (list 465 () 466 ())))) 467 468 435 469 ;; 436 470 (defsubst escm-compile::init-vm (vm) 437 438 471 (mapcar 439 472 (lambda (spec) … … 442 475 '((quote escm-compile-quote) 443 476 (if escm-compile-if) 444 (let escm-compile-let)445 477 (set! escm-compile-set!) 446 478 (let-syntax escm-compile-let-syntax) … … 449 481 (lambda escm-compile-lambda) 450 482 (elambda escm-compile-elambda) 451 (elmeth escm-compile-elmeth))) 452 453 (escm-vm::eval 454 vm 455 '(define-syntax quasiquote 456 (lambda (_ . body) 457 (expand-quasiquote (list 'quote body)))))) 458 483 (elmeth escm-compile-elmeth)))) 459 484 (add-hook 'escm-vm::init-hook (function escm-compile::init-vm)) 460 485 -
lang/elisp/escm/trunk/escm-env.el
r10671 r12594 33 33 | <<abstract>> | 34 34 +------+-------+ 35 /_\ 35 /_\\ 36 36 | 37 37 +-------------------+---------------------+---------+ … … 40 40 | escm-fixed-env |<-+ escm-dynamic-env | | escm-elisp-env | | 41 41 +--------+-------+ +--------+---------+ +----------+-----+ | 42 /_\ /_\ | |42 /_\\ /_\\ | | 43 43 | | | | 44 44 +-------+ +---+-----------------+ | | … … 59 59 escm-library ... Library that specified by R6RS. 60 60 escm-dynamic-library ... Compiling time library that specified by R6RS. 61 61 62 ") 62 63 … … 403 404 (format "#<%s>" (escm-cbos::get-class self))) 404 405 406 407 408 409 ;; 410 (escm-cbos::define-class (escm-library escm-fixed-env) 411 name 412 version 413 level 414 export) 415 (defsubst escm-dynamic-env::import-from-library (self) 416 (if ())) 417 418 405 419 (provide 'escm-env) 406 420 ;;; escm-env.el ends here -
lang/elisp/escm/trunk/escm-macro.el
r10671 r12594 1 ;;; escm- syntax.el ---1 ;;; escm-macro.el --- 2 2 3 3 ;; Copyright (C) 2008 Free Software Foundation, Inc. 4 4 5 ;; Author: (require 'escm-base) < onishi@THOTH>5 ;; Author: (require 'escm-base) <lieutar@1dk.jp> 6 6 ;; Keywords: 7 7 … … 30 30 (require 'escm-proc) 31 31 32 (escm-cbos::define-class (escm-syntax escm-object) proc)33 (escm-cbos::define-class (escm-builtin-syntax escm-syntax))32 (escm-cbos::define-class 33 (escm-macro escm-object) proc) 34 34 35 (defsubst escm-syntax::apply1 (self context sexp) 36 (let ((vm (escm-context::get-vm context))) 35 (escm-cbos::define-class 36 (escm-builtin-macro escm-macro)) 37 38 39 ;; define-macro includes the context to a syntax-procedure. 40 ;; applying syntax receives the context at the applicated co. 41 42 (defsubst escm-macro::apply1 (self context sexp) 43 (escm-env::gset (escm-context::get-env context) 44 '*current-context* 45 context) 46 (let ((vm (escm-context::get-vm context))) 37 47 (escm-compile 38 48 context 39 (escm-vm::apply vm 40 (escm-proc::activate (escm-syntax::get-proc self) vm) 41 (list sexp))))) 49 (escm-vm::apply 50 vm 51 (escm-proc::activate (escm-macro::get-proc self) vm) 52 (list sexp))))) 42 53 43 (escm-cbos::define-method escm- syntax escm-syntax::apply (self context sexp)44 (escm- syntax::apply1 self context sexp))54 (escm-cbos::define-method escm-macro escm-macro::apply (self context sexp) 55 (escm-macro::apply1 self context sexp)) 45 56 46 57 (escm-cbos::define-method 47 escm-builtin- syntax escm-syntax::apply (self context sexp)48 (apply (escm- syntax::get-proc self)58 escm-builtin-macro escm-macro::apply (self context sexp) 59 (apply (escm-macro::get-proc self) 49 60 (list context sexp))) 50 61 51 (defsubst escm- syntax::new (proc)52 (let ((self (create-escm- syntax)))53 (escm- syntax::set-proc62 (defsubst escm-macro::new (proc) 63 (let ((self (create-escm-macro))) 64 (escm-macro::set-proc 54 65 self 55 66 proc) 56 67 self)) 57 68 58 (defsubst escm-builtin- syntax::new (proc)59 (let ((self (create-escm-builtin- syntax)))60 (escm- syntax::set-proc self proc)69 (defsubst escm-builtin-macro::new (proc) 70 (let ((self (create-escm-builtin-macro))) 71 (escm-macro::set-proc self proc) 61 72 self)) 62 73 63 (defun escm-define-builtin-syntax (vm name fun) 64 (escm-vm::define vm 65 name 66 (escm-builtin-syntax::new fun))) 74 (defun escm-define-builtin-macro (vm name fun) 75 (escm-vm::define vm name (escm-builtin-macro::new fun))) 67 76 68 (put 'escm-define-builtin- syntax'lisp-indent-function 'defun)77 (put 'escm-define-builtin-macro 'lisp-indent-function 'defun) 69 78 70 79 71 80 ;; 81 (provide 'escm-macro) 72 82 73 74 (provide 'escm-syntax) 75 76 ;;; escm-syntax.el ends here 83 ;;; escm-macro.el ends here -
lang/elisp/escm/trunk/escm-proc.el
r10671 r12594 62 62 63 63 64 65 64 ;;; 66 65 (escm-cbos::define-class (escm-wrapped-proc escm-proc)) … … 117 116 self)
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)