Changeset 9113 for lang/elisp
- Timestamp:
- 04/08/08 10:54:59 (8 months ago)
- Location:
- lang/elisp/escm/trunk
- Files:
-
- 4 added
- 16 modified
-
DEVELOPERSTOOLS.el (modified) (3 diffs)
-
Makefile.el (added)
-
escm-arity.el (modified) (2 diffs)
-
escm-base.el (modified) (1 diff)
-
escm-cbos.el (modified) (2 diffs)
-
escm-compile.el (modified) (16 diffs)
-
escm-context.el (modified) (2 diffs)
-
escm-debug.el (modified) (3 diffs)
-
escm-env.el (modified) (5 diffs)
-
escm-iblock-content.el (added)
-
escm-iblock.el (added)
-
escm-icode.el (modified) (4 diffs)
-
escm-preprocess.el (modified) (2 diffs)
-
escm-proc.el (modified) (2 diffs)
-
escm-stream.el (added)
-
escm-syntax.el (modified) (4 diffs)
-
escm-test.el (modified) (2 diffs)
-
escm-util.el (modified) (4 diffs)
-
escm-vm.el (modified) (9 diffs)
-
escm.el (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/elisp/escm/trunk/DEVELOPERSTOOLS.el
r8609 r9113 1 ;; initialize enviroment for developer. 1 2 (let ((dir (file-name-directory (buffer-file-name)))) 3 2 4 (unless (member dir load-path ) 3 5 (setq load-path (cons dir load-path))) 6 4 7 (require 'escm) 8 5 9 (global-set-key [?\C-c ?e ?a] 'escm-debug::activate) 6 10 (global-set-key [?\C-c ?e ?d] 'escm-debug::deactivate) 7 (dired (file-name-directory (buffer-file-name)))) 11 (global-set-key [?\C-c ?e ?c] 12 (lambda () 13 (interactive) 14 (setq escm-default-vm nil) 15 (message "default vm is resetted."))) 16 (global-set-key [?\C-c ?e ?e] 'escm-eval-last-sexp) 17 nil) 8 18 19 20 ;; dired 21 (dired (file-name-directory (buffer-file-name))) 22 23 24 ;; sample codes 9 25 (when nil 10 26 27 (escm-vm::eval (escm-vm::new) '(+ 0 1 2 3)) 11 28 (escm-vm::eval (escm-vm::new) '(+ 0 1 (* 2 3) 4)) 12 29 (escm-vm::eval (escm-vm::new) '(if nil 1 2)) 13 14 30 (escm-vm::eval 15 31 (escm-vm::new) … … 17 33 (define (fact n) (if (= n 1) n (* n (fact (- n 1))))) 18 34 (fact 3)))) 35 36 (progn 37 (defun fib (n) 38 (if (< n 2) 39 1 40 (+ (fib (- n 2)) 41 (fib (- n 1))))) 42 (fib 7)) 43 44 (escm-eval '(fib 7)) 45 46 (escm-vm::eval 47 (escm-vm::new) 48 '((lambda () 49 (message (call/cc (lambda (cont) 50 (cont "abc"))))))) 51 52 19 53 20 54 (escm-vm::eval … … 31 65 (escm-vm::new) 32 66 '((lambda () 67 (define (fib-iter a b n) 68 (if (zero? n) 69 (+ a b) 70 (fib-iter b 71 (+ a b) 72 (- n 1)))) 73 (define (fib n) (fib-iter 0 1 n)) 74 (fib 12)))) 75 ;; 33 76 34 (define (fib-iter a b n) 35 (if (= 0 n) 36 (+ a b) 37 (fib-iter 38 b 39 (+ a b) 40 (- n 1)))) 77 (let* ((def '((define (fib-iter a b n) 78 (if (zero? n) 79 (+ a b) 80 (fib-iter b 81 (+ a b) 82 (- n 1)))) 83 (define (fib n) (fib-iter 0 1 n)))) 84 (bm (lambda (x) 85 (escm-util::benchmark 86 (escm-vm::eval (escm-vm::new) x)) 87 escm-util::benchmark::result))) 88 (list (funcall bm nil) 89 (funcall bm `((lambda () ,@def ))) 90 (funcall bm `((lambda () ,@def (fib 1)))) 91 (funcall bm `((lambda () ,@def (fib 10)))) 92 (funcall bm `((lambda () ,@def (fib 100)))))) 41 93 42 (define (fib n) 43 (fib-iter 0 1 n)) 94 (escm-vm::eval (escm-vm::new) '`a) 44 95 45 (fib 32) 46 ))) 96 (escm-vm::eval 97 (escm-vm::new) '((lambda () 98 (define-syntax a (lambda (_ . x) (list 'quote x))) 99 (a b c)))) 47 100 48 ( progn49 (define (fact n) (if (= n 1) n (* n (- n 1)))) 50 (escm-eval '(fact 5))51 )52 53 101 (define (fact n) (if (= n 1) 102 n 103 (* n (fact (- n 1))))) 104 (escm-eval '(fact 20)) 105 (fact 1) 106 ((elambda (a b) (+ a b)) 1 2) 54 107 ) -
lang/elisp/escm/trunk/escm-arity.el
r8609 r9113 55 55 new)) 56 56 57 58 59 57 (defsubst escm-arity::inject-args! (self env args) 60 58 (let ((p (escm-arity::get-length self)) … … 69 67 (provide 'escm-arity) 70 68 71 72 73 74 69 ;;; test codes 75 70 (escm-test::define-test escm arity 76 71 (let ((z (escm-arity::new ())) 77 ( o(escm-arity::new '(a b c)))72 (a0 (escm-arity::new '(a b c))) 78 73 (a1 (escm-arity::new 'a)) 79 (a2 (escm-arity::new '(a . b)))) 74 (a2 (escm-arity::new '(a b . c))) 75 76 (e0 (escm-fixed-env::new nil '(a b c))) 77 (e1 (escm-fixed-env::new nil '(a))) 78 (e2 (escm-fixed-env::new nil '(a b c)))) 79 80 80 (escm-test one1 (= 1 (escm-arity::get-length a1))) 81 81 (escm-test zero (= 0 (escm-arity::get-length z))) 82 (escm-test three (= 3 (escm-arity::get-length o)))82 (escm-test three (= 3 (escm-arity::get-length a0))) 83 83 (escm-test not-at-least (not (escm-arity::get-at-least z))) 84 85 (escm-test at-least-1 (escm-arity::get-at-least a1)) 84 86 (escm-test at-least-2 (escm-arity::get-at-least a2)) 85 (escm-test at-least-1 (escm-arity::get-at-least a1))) 86 ) 87 88 (escm-test inject-args0 89 (progn 90 (escm-arity::inject-args! a0 e0 '(1 2 3)) 91 (equal '(1 2 3) 92 (list (escm-env::gref e0 'a) 93 (escm-env::gref e0 'b) 94 (escm-env::gref e0 'c))))) 95 96 97 (escm-test inject-args1 98 (progn 99 (escm-arity::inject-args! a1 e1 '(x y z)) 100 (equal '(x y z) 101 (escm-env::gref e1 'a)))) 102 103 104 (escm-test inject-args2 105 (progn 106 (escm-arity::inject-args! a2 e2 '(a b c d)) 107 (equal '(a b (c d)) 108 (list (escm-env::gref e2 'a) 109 (escm-env::gref e2 'b) 110 (escm-env::gref e2 'c))))))) 87 111 ;; (escm-test::run 'escm 'arity) 88 112 -
lang/elisp/escm/trunk/escm-base.el
r8609 r9113 14 14 15 15 16 17 18 16 ;; errors for escm 19 17 (escm-util::define-signals 20 18 '(escm-error "" 19 (escm-syntax-error "") 21 20 (escm-void-variable "") 22 (escm-unsupported "")))21 (escm-unsupported ""))) 23 22 24 23 (provide 'escm-base) -
lang/elisp/escm/trunk/escm-cbos.el
r8609 r9113 81 81 "defines method of escm-cbos objects." 82 82 `(progn 83 ,(when t;;(not (fboundp 'name))83 ,(when (not (fboundp 'name)) 84 84 `(defsubst ,name (*object* &rest args) 85 85 (escm-cbos::run-method ',name *object* args))) … … 91 91 (get 'escm-cbos::class-vmt ',class) 92 92 ',name 93 ;;(byte-compile (escm-cbos::expand-method ',args ',body)))94 (escm-cbos::expand-method ',args ',body))93 (byte-compile (escm-cbos::expand-method ',args ',body))) 94 ;;(escm-cbos::expand-method ',args ',body)) 95 95 ) 96 96 ',name)) -
lang/elisp/escm/trunk/escm-compile.el
r8609 r9113 3 3 ;; Copyright (C) 2008 Free Software Foundation, Inc. 4 4 5 ;; Author: (require 'escm-util )<onishi@THOTH>5 ;; Author: <onishi@THOTH> 6 6 ;; Keywords: lisp 7 7 … … 27 27 ;;; Code: 28 28 29 (require 'escm-base )30 (require 'escm-syntax )31 (require 'escm-icode )32 (require 'escm-env )29 (require 'escm-base ) 30 (require 'escm-syntax ) 31 (require 'escm-icode ) 32 (require 'escm-env ) 33 33 (require 'escm-context) 34 35 34 36 35 (defun escm-compile (context sexp) … … 94 93 (context (escm-context::new root)) 95 94 (r (escm-compile-apply context '(a (b 1) c))) 96 (ex (escm-icode `((push )97 98 (push )95 (ex (escm-icode `((push 1) 96 97 (push 1) 99 98 (store 1) 100 99 (to-arg) … … 113 112 ;; (escm-test::run 'escm 'escm-compile-apply) 114 113 115 116 117 118 114 (defsubst escm-compile-if::ifv0 (context condx positivex negativex) 115 "" 119 116 (let ((posi0 (escm-iproc::get-first-block positivex)) 120 117 (nega0 (escm-iproc::get-first-block negativex)) … … 126 123 127 124 (defsubst escm-compile-if::ifv1 (context condx positivex negativex) 125 "" 128 126 (let ((posi0 (escm-iproc::get-first-block positivex)) 129 127 (nega0 (escm-iproc::get-first-block negativex)) … … 135 133 136 134 (defsubst escm-compile-if::with-jump (context condx positivex negativex) 135 "" 137 136 (escm-iproc::merge negativex 138 137 (escm-icode `((jmp ,(escm-iproc::length positivex))))) … … 156 155 (t (escm-compile-if::with-jump context condx positivex negativex))))) 157 156 158 159 157 ;;; 160 158 (escm-test::define-test escm escm-compile-if … … 163 161 164 162 (r0 nil) 165 (e0 (escm-icode `((fref x ,root) 163 (e0 (escm-icode `((push 1) 164 (fref x ,root) 166 165 (call) 167 166 (ifv ((ref y ,root)) … … 172 171 173 172 (escm-test compile-0 (setq r0 (escm-compile-if context '(if (x) y z))) t) 174 (escm-test::p ' compile-0 (escm-iproc::to-string r0))175 (escm-test::p ' compile-0 (escm-iproc::to-string e0))173 (escm-test::p 'r0 (escm-iproc::to-string r0)) 174 (escm-test::p 'e0 (escm-iproc::to-string e0)) 176 175 (escm-test check-0 (equal r0 e0)) 177 176 … … 190 189 ;;(escm-test::run 'escm 'escm-compile-if) 191 190 192 193 194 195 196 191 (defun escm-compile-elamba (context sexp) 192 (let* ((elfun (byte-compile (cons 'lambda (cdr sexp))))) 193 (escm-icode `((store ,(escm-wrapped-proc::new elfun)))))) 194 195 196 197 (defun escm-compile-let (context sexp) 198 (let* ((bindings (cadr sexp)) 199 (body (cddr sexp)) 200 (name (unless (listp binding) 201 (let ((name bindings)) 202 (setq bindings (car body)) 203 (setq body (cdr body)) 204 name))) 205 (syms ()) 206 (vals ())) 207 (mapcar 208 (lambda (b) 209 (setq syms (cons (car b) syms)) 210 (setq vals (cons (escm-compile 211 (escm-context::set-tail? context nil) 212 (cadr b)) vals)) bindings) 213 bindings) 214 (when name (setq syms (cons name syms))) 215 (let ((proc (escm-compile context `(lambda ,syms ,body))) 216 (ret (escm-iproc::new ()))) 217 218 (mapcar 219 (lambda (v) (escm-iproc::merge ret v)) 220 (if name (cons (escm-iproc `((store-to-arg ,proc))) vals) 221 vals)) 222 ret))) 223 ;; 224 225 ;; 197 226 (defun escm-compile-define-syntax (context sexp) 198 227 (let ((name (cadr sexp)) 199 (proc (caddr sexp))) 228 (proc (escm-vm::eval 229 (escm-context::get-vm context) 230 (caddr sexp)))) 200 231 (escm-env::define (escm-context::get-env context) 201 232 name 202 (escm-syntax::new proc)))) 233 (escm-syntax::new proc)) 234 (escm-icode `((store ',name))))) 235 236 (escm-test::define-test escm define-syntax 237 (let* ((vm (escm-vm::new)) 238 (env (escm-vm::current-env vm)) 239 (ctx (escm-context::new env vm))) 240 (escm-test compile0 (escm-compile-define-syntax 241 ctx 242 '(define-syntax x (lambda (_ . body) 243 1))) 244 t) 245 (escm-test compile1 (escm-syntax-p (escm-env::gref env 'x))) 246 (escm-test expand (escm-iproc::equal (escm-icode '((store 1))) 247 (escm-test::p "result" (escm-compile ctx '(x))))) 248 )) 249 ;; (escm-test::run 'escm 'define-syntax) 250 251 252 253 203 254 ;; 204 255 (defun escm-compile-let-syntax (context sexp) … … 218 269 ret)) 219 270 220 ;;;; 221 271 ;; 222 272 (defsubst escm-compile-lambda1 (context sexp) 223 273 (let* ((argspec (cadr sexp)) … … 239 289 (escm-iproc::to-proc proc arity (escm-context::get-env ctx)))) 240 290 291 ;; 241 292 (defun escm-compile-lambda (context sexp) 242 ""243 293 (escm-icode `((store-proc ,(escm-compile-lambda1 context sexp))))) 244 ;;; 294 295 ;; 245 296 (escm-test::define-test escm escm-compile-lambda 246 297 (let* ((vm (escm-vm::new)) … … 263 314 ;; (escm-test::run 'escm 'escm-compile-lambda) 264 315 316 ;; 317 (defun escm-compile-elambda (context sexp) 318 (let ((body (cdr sexp))) 319 (escm-icode 320 `((store-proc 321 ,(escm-wrapped-proc::new 322 (if (= (length body) 1) 323 body 324 (byte-compile (cons 'lambda body))))))))) 265 325 266 326 ;; … … 271 331 `(, name ,(caddr sexp))))) 272 332 333 ;; 273 334 (defun escm-compile-define (context sexp) 274 335 (let* ((spec (escm-compile-define1 context sexp)) … … 281 342 (store ',name)))))) 282 343 344 ;; 283 345 (escm-test::define-test escm escm-compile-define 284 346 (let* ((vm (escm-vm::new)) … … 292 354 (escm-test::p 293 355 "ex0" 294 (escm-iproc::to-string (escm-compile context '(define (a n) n)))) 356 (escm-iproc::to-string 357 (escm-compile context '(define (a n) n)))) 295 358 296 359 (escm-test::p 297 360 "ex1" 298 (escm-iproc::to-string (escm-compile context '((lambda (n) (define (a n) n) (a n)) 5)))) 361 (escm-iproc::to-string 362 (escm-compile context '((lambda (n) (define (a n) n) (a n)) 5)))) 299 363 300 364 (escm-test::p 301 365 "ex2" 302 (escm-iproc::to-string (escm-compile context '((lambda () (define (a n) n) (a 5)))))) 366 (escm-iproc::to-string 367 (escm-compile context '((lambda () (define (a n) n) (a 5)))))) 303 368 )) 304 369 ;;; (escm-test::run 'escm 'escm-compile-define) 305 370 306 307 371 ;; 308 372 (defun escm-compile-quote (context sexp) 309 373 (escm-icode `((store ',(cadr sexp))))) 310 374 311 312 313 314 ;;(setq escm-vm::init-hook nil) 315 (add-hook 316 'escm-vm::init-hook 317 (lambda (vm) 318 319 (escm-define-builtin-syntax vm quote 320 (function escm-compile-quote)) 321 322 (escm-define-builtin-syntax vm if 323 (function escm-compile-if)) 324 325 (escm-define-builtin-syntax vm let-syntax 326 (function escm-compile-let-syntax)) 327 328 (escm-define-builtin-syntax vm define-syntax 329 (function escm-compile-define-syntax)) 330 331 (escm-define-builtin-syntax vm define 332 (function escm-compile-define)) 333 334 (escm-define-builtin-syntax vm lambda 335 (function escm-compile-lambda)) 336 ));; END OF INITIALIZER 337 338 339 375 ;; 376 (defsubst escm-compile::init-vm (vm) 377 378 (mapcar 379 (lambda (spec) 380 (escm-define-builtin-syntax 381 vm (car spec) (cadr spec))) 382 `((quote escm-compile-quote) 383 (if escm-compile-if) 384 (let escm-compile-let) 385 (let-syntax escm-compile-let-syntax) 386 (define-syntax escm-compile-define-syntax) 387 (define escm-compile-define) 388 (lambda escm-compile-lambda) 389 (elambda escm-compile-elambda))) 390 391 (escm-vm::eval 392 vm 393 '(define-syntax quasiquote 394 (lambda (_ . body) 395 (expand-quasiquote (list 'quote body))))) 396 ) 397 398 (add-hook 'escm-vm::init-hook (function escm-compile::init-vm)) 340 399 341 400 (provide 'escm-compile) -
lang/elisp/escm/trunk/escm-context.el
r8609 r9113 31 31 (escm-cbos::define-class 32 32 (escm-context escm-object t) 33 (objdic :copy) ;; created objects.33 (objdic :copy) ;; created objects. 34 34 (env :copy) ;; environment of current context. 35 35 (vm :copy) ;; virtual machine. … … 102 102 `(let ((e (escm-fixed-env::new ,syms))) 103 103 ,@(mapcar (lambda (sv) 104 `(escm-env::gset! e ',(car sv) ,(escm-object::elize (cdr sv)))) 104 `(escm-env::gset! 105 e ',(car sv) ,(escm-object::elize (cdr sv)))) 105 106 symval) 106 107 e))) -
lang/elisp/escm/trunk/escm-debug.el
r8609 r9113 154 154 (defface escm-debug::other-block-face 155 155 '((((class color) (background light)) 156 (:foreground " DarkGreen" :background "gray80"))156 (:foreground "green" )) 157 157 (((class color) (background dark)) 158 158 (:foreground "purple")) … … 196 196 (setq vmwin (split-window-horizontally)) 197 197 (shrink-window-horizontally (- (window-width) 20)) 198 ;; (setq vmwin (split-window))199 200 198 (select-window vmwin) 201 199 (switch-to-buffer vmbuf) … … 215 213 (ad-deactivate 'escm-debug)) 216 214 217 218 215 (provide 'escm-debug) 219 216 ;;; escm-debug.el ends here -
lang/elisp/escm/trunk/escm-env.el
r8609 r9113 114 114 sym)))) 115 115 116 ;; (escm-iproc::report (escm-compile-apply (escm-context::new (escm-root-env::new)) '(* n (a 1))))117 ;; (escm-iproc::report (escm-compile-if (escm-context::new (escm-root-env::new)) ' (if (< n 2) 1 (* n (a (- n 1))))))118 ;;119 ;; (escm-vm::eval (escm-vm::new) '((lambda() (define (a n) n) (a 5))))120 ;; (escm-vm::eval (escm-vm::new) '(< 2 5))121 122 123 116 ;;;;;;;;;; 124 125 117 (escm-cbos::define-method escm-env escm-env::make-setter (self env sym val) 126 118 "" … … 268 260 (escm-dynamic-env::gset! self sym val)) 269 261 270 271 262 (defsubst escm-dynamic-env::gref (self sym) 272 263 (if (escm-env::member? self sym) … … 279 270 (escm-cbos::define-method escm-dynamic-env escm-env::gref (self sym) 280 271 (escm-dynamic-env::gref self sym)) 272 281 273 282 274 ;; test code for escm-dynamic-env … … 297 289 (eq 3 (escm-env::gref gg 'a)))))) 298 290 ;; (escm-test::run 'escm 'dynamic-env) 291 292 ;;; 293 ;;; pseudo-env 294 ;;; 295 (escm-cbos::define-class (escm-pseudo-env escm-dynamic-env)) 296 (defun escm-pseudo-env::new (parent syms) 297 ) 298 299 299 300 300 ;;; … … 382 382 new)) 383 383 384 (escm-cbos::define-method escm-dynamic-env escm-env::make-function-referer 385 (self env sym) 386 `(escm-env::fref ,env ',sym)) 387 388 384 389 (escm-cbos::define-method escm-dynamic-env escm-env::make-referer 385 390 (self env sym) -
lang/elisp/escm/trunk/escm-icode.el
r8609 r9113 96 96 97 97 (defsubst escm-pseudo-iproc::new (body src)
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)