fix eval variant used for command-line arguments

Closes #2111
This commit is contained in:
Matthew Flatt 2018-05-30 10:04:54 +08:00
parent 7bbbb8f063
commit 388345f35f
4 changed files with 555 additions and 541 deletions

View File

@ -0,0 +1,12 @@
#lang racket/base
(require racket/system
compiler/find-exe)
;; Make sure that `-e` interleaves expansion and evaluation
(define o (open-output-bytes))
(parameterize ([current-output-port o])
(unless (system* (find-exe) "-e" "(begin (define-syntax-rule (m) 10) (m))")
(error "run failed")))
(unless (equal? "10" (read-line (open-input-bytes (get-output-bytes o))))
(error "output failed"))

View File

@ -3,6 +3,8 @@
"common/module-path.rkt"
"namespace/namespace.rkt"
"eval/main.rkt"
(only-in "eval/api.rkt"
[eval eval-top-level])
"eval/dynamic-require.rkt"
"eval/reflect.rkt"
"eval/load.rkt"
@ -43,6 +45,9 @@
eval
read
;; Uses handlers:
eval-top-level
load
load/use-compiled
load-extension

View File

@ -3546,7 +3546,7 @@ Scheme_Object *scheme_compile_for_eval(Scheme_Object *form, Scheme_Env *env)
Scheme_Object *scheme_eval(Scheme_Object *obj, Scheme_Env *env)
{
Scheme_Object *eval_proc, *a[2];
eval_proc = scheme_get_startup_export("eval");
eval_proc = scheme_get_startup_export("eval-top-level");
a[0] = obj;
a[1] = env->namespace;
return scheme_apply(eval_proc, 2, a);
@ -3555,7 +3555,7 @@ Scheme_Object *scheme_eval(Scheme_Object *obj, Scheme_Env *env)
Scheme_Object *scheme_eval_multi(Scheme_Object *obj, Scheme_Env *env)
{
Scheme_Object *eval_proc, *a[2];
eval_proc = scheme_get_startup_export("eval");
eval_proc = scheme_get_startup_export("eval-top-level");
a[0] = obj;
a[1] = env->namespace;
return scheme_apply_multi(eval_proc, 2, a);
@ -3569,10 +3569,8 @@ static Scheme_Object *finish_eval_with_prompt(void *_data, int argc, Scheme_Obje
Scheme_Object *scheme_eval_with_prompt(Scheme_Object *obj, Scheme_Env *env)
{
Scheme_Object *expr;
expr = scheme_compile_for_eval(obj, env);
return scheme_call_with_prompt(finish_eval_with_prompt,
scheme_make_pair(expr, (Scheme_Object *)env));
scheme_make_pair(obj, (Scheme_Object *)env));
}
static Scheme_Object *finish_eval_multi_with_prompt(void *_data, int argc, Scheme_Object **argv)
@ -3583,10 +3581,8 @@ static Scheme_Object *finish_eval_multi_with_prompt(void *_data, int argc, Schem
Scheme_Object *scheme_eval_multi_with_prompt(Scheme_Object *obj, Scheme_Env *env)
{
Scheme_Object *expr;
expr = scheme_compile_for_eval(obj, env);
return scheme_call_with_prompt_multi(finish_eval_multi_with_prompt,
scheme_make_pair(expr, (Scheme_Object *)env));
scheme_make_pair(obj, (Scheme_Object *)env));
}
Scheme_Object *_scheme_eval_compiled(Scheme_Object *obj, Scheme_Env *env)

File diff suppressed because it is too large Load Diff