From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Gibson Subject: [PATCH 07/10] Implement labels within property values as bytestring expressions Date: Mon, 17 Feb 2014 00:19:38 +1100 Message-ID: <1392556781-7743-8-git-send-email-david@gibson.dropbear.id.au> References: <1392556781-7743-1-git-send-email-david@gibson.dropbear.id.au> Return-path: In-Reply-To: <1392556781-7743-1-git-send-email-david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org> Sender: devicetree-compiler-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: jdl-CYoMK+44s/E@public.gmane.org, 3fa55604225d40864c30a8b17d0dac60b2384cbe-mnsaURCQ41sdnm+yROfE0A@public.gmane.org, David Gibson This re-implements labels within property values as a form of bytestring expression. The grammar gets a little hairy to handle the fact that labels are allowed both at the beginning and end of property values without introducing parser conflicts. Signed-off-by: David Gibson --- dtc-parser.y | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/dtc-parser.y b/dtc-parser.y index fcc3b4d..bff22d9 100644 --- a/dtc-parser.y +++ b/dtc-parser.y @@ -93,6 +93,7 @@ static struct data expr_bytestring(struct expression *expr); %type expr_incbin %type expr_prim +%type expr_prelabel %type expr_unary %type expr_mul %type expr_add @@ -105,6 +106,7 @@ static struct data expr_bytestring(struct expression *expr); %type expr_and %type expr_or %type expr_conditional +%type expr_postlabel %type expr %% @@ -221,10 +223,6 @@ propdata: { $$ = data_add_marker($1, REF_PATH, $2); } - | propdata DT_LABEL - { - $$ = data_add_marker($1, LABEL, $2); - } ; propdataprefix: @@ -236,10 +234,6 @@ propdataprefix: { $$ = $1; } - | propdataprefix DT_LABEL - { - $$ = data_add_marker($1, LABEL, $2); - } ; array: @@ -338,7 +332,19 @@ expr_prim: ; expr: - expr_conditional + expr_postlabel + ; + +expr_postlabel: + expr_conditional + | expr_conditional DT_LABEL + { + struct data d = data_add_marker(empty_data, LABEL, $2); + struct expression *label; + + label = expression_bytestring_constant(&@2, d); + $$ = expression_join(&@$, $1, label); + } ; expr_conditional: @@ -408,12 +414,24 @@ expr_mul: ; expr_unary: - expr_prim + expr_prelabel | '-' expr_unary { $$ = UNOP(@$, negate, $2); } | '~' expr_unary { $$ = UNOP(@$, bit_not, $2); } | '!' expr_unary { $$ = UNOP(@$, logic_not, $2); } ; +expr_prelabel: + expr_prim + | DT_LABEL expr_prelabel + { + struct data d = data_add_marker(empty_data, LABEL, $1); + struct expression *label; + + label = expression_bytestring_constant(&@1, d); + $$ = expression_join(&@$, label, $2); + } + ; + bytestring_literal: /* empty */ { -- 1.8.5.3 -- To unsubscribe from this list: send the line "unsubscribe devicetree-compiler" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html