61 lines
2.0 KiB
Scheme
61 lines
2.0 KiB
Scheme
#|
|
|
|
|
The EoPL language can almost be specified via info.ss fields, but
|
|
on-execute needs to install the EoPL exception handler as its
|
|
last action. (The module body can't do that, because a `with-handlers'
|
|
wraps the load of the module.)
|
|
|
|
|#
|
|
|
|
#lang mzscheme
|
|
|
|
(require mzlib/unit
|
|
mzlib/class
|
|
drscheme/tool
|
|
string-constants)
|
|
|
|
(provide tool@)
|
|
|
|
(define tool@
|
|
(unit
|
|
(import drscheme:tool^)
|
|
(export drscheme:tool-exports^)
|
|
(define language-base%
|
|
(class* object% (drscheme:language:simple-module-based-language<%>)
|
|
(define/public (get-language-numbers)
|
|
'(-500 -400))
|
|
(define/public (get-language-position)
|
|
(list (string-constant teaching-languages)
|
|
"Essentials of Programming Languages (3rd ed.)"))
|
|
(define/public (get-module)
|
|
'(lib "eopl/eopl.ss"))
|
|
(define/public (get-one-line-summary)
|
|
"Based on the Friedman, Wand, and Haynes text")
|
|
(define/public (get-language-url)
|
|
"http://www.eopl3.com/")
|
|
(define/public (get-reader)
|
|
(lambda (src port)
|
|
(let ([v (read-syntax src port)])
|
|
(if (eof-object? v)
|
|
v
|
|
(namespace-syntax-introduce v)))))
|
|
(super-instantiate ())))
|
|
|
|
(define language%
|
|
(class (drscheme:language:module-based-language->language-mixin
|
|
(drscheme:language:simple-module-based-language->module-based-language-mixin
|
|
language-base%))
|
|
(define/override (use-namespace-require/copy?) #t)
|
|
(define/override (on-execute settings run-in-user-thread)
|
|
(super on-execute settings run-in-user-thread)
|
|
(print-mpair-curly-braces #f)
|
|
(run-in-user-thread
|
|
(lambda ()
|
|
((namespace-variable-value 'install-eopl-exception-handler)))))
|
|
(super-instantiate ())))
|
|
|
|
(define (phase1) (void))
|
|
(define (phase2)
|
|
(drscheme:language-configuration:add-language
|
|
(make-object ((drscheme:language:get-default-mixin) language%))))))
|