Comments (6)
Closing this to create another issue.
from janet.
@amano-kenji May be you can see if 9e0daae fixed things for you?
from janet.
It fixes the tail call optimization, but the fiber call stack for false branch points to the top of if-let
instead of the line where debug/stacktrace
is called.
For the true branch, the call stack points to the line where debug/stacktrace
is called.
Other than that, it's fine. It's only a minor issue.
from janet.
This is my test code.
(defn recurse
[branch]
(if-let [ha branch]
(do
(ev/sleep 1)
(debug/stacktrace (fiber/current) "print stack for true branch" "")
(recurse branch))
(do
(ev/sleep 1)
(debug/stacktrace (fiber/current) "print stack for false branch" "")
(recurse branch))))
(recurse false)
from janet.
Ok, to spell out some details...with the following in recurse.janet
:
(defn recurse
[branch]
(if-let [ha branch]
(do
(ev/sleep 1)
(debug/stacktrace (fiber/current) "print stack for true branch" "")
(recurse branch))
(do
(ev/sleep 1)
(debug/stacktrace (fiber/current) "print stack for false branch" "")
(recurse branch))))
(defn main
[& args]
(def arg
(case (get args 1 "true")
"true" true
"false" false
nil))
(recurse arg))
For the invocation janet recurse.janet true
I get:
alive: print stack for true branch
in debug/stacktrace [src/core/debug.c] on line 388
in recurse [recurse.janet] (tailcall) on line 6, column 7
alive: print stack for true branch
in debug/stacktrace [src/core/debug.c] on line 388
in recurse [recurse.janet] (tailcall) on line 6, column 7
...
where line 6, column 7 refers to the code:
(debug/stacktrace (fiber/current) "print stack for true branch" "")
which is fine, but, for the invocation janet recurse.janet false
I get:
alive: print stack for false branch
in debug/stacktrace [src/core/debug.c] on line 388
in recurse [recurse.janet] (tailcall) on line 3, column 3
alive: print stack for false branch
in debug/stacktrace [src/core/debug.c] on line 388
in recurse [recurse.janet] (tailcall) on line 3, column 3
...
where line 3, column 3 refers to the code:
(if-let [ha branch]
which I guess would be nicer if this was actually pointing at:
(debug/stacktrace (fiber/current) "print stack for false branch" "")
(line 10, column 7).
from janet.
I guess the location information reporting situation mentioned in this comment is a different issue.
from janet.
Related Issues (20)
- Proposal: Terse Chained Indices HOT 19
- Reimplement `slurp` with `os/open`. HOT 28
- A way to read standard input in the background without `file/read` in a thread. HOT 4
- `each` macro improper behavior? HOT 8
- false branch of `if-let` doesn't report the correct call stack information. HOT 4
- `ev/select` should not resume a dead task. HOT 4
- `try` and `defer` break tail call optimization. HOT 4
- `(= @"update" @"update")` is `false`. HOT 3
- `ev/select` still revives fibers.... HOT 2
- option to unbundle docstrings and potential consequences HOT 8
- splicing into structs/tables HOT 2
- Disasm/asm doesn't round-trip for function with unused argument HOT 1
- eventloop/networking gets stuck on musl HOT 11
- Consider making `module/paths` a dynamic variable HOT 6
- Can it run on iOS? Thank you. HOT 3
- `os/strftime` doesn't respect environment variables. HOT 3
- Re-integrate jpm into janet HOT 42
- recent change kinda breaks lexical scope with multiple modules HOT 2
- How to switch off spork/sh/copy message? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from janet.