From bed5ee4529b6f6aaa9943019d641847a4545bac8 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Fri, 24 Apr 2015 12:04:41 +0200 Subject: [PATCH] vhdlpp: Handle 'severity' statements without using keywords. --- vhdlpp/lexor_keyword.gperf | 4 ---- vhdlpp/parse.y | 27 ++++++++++++++++++--------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/vhdlpp/lexor_keyword.gperf b/vhdlpp/lexor_keyword.gperf index 9ee02c5a9..b5faffce4 100644 --- a/vhdlpp/lexor_keyword.gperf +++ b/vhdlpp/lexor_keyword.gperf @@ -45,9 +45,7 @@ else, GN_KEYWORD_2008, K_else elsif, GN_KEYWORD_2008, K_elsif end, GN_KEYWORD_2008, K_end entity, GN_KEYWORD_2008, K_entity -error, GN_KEYWORD_2008, K_error exit, GN_KEYWORD_2008, K_exit -failure, GN_KEYWORD_2008, K_failure fairness, GN_KEYWORD_2008, K_fairness false, GN_KEYWORD_2008, K_false file, GN_KEYWORD_2008, K_file @@ -76,7 +74,6 @@ new, GN_KEYWORD_2008, K_new next, GN_KEYWORD_2008, K_next nor, GN_KEYWORD_2008, K_nor not, GN_KEYWORD_2008, K_not -note, GN_KEYWORD_2008, K_note null, GN_KEYWORD_2008, K_null of, GN_KEYWORD_2008, K_of on, GN_KEYWORD_2008, K_on @@ -129,7 +126,6 @@ vmode, GN_KEYWORD_2008, K_vmode vprop, GN_KEYWORD_2008, K_vprop vunit, GN_KEYWORD_2008, K_vunit wait, GN_KEYWORD_2008, K_wait -warning, GN_KEYWORD_2008, K_warning when, GN_KEYWORD_2008, K_when while, GN_KEYWORD_2008, K_while with, GN_KEYWORD_2008, K_with diff --git a/vhdlpp/parse.y b/vhdlpp/parse.y index 34a352e40..4b288a78b 100644 --- a/vhdlpp/parse.y +++ b/vhdlpp/parse.y @@ -271,13 +271,13 @@ static void touchup_interface_for_functions(std::list*ports) %token K_begin K_block K_body K_buffer K_bus %token K_case K_component K_configuration K_constant K_context K_cover %token K_default K_disconnect K_downto -%token K_else K_elsif K_end K_entity K_error K_exit -%token K_failure K_fairness K_false K_file K_for K_force K_function +%token K_else K_elsif K_end K_entity K_exit +%token K_fairness K_false K_file K_for K_force K_function %token K_generate K_generic K_group K_guarded %token K_if K_impure K_in K_inertial K_inout K_is %token K_label K_library K_linkage K_literal K_loop %token K_map K_mod -%token K_nand K_new K_next K_nor K_not K_note K_null +%token K_nand K_new K_next K_nor K_not K_null %token K_of K_on K_open K_or K_others K_out %token K_package K_parameter K_port K_postponed K_procedure K_process %token K_property K_protected K_pure @@ -288,7 +288,7 @@ static void touchup_interface_for_functions(std::list*ports) %token K_then K_to K_transport K_true K_type %token K_unaffected K_units K_until K_use %token K_variable K_vmode K_vprop K_vunit -%token K_wait K_warning K_when K_while K_with +%token K_wait K_when K_while K_with %token K_xnor K_xor /* Identifiers that are not keywords are identifiers. */ %token IDENTIFIER @@ -2186,11 +2186,20 @@ sequential_statement ; severity - : K_severity K_note { $$ = ReportStmt::NOTE; } - | K_severity K_warning { $$ = ReportStmt::WARNING; } - | K_severity K_error { $$ = ReportStmt::ERROR; } - | K_severity K_failure { $$ = ReportStmt::FAILURE; } - ; + : K_severity IDENTIFIER + { if(!strcasecmp($2, "NOTE")) + $$ = ReportStmt::NOTE; + else if(!strcasecmp($2, "WARNING")) + $$ = ReportStmt::WARNING; + else if(!strcasecmp($2, "ERROR")) + $$ = ReportStmt::ERROR; + else if(!strcasecmp($2, "FAILURE")) + $$ = ReportStmt::FAILURE; + else { + errormsg(@1, "Invalid severity level (possible values: NOTE, WARNING, ERROR, FAILURE).\n"); + $$ = ReportStmt::UNSPECIFIED; + } + } severity_opt : severity { $$ = $1; }