mirror of
https://github.com/janet-lang/janet
synced 2024-12-26 00:10:27 +00:00
Support using functions with :out dynamic binding
This commit is contained in:
parent
ab4f18954b
commit
4e263b8c39
@ -483,6 +483,19 @@ static Janet cfun_io_print_impl_x(int32_t argc, Janet *argv, int newline,
|
|||||||
janet_buffer_push_u8(buf, '\n');
|
janet_buffer_push_u8(buf, '\n');
|
||||||
return janet_wrap_nil();
|
return janet_wrap_nil();
|
||||||
}
|
}
|
||||||
|
case JANET_FUNCTION: {
|
||||||
|
/* Special case function */
|
||||||
|
JanetFunction *fun = janet_unwrap_function(x);
|
||||||
|
JanetBuffer *buf = janet_buffer(0);
|
||||||
|
for (int32_t i = offset; i < argc; ++i) {
|
||||||
|
janet_to_string_b(buf, argv[i]);
|
||||||
|
}
|
||||||
|
if (newline)
|
||||||
|
janet_buffer_push_u8(buf, '\n');
|
||||||
|
Janet args[1] = { janet_wrap_buffer(buf) };
|
||||||
|
janet_call(fun, 1, args);
|
||||||
|
return janet_wrap_nil();
|
||||||
|
}
|
||||||
case JANET_NIL:
|
case JANET_NIL:
|
||||||
f = dflt_file;
|
f = dflt_file;
|
||||||
if (f == NULL) janet_panic("cannot print to nil");
|
if (f == NULL) janet_panic("cannot print to nil");
|
||||||
|
@ -168,6 +168,16 @@
|
|||||||
(assert (= (string out-buf) "Hello\nhi") "print and prin to buffer 1")
|
(assert (= (string out-buf) "Hello\nhi") "print and prin to buffer 1")
|
||||||
(assert (= (string err-buf) "Sup\nnot much.") "eprint and eprin to buffer 1")
|
(assert (= (string err-buf) "Sup\nnot much.") "eprint and eprin to buffer 1")
|
||||||
|
|
||||||
|
# Printing to functions
|
||||||
|
(def out-buf @"")
|
||||||
|
(defn prepend [x]
|
||||||
|
(with-dyns [:out out-buf]
|
||||||
|
(prin "> " x)))
|
||||||
|
(with-dyns [:out prepend]
|
||||||
|
(print "Hello world"))
|
||||||
|
|
||||||
|
(assert (= (string out-buf) "> Hello world\n") "print to buffer via function")
|
||||||
|
|
||||||
(assert (= (string '()) (string [])) "empty bracket tuple literal")
|
(assert (= (string '()) (string [])) "empty bracket tuple literal")
|
||||||
|
|
||||||
# with-vars
|
# with-vars
|
||||||
|
Loading…
Reference in New Issue
Block a user