Closed iacore closed 8 months ago
Git bisect found:
Author: primo-ppcg <mike.tryczak@gmail.com>
Date: Wed Aug 23 16:01:16 2023 +0700
Optimize nil conditions for while and if
src/core/specials.c | 74 +++++++++++++++++++++++++++++++++++++----------------
1 file changed, 52 insertions(+), 22 deletions(-)
I will look into this and give a proper fix later, I don't expect it should be too complicated
I don't understand (^^;
Some of the output for (doc default)
here is:
(default sym val)
Define a default value for an optional argument. Expands to `(def
sym (if (= nil sym) val sym))`.
That suggests to me that default
is supposed to make sense in the context of where "optional argument" makes sense, e.g.:
$ janet
Janet 1.32.1-1ccd544b linux/x64/gcc - '(doc)' for help
repl:1:> (defn test [&opt x] (default x "B") x)
<function test>
repl:2:> (test "A")
"A"
repl:3:> (test)
"B"
That looks like it's working to me, so may be I'm missing a case where it doesn't work.
Please help me understand what the issue is.
@sogaiu Run the first code snippet on this page.
The first code snippet in the page does not appear to be in the context of a function definition.
The documentation explicitly mentions optional argument:
Define a default value for an optional argument.
I take that to mean there must be a surrounding defintion of some callable (e.g. function or macro).
Ok, I think I get it now.
$ janet
Janet 1.32.1-1ccd544b linux/x64/gcc - '(doc)' for help
repl:1:> (def x "A")
"A"
repl:2:> (def x (if (= nil x) "B" x))
"B"
I confused myself by thinking that the problem was with default
(^^;
I don't know how to name the bug (issue title). It is very fundamental.
What I see as output:
B
What I should see:A