mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 15:43:01 +00:00 
			
		
		
		
	Merge pull request #867 from pyrmont/feature.custom-out-functions
Support sending output to a function
This commit is contained in:
		| @@ -483,6 +483,19 @@ static Janet cfun_io_print_impl_x(int32_t argc, Janet *argv, int newline, | ||||
|                 janet_buffer_push_u8(buf, '\n'); | ||||
|             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: | ||||
|             f = dflt_file; | ||||
|             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 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") | ||||
|  | ||||
| # with-vars | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose