Maintain "is_unsized" state of constants
authorEddie Hung <eddie@fpgeh.com>
Thu, 20 Jun 2019 19:43:39 +0000 (12:43 -0700)
committerEddie Hung <eddie@fpgeh.com>
Thu, 20 Jun 2019 19:43:39 +0000 (12:43 -0700)
frontends/verilog/const2ast.cc

index 57d366dbfed3e8e812dfeb838d8f2628c86d824d..3a3634d34a09c1a660c79053235b945f57cb735c 100644 (file)
@@ -204,7 +204,7 @@ AstNode *VERILOG_FRONTEND::const2ast(std::string code, char case_type, bool warn
        {
                std::vector<RTLIL::State> data;
                bool is_signed = false;
-               bool is_unsized = false;
+               bool is_unsized = len_in_bits < 0;
                if (*(endptr+1) == 's') {
                        is_signed = true;
                        endptr++;
@@ -213,25 +213,25 @@ AstNode *VERILOG_FRONTEND::const2ast(std::string code, char case_type, bool warn
                {
                case 'b':
                case 'B':
-                       my_strtobin(data, endptr+2, len_in_bits, 2, case_type, false);
+                       my_strtobin(data, endptr+2, len_in_bits, 2, case_type, is_unsized);
                        break;
                case 'o':
                case 'O':
-                       my_strtobin(data, endptr+2, len_in_bits, 8, case_type, false);
+                       my_strtobin(data, endptr+2, len_in_bits, 8, case_type, is_unsized);
                        break;
                case 'd':
                case 'D':
-                       my_strtobin(data, endptr+2, len_in_bits, 10, case_type, false);
+                       my_strtobin(data, endptr+2, len_in_bits, 10, case_type, is_unsized);
                        break;
                case 'h':
                case 'H':
-                       my_strtobin(data, endptr+2, len_in_bits, 16, case_type, false);
+                       my_strtobin(data, endptr+2, len_in_bits, 16, case_type, is_unsized);
                        break;
                default:
                        char next_char = char(tolower(*(endptr+1)));
                        if (next_char == '0' || next_char == '1' || next_char == 'x' || next_char == 'z') {
-                               my_strtobin(data, endptr+1, 1, 2, case_type, true);
                                is_unsized = true;
+                               my_strtobin(data, endptr+1, 1, 2, case_type, is_unsized);
                        } else {
                                return NULL;
                        }