diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2014-02-17 00:02:52 +1100 |
---|---|---|
committer | David Gibson <david@gibson.dropbear.id.au> | 2014-03-03 10:51:50 +1100 |
commit | 9a8a1f41dd1ba0d8612f2177ec58e22eff312055 (patch) | |
tree | ed56e8677726dc3c25e86404dee05bf0796865e9 | |
parent | 5960427cd35c388b3a448ae2ebe6974896f7cfbb (diff) | |
download | device-tree-compiler-9a8a1f41dd1ba0d8612f2177ec58e22eff312055.tar.gz |
Re-implement "," in property definitions as a bytestring operator
We've already introduced an internal "join" operator which appends
bytestring expressions together. This uses it to implement the "," syntax
in property values as expressions.
This is the last piece of property value syntax to be converted to use
the expression infrastructure, so all (non-empty) property values can now
be implemented as a single expression. For now we still just immediately
evaluate the expression though.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r-- | dtc-parser.y | 37 |
1 files changed, 14 insertions, 23 deletions
diff --git a/dtc-parser.y b/dtc-parser.y index 7e1251d..61cdf66 100644 --- a/dtc-parser.y +++ b/dtc-parser.y @@ -76,8 +76,6 @@ static struct data expr_bytestring(struct expression *expr); %token <labelref> DT_REF %token DT_INCBIN -%type <data> propdata -%type <data> propdataprefix %type <re> memreserve %type <re> memreserves %type <array> array @@ -107,6 +105,7 @@ static struct data expr_bytestring(struct expression *expr); %type <expr> expr_or %type <expr> expr_conditional %type <expr> expr_postlabel +%type <expr> expr_join %type <expr> expr %% @@ -194,9 +193,11 @@ proplist: ; propdef: - DT_PROPNODENAME '=' propdata ';' + DT_PROPNODENAME '=' expr ';' { - $$ = build_property($1, $3); + struct data d = expr_bytestring($3); + + $$ = build_property($1, d); } | DT_PROPNODENAME ';' { @@ -213,25 +214,6 @@ propdef: } ; -propdata: - propdataprefix expr - { - struct data d = expr_bytestring($2); - $$ = data_merge($1, d); - } - ; - -propdataprefix: - /* empty */ - { - $$ = empty_data; - } - | propdata ',' - { - $$ = $1; - } - ; - array: arrayprefix '>' { $$ = $1; } ; @@ -328,7 +310,15 @@ expr_prim: ; expr: + expr_join + ; + +expr_join: expr_postlabel + | expr_join ',' expr_postlabel + { + $$ = expression_join(&@$, $1, $3); + } ; expr_postlabel: @@ -343,6 +333,7 @@ expr_postlabel: } ; + expr_conditional: expr_or | DT_REF |