Changeset 21632 in project


Ignore:
Timestamp:
11/25/10 03:58:16 (10 years ago)
Author:
Ivan Raikov
Message:

9ML-toolkit: beginnings of repl interface

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/9ML-toolkit/trunk/report.scm

    r21617 r21632  
    106106    (output-xml        "sets output format to XML")
    107107
     108    (interactive   "enables interactive mode"
     109                   (single-char #\i))
    108110
    109111    (help         (single-char #\h))           
     
    964966      )))
    965967
     968
     969(define (repl #!optional (prompt "9ML> "))
     970  (let recur ((scope    (init-scope))
     971              (type-env (init-type-env))
     972              (eval-env (init-eval-env)))
     973
     974    (print prompt)
     975
     976    (let ((defs (parse 'NineML (current-input-port))))
     977
     978      (let* ((scoped-defs      (scope-moddef scope defs))
     979             (mty              (type-moddef type-env '() scoped-defs))
     980             (eval-env1        (mod-eval-cbv eval-env scoped-defs))
     981             (type-env1        (map (lambda (x) (cases modspec x
     982                                                       (Value_sig  (id vty)  (cons id x))
     983                                                       (Type_sig   (id decl)  (cons id x))
     984                                                       (Module_sig (id mty) (cons id x))
     985                                                       ))
     986                                    mty))
     987             )
     988        (print-type-env mty #f)
     989        (newline)
     990        (recur (append scoped-defs scope)
     991               (append type-env1 type-env)
     992               (append eval-env1 eval-env))
     993        ))
     994    ))
     995
     996
    966997(define (main options operands)
    967998
     
    9771008    )
    9781009
    979   (if (null? operands)
    980       (miniML:usage)
     1010  (cond ((and (null? operands) (not (options 'interactive)))
     1011         (miniML:usage))
     1012        ((and (null? operands) (options 'interactive))
     1013         (repl))
     1014        (else
    9811015      (let ((output-type (cond ((options 'output-xml)  'xml)
    9821016                               ((options 'output-sxml) 'sxml)
     
    10081042                   (html-report operand uenv))
    10091043             ))
    1010          operands unified-envs))))
     1044         operands unified-envs)))
     1045  ))
    10111046
    10121047(main opt (opt '@))
Note: See TracChangeset for help on using the changeset viewer.