piqi convert, piqi check: handle mutually-recursive (mutually-included) .piqi modules correctly when they are embedded in .piq For instance, the following command sequence is now working correctly: piqi convert --embed-piqi piqi.piqi > t.piq piqi convert t.piq piqi check t.piq
…ds as well The json-omit-null-fields setting, when true, leads to non-existent repeated fields being omitted from JSON output (in addition to missing optinal fields). Before this change, they were included and had  as a value.
.protobuf-prefix defines a prefix that is automatically added to each enum option's name in .proto modules converted from .piqi using "piqi to-proto" command. It helps to deal with the fact that Protobuf-generated enum defintions do not form a C++ namespace meaning that enum constants are defined directly in the outer namespace; it was announced that this problem will be fixed in protobuf-2.5
- self-spec: rename piqi.proto.piqi to piqi.protobuf.piqi to avoid clashes with .proto.piqi suffixes reserved for results of "proto to-piqi" conversions - self-spec: remove explicit module name assignment from self-spec modules (i.e. .module piqi.org/piqi.*) - modules included and imported from modules with scoped names are searched within the importing/including module's scope - new "piqi expand --add-module-name" that adds .module <name> property if it was missing
"piqi expand --functions" removes embedded typedefs in function parameters and turns them into correspondent top-level defintions instead. "piqi expand --all" is equivalent "piqi expand --extensions --functions" "piqi expand" retains the old behavior and is exquivalent to "piqi expand --extensions". Fixed along the way: "piqi expand" didn't generate extended version of embedded typedefs in function parameters. If someone decided to extend an such typedef, a new extended version of it would never make it back to its original embedded location.
Define built-in int32-fixed, uint32-fixed, proto-int32 types and their 64-bit versions as aliases for int32 and uint32. This way extensions need to only care about a small subset of built-in types. In order to achieve this, we had to implement suport for overriding wire-type in lower-level aliases.
Allow nested alias defintions in function parameters. It is mostly needed for completeness (alias was the only user-defined type that couldn't be used there), but sometimes it can be actually useful. For example, when someone needs to specify additional properties in the embedded alias, such as "piq-format".
This way, unparsed (i.e. unknown to the current self-specification) fields survive through "piqi expand", and most importantly, through the compiler-compiler (cc) stage when the self-spec is used to fully encode itself from .piqi into Protobuf binary format.