Changeset 9197 for lang/elisp

Show
Ignore:
Timestamp:
04/09/08 18:03:21 (8 months ago)
Author:
lieutar
Message:

lang/elisp/escm/trunk: I added a Makefile.

Location:
lang/elisp/escm/trunk
Files:
1 added
1 removed
7 modified
1 moved

Legend:

Unmodified
Added
Removed
  • lang/elisp/escm/trunk

    • Property svn:ignore set to
      *.elc

  • lang/elisp/escm/trunk/DEVELOPERSTOOLS.el

    r9113 r9197  
    106106  ((elambda (a b) (+ a b)) 1 2) 
    107107  ) 
     108 
     109 
  • lang/elisp/escm/trunk/Makefile.el

    r9113 r9197  
    1 (let ((dir (file-name-directory (buffer-file-name))) 
    2       (files 
    3        '( 
    4          "escm-util.minimal.el" 
    5          "escm-test.el" 
    6          "escm-util.el" 
    7          "escm-cbos.el" 
     1(defconst escm-make::els 
     2  '("escm-util.minimal.el" 
     3    "escm-test.el" 
     4    "escm-util.el" 
     5    "escm-cbos.el" 
     6            
     7    "escm-base.el" 
     8    "escm-preprocess.el" 
    89 
    9          "escm-base.el" 
    10          "escm-preprocess.el" 
     10    "escm-arity.el" 
     11    ;;   "escm-env.el" 
     12    ;;   "escm-proc.el" 
     13    ;;   "escm-syntax.el" 
     14            
     15    ;;   "escm-iblock-content.el" 
     16    ;;   "escm-iblock.el" 
     17    ;;   "escm-icode.el" 
     18            
     19    ;;   "escm-context.el" 
     20    ;;   "escm-compile.el" 
     21                  
     22    ;;   "escm-debug.el" 
     23    ;;   "escm-vm.el" 
     24    ;;   "escm.el" 
     25    )) 
    1126 
    12          "escm-arity.el" 
    13 ;;       "escm-env.el" 
    14 ;;       "escm-proc.el" 
    15 ;;       "escm-syntax.el" 
     27(defun escm-make::newer-than (a b) 
     28  (let ((atime (nth 4 (file-attributes a))) 
     29        (btime (nth 4 (file-attributes b)))) 
     30    (and (< (nth 0 atime) 
     31            (nth 0 btime)) 
     32         (or (> (nth 0 atime) 
     33                (nth 0 btime)) 
     34             (>= (nth 1 atime) 
     35                 (nth 1 btime)))))) 
    1636 
    17 ;;       "escm-iblock-content.el" 
    18 ;;       "escm-iblock.el" 
    19 ;;       "escm-icode.el" 
     37(defun escm-make::compile (file) 
     38  (let ((el   (locate-library file)) 
     39        (elc  (locate-library (concat file "c")))) 
     40    (when (or (not elc) 
     41              (escm-make::newer-than el elc)) 
     42      (byte-compile-file el)))) 
    2043 
    21 ;;       "escm-context.el" 
    22 ;;       "escm-compile.el" 
    23  
    24 ;;       "escm-debug.el" 
    25 ;;       "escm-vm.el" 
    26 ;;       "escm.el" 
    27          ))) 
    28   (unless (member  dir load-path ) 
    29     (setq load-path (cons dir load-path))) 
    30   (mapcar 'byte-compile-file files) 
    31   ) 
    32  
    33 ;;   (escm-vm::eval (escm-vm::new)  '(+ 0 1 2 3)) 
     44(defun escm-make.elc () 
     45  (mapcar (function escm-make::compile) escm-make::els)) 
     46;;(escm-make.elc) 
  • lang/elisp/escm/trunk/escm-compile.el

    r9113 r9197  
    244244             t) 
    245245  (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))))) 
     246  (escm-test expand   (escm-iproc::equal 
     247                       (escm-icode '((store 1))) 
     248                       (escm-test::p "result" (escm-compile ctx '(x))))) 
    248249  )) 
    249250;; (escm-test::run 'escm 'define-syntax) 
  • lang/elisp/escm/trunk/escm-debug.el

    r9113 r9197  
    3333(defconst escm-debug::pos   0) 
    3434 
    35 (defun escm-debug (vm msg)) 
     35(defun escm-debug (vm &optional p)) 
    3636(defun escm-debug::enter ()) 
    3737(defun escm-debug::leave ()) 
     
    178178 
    179179 
    180 (defadvice escm-debug (around escm-debug first (vm p)) 
     180(defadvice escm-debug (around escm-debug first (vm &optional p)) 
    181181  (escm-debug::step vm p)) 
    182182 
     
    191191      (delete-other-frames) 
    192192      (setq codewin (selected-window)) 
    193       (switch-to-buffer codebuf) 
    194       (escm-debug-mode) 
    195       (escm-debug::init-code-buffer vm p) 
     193      (when p 
     194        (switch-to-buffer codebuf) 
     195        (escm-debug-mode) 
     196        (escm-debug::init-code-buffer vm p)) 
    196197      (setq vmwin (split-window-horizontally)) 
    197198      (shrink-window-horizontally (- (window-width) 20)) 
  • lang/elisp/escm/trunk/escm-port.el

    r9113 r9197  
    2929(require 'escm-base) 
    3030 
    31 (escm-cbos::define-class (escm-input-stream)) 
    32 (escm-cbos::define-method escm-input-stream 
    33   escm-input-stream::close (self)) 
     31(escm-cbos::define-class (escm-port)) 
    3432 
    35 (escm-cbos::define-class (escm-file-input-stream escm-input-stream) buffer position) 
    36 (defun escm-file-input-stream::new (file) 
     33;; [R5RS] 
     34;; (port?) 
     35 
     36;; [R5RS] 
     37(escm-cbos::define-method escm-port escmp-port::input-port? (self) nil) 
     38;; [R5RS] 
     39(escm-cbos::define-method escm-port escmp-port::output-port? (self) nil) 
     40 
     41 
     42(escm-cbos::define-class (escm-output-port escm-port)) 
     43;; Function: close-input-port port 
     44;; Function: close-output-port port 
     45;;     [R5RS] Closes input and output port, respectively  
     46 
     47 
     48(escm-cbos::define-class (escm-input-port escm-port)) 
     49 
     50(escm-cbos::define-method escm-input-port 
     51  escm-input-port::read (self)) 
     52 
     53(escm-cbos::define-method escm-input-port 
     54  escm-input-port::close-input-port (self)) 
     55 
     56(escm-cbos::define-method escm-input-port 
     57  escm-input-port::read-char (self)) 
     58 
     59(escm-cbos::define-method escm-input-port 
     60  escm-input-port::peek-char (self)) 
     61 
     62(escm-cbos::define-method escm-input-port 
     63  escm-input-port::char-ready? (self)) 
     64 
     65 
     66 
     67(escm-cbos::define-class (escm-input-file escm-input-port) buffer position) 
     68 
     69(defsubst escm-input-file::new (file) 
    3770  "creates a filehandle that bound to given path." 
    38   (let* ((self (create-escm-file-input-stream)) 
     71  (let* ((self (create-escm-input-file)) 
    3972         (buf  (find-file-noselect file nil nil))) 
    4073    (save-excursion 
    4174      (set-buffer buf) 
    4275      (rename-buffer (format " *escm-open %s*" file))) 
    43     (escm-file-input-stream::set-buffer  buf) 
    44     (escm-file-input-stream::set-positon 1) 
     76    (escm-input-file::set-buffer  buf) 
     77    (escm-input-file::set-positon 1) 
    4578    self)) 
    4679 
    47 (defun escm-file-input-stream::at-eof? (self) 
    48   (>= (escm-file-input-stream::get-position self) 
    49       (escm-file-input-stream::get-buffer   self))) 
     80(defsubst escm-input-file::at-eof? (self) 
     81  (>= (escm-input-file::get-position self) 
     82      (escm-input-file::get-buffer   self))) 
    5083 
    51 (defun escm-file-input-stream::getc (self) 
    52   (if ((escm-file-input-stream::at-eof? self)) 
    53     (buffer-substring-no-properties ))) 
     84(defsubst escm-input-file::read-char (self) 
     85  (if (escm-input-file::at-eof? self) nil 
     86    (let ((buf (escm-input-file::get-buffer self)) 
     87          (p   (escm-input-file::get-position self)) 
     88          (r   nil)) 
     89      (save-excursion 
     90        (set-buffer buf) 
     91        (setq r (buffer-substring-no-properties (1- p) p))) 
     92      (escm-input-file::set-positon self (1+ p)) 
     93      (when r (aref r 0))))) 
    5494 
    5595 
    56 (defmacro escm-util::with-fh-buffer (fh &rest body) 
    57   "" 
    58   `(let ((*buf* (current-buffer))) 
    59      (set-buffer (get ,fh 'buf)) 
    60      (let ((*ret* (progn ,@body))) 
    61        (set-buffer *buf*) 
    62        *ret*))) 
     96(defsubst escm-input-file::peek-char (self) 
     97  (if (escm-input-file::at-eof? self) nil 
     98    (let ((buf (escm-input-file::get-buffer self)) 
     99          (p   (escm-input-file::get-position self)) 
     100          (r   nil)) 
     101    (save-excursion 
     102      (set-buffer buf) 
     103      (setq r (buffer-substring-no-properties (1- p) p))) 
     104    (when r (aref r 0))))) 
    63105 
    64 (defun escm-util::getc (fh) 
    65   "gets a character from filehandle." 
    66   (escm-util::with-fh-buffer 
    67    fh 
    68    (if (= (point) (point-max)) nil 
    69      (forward-char 1) 
    70      (buffer-substring-no-properties (1- (point)) (point))))) 
     106(defsubst escm-input-file::close-input-port (self) 
     107  "closes filehandle." 
     108  (kill-buffer (escm-input-file::get-buffer self)) 
     109  (escm-input-file::set-buffer self nil)) 
    71110 
    72 (defun escm-util::gets (fh) 
    73   "gets a line from filehandle." 
    74   (escm-util::with-fh-buffer 
    75    fh 
    76    (if (= (point) (point-max)) nil 
    77      (let ((from (point)) 
    78            (to   (progn (end-of-line) (point)))) 
    79        (when (< (point) (point-max)) (forward-char 1)) 
    80        (buffer-substring-no-properties from to))))) 
     111(defsubst escm-input-file::char-ready? (self) 
     112  (not (escm-input-file::at-eof? self))) 
    81113 
    82 (defun escm-util::close (fh) 
    83   "closes filehandle." 
    84   (save-excursion 
    85     (kill-buffer (get fh 'buf)) 
    86     (put fh 'buf nil))) 
    87114 
    88 (defmacro escm-util::with-file (file var &rest body) 
    89   "like a IO.foreach in ruby." 
    90   `(let ((*ret* nil) 
    91          (*fh* (escm-util::open ,file)) 
    92          ,var) 
    93      (while (setq ,var (escm-util::gets *fh*)) 
    94        (setq *ret* (cons (progn ,@body) *ret*))) 
    95      (escm-util::close *fh*) 
    96      (reverse *ret*))) 
     115(escm-cbos::define-method escm-input-file 
     116  escm-input-port::close-input-port (self) 
     117  (escm-input-file::close-input-port self)) 
     118 
     119(escm-cbos::define-method escm-input-file 
     120  escm-input-port::read-char (self) 
     121  (escm-input-file::read-char self)) 
     122 
     123(escm-cbos::define-method escm-input-file 
     124  escm-input-port::peek-char (self) 
     125  (escm-input-file::peek-char self)) 
     126 
     127(escm-cbos::define-method escm-input-file 
     128  escm-input-port::char-ready? (self) 
     129  (escm-input-file::char-ready? self)) 
     130 
    97131 
    98132 
  • lang/elisp/escm/trunk/escm-proc.el

    r9113 r9197  
    7373  escm-wrapped-vm-method escm-wrapped-proc::make-expression (self fun) 
    7474  `(apply ,(if (symbolp fun) (symbol-function fun) fun) 
    75           (escm-wrapped-proc-env::get-arg 
    76            (cons vm (escm-vm::current-env vm))))) 
    77  
    78  
    79  
     75          (cons vm (escm-wrapped-proc-env::get-arg (escm-vm::current-env vm))))) 
    8076 
    8177(defsubst escm-wrapped-proc::initialize (new fun) 
     
    10298    new)) 
    10399 
    104 ;;(escm-wrapped-proc::new (function +)) 
    105  
    106 ;;   (escm-vm::eval (escm-vm::new)  '(+ 1 2)) 
     100;; 
    107101 
    108102(escm-cbos::define-method 
     
    115109 
    116110(defsubst escm-continuation::new (vm) 
    117   (create-escm-wrapped-vm-method 
    118    `(lambda (vm val) 
    119       (let ((cont ,(let ((cont (create-escm-vm))) 
    120                      (set-env-stack  cont (copy-list (get-env-stack  vm))) 
    121                      (set-proc-stack cont (copy-list (get-proc-stack vm))) 
    122                      (set-src-stack  cont (copy-list (get-src-stack  vm))) 
    123                      (set-pc-stack   cont (copy-list (get-pc-stack   vm))) 
    124                      (set-arg-stack  cont (copy-list (get-arg-stack  vm)))) 
    125                      cont)) 
    126         (set-env-stack  vm (get-env-stack  cont)) 
    127         (set-proc-stack vm (get-proc-stack cont)) 
    128         (set-src-stack  vm (get-src-stack  cont)) 
    129         (set-pc-stack   vm (get-pc-stack   cont)) 
    130         (set-arg-stack  vm (get-arg-stack  cont)) 
    131         (set-val-stack  vm (list            val)))))) 
     111  (escm-wrapped-vm-method::new 
     112   `(lambda (vm &rest *vals*) 
     113      (escm-vm::set-env-stack  vm ,(copy-list (cdr (escm-vm::get-env-stack  vm)))) 
     114      (escm-vm::set-proc-stack vm ,(copy-list (cdr (escm-vm::get-proc-stack vm)))) 
     115      (escm-vm::set-src-stack  vm ,(copy-list (cdr (escm-vm::get-src-stack  vm)))) 
     116      (escm-vm::set-pc-stack   vm ,(copy-list (cdr (escm-vm::get-pc-stack   vm)))) 
     117      (escm-vm::set-arg-stack  vm ,(copy-list (cdr (escm-vm::get-arg-stack  vm)))) 
     118      (escm-vm::set-val-stack  vm *vals* ) 
     119      (escm-debug 0) 
     120      ))) 
     121 
     122 
    132123 
    133124(defun escm::values (vm &rest vals) 
     
    169160(defun escm::call/cc (vm proc) 
    170161  (escm-vm::push-arg vm (list (escm-continuation::new vm))) 
     162  (escm-vm::set-current-val vm  proc) 
    171163  (escm-vm::call vm proc)) 
     164 
     165 
     166 
     167 
    172168 
    173169(defun escm-proc::initialize-vm (vm) 
     
    191187 
    192188     (escm-wrapped-vm-method::new 
    193       . ((expand-quasiquote      escm::expand-quasiquote) 
    194          (values                 escm::values) 
    195          (apply                  escm::apply) 
    196          (eval                   escm::eval) 
    197          (call/cc                escm::call/cc) 
    198          (call-with-continuation escm::call/cc) 
     189      . ((expand-quasiquote              escm::expand-quasiquote) 
     190         (values                         escm::values) 
     191         (apply                          escm::apply) 
     192         (eval                           escm::eval) 
     193         (call/cc                        escm::call/cc) 
     194         (call-with-current-continuation escm::call/cc) 
     195         (show-registers                 escm-debug::vm-to-string) 
    199196         )))) 
    200197  ) 
    201198(add-hook 'escm-vm::init-hook (function escm-proc::initialize-vm)) 
    202199 
     200 
     201 
    203202(provide 'escm-proc) 
    204203;;; escm-proc.el ends here 
  • lang/elisp/escm/trunk/escm-vm.el

    r9113 r9197  
    9191           vm))))) 
    9292 
    93  
    9493(defsubst escm-vm::call (vm &optional proc) 
    9594  (escm-debug::enter) 
     
    136135         (list vm (escm-vm::current-env vm))) 
    137136  (escm-vm::set-current-pc vm (1+ (escm-vm::current-pc vm)))) 
     137;;   (escm-vm::eval (escm-vm::new) '(call/cc (lambda (cc) 123))) 
    138138 
    139139(defsubst escm-vm::apply (vm proc args) 
     
    142142                       (escm-vm::push-arg       vm (reverse args)) 
    143143                       (escm-vm::call           vm proc) 
    144                        (escm-vm::push-pc        vm 0) 
     144                       (escm-vm::set-current-pc vm 0) 
    145145                       (while (escm-vm::get-proc-stack vm) 
    146146                         (escm-vm::step vm)) 
    147147                       (escm-vm::current-val vm)))) 
    148148    (escm-vm::set-proc-stack vm procs) 
     149    (escm-vm::set-current-pc vm 0) 
    149150    retval)) 
     151 
     152(escm-test::define-test escm escm-vm-eval 
     153  (let ((test (lambda (sexp) 
     154                (let ((vm (escm-vm::new))) 
     155                  (escm-vm::eval vm sexp) 
     156                  (eval (macroexpand 
     157                         `(escm-test 
     158                           ,(format "eval %S" sexp) 
     159                           (equal 
     160                            (escm-test::p "pc(result):" 
     161                                          (escm-vm::get-pc-stack vm)) 
     162                            (escm-test::p "pc(new):" 
     163                                          (escm-vm::get-pc-stack 
     164                                           (escm-vm::new))))))))))) 
     165    (funcall test '()) 
     166    (funcall test '(+ 1 1)) 
     167    (funcall test '((lambda () ))) 
     168    (funcall test '(define (a x) x)) 
     169    (funcall test '(define-syntax a (lambda (sexp) ))))) 
     170;;(escm-test::run 'escm 'escm-vm-eval) 
    150171 
    151172(defsubst escm-vm::compile (vm sexp)