diff options
author | Tristan Gingold | 2014-06-21 02:53:44 +0200 |
---|---|---|
committer | Tristan Gingold | 2014-06-21 02:53:44 +0200 |
commit | 5ca17f7e5385385c5094338c4fe368136d6fd336 (patch) | |
tree | ad2162382067ba097f745a820a20948683c466ad | |
parent | f8429fbe0d7e8f172fba2e3f3d157fbb6508da17 (diff) | |
download | ghdl-5ca17f7e5385385c5094338c4fe368136d6fd336.tar.gz ghdl-5ca17f7e5385385c5094338c4fe368136d6fd336.tar.bz2 ghdl-5ca17f7e5385385c5094338c4fe368136d6fd336.zip |
Fix regression for 'value on physical types.
-rw-r--r-- | translate/grt/grt-values.adb | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/translate/grt/grt-values.adb b/translate/grt/grt-values.adb index 7225dce..2715d51 100644 --- a/translate/grt/grt-values.adb +++ b/translate/grt/grt-values.adb @@ -69,9 +69,9 @@ package body Grt.Values is end if; end To_LC; - -- Return TRUE iff user string S (POS .. LEN) is equal to REF. Comparaison - -- is case insensitive, but REF must be lowercase (REF is supposed to - -- come from an RTI). + -- Return TRUE iff user string S (POS .. LEN - 1) is equal to REF. + -- Comparaison is case insensitive, but REF must be lowercase (REF is + -- supposed to come from an RTI). function String_Match (S : Std_String_Basep; Pos : Ghdl_Index_Type; Len : Ghdl_Index_Type; @@ -564,7 +564,7 @@ package body Grt.Values is return Ghdl_I64 is S : constant Std_String_Basep := Str.Base; - Len : constant Ghdl_Index_Type := Str.Bounds.Dim_1.Length; + Len : Ghdl_Index_Type := Str.Bounds.Dim_1.Length; Unit_Pos : Ghdl_Index_Type; Lit_Pos : Ghdl_Index_Type; Lit_End : Ghdl_Index_Type; @@ -577,6 +577,10 @@ package body Grt.Values is Multiple : Ghdl_Rti_Access; Mult : Ghdl_I64; begin + -- Remove trailing whitespaces. FIXME: also called in physical_split. + Lit_Pos := 0; + Remove_Whitespaces (S, Len, Lit_Pos); + -- Extract literal and unit Ghdl_Value_Physical_Split (Str, Found_Real, Lit_Pos, Lit_End, Unit_Pos); @@ -592,7 +596,7 @@ package body Grt.Values is end loop; if Multiple = null then Error_C ("'value: unit '"); - Error_C_Std (S (Unit_Pos .. Len)); + Error_C_Std (S (Unit_Pos .. Len - 1)); Error_C ("' not in physical type '"); Error_C (Phys_Rti.Name); Error_E ("'"); |