Giter Site home page Giter Site logo

Comments (6)

amano-kenji avatar amano-kenji commented on May 24, 2024 1

Closing this to create another issue.

from janet.

sogaiu avatar sogaiu commented on May 24, 2024

@amano-kenji May be you can see if 9e0daae fixed things for you?

from janet.

amano-kenji avatar amano-kenji commented on May 24, 2024

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.

amano-kenji avatar amano-kenji commented on May 24, 2024

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.

sogaiu avatar sogaiu commented on May 24, 2024

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.

sogaiu avatar sogaiu commented on May 24, 2024

I guess the location information reporting situation mentioned in this comment is a different issue.

from janet.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.