Today I uncovered a pesky little bug while trying to get the gtk demo to compile in preparation for our next release. To make a long story short - when defining structures NASMX creates a few defines per struc member in order to ensure that we get the correct type and offset of the member.
The bug manifested itself as follows:
NASMX_STRUC GActionInterface
NASMX_RESERVE g_iface, int8_t, GTypeInterface_size
NASMX_RESERVE get_name, uint32_t, 1
NASMX_RESERVE get_parameter_type, uint32_t, 1
NASMX_RESERVE get_state_type, uint32_t, 1
NASMX_RESERVE get_state_hint, uint32_t, 1
NASMX_RESERVE get_enabled, uint32_t, 1
NASMX_RESERVE get_state, uint32_t, 1
NASMX_RESERVE set_state, uint32_t, 1
NASMX_RESERVE activate, uint32_t, 1
NASMX_ENDSTRUC
As the NASMX_RESERVE macro parses each member we previously would simply append "_type" to the member name and create a new define for internal book-keeping. Then the member name itself gets EQUated to the offset of that member in the structure. The issue was that, when we attempted to parse the "get_state" member, the previous member named "get_state_type" was already equated! Subsequently, the definition of the structure itself would fail causing an assembler error.
This has been corrected in the latest snapshot. However, and unfortunately, we cannot change the "member_name" %+ _size equates. Subsequently, two identically named structure members ( but with one member having _size at the end of the name ) will still cause issues. This is the legacy of backward compatibility.