mirror of
https://github.com/janet-lang/janet
synced 2024-12-03 21:39:54 +00:00
Simplify eval.
Also add more conventional handling of nil to the `compile` function.
This commit is contained in:
parent
8d1cfe0c56
commit
6a557a73f5
@ -2534,7 +2534,7 @@
|
|||||||
(in env :exit-value env))
|
(in env :exit-value env))
|
||||||
|
|
||||||
(defn quit
|
(defn quit
|
||||||
``Tries to exit from the current repl or context. Does not always exit the application.
|
``Tries to exit from the current repl or run-context. Does not always exit the application.
|
||||||
Works by setting the :exit dynamic binding to true. Passing a non-nil `value` here will cause the outer
|
Works by setting the :exit dynamic binding to true. Passing a non-nil `value` here will cause the outer
|
||||||
run-context to return that value.``
|
run-context to return that value.``
|
||||||
[&opt value]
|
[&opt value]
|
||||||
@ -2546,7 +2546,7 @@
|
|||||||
``Evaluates a form in the current environment. If more control over the
|
``Evaluates a form in the current environment. If more control over the
|
||||||
environment is needed, use `run-context`.``
|
environment is needed, use `run-context`.``
|
||||||
[form]
|
[form]
|
||||||
(def res (compile form (fiber/getenv (fiber/current)) :eval))
|
(def res (compile form nil :eval))
|
||||||
(if (= (type res) :function)
|
(if (= (type res) :function)
|
||||||
(res)
|
(res)
|
||||||
(error (get res :error))))
|
(error (get res :error))))
|
||||||
|
@ -1005,7 +1005,8 @@ JANET_CORE_FN(cfun_compile,
|
|||||||
"If a `lints` array is given, linting messages will be appended to the array. "
|
"If a `lints` array is given, linting messages will be appended to the array. "
|
||||||
"Each message will be a tuple of the form `(level line col message)`.") {
|
"Each message will be a tuple of the form `(level line col message)`.") {
|
||||||
janet_arity(argc, 1, 4);
|
janet_arity(argc, 1, 4);
|
||||||
JanetTable *env = argc > 1 ? janet_gettable(argv, 1) : janet_vm.fiber->env;
|
JanetTable *env = (argc > 1 && !janet_checktype(argv[1], JANET_NIL))
|
||||||
|
? janet_gettable(argv, 1) : janet_vm.fiber->env;
|
||||||
if (NULL == env) {
|
if (NULL == env) {
|
||||||
env = janet_table(0);
|
env = janet_table(0);
|
||||||
janet_vm.fiber->env = env;
|
janet_vm.fiber->env = env;
|
||||||
@ -1017,11 +1018,12 @@ JANET_CORE_FN(cfun_compile,
|
|||||||
source = janet_unwrap_string(x);
|
source = janet_unwrap_string(x);
|
||||||
} else if (janet_checktype(x, JANET_KEYWORD)) {
|
} else if (janet_checktype(x, JANET_KEYWORD)) {
|
||||||
source = janet_unwrap_keyword(x);
|
source = janet_unwrap_keyword(x);
|
||||||
} else {
|
} else if (!janet_checktype(x, JANET_NIL)) {
|
||||||
janet_panic_type(x, 2, JANET_TFLAG_STRING | JANET_TFLAG_KEYWORD);
|
janet_panic_type(x, 2, JANET_TFLAG_STRING | JANET_TFLAG_KEYWORD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
JanetArray *lints = (argc >= 4) ? janet_getarray(argv, 3) : NULL;
|
JanetArray *lints = (argc >= 4 && !janet_checktype(argv[3], JANET_NIL))
|
||||||
|
? janet_getarray(argv, 3) : NULL;
|
||||||
JanetCompileResult res = janet_compile_lint(argv[0], env, source, lints);
|
JanetCompileResult res = janet_compile_lint(argv[0], env, source, lints);
|
||||||
if (res.status == JANET_COMPILE_OK) {
|
if (res.status == JANET_COMPILE_OK) {
|
||||||
return janet_wrap_function(janet_thunk(res.funcdef));
|
return janet_wrap_function(janet_thunk(res.funcdef));
|
||||||
|
Loading…
Reference in New Issue
Block a user