Skip to content
This repository was archived by the owner on Dec 10, 2018. It is now read-only.

Simplify the read_i08() bool result cast. #162

Merged
merged 1 commit into from
Oct 12, 2015

Conversation

jparise
Copy link
Contributor

@jparise jparise commented Oct 10, 2015

The cython-generated code for bool(read_i08(buf)) includes a call to the
Python bool type function. That extra call is unnecessary in this case.
Instead, we can cast to cython's bint type, which generates code that
directly returns Py_True or Py_False (via __Pyx_PyBool_FromLong).

This appears to be the most efficient code generation for this expression.
For completeness, I also investigated these variants:

  • <bool>read_i08(buf)
  • read_i08(buf) != 0
  • <bool>(read_i08(buf) != 0)
  • return False if read_i08(buf) == 0 else True

The cython-generated code for `bool(read_i08(buf))` includes a call to the
Python `bool` type function. That extra call is unnecessary in this case.
Instead, we can cast to cython's `bint` type, which generates code that
directly returns `Py_True` or `Py_False` (via `__Pyx_PyBool_FromLong`).

This appears to be the most efficient code generation for this expression.
For completeness, I also investigated these variants:

    - <bool>read_i08(buf)
    - read_i08(buf) != 0
    - <bool>(read_i08(buf) != 0)
    - return False if read_i08(buf) == 0 else True
lxyu added a commit that referenced this pull request Oct 12, 2015
Simplify the read_i08() bool result cast.
@lxyu lxyu merged commit 981ec6e into Thriftpy:develop Oct 12, 2015
@lxyu
Copy link
Contributor

lxyu commented Oct 12, 2015

Thanks!

# for free to subscribe to this conversation on GitHub. Already have an account? #.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants