<feed xmlns='http://www.w3.org/2005/Atom'>
<title>suspect-devices/circuitpython/py/showbc.c, branch cross</title>
<subtitle>CircuitPython - a Python implementation for teaching coding with microcontrollers</subtitle>
<id>https://git.suspectdevices.com/suspect-devices/circuitpython/atom?h=cross</id>
<link rel='self' href='https://git.suspectdevices.com/suspect-devices/circuitpython/atom?h=cross'/>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/'/>
<updated>2015-12-10T22:19:48+00:00</updated>
<entry>
<title>py: Make UNARY_OP_NOT a first-class op, to agree with Py not semantics.</title>
<updated>2015-12-10T22:19:48+00:00</updated>
<author>
<name>Damien George</name>
<email>damien.p.george@gmail.com</email>
</author>
<published>2015-12-08T12:28:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=bdbe8c9ae21559f6dc0b8e1ad84b7bbec2a04726'/>
<id>urn:sha1:bdbe8c9ae21559f6dc0b8e1ad84b7bbec2a04726</id>
<content type='text'>
Fixes #1684 and makes "not" match Python semantics.  The code is also
simplified (the separate MP_BC_NOT opcode is removed) and the patch saves
68 bytes for bare-arm/ and 52 bytes for minimal/.

Previously "not x" was implemented as !mp_unary_op(x, MP_UNARY_OP_BOOL),
so any given object only needs to implement MP_UNARY_OP_BOOL (and the VM
had a special opcode to do the ! bit).

With this patch "not x" is implemented as mp_unary_op(x, MP_UNARY_OP_NOT),
but this operation is caught at the start of mp_unary_op and dispatched as
!mp_obj_is_true(x).  mp_obj_is_true has special logic to test for
truthness, and is the correct way to handle the not operation.
</content>
</entry>
<entry>
<title>py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR.</title>
<updated>2015-11-29T14:25:35+00:00</updated>
<author>
<name>Damien George</name>
<email>damien.p.george@gmail.com</email>
</author>
<published>2015-11-27T17:01:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=999cedb90ff0827cdb9dfe0e4faa6ebc1739d271'/>
<id>urn:sha1:999cedb90ff0827cdb9dfe0e4faa6ebc1739d271</id>
<content type='text'>
This allows the mp_obj_t type to be configured to something other than a
pointer-sized primitive type.

This patch also includes additional changes to allow the code to compile
when sizeof(mp_uint_t) != sizeof(void*), such as using size_t instead of
mp_uint_t, and various casts.
</content>
</entry>
<entry>
<title>py: Add MICROPY_PERSISTENT_CODE so code can persist beyond the runtime.</title>
<updated>2015-11-13T12:49:18+00:00</updated>
<author>
<name>Damien George</name>
<email>damien.p.george@gmail.com</email>
</author>
<published>2015-11-02T17:27:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=c8e9c0d89afa90694790fd48e1bf527487a5beb7'/>
<id>urn:sha1:c8e9c0d89afa90694790fd48e1bf527487a5beb7</id>
<content type='text'>
Main changes when MICROPY_PERSISTENT_CODE is enabled are:

- qstrs are encoded as 2-byte fixed width in the bytecode
- all pointers are removed from bytecode and put in const_table (this
  includes const objects and raw code pointers)

Ultimately this option will enable persistence for not just bytecode but
also native code.
</content>
</entry>
<entry>
<title>py: Add constant table to bytecode.</title>
<updated>2015-11-13T12:49:18+00:00</updated>
<author>
<name>Damien George</name>
<email>damien.p.george@gmail.com</email>
</author>
<published>2015-10-23T00:23:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=713ea1800d1f0c82a0c75885ad034705556ab5ef'/>
<id>urn:sha1:713ea1800d1f0c82a0c75885ad034705556ab5ef</id>
<content type='text'>
Contains just argument names at the moment but makes it easy to add
arbitrary constants.
</content>
</entry>
<entry>
<title>py: Put all bytecode state (arg count, etc) in bytecode.</title>
<updated>2015-11-13T12:49:18+00:00</updated>
<author>
<name>Damien George</name>
<email>damien.p.george@gmail.com</email>
</author>
<published>2015-10-22T22:45:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=3a3db4dcf0400cffef860f61a84979cb1f7a7541'/>
<id>urn:sha1:3a3db4dcf0400cffef860f61a84979cb1f7a7541</id>
<content type='text'>
</content>
</entry>
<entry>
<title>py: Reorganise bytecode layout so it's more structured, easier to edit.</title>
<updated>2015-11-13T12:49:18+00:00</updated>
<author>
<name>Damien George</name>
<email>damien.p.george@gmail.com</email>
</author>
<published>2015-03-18T17:47:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=9b7f583b0ca37ee87e5fb82e2d65fcd96a609b2f'/>
<id>urn:sha1:9b7f583b0ca37ee87e5fb82e2d65fcd96a609b2f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>py: Remove mp_load_const_bytes and instead load precreated bytes object.</title>
<updated>2015-06-25T14:42:13+00:00</updated>
<author>
<name>Damien George</name>
<email>damien.p.george@gmail.com</email>
</author>
<published>2015-06-25T14:42:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=59fba2d6ea31c134c9c0b88dc73cd25b236f167c'/>
<id>urn:sha1:59fba2d6ea31c134c9c0b88dc73cd25b236f167c</id>
<content type='text'>
Previous to this patch each time a bytes object was referenced a new
instance (with the same data) was created.  With this patch a single
bytes object is created in the compiler and is loaded directly at execute
time as a true constant (similar to loading bignum and float objects).
This saves on allocating RAM and means that bytes objects can now be
used when the memory manager is locked (eg in interrupts).

The MP_BC_LOAD_CONST_BYTES bytecode was removed as part of this.

Generated bytecode is slightly larger due to storing a pointer to the
bytes object instead of the qstr identifier.

Code size is reduced by about 60 bytes on Thumb2 architectures.
</content>
</entry>
<entry>
<title>py: Make showbc decode UNPACK_EX, and use correct range for unop/binop.</title>
<updated>2015-06-18T15:12:17+00:00</updated>
<author>
<name>Damien George</name>
<email>damien.p.george@gmail.com</email>
</author>
<published>2015-06-18T15:12:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=c8870b7c6969db23815da3c4ecfeaf2200ca2792'/>
<id>urn:sha1:c8870b7c6969db23815da3c4ecfeaf2200ca2792</id>
<content type='text'>
</content>
</entry>
<entry>
<title>py: Remove LOAD_CONST_ELLIPSIS bytecode, use LOAD_CONST_OBJ instead.</title>
<updated>2015-05-05T21:15:42+00:00</updated>
<author>
<name>Damien George</name>
<email>damien.p.george@gmail.com</email>
</author>
<published>2015-05-05T21:15:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=8872abcbc4107c8d3eaf148a03813e607aa30bfb'/>
<id>urn:sha1:8872abcbc4107c8d3eaf148a03813e607aa30bfb</id>
<content type='text'>
Ellipsis constant is rarely used so no point having an extra bytecode
for it.
</content>
</entry>
<entry>
<title>py: Simplify bytecode prelude when encoding closed over variables.</title>
<updated>2015-04-06T23:08:17+00:00</updated>
<author>
<name>Damien George</name>
<email>damien.p.george@gmail.com</email>
</author>
<published>2015-04-06T23:08:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=c9aa1883ed87da61d5745036dc55c382c3f4d6ca'/>
<id>urn:sha1:c9aa1883ed87da61d5745036dc55c382c3f4d6ca</id>
<content type='text'>
</content>
</entry>
</feed>
