1. 10 Aug, 2015 2 commits
  2. 09 Aug, 2015 7 commits
    • Kevin Modzelewski's avatar
      Use profiling to know when to throw CAPI exceptions · 2d7d24ca
      Kevin Modzelewski authored
      Also, allow reraising using CAPI exceptions.
      2d7d24ca
    • Kevin Modzelewski's avatar
      Merge pull request #815 from kmod/exceptions · 3307cddc
      Kevin Modzelewski authored
      Clean up our exception handling
      3307cddc
    • Kevin Modzelewski's avatar
      Ignore t3.py as well · fcad2a61
      Kevin Modzelewski authored
      I use like to use test/tests/t.py and t2.py as temporary test files,
      so that they can get hooked into the makefile helpers, but the tester
      ignores them.  Do this for t3.py too.
      fcad2a61
    • Kevin Modzelewski's avatar
      Rename these functions · 91ac4569
      Kevin Modzelewski authored
      91ac4569
    • Kevin Modzelewski's avatar
      Move a bunch of stuff out of UnwindSession · 4b7c277f
      Kevin Modzelewski authored
      It was pretty unwieldy and handled some disparate parts of the
      exception-raising process.  I think things are a bit cleaner now:
      - cxx_unwind.cpp handles C++ unwinding semantics
      - unwinding.cpp converts C stacks to Python stacks
      - exceptions.cpp takes Python stack frames and handles them appropriately
      
      So for throwing a C++ exception, it starts out in cxx_unwind.cpp, which
      then hands off the C frames to unwinding.cpp, which then hands off the
      Python frames to exceptions.cpp.  When we get exceptions not via uncaught
      C++ exceptions (ie explicitly handled C++ exceptions or CAPI exceptions),
      those go directly into exceptions.cpp.  There are also non-exception cases
      that we want to get the Python stack trace (ex sys._getframe), and those
      are handled by unwinding.cpp
      4b7c277f
    • Kevin Modzelewski's avatar
      Factor out the "C stack->Python stack" conversion · 10ac9f32
      Kevin Modzelewski authored
      We have a couple different ways of walking the C stack
      (C++ exception unwinding and non-destructing stack crawling),
      and they both want to do this to reconstruct the Python stack.
      Extract out the common code.
      10ac9f32
    • Kevin Modzelewski's avatar
      Get rid of stacktrace.cpp · 4f44b377
      Kevin Modzelewski authored
      It had gotten pretty ad hoc.  There were two things it was doing
      - some things dealing with unwinding; moved those to codegen/unwinding.cpp
      - most of our exception-throwing logic; moved these to a new runtime/exceptions.cpp
      4f44b377
  3. 08 Aug, 2015 6 commits
    • Kevin Modzelewski's avatar
      Merge pull request #814 from kmod/throw_capis3 · fb2eef6e
      Kevin Modzelewski authored
      Be able to jit functions that throw CAPI exceptions
      fb2eef6e
    • Kevin Modzelewski's avatar
      8b122bfe
    • Kevin Modzelewski's avatar
      Templatize generator.next · 456384d8
      Kevin Modzelewski authored
      In theory should help with pyxl which throws a decent number
      of StopIterations from calling generator.next() directly, but
      pretty few of those calls actually make it into the llvm JIT
      to benefit from this.
      456384d8
    • Kevin Modzelewski's avatar
      Have the llvm tier be able to throw capi exceptions · 9789073f
      Kevin Modzelewski authored
      (Not enabled yet)
      9789073f
    • Kevin Modzelewski's avatar
      Change how the llvm jit passes exceptions between blocks · 2f7d52be
      Kevin Modzelewski authored
      Our IR doesn't explicitly represent the data transfer between an Invoke
      statement and its corresponding LandingPad.  We use a couple different
      techniques to pass it through: in the ast interpreter/bjit, we stash it
      into an interpreter-local variable and then pull it back out.  Previous
      to this change, in the LLVM tier we would pass it directly through
      an exception, using either the C++ or CAPI exception-passing mechanism.
      
      This works but is a pain, since it requires coordination between the invoke
      and the landingpad.  These live in different basic blocks, so we ended up
      having this other code that lives separate from the normal irgen that has
      to decide which exception style to use, and it has to respect certain
      restrictions within irgen (ie it has to be careful to not request CAPI
      exceptions for cases that we haven't added support for yet).
      
      This commit changes the approach so that the exception data is passed
      directly as LLVM Values, and its up to the Invoke to figure out how
      to get it into that form.  This adds a bit more complexity to the invoke,
      but it should make the interface easier to extend (such as in the next commit).
      2f7d52be
    • Kevin Modzelewski's avatar
      Fix the in-tree benchmarks · 31c96c0e
      Kevin Modzelewski authored
      Which piggy-back on the integration tests for getting their dependencies.
      31c96c0e
  4. 07 Aug, 2015 18 commits
  5. 06 Aug, 2015 7 commits