Changeset 7953 for lang/elisp
- Timestamp:
- 03/14/08 18:10:30 (9 months ago)
- Location:
- lang/elisp/escm/trunk
- Files:
-
- 1 added
- 1 removed
- 10 modified
- 1 moved
-
DEVELOPPERSTOOLS.el (moved) (moved from lang/elisp/escm/trunk/DEV.el) (1 diff)
-
escm-arity.el (modified) (1 diff)
-
escm-cbos.el (modified) (8 diffs)
-
escm-compile.el (modified) (1 diff)
-
escm-env.el (modified) (10 diffs)
-
escm-errors.el (added)
-
escm-icode.el (modified) (2 diffs)
-
escm-pp.el (deleted)
-
escm-test.el (modified) (7 diffs)
-
escm-util.el (modified) (2 diffs)
-
escm-util.file.el (modified) (1 diff)
-
escm-util.minimal.el (modified) (1 diff)
-
escm-vm.el (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/elisp/escm/trunk/DEVELOPPERSTOOLS.el
r7843 r7953 2 2 (unless (member dir load-path ) 3 3 (setq load-path (cons dir load-path)))) 4 5 6 7 -
lang/elisp/escm/trunk/escm-arity.el
r7950 r7953 48 48 (progn (setq fields (cons head fields)) 49 49 (setq argspec tail)) 50 ( throw 'error "wrong type argument" 'synbolp head)))50 (signal 'error `("wrong type argument" 'synbolp ,head)))) 51 51 (progn (setq fields (cons argspec fields)) 52 52 (setq at-least t) -
lang/elisp/escm/trunk/escm-cbos.el
r7950 r7953 30 30 ;;; 31 31 (require 'escm-util) 32 33 (escm-util::define-signals 34 '(escm-cbos::error 35 "" 36 (escm-cbos::error::no-such-method "No such method"))) 32 37 33 38 (defconst escm-cbos::class-vmt nil) … … 72 77 73 78 (defmacro escm-cbos::define-method (class name args &rest body) 74 "defines method of escm-cbos objects." 79 "defines method of escm-cbos objects." 75 80 `(progn 76 81 ,(when t;;(not (fboundp 'name)) … … 89 94 (put (get 'escm-cbos::class-vmt ',class) ',name nil)) 90 95 91 (defsubst escm-cbos::find-method (sym name)96 (defsubst escm-cbos::find-method1 (sym name) 92 97 "" 93 98 (let ((meth nil) … … 101 106 meth)) 102 107 108 (defun escm-cbos::find-method (class method-name) 109 (let ((ilist (escm-cbos::inheritance-list class))) 110 (escm-cbos::find-method1 'ilist method-name))) 111 103 112 (defsubst escm-cbos::run-method (name obj args) 104 113 "" 105 114 (let* ((class (escm-cbos::get-class obj)) 106 115 (ilist (symbol-value (get 'escm-cbos::class-vmt class))) 107 (meth (escm-cbos::find-method 'ilist name)))116 (meth (escm-cbos::find-method1 'ilist name))) 108 117 (if meth (apply meth (cons ilist (cons name (cons obj args)))) 109 (throw 'escm-cbos::error::no-such-method 110 (list "no such method" class name))))) 118 (signal 'escm-cbos::error::no-such-method 119 (list class name))))) 120 121 111 122 112 123 (defun escm-cbos::expand-method (args body) … … 118 129 (cond ((eq 'super (car x)) 119 130 `(apply 120 (or (escm-cbos::find-method '*ilist* *method-name*)121 (throw'escm-cbos::error::no-such-method122 (format "")))123 (list *ilist* *method-name* ,@(cdr x))))124 (t ( throw 'error "panic!!"))) x))131 (or (escm-cbos::find-method '*ilist* *method-name*) 132 (signal 'escm-cbos::error::no-such-method 133 ())) 134 (list *ilist* *method-name* ,@(cdr x)))) 135 (t (signal 'error '("panic!!")))) x)) 125 136 body 126 137 (lambda (n) (not (or (eq 'super (car n)))))))) … … 129 140 "Creates object with buffer." 130 141 (let ((new (make-vector 131 (+ 1 (length (escm-cbos::get-fields-of name)) (or buflen 0)) nil))) 142 (+ 1 (length (escm-cbos::get-fields-of name)) 143 (or buflen 0)) nil))) 132 144 (aset new 0 name) 133 145 new)) … … 189 201 190 202 203 204 205 191 206 (escm-cbos::register-class 'escm-cbos::Object nil nil) 192 207 … … 205 220 (format "* object : %s *" (escm-cbos::get-class self))) 206 221 222 223 224 225 226 227 228 207 229 (provide 'escm-cbos) 208 230 ;;; escm-cbos.el ends here. -
lang/elisp/escm/trunk/escm-compile.el
r7843 r7953 31 31 (escm-iproc::merge ret (escm-compile arg-context x)) 32 32 (escm-iproc::merge ret (escm-icode '((pusha))))) tail) 33 (escm-iproc::merge ret (escm-compile (escm-context::set-func? context t) head)) 34 (escm-iproc::merge ret (escm-icode `((,(if (escm-context::get-tailp context) 35 'tcall 36 'call))))))) 33 (escm-iproc::merge ret (escm-compile 34 (escm-context::set-func? context t) head)) 35 (escm-iproc::merge ret 36 (escm-icode `((,(if (escm-context::get-tailp context) 37 'tcall 38 'call))))))) 37 39 38 40 (defsubst escm-compile-if (sexp) -
lang/elisp/escm/trunk/escm-env.el
r7950 r7953 2 2 (require 'escm-cbos) 3 3 (require 'escm-test) 4 (require 'escm-errors) 4 5 5 6 (defconst escm-env::class-diagram nil " … … 84 85 (let ((parent (escm-env::get-parent self))) 85 86 (if parent (escm-env::gref parent) 86 ( throw 'escm-env::unbound "unbound symbol" sym))))))87 (signal 'escm-void-variable (list "unbound symbol" sym))))))) 87 88 88 89 (escm-cbos::define-method escm-fixed-env escm-env::gset! (self sym val) … … 91 92 (let ((parent (escm-env::get-parent self))) 92 93 (if parent (escm-env::gset! parent sym val) 93 ( throw 'escm-env::unbound "unbound symbol" sym))))))94 (signal 'escm-void-variable (list "unbound symbol" sym))))))) 94 95 95 96 ;; test code for escm-test … … 112 113 (escm-env::make-setter f 'f 'a 123))) t) 113 114 (escm-test "make referer" 114 (eq (eval 115 (escm-test::p "referer"(escm-env::make-referer f 'f 'a)))115 (eq (eval (escm-test::p "referer" 116 (escm-env::make-referer f 'f 'a))) 116 117 123)))) 117 118 ;; (escm-test::run 'escm 'fixed-env) 119 118 120 119 121 ;;;-------------;;; … … 138 140 (defsubst escm-dynamic-env::add-field (self sym) 139 141 "" 140 141 142 (put (escm-env::get-dic self) 142 143 sym … … 157 158 (if parent 158 159 (escm-env::gset! parent sym val) 159 (throw 'escm-env::unbound (format "unbound symbol : %s")))))) 160 161 (escm-cbos::define-method escm-dynamic-env escm-env::gref (self sym) 160 (signal 'escm-void-variable (list )))))) 161 162 163 (defsubst escm-dynamic-env::gref (self sym) 162 164 (if (escm-env::member? self sym) 163 165 (get (escm-dynamic-env::get-valdic self) sym) … … 165 167 (if parent 166 168 (escm-env::gref parent sym) 167 (throw 'escm-env::unbound (format "unbound symbol : %s")))))) 169 (signal 'escm-void-variable (list)))))) 170 171 (escm-cbos::define-method escm-dynamic-env escm-env::gref (self sym) 172 (escm-dynamic-env::gref self sym)) 168 173 169 174 ;; test code for escm-dynamic-env … … 178 183 (escm-test "gref 0" (eq 1 (escm-env::gref e 'a))) 179 184 (escm-test "gset! 1" (escm-env::gset! f 'b 2) t) 180 (escm-test "gref 1" (eq 2 (escm-env::gref e 'b))) 185 (escm-test "gref 1" (eq 2 (escm-test::p 186 "2 =" (escm-env::gref e 'b)))) 181 187 (escm-test "gset! 2" (escm-env::gset! g 'a 3) t) 182 188 (escm-test "gref 2" (and (eq 1 (escm-env::gref e 'a)) 183 189 (eq 3 (escm-env::gref g 'a)))) 190 (escm-test::p "f" f) 184 191 (escm-test "make setter" 185 192 (eval (escm-test::p "setter" 186 (escm-env::make-setter f 'f 'a 123))) t) 187 193 (escm-env::make-setter f 'f 'a 123))) t) 188 194 (escm-test "make referer" 189 (eq (eval 190 (escm-test::p "referer"(escm-env::make-referer f 'f 'a)))195 (eq (eval (escm-test::p "referer" 196 (escm-env::make-referer f 'f 'a))) 191 197 123)) 192 198 )) 199 193 200 ;; (escm-test::run 'escm 'dynamic-env) 194 195 201 196 202 ;;; … … 206 212 (let ((retval (condition-case *err* (symbol-value 'sym) 207 213 (error (condition-case *err* (symbol-function 'sym) 208 (error (throw 'escm::unbound ""))))))) 214 (error (signal 'escm-void-variable 215 (list "")))))))) 209 216 (let ((retval (if (functionp retval) 210 217 (escm-proc::wrap-elisp retval) … … 219 226 (let ((retval (condition-case *err* (symbol-function 'sym) 220 227 (error (condition-case *err* (symbol-value 'sym) 221 (error (throw 'escm::unbound ""))))))) 228 (error (signal 'escm-void-variable 229 (list "")))))))) 222 230 (let ((retval (if (functionp retval) 223 231 (escm-proc::wrap-elisp retval) -
lang/elisp/escm/trunk/escm-icode.el
r7843 r7953 86 86 (cond ((escm-iblock-p node) node) 87 87 ((escm-iblock-contents-p node) (escm-iblock::new (list node))) 88 (t (throw 'error "wrong type argument: escm-iblock-p or escm-iblock-contents-p")))) 88 (t (signal 'wrong-type-argument 89 (list 90 "wrong type argument" 91 'escm-iblock-p 92 'escm-iblock-contents-p))))) 89 93 90 94 (defsubst escm-iblock::add-contents (self content) 91 95 "" 92 (when (escm-iblock::get-has-jump self) ( throw 'error ""))96 (when (escm-iblock::get-has-jump self) (signal 'error ())) 93 97 (escm-iblock::set-has-jump self (escm-iblock-contents::has-jump content)) 94 98 (escm-iblock::set-body self (append (escm-iblock::get-body self) … … 105 109 (escm-iblock::add-contents self node)) 106 110 (t 107 ( throw 'error "")))111 (signal 'error ()))) 108 112 self)) 109 113 -
lang/elisp/escm/trunk/escm-test.el
r7951 r7953 28 28 (require 'escm-util.minimal) 29 29 30 31 (defconst escm-test::tests () 32 "symbol for plist of tests.") 30 (defconst escm-test::tests () "symbol for plist of tests.") 33 31 34 32 (defface escm-test::ok-face … … 67 65 (format "%S" (cdr trace))) 68 66 69 70 71 72 (defun escm-test::record-errors (cont debugger-args) 73 (throw cont 74 (format "%S\nbacktrace:%s" 75 debugger-args 76 (let ((drop t) 77 (depth 0) 78 (trace t) 79 (all "")) 80 (while trace 81 (unless (eq trace t) 82 (if drop 83 (if (eq (cadr trace) 'escm-test::record-errors) 84 (setq drop nil)) 85 (setq all 86 (concat 87 all 88 "\n" 89 (escm-test::build-traced-line trace))))) 90 (setq trace (backtrace-frame depth)) 91 (setq depth (1+ depth)) 92 (when (and (eq (cadr trace) 'catch) 93 (equal (caddr trace) ''escm-test->eval)) 94 (setq trace nil))) 95 all)))) 67 (defun escm-test::backtrace1 (cont debugger-args skip) 68 (format "%S\nbacktrace:%s" 69 debugger-args 70 (let ((drop t) 71 (depth 0) 72 (trace t) 73 (skip (or skip 0)) 74 (all "")) 75 (while trace 76 (unless (eq trace t) 77 (if drop 78 (if (eq (cadr trace) 'escm-test::backtrace) 79 (setq drop nil)) 80 (if (> 1 skip) 81 (setq all 82 (concat 83 all 84 "\n" 85 (escm-test::build-traced-line 86 trace))) 87 (setq skip (1- skip))))) 88 (setq trace (backtrace-frame depth)) 89 (setq depth (1+ depth)) 90 (when (and (eq (cadr trace) 'catch) 91 (equal (caddr trace) (list 'quote cont))) 92 (setq trace nil))) 93 all))) 94 95 (defun escm-test::backtrace (cont debugger-args &optional skip) 96 "" 97 (let* ((old-local-map (current-local-map)) 98 (tmp-map (make-keymap)) 99 (len (length (cadr tmp-map))) 100 (tbl (make-vector len (lambda () 101 (interactive) 102 (message "Continue ...") 103 (run-with-timer 0.125 nil 104 'exit-recursive-edit)))) 105 (pos 1)) 106 (aset tbl 0 t) 107 (setcar (cdr tmp-map) tbl) 108 (use-local-map tmp-map) 109 (message "\"escm-test\" caught an error. Push any key...") 110 (recursive-edit) 111 (use-local-map old-local-map) 112 (throw cont (escm-test::backtrace1 cont debugger-args skip)))) 113 114 (when nil ;;;; 115 116 (progn 117 (escm-test::define-test escm-test fail2 118 (escm-test ok-0 t) 119 (escm-test arith-0 (/ 0 0)) 120 (escm-test ok 1 t) 121 (escm-test arith-1 (/ 1 0)) 122 ) 123 (escm-test::run 'escm-test 'fail2 )) 124 125 );;;; 126 127 (defsubst escm-test::assert1 (name x) 128 "" 129 (let ((result (let ((debugger (lambda (&rest args) 130 (escm-test::backtrace 'escm-test->eval 131 args 132 1)))) 133 (catch 'escm-test->eval (eval (cons 'progn x)))))) 134 (setq report 135 (cons (if (eq result t) 136 `(:ok ,name) 137 (progn (setq failed (1+ failed)) 138 `(:failed ,name ,(or result "failed")))) 139 report)))) 96 140 97 141 (defmacro escm-test (name &rest x) 98 142 "" 99 `(let ((err (let ((debugger (lambda (&rest args) 100 (escm-test::record-errors 'escm-test->eval 101 args)))) 102 (let ((result (catch 'escm-test->eval (eval (progn ,@x))))) 103 (if (eq result t) nil (or result "failed")))))) 104 (setq report 105 (cons (if err (progn (setq failed (1+ failed)) 106 (list ',name err)) ',name) 107 report)))) 143 `(escm-test::assert1 ',name ',x)) 108 144 109 145 (defun escm-test::run-test::debugger (&rest debugger-args) 110 146 (setq failed (1+ failed)) 111 (escm-test::record-errors 'escm-test::run-test->eval 112 debugger-args)) 147 (escm-test::backtrace 'escm-test::run-test->eval 148 debugger-args 149 1)) 113 150 114 151 (defun escm-test::run-test (reporter project name all) … … 122 159 all 123 160 '(nil)))))) 124 (if err (setq report (cons (list "*** FATAL ERROR ***" err) report))) 161 (if err (setq report 162 (cons (list :failed "*** FATAL ERROR ***" err) report))) 125 163 (apply reporter (list project name failed (reverse report))))) 126 164 127 165 128 (when nil ;;;; 129 130 (progn 131 (escm-test::define-test escm-test fail2 132 (/ 2 0)) 133 (escm-test::run 'escm-test 'fail2)) 134 135 (progn 136 (escm-test::define-test escm-test fail 137 (escm-test zero (progn (/ 1 0))) 138 (escm-test success t) 139 (escm-test unreach t)) 140 (escm-test::run 'escm-test 'fail)) 141 142 );;;; 166 167 (defconst escm-test::report-mode-map 168 (let ((m (make-keymap))) 169 (define-key m "q" 'top-level) 170 m)) 171 172 173 (defun escm-test::report-mode () 174 (use-local-map escm-test::report-mode-map)) 175 143 176 144 177 (defmacro escm-test::define-test (project name &rest body) … … 154 187 (defun escm-test::report-single (project name failed report) 155 188 "Reports result of a test." 156 (escm-util::popup "*escm-test*" 157 (insert 158 (mapconcat 159 (lambda (r) 160 (if (listp r) 161 (if (eq :print (car r)) 162 (concat (escm-util::text-with-properties 163 (format "%s :" (cadr r)) 'face 'escm-test::print-face) 164 (format "%S" (cddr r))) 165 (concat (escm-util::text-with-properties 166 (format "%s :" (car r)) 'face 'escm-test::faild-face) 167 (format " %s" (cadr r)))) 168 (escm-util::text-with-properties 169 (format "%s ... ok!" r) 'face 'escm-test::ok-face))) 170 report 171 "\n"))) 172 (when (= failed 0) (message "all tests successful."))) 189 (save-window-excursion 190 (escm-util::popup "*escm-test*" 191 (escm-test::report-mode) 192 (insert 193 (mapconcat 194 (lambda (r) 195 (case (car r) 196 ((:ok) 197 (escm-util::stext 198 `(face escm-test::ok-face ,(format "%s ... ok!" (cadr r))))) 199 ((:print) 200 (escm-util::stext 201 `(face escm-test::print-face ,(format "%s :" (cadr r))) 202 (format "%S" (cddr r)))) 203 ((:failed) 204 (escm-util::stext 205 `(face escm-test::faild-face ,(format "%s :" (cadr r))) 206 (format " %s" (caddr r)))))) 207 report 208 "\n"))) 209 (if (= failed 0) 210 (message "all tests successful.") 211 (message (format "The test has %d or more errors." failed))) 212 (save-excursion (recursive-edit)))) 173 213 174 214 (defun escm-test::project-alist () … … 188 228 189 229 190 (defun escm-test::run (project &optional name )230 (defun escm-test::run (project &optional name reporter) 191 231 "Runs all tests what belongs the PROJECT." 192 232 (interactive … … 201 241 (if name 202 242 (progn 203 (escm-test::run-test 'escm-test::report-single project name 243 (escm-test::run-test (or reporter 244 (function escm-test::report-single)) 245 project 246 name 204 247 (cdr (assoc name alist)))) 205 248 (let ((result ()) … … 239 282 "all tests successful."))) 240 283 (cons failed result)))))) 241 ;;;(call-interactively 'escm-test::run 'escm)242 243 284 244 285 (provide 'escm-test) -
lang/elisp/escm/trunk/escm-util.el
r7950 r7953 39 39 ((listp fun) (cadr fun)) 40 40 (t (aref fun 0))) 41 (throw 'error (format "wrong type argument: functionp %S" fun)))) 41 (signal 'wrong-type-argument 42 (list "wrong type argument" 'functionp fun)))) 42 43 43 44 … … 88 89 (nthcdr (+ n (or len 1)) list))) 89 90 91 (defun escm-util::define-signals (spec &optional parents) 92 "" 93 (let ((sym (car spec)) 94 (mess (cadr spec)) 95 (children (cddr spec))) 96 (put sym 'error-conditions (cons 'error (cons sym parents))) 97 (put sym 'error-message mess) 98 (mapcar (lambda (child) 99 (escm-util::define-signals child (cons sym parents))) 100 children))) 101 90 102 91 103 (provide 'escm-util) -
lang/elisp/escm/trunk/escm-util.file.el
r7383 r7953 17 17 "extracts basename from file-path. 18 18 If you give number as second argument, it removes suffixes." 19 (when (string-match "/$" path) (setq path (substring path 0 (1- (length path))))) 19 (when (string-match "/$" path) 20 (setq path (substring path 0 (1- (length path))))) 20 21 (string-match "\\([^/]*/\\)*\\(.*\\)" path) 21 22 (let* ((basename (match-string 2 path)) -
lang/elisp/escm/trunk/escm-util.minimal.el
r7843 r7953 76 76 retval)) 77 77 78 78 79 (provide 'escm-util.minimal) -
lang/elisp/escm/trunk/escm-vm.el
r7841 r7953 15 15 (regs ()) 16 16 (vminit ())) 17 17 18 `(,@(mapcar (lambda (p) 18 19 (let* ((n (car p)) 19 20 (v (cdr p)) 20 (set (intern (format "escm-vm::set-%s-stack" n))) 21 (get (intern (format "escm-vm::get-%s-stack" n))) 22 (push (intern (format "escm-vm::push-%s" n))) 23 (pop (intern (format "escm-vm::pop-%s" n)))
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)