Changeset 491


Ignore:
Timestamp:
Feb 6, 2017, 11:06:50 AM (6 years ago)
Author:
Maxim Reznik
Message:

Fix resolution of function_call with attribute_reference prefix

Location:
trunk/ada-2012/src
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/ada-2012/src/api/gela-interpretations.ads

    r463 r491  
    7979   not overriding procedure Add_Attr_Function
    8080     (Self   : in out Interpretation_Manager;
     81      Tipe   : Gela.Semantic_Types.Type_Index;
    8182      Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
    8283      Down   : Gela.Interpretations.Interpretation_Index_Array;
     
    155156   not overriding procedure On_Attr_Function
    156157     (Self   : in out Down_Visiter;
     158      Tipe   : Gela.Semantic_Types.Type_Index;
    157159      Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
    158160      Down   : Gela.Interpretations.Interpretation_Index_Array) is null;
     
    218220   not overriding procedure On_Attr_Function
    219221     (Self   : in out Up_Visiter;
     222      Tipe   : Gela.Semantic_Types.Type_Index;
    220223      Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
    221224      Cursor : Gela.Interpretations.Cursor'Class) is null;
  • trunk/ada-2012/src/api/gela-profiles.ads

    r415 r491  
    3535      Index : Positive)
    3636      return Gela.Elements.Defining_Names.Defining_Name_Access is abstract;
     37   --  Could be null when prefix is attribute_reference, like 'Pos (X).
    3738
    3839   not overriding function Get_Index
  • trunk/ada-2012/src/api/gela-type_managers.ads

    r490 r491  
    22
    33with Gela.Types;
     4with Gela.Lexical_Types;
    45with Gela.Semantic_Types;
    56with Gela.Elements.Defining_Names;
     
    8788   --  If Name if callable entity return corresponding profile
    8889
     90   not overriding function Get_Profile
     91     (Self      : access Type_Manager;
     92      Tipe      : Gela.Semantic_Types.Type_Index;
     93      Attribute : Gela.Lexical_Types.Symbol)
     94      return Gela.Profiles.Profile_Access is abstract;
     95   --  If given attribute if callable entity return corresponding profile
     96
    8997end Gela.Type_Managers;
  • trunk/ada-2012/src/semantic/gela-debug_properties.adb

    r463 r491  
    117117      overriding procedure On_Attr_Function
    118118        (Self   : in out Visiter;
     119         Tipe   : Gela.Semantic_Types.Type_Index;
    119120         Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
    120121         Down   : Gela.Interpretations.Interpretation_Index_Array);
     
    148149      overriding procedure On_Attr_Function
    149150        (Self   : in out Visiter;
     151         Tipe   : Gela.Semantic_Types.Type_Index;
    150152         Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
    151153         Cursor : Gela.Interpretations.Cursor'Class);
     
    346348      overriding procedure On_Attr_Function
    347349        (Self   : in out Visiter;
     350         Tipe   : Gela.Semantic_Types.Type_Index;
    348351         Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
    349352         Down   : Gela.Interpretations.Interpretation_Index_Array) is null;
     
    418421      overriding procedure On_Attr_Function
    419422        (Self   : in out Visiter;
     423         Tipe   : Gela.Semantic_Types.Type_Index;
    420424         Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
    421425         Cursor : Gela.Interpretations.Cursor'Class)
    422426      is
    423          pragma Unreferenced (Self, Kind, Cursor);
    424       begin
    425          Put_Line ("   Attr_Function ");
     427         pragma Unreferenced (Cursor, Tipe);
     428      begin
     429         Put_Line
     430           ("   Attr_Function " &
     431              Self.Comp.Context.Symbols.Image (Kind).To_UTF_8_String);
    426432      end On_Attr_Function;
    427433
  • trunk/ada-2012/src/semantic/gela-int-attr_functions.adb

    r415 r491  
    99   function Create
    1010     (Down     : Gela.Interpretations.Interpretation_Index_Array;
     11      Tipe     : Gela.Semantic_Types.Type_Index;
    1112      Kind     : Gela.Lexical_Types.Predefined_Symbols.Attribute)
    1213      return Attr_Function is
     
    1415      return (Index  => 0,
    1516              Length => Down'Length,
     17              Tipe   => Tipe,
    1618              Kind   => Kind,
    1719              Down   => Down);
     
    2931   end Kind;
    3032
     33   ----------
     34   -- Tipe --
     35   ----------
     36
     37   not overriding function Tipe
     38     (Self : Attr_Function) return Gela.Semantic_Types.Type_Index is
     39   begin
     40      return Self.Tipe;
     41   end Tipe;
     42
    3143   -----------
    3244   -- Visit --
  • trunk/ada-2012/src/semantic/gela-int-attr_functions.ads

    r415 r491  
    11with Gela.Lexical_Types;
     2with Gela.Semantic_Types;
    23
    34package Gela.Int.Attr_Functions is
     
    89   function Create
    910     (Down     : Gela.Interpretations.Interpretation_Index_Array;
     11      Tipe     : Gela.Semantic_Types.Type_Index;
    1012      Kind     : Gela.Lexical_Types.Predefined_Symbols.Attribute)
    1113      return Attr_Function;
    1214
    13    function Kind
     15   not overriding function Kind
    1416     (Self : Attr_Function)
    1517      return Gela.Lexical_Types.Predefined_Symbols.Attribute;
     18
     19   not overriding function Tipe
     20     (Self : Attr_Function) return Gela.Semantic_Types.Type_Index;
    1621
    1722private
    1823
    1924   type Attr_Function is new Interpretation with record
     25      Tipe : Gela.Semantic_Types.Type_Index;
    2026      Kind : Gela.Lexical_Types.Predefined_Symbols.Attribute;
    2127   end record;
  • trunk/ada-2012/src/semantic/gela-plain_interpretations.adb

    r463 r491  
    5050   overriding procedure Add_Attr_Function
    5151     (Self   : in out Interpretation_Manager;
     52      Tipe   : Gela.Semantic_Types.Type_Index;
    5253      Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
    5354      Down   : Gela.Interpretations.Interpretation_Index_Array;
     
    5859          (Gela.Int.Attr_Functions.Create
    5960             (Down     => Down,
     61              Tipe     => Tipe,
    6062              Kind     => Kind));
    6163   begin
     
    494496            Target.On_Attr_Function
    495497              (Kind  => Value.Kind,
     498               Tipe  => Value.Tipe,
    496499               Down  => Value.Down);
    497500         end Attr_Function;
  • trunk/ada-2012/src/semantic/gela-plain_interpretations.ads

    r463 r491  
    7777   overriding procedure Add_Attr_Function
    7878     (Self   : in out Interpretation_Manager;
     79      Tipe   : Gela.Semantic_Types.Type_Index;
    7980      Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
    8081      Down   : Gela.Interpretations.Interpretation_Index_Array;
  • trunk/ada-2012/src/semantic/gela-plain_type_managers.adb

    r490 r491  
    3838with Gela.Elements.Unconstrained_Array_Definitions;
    3939with Gela.Environments;
    40 with Gela.Lexical_Types;
    4140with Gela.Plain_Type_Views;
     41with Gela.Profiles.Attributes;
    4242with Gela.Profiles.Names;
    4343
     
    223223   end Get_Profile;
    224224
     225   -----------------
     226   -- Get_Profile --
     227   -----------------
     228
     229   overriding function Get_Profile
     230     (Self      : access Type_Manager;
     231      Tipe      : Gela.Semantic_Types.Type_Index;
     232      Attribute : Gela.Lexical_Types.Symbol)
     233         return Gela.Profiles.Profile_Access
     234   is
     235      Result : Profile_Access;
     236      Key    : constant Attribute_Key := (Tipe, Attribute);
     237      Cursor : constant Attribute_Maps.Cursor := Self.Attributes.Find (Key);
     238   begin
     239      if Attribute_Maps.Has_Element (Cursor) then
     240         Result := Attribute_Maps.Element (Cursor);
     241      else
     242         case Attribute is
     243            when Gela.Lexical_Types.Predefined_Symbols.Ceiling |
     244                 Gela.Lexical_Types.Predefined_Symbols.Floor |
     245                 Gela.Lexical_Types.Predefined_Symbols.Fraction |
     246                 Gela.Lexical_Types.Predefined_Symbols.Machine |
     247                 Gela.Lexical_Types.Predefined_Symbols.Machine_Rounding |
     248                 Gela.Lexical_Types.Predefined_Symbols.Model |
     249                 Gela.Lexical_Types.Predefined_Symbols.Pred |
     250                 Gela.Lexical_Types.Predefined_Symbols.Rounding |
     251                 Gela.Lexical_Types.Predefined_Symbols.Succ |
     252                 Gela.Lexical_Types.Predefined_Symbols.Truncation |
     253                 Gela.Lexical_Types.Predefined_Symbols.Unbiased_Rounding =>
     254
     255               Result := new Gela.Profiles.Profile'Class'
     256                 (Gela.Profiles.Attributes.Create
     257                    ((1 => Tipe), Tipe));
     258
     259            when Gela.Lexical_Types.Predefined_Symbols.Pos =>
     260
     261               Result := new Gela.Profiles.Profile'Class'
     262                 (Gela.Profiles.Attributes.Create
     263                    ((1 => Tipe), Self.Universal_Integer));
     264
     265            when Gela.Lexical_Types.Predefined_Symbols.Mod_Symbol |
     266                 Gela.Lexical_Types.Predefined_Symbols.Val =>
     267
     268               Result := new Gela.Profiles.Profile'Class'
     269                 (Gela.Profiles.Attributes.Create
     270                    ((1 => Self.Universal_Integer), Tipe));
     271
     272            when others =>
     273               raise Constraint_Error;
     274         end case;
     275
     276         Self.Attributes.Insert (Key, Result);
     277      end if;
     278
     279      return Gela.Profiles.Profile_Access (Result);
     280   end Get_Profile;
     281
    225282   ----------
    226283   -- Hash --
     
    255312   begin
    256313      return Self.Hash;
     314   end Hash;
     315
     316   ----------
     317   -- Hash --
     318   ----------
     319
     320   function Hash (Value : Attribute_Key) return Ada.Containers.Hash_Type is
     321      use type Ada.Containers.Hash_Type;
     322   begin
     323      return Ada.Containers.Hash_Type (Value.Tipe) * 2017
     324        + Gela.Lexical_Types.Symbol'Pos (Value.Attribute);
    257325   end Hash;
    258326
  • trunk/ada-2012/src/semantic/gela-plain_type_managers.ads

    r485 r491  
    1111with Gela.Elements.Root_Type_Definitions;
    1212with Gela.Elements.Subtype_Mark_Or_Access_Definitions;
     13with Gela.Lexical_Types;
    1314with Gela.Profiles;
    1415with Gela.Semantic_Types;
     
    6364      Equivalent_Keys => Gela.Elements.Defining_Names."=");
    6465
     66   type Attribute_Key is record
     67      Tipe      : Gela.Semantic_Types.Type_Index;
     68      Attribute : Gela.Lexical_Types.Symbol;
     69   end record;
     70
     71   function Hash (Value : Attribute_Key) return Ada.Containers.Hash_Type;
     72
     73   package Attribute_Maps is new Ada.Containers.Hashed_Maps
     74     (Key_Type        => Attribute_Key,
     75      Element_Type    => Profile_Access,
     76      Hash            => Hash,
     77      Equivalent_Keys => "=");
     78
    6579   function Hash
    6680     (Self : Gela.Elements.Root_Type_Definitions.
     
    7993     new Gela.Type_Managers.Type_Manager with
    8094   record
    81        Map      : Type_View_Maps.Map;
    82        Back     : Back_Maps.Map;
    83        Profiles : Profile_Maps.Map;
    84        Roots    : Root_Maps.Map;
     95       Map        : Type_View_Maps.Map;
     96       Back       : Back_Maps.Map;
     97       Profiles   : Profile_Maps.Map;
     98       Attributes : Attribute_Maps.Map;
     99       Roots      : Root_Maps.Map;
    85100   end record;
    86101
     
    167182      return Gela.Profiles.Profile_Access;
    168183
     184   overriding function Get_Profile
     185     (Self      : access Type_Manager;
     186      Tipe      : Gela.Semantic_Types.Type_Index;
     187      Attribute : Gela.Lexical_Types.Symbol)
     188         return Gela.Profiles.Profile_Access;
     189
    169190   overriding function Boolean
    170191     (Self  : access Type_Manager) return Gela.Semantic_Types.Type_Index;
  • trunk/ada-2012/src/semantic/gela-plian_int_sets.adb

    r460 r491  
    289289            Target.On_Attr_Function
    290290              (Kind   => Value.Kind,
     291               Tipe   => Value.Tipe,
    291292               Cursor => Visit.Self);
    292293         end Attr_Function;
  • trunk/ada-2012/src/semantic/gela-resolve.adb

    r490 r491  
    5252   --  others non-expression interpretations. Translate defining name into
    5353   --  expression. But On_Defining_Name is called when Name doen't have a type
    54    --  (like subprogram name)
     54   --  (like subprogram name). On_Attr_Function is called for attributes.
    5555
    5656   procedure Each_Prefix
     
    378378                  Result => Set);
    379379            end if;
    380          when Gela.Lexical_Types.Predefined_Symbols.Val =>
     380         when
     381--                Gela.Lexical_Types.Predefined_Symbols.Adjacent |
     382              Gela.Lexical_Types.Predefined_Symbols.Ceiling |
     383--                Gela.Lexical_Types.Predefined_Symbols.Compose |
     384--                Gela.Lexical_Types.Predefined_Symbols.Copy_Sign |
     385--                Gela.Lexical_Types.Predefined_Symbols.Exponent |
     386              Gela.Lexical_Types.Predefined_Symbols.Floor |
     387              Gela.Lexical_Types.Predefined_Symbols.Fraction |
     388--                Gela.Lexical_Types.Predefined_Symbols.Image |
     389--                Gela.Lexical_Types.Predefined_Symbols.Input |
     390--                Gela.Lexical_Types.Predefined_Symbols.Leading_Part |
     391              Gela.Lexical_Types.Predefined_Symbols.Machine |
     392              Gela.Lexical_Types.Predefined_Symbols.Machine_Rounding |
     393--                Gela.Lexical_Types.Predefined_Symbols.Max |
     394--                Gela.Lexical_Types.Predefined_Symbols.Min |
     395              Gela.Lexical_Types.Predefined_Symbols.Mod_Symbol |
     396              Gela.Lexical_Types.Predefined_Symbols.Model |
     397              Gela.Lexical_Types.Predefined_Symbols.Pos |
     398              Gela.Lexical_Types.Predefined_Symbols.Pred |
     399--                Gela.Lexical_Types.Predefined_Symbols.Remainder |
     400--                Gela.Lexical_Types.Predefined_Symbols.Round |
     401              Gela.Lexical_Types.Predefined_Symbols.Rounding |
     402--                Gela.Lexical_Types.Predefined_Symbols.Scaling |
     403              Gela.Lexical_Types.Predefined_Symbols.Succ |
     404              Gela.Lexical_Types.Predefined_Symbols.Truncation |
     405              Gela.Lexical_Types.Predefined_Symbols.Unbiased_Rounding |
     406              Gela.Lexical_Types.Predefined_Symbols.Val =>
     407--                Gela.Lexical_Types.Predefined_Symbols.Value |
     408--                Gela.Lexical_Types.Predefined_Symbols.Wide_Image |
     409--                Gela.Lexical_Types.Predefined_Symbols.Wide_Value |
     410--                Gela.Lexical_Types.Predefined_Symbols.Wide_Wide_Image |
     411--                Gela.Lexical_Types.Predefined_Symbols.Wide_Wide_Value =>
     412
    381413            Get_Subtype
    382414              (Comp,
     
    388420            Comp.Context.Interpretation_Manager.Add_Attr_Function
    389421              (Kind   => Symbol,
     422               Tipe   => Type_Index,
    390423               Down   => (1 => Index),
    391424               Result => Set);
     
    831864         end record;
    832865
     866         overriding procedure On_Attr_Function
     867           (Self   : in out Visiter;
     868            Tipe   : Gela.Semantic_Types.Type_Index;
     869            Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
     870            Cursor : Gela.Interpretations.Cursor'Class);
     871
    833872         overriding procedure On_Defining_Name
    834873           (Self   : in out Visiter;
     
    851890
    852891      package body Each is
     892
     893         overriding procedure On_Attr_Function
     894           (Self   : in out Visiter;
     895            Tipe   : Gela.Semantic_Types.Type_Index;
     896            Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
     897            Cursor : Gela.Interpretations.Cursor'Class)
     898         is
     899            pragma Unreferenced (Self);
     900         begin
     901            Target.On_Attr_Function (Tipe, Kind, Cursor);
     902         end On_Attr_Function;
    853903
    854904         overriding procedure On_Defining_Name
     
    911961         end record;
    912962
     963         overriding procedure On_Attr_Function
     964           (Self   : in out Visiter;
     965            Tipe   : Gela.Semantic_Types.Type_Index;
     966            Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
     967            Cursor : Gela.Interpretations.Cursor'Class);
     968
    913969         overriding procedure On_Defining_Name
    914970           (Self   : in out Visiter;
     
    927983
    928984      package body Each is
     985
     986         overriding procedure On_Attr_Function
     987           (Self   : in out Visiter;
     988            Tipe   : Gela.Semantic_Types.Type_Index;
     989            Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
     990            Cursor : Gela.Interpretations.Cursor'Class)
     991         is
     992            pragma Unreferenced (Self);
     993         begin
     994            Target.On_Attr_Function (Tipe, Kind, Cursor);
     995         end On_Attr_Function;
    929996
    930997         overriding procedure On_Defining_Name
     
    10101077         type Visiter is new Gela.Interpretations.Up_Visiter with null record;
    10111078
     1079         overriding procedure On_Attr_Function
     1080           (Self   : in out Visiter;
     1081            Tipe   : Gela.Semantic_Types.Type_Index;
     1082            Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
     1083            Cursor : Gela.Interpretations.Cursor'Class);
     1084
    10121085         overriding procedure On_Defining_Name
    10131086           (Self   : in out Visiter;
     
    10321105      package body Each_Prefix is
    10331106
    1034          overriding procedure On_Defining_Name
    1035            (Self   : in out Visiter;
    1036             Name   : Gela.Elements.Defining_Names.Defining_Name_Access;
    1037             Cursor : Gela.Interpretations.Cursor'Class)
    1038          is
    1039             pragma Unreferenced (Self);
     1107         procedure On_Call
     1108           (Profile : Gela.Profiles.Profile_Access;
     1109            Cursor  : Gela.Interpretations.Cursor'Class);
     1110
     1111         procedure On_Call
     1112           (Profile : Gela.Profiles.Profile_Access;
     1113            Cursor  : Gela.Interpretations.Cursor'Class)
     1114         is
    10401115            Chosen : Gela.Interpretations.Interpretation_Index := 0;
    10411116            Count  : Natural := 0;
    10421117            Output : Gela.Interpretations.Interpretation_Index_Array
    10431118              (Tuples'Range);
    1044 
    1045             Profile : constant Gela.Profiles.Profile_Access :=
    1046               TM.Get_Profile (Env, Name);
    10471119
    10481120         begin
     
    11191191
    11201192            end if;
     1193         end On_Call;
     1194
     1195         overriding procedure On_Attr_Function
     1196           (Self   : in out Visiter;
     1197            Tipe   : Gela.Semantic_Types.Type_Index;
     1198            Kind   : Gela.Lexical_Types.Predefined_Symbols.Attribute;
     1199            Cursor : Gela.Interpretations.Cursor'Class)
     1200         is
     1201            pragma Unreferenced (Self);
     1202
     1203            Profile : constant Gela.Profiles.Profile_Access :=
     1204              TM.Get_Profile (Tipe, Kind);
     1205         begin
     1206            On_Call (Profile, Cursor);
     1207         end On_Attr_Function;
     1208
     1209         overriding procedure On_Defining_Name
     1210           (Self   : in out Visiter;
     1211            Name   : Gela.Elements.Defining_Names.Defining_Name_Access;
     1212            Cursor : Gela.Interpretations.Cursor'Class)
     1213         is
     1214            pragma Unreferenced (Self);
     1215
     1216            Profile : constant Gela.Profiles.Profile_Access :=
     1217              TM.Get_Profile (Env, Name);
     1218         begin
     1219            On_Call (Profile, Cursor);
    11211220         end On_Defining_Name;
    11221221
Note: See TracChangeset for help on using the changeset viewer.