Running bpfmt or bpmodify on a Blueprints file that references
variables defined in a parent Blueprints file causes parse errors
on unknown variables. Modify the parser to parse in two modes,
parser.Parse and parser.ParseAndEval. The first parses without
attempting to evaluate variables and expressions, the second
performs a full evaluation.
Change-Id: Ic11948ea77c8e65379d7260591ada15db0e4f5b9
Trying to handle all the whitespace and newline printing inside
printToken got overly complicated, and resulted in a few bugs in
the layout around comments and indentation that were hard to fix.
Rewrite the whitespace and newline handling to be handled directly
by the object printers, using requestSpace() to ensure whitespace
is inserted and requestNewline() to ensure a newline is inserted.
Also fixes unnecessarily left aligning all comments that contain
indentation, and fixes accidentally unindenting comments that are
the last token in their indented block.
Change-Id: I18707802726107cf0b6ec7de9b542d0ec1d2c0dd
Switch back to:
moduleType {
name: value,
arch: {
x86: {
name: value,
},
},
}
This provides better consistency between properties defined at the
top level of a module and properties defined inside a map.
The parser will continue to support the other format for now, but the
printer will only produce the original format.
Add support for + operator on maps. The semantics are that keys that
exist in both maps are added with the + operator, and keys that exist
in one map are copied to the resulting map.
Change-Id: Iba9a6f886477a1eb7311272d07944800c806e368
Support += assignments to variables. Variables are now mutable
up until they are referenced, then they become immutable. This
will allow variables to be modified in a conditional, or allow
better commenting on why parts of a variable are set.
Change-Id: Iad964da7206b493365fe3686eedd7954e6eaf9a2
The printer was allowing extra newlines in odd places, for example
between a property name and the '=' in a module definition. Make
newline location stricter by explicitly allowing newlines or
line comments.
Make integrating with go tools easier by putting the blueprint package
files in the top level directory of the git project instead of in a
subdirectory called blueprint.
Change-Id: I35c144c5fe7ddf34e478d0c47c50b2f6c92c2a03