1. 23 Jul, 2015 6 commits
    • Kevin Modzelewski's avatar
      Add class-level caching of whether __getattribute__ exists · 0ac14234
      Kevin Modzelewski authored
      This is not quite the same as checking whether tp_getattro
      has been updated, since setting a __getattr__ will change
      tp_getattro.
      
      Usually this isn't that important since we will still need
      to do some special getattr handling, but in a couple specific
      cases we can optimize based on it.  In particular, this commit
      optimizes calls to isinstance(inst, cls) on instances which have
      a __getattr__ set: in the common case (no __getattribute__,
      no custom __class__) we can know that the __getattr__ will not
      get called and we can stay on the isinstance fastpath.
      0ac14234
    • Kevin Modzelewski's avatar
      A couple rewriting fixes / improvements · f6c4298d
      Kevin Modzelewski authored
      - rewriting a runtimeCall of an instancemethod was broken (this is
        a separate code path from the much-more-common callattr form).
      - we don't need to guard on the this->cls as often in Box::getattr, specifically
        in cases that are coming from typeLookup.  Not because the classes are fixed
        (I think they can change), but because they are not allowed to change in a way
        that would change what Box::getattr has the guard for (guarding on attrs_offset
        and tp_dictoffset).
      - slightly change the place we guard on tp_getattro and tp_getattr to a place I think
        is a bit more correct (or at least easier to understand as being correct).
      f6c4298d
    • Kevin Modzelewski's avatar
      Optimize slot_tp_getattr_hook · bfe7d79e
      Kevin Modzelewski authored
      ie the way that __getattr__ ends up getting called.  Two main optimizations:
      - switch the initial attribute access (ie checking to see the attribute exists
        before calling __getattr__) to use a non-throwing api.  For the typical case,
        even though the throwing would be a C API throw, the construction of the
        AttributeError is relatively expensive, and the object would be immediately
        discarded anyway.
      - add rewriting to the function
      
      They both roughly cut out half the overhead of accessing attributes on
      classes with __getattr__.
      bfe7d79e
    • Kevin Modzelewski's avatar
      Merge pull request #745 from kmod/perf2 · f1129a84
      Kevin Modzelewski authored
      Improve isinstance speed
      f1129a84
    • Kevin Modzelewski's avatar
      Merge pull request #744 from rudi-c/fix_setstate · 885046a2
      Kevin Modzelewski authored
      Make sure to intern attribute string in PyObject_SetAttr.
      885046a2
    • Chris Toshok's avatar
      Merge pull request #536 from rudi-c/setslice · e6893159
      Chris Toshok authored
      Handle the extensive edge cases related to sequence slicing
      e6893159
  2. 22 Jul, 2015 26 commits
  3. 21 Jul, 2015 8 commits