summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2014-02-17 00:02:52 +1100
committerDavid Gibson <david@gibson.dropbear.id.au>2014-03-03 10:51:50 +1100
commit9a8a1f41dd1ba0d8612f2177ec58e22eff312055 (patch)
treeed56e8677726dc3c25e86404dee05bf0796865e9
parent5960427cd35c388b3a448ae2ebe6974896f7cfbb (diff)
downloaddevice-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.y37
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