1. 12 Feb, 2015 2 commits
    • Kevin Modzelewski's avatar
      Only rewrite IC slots that are not currently being executed · aff2d9a4
      Kevin Modzelewski authored
      Before, we tried to do it based on whether the rewrite we were
      adding was "compatible" with whatever was already in there.  But we
      weren't really doing this and there were a lot of limitations with this
      method anyway.
      aff2d9a4
    • Kevin Modzelewski's avatar
      Have rewrites keep track of how many stack frames are inside them · c3ab5278
      Kevin Modzelewski authored
      This is kind of hacky due to our method of first doing the rewrite,
      and then picking the slot to rewrite to.  This means that at the time
      that we create the rewrite, we don't know the exact location of the
      "num_inside" counter, so we have to go back at the end and rewrite it.
      
      We could also switch things to pick the rewrite slot first, but that
      is also complicated but perhaps more subtly, since during the course
      of the rewrite the chosen slot could have gotten rewritten!
      
      This changeset adds this functionality but doesn't use it for anything.
      c3ab5278
  2. 11 Feb, 2015 6 commits
  3. 10 Feb, 2015 3 commits
    • Kevin Modzelewski's avatar
      Call fclose after parsing a file · 528c0268
      Kevin Modzelewski authored
      528c0268
    • Kevin Modzelewski's avatar
      Let object.__new__ take kwargs · 1427169a
      Kevin Modzelewski authored
      Also, improve rewriting to still be able to rewrite object construction.
      For now, be able to rewrite the case that a function takes kwargs but
      the kwargs is empty.
      
      Also, add an even faster path to typeCallInternal.  This is partially
      obviated by the improved rewriting, but we might as well keep it.
      1427169a
    • Kevin Modzelewski's avatar
      Fix some type annotations · 23266a66
      Kevin Modzelewski authored
      And add a test that would have caught this specific case.
      Would be nice if we had some way of verifying these more generally...
      23266a66
  4. 09 Feb, 2015 7 commits
  5. 08 Feb, 2015 1 commit
  6. 07 Feb, 2015 14 commits
  7. 06 Feb, 2015 7 commits
    • Travis Hance's avatar
      moved array.py to array_test.py · 2b4dc9ba
      Travis Hance authored
      2b4dc9ba
    • Kevin Modzelewski's avatar
      Basic 'traceback' object support · e22da6f3
      Kevin Modzelewski authored
      Previously we were just passing around a vector<> of LineInfos; now, they
      get encapsulated in a BoxedTraceback object.  This has a couple benefits:
      1) they can participate in the existing sys.exc_info passing+handling
      2) we can enable a basic form of the traceback module.
      
      2 means that we can finally test our tracebacks support, since I was constantly
      fixing one issue only to break it in another place.
      
      1 means that we now generate the right traceback for the current exception!
      Before this change, the traceback we would generate was determined using a different
      system than the exc_info-based exception raising, so sometimes they would diverge
      and be horribly confusing.
      
      There's a pretty big limitation with the current implementation: our tracebacks
      don't span the right stack frames.  In CPython, a traceback spans the stack frames
      between the raise and the catch, but in Pyston the traceback includes all stack frames.
      It's not easy to provide this behavior, since the tracebacks are supposed to get updated
      as they get rethrown through each stack frame.
      
      We could do some complicated stuff in irgen to make sure this happens.  I think the better
      but more complicated approach is for us to create the custom exception unwinder we've been
      wanting.  This would let us add custom traceback-handling support as we unwound the stack.
      
      Another limitation is that tracebacks are supposed to automatically include a reference
      to the entire frame stack (tb.tb_frame.f_back.f_back.f_back....).  In Pyston, we're not
      automatically generating those frame objects, so we would either need to do that and take
      a perf hit, or (more likely?) generate the frame objects on-demand when they're needed.
      
      It's not really clear that they're actually needed for traceback objects, so I implemented
      a different traceback object API and changed the traceback.py library, under the assumption
      that almost-noone actually deals with the traceback object internals.
      e22da6f3
    • Kevin Modzelewski's avatar
      Merge pull request #285 from tjhance/builtin-functions · ee448c5f
      Kevin Modzelewski authored
      builtin functions
      ee448c5f
    • Kevin Modzelewski's avatar
      Merge pull request #286 from undingen/remove_pic · 5cc8ea87
      Kevin Modzelewski authored
      Remove -fPIC
      5cc8ea87
    • Travis Hance's avatar
      builtin functions · 128cb7c7
      Travis Hance authored
      128cb7c7
    • Kevin Modzelewski's avatar
      Merge pull request #281 from undingen/array · 2781d28c
      Kevin Modzelewski authored
      add the array module
      2781d28c
    • Marius Wachtler's avatar
      Remove -fPIC · 032be99e
      Marius Wachtler authored
      032be99e