diff --git a/dtc-parser.y b/dtc-parser.y index 7ee436f..42c4d75 100644 --- a/dtc-parser.y +++ b/dtc-parser.y @@ -24,8 +24,12 @@ #include "srcpos.h" extern int yylex(void); -extern void print_error(YYLTYPE *loc, char const *fmt, ...); extern void yyerror(char const *s); +#define ERROR(loc, ...) \ + do { \ + srcpos_error((loc), "Error", __VA_ARGS__); \ + treesource_error = true; \ + } while (0) extern struct boot_info *the_boot_info; extern bool treesource_error; @@ -145,17 +149,18 @@ devicetree: if (target) merge_nodes(target, $3); else - print_error(&@2, "label or path, '%s', not found", $2); + ERROR(&@2, "Label or path %s not found", $2); $$ = $1; } | devicetree DT_DEL_NODE DT_REF ';' { struct node *target = get_node_by_ref($1, $3); - if (!target) - print_error(&@3, "label or path, '%s', not found", $3); - else + if (target) delete_node(target); + else + ERROR(&@3, "Label or path %s not found", $3); + $$ = $1; } @@ -271,10 +276,9 @@ arrayprefix: bits = $2; if ((bits != 8) && (bits != 16) && - (bits != 32) && (bits != 64)) - { - print_error(&@2, "Only 8, 16, 32 and 64-bit elements" - " are currently supported"); + (bits != 32) && (bits != 64)) { + ERROR(&@2, "Array elements must be" + " 8, 16, 32 or 64-bits"); bits = 32; } @@ -299,9 +303,8 @@ arrayprefix: * mask), all bits are one. */ if (($2 > mask) && (($2 | mask) != -1ULL)) - print_error(&@2, - "integer value out of range " - "%016lx (%d bits)", $1.bits); + ERROR(&@2, "Value out of range for" + " %d-bit array element", $1.bits); } $$.data = data_append_integer($1.data, $2, $1.bits); @@ -315,7 +318,7 @@ arrayprefix: REF_PHANDLE, $2); else - print_error(&@2, "References are only allowed in " + ERROR(&@2, "References are only allowed in " "arrays with 32-bit elements."); $$.data = data_append_integer($1.data, val, $1.bits); @@ -435,7 +438,7 @@ subnodes: } | subnode propdef { - print_error(&@2, "syntax error: properties must precede subnodes"); + ERROR(&@2, "Properties must precede subnodes"); YYERROR; } ; @@ -458,18 +461,7 @@ subnode: %% -void print_error(YYLTYPE *loc, char const *fmt, ...) -{ - va_list va; - - va_start(va, fmt); - srcpos_verror(loc, "Error", fmt, va); - va_end(va); - - treesource_error = true; -} - void yyerror(char const *s) { - print_error(&yylloc, "%s", s); + ERROR(&yylloc, "%s", s); }