Changeset 496


Ignore:
Timestamp:
Feb 25, 2017, 12:12:57 PM (6 years ago)
Author:
Maxim Reznik
Message:

Add new property chosen_interpretation

to keep interpretation of Auxiliary_Apply (and may be others nodes latter).
This will simplify work with generic instantination.

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

Legend:

Unmodified
Added
Removed
  • trunk/ada-2012/src/ag/main.ag.pp

    r490 r496  
    1111#include "errors.ag"
    1212#include "static_value.ag"
     13#include "chosen.ag"
    1314
    1415Synthesized attributes
  • trunk/ada-2012/src/api/gela-interpretations.ads

    r491 r496  
    2929      Interpretation_Tuple_Index;
    3030
    31    type Expression_Flags is (No_Flag, Function_Call, Indexed_Component);
     31   type Interpretation_Kinds is
     32     (Unknown,
     33      --  Interpretation of Auxiliary_Apply
     34      Function_Call,
     35      Indexed_Component);
     36
     37   subtype Auxiliary_Apply_Kinds is Interpretation_Kinds
     38     range Function_Call .. Indexed_Component;
     39
     40   subtype Unknown_Auxiliary_Apply_Kinds is Interpretation_Kinds
     41     range Unknown .. Indexed_Component;
    3242
    3343   type Interpretation_Manager is limited interface;
     
    6272     (Self   : in out Interpretation_Manager;
    6373      Tipe   : Gela.Semantic_Types.Type_Index;
    64       Flag   : Gela.Interpretations.Expression_Flags :=
    65         Gela.Interpretations.No_Flag;
     74      Kind   : Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds :=
     75        Gela.Interpretations.Unknown;
    6676      Down   : Gela.Interpretations.Interpretation_Index_Array;
    6777      Result : in out Gela.Interpretations.Interpretation_Set_Index)
     
    144154     (Self   : in out Down_Visiter;
    145155      Tipe   : Gela.Semantic_Types.Type_Index;
    146       Flag   : Gela.Interpretations.Expression_Flags;
     156      Kind   : Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds;
    147157      Down   : Gela.Interpretations.Interpretation_Index_Array) is null;
    148158   --  Called for each expression interpretation
  • trunk/ada-2012/src/asis/asis-extensions-flat_kinds.adb

    r495 r496  
    13941394      Node : not null Gela.Elements.Auxiliary_Applies.Auxiliary_Apply_Access)
    13951395   is
    1396       Comp  : constant Gela.Compilations.Compilation_Access :=
    1397         Node.Enclosing_Compilation;
    1398 
    1399       IM : constant Gela.Interpretations.Interpretation_Manager_Access :=
    1400         Comp.Context.Interpretation_Manager;
    1401 
    1402       package Visiters is
    1403          type Visiter is new Gela.Interpretations.Down_Visiter with record
    1404             Result : Element_Flat_Kind := A_Function_Call;
    1405          end record;
    1406 
    1407          overriding procedure On_Expression
    1408            (Self   : in out Visiter;
    1409             Tipe   : Gela.Semantic_Types.Type_Index;
    1410             Flag   : Gela.Interpretations.Expression_Flags;
    1411             Down   : Gela.Interpretations.Interpretation_Index_Array);
    1412 
    1413       end Visiters;
    1414 
    1415       package body Visiters is
    1416 
    1417          overriding procedure On_Expression
    1418            (Self   : in out Visiter;
    1419             Tipe   : Gela.Semantic_Types.Type_Index;
    1420             Flag   : Gela.Interpretations.Expression_Flags;
    1421             Down   : Gela.Interpretations.Interpretation_Index_Array)
    1422          is
    1423             pragma Unreferenced (Down, Tipe);
    1424             use type Gela.Interpretations.Expression_Flags;
    1425          begin
    1426             if Flag = Gela.Interpretations.Indexed_Component then
    1427                Self.Result := An_Indexed_Component;
    1428             end if;
    1429          end On_Expression;
    1430 
    1431       end Visiters;
    1432 
    1433       V : Visiters.Visiter;
    1434    begin
    1435       IM.Visit (Node.Down, V);
    1436       Self.Result := V.Result;
     1396      use type Gela.Interpretations.Auxiliary_Apply_Kinds;
     1397   begin
     1398      if Node.Chosen_Interpretation =
     1399        Gela.Interpretations.Indexed_Component
     1400      then
     1401         Self.Result := An_Indexed_Component;
     1402      else
     1403         Self.Result := A_Function_Call;
     1404      end if;
    14371405   end Auxiliary_Apply;
    14381406
     
    23442312           (Self   : in out Visiter;
    23452313            Tipe   : Gela.Semantic_Types.Type_Index;
    2346             Flag   : Gela.Interpretations.Expression_Flags;
     2314            Kind   : Gela.Interpretations.Interpretation_Kinds;
    23472315            Down   : Gela.Interpretations.Interpretation_Index_Array);
    23482316
     
    23542322           (Self   : in out Visiter;
    23552323            Tipe   : Gela.Semantic_Types.Type_Index;
    2356             Flag   : Gela.Interpretations.Expression_Flags;
     2324            Kind   : Gela.Interpretations.Interpretation_Kinds;
    23572325            Down   : Gela.Interpretations.Interpretation_Index_Array)
    23582326         is
    2359             pragma Unreferenced (Down, Flag);
     2327            pragma Unreferenced (Down, Kind);
    23602328            View : constant Gela.Types.Type_View_Access := TM.Get (Tipe);
    23612329         begin
  • trunk/ada-2012/src/semantic/gela-debug_properties.adb

    r491 r496  
    107107        (Self   : in out Visiter;
    108108         Tipe   : Gela.Semantic_Types.Type_Index;
    109          Flag   : Gela.Interpretations.Expression_Flags;
     109         Kind   : Gela.Interpretations.Interpretation_Kinds;
    110110         Down   : Gela.Interpretations.Interpretation_Index_Array);
    111111
     
    299299        (Self   : in out Visiter;
    300300         Tipe   : Gela.Semantic_Types.Type_Index;
    301          Flag   : Gela.Interpretations.Expression_Flags;
     301         Kind   : Gela.Interpretations.Interpretation_Kinds;
    302302         Down   : Gela.Interpretations.Interpretation_Index_Array)
    303303      is
     
    321321
    322322         Put_Line
    323            ("   Flag:" & Gela.Interpretations.Expression_Flags'Image (Flag));
     323           ("   Kind:" &
     324              Gela.Interpretations.Interpretation_Kinds'Image (Kind));
    324325
    325326         for J of Down loop
  • trunk/ada-2012/src/semantic/gela-instantiation.adb

    r494 r496  
    170170         Value   : out Gela.Elements.Element_Access);
    171171
     172      overriding procedure On_Chosen_Interpretation
     173        (Self    : in out Property_Setter;
     174         Element : Gela.Elements.Element_Access;
     175         Value   : out Gela.Interpretations.Interpretation_Kinds);
     176
    172177   end Setters;
    173178
     
    467472      end On_Expanded;
    468473
     474      overriding procedure On_Chosen_Interpretation
     475        (Self    : in out Property_Setter;
     476         Element : Gela.Elements.Element_Access;
     477         Value   : out Gela.Interpretations.Interpretation_Kinds)
     478      is
     479         pragma Unreferenced (Element);
     480         type Property_Visiter is new Gela.Property_Visiters.Property_Visiter
     481           with null record;
     482
     483         overriding procedure On_Chosen_Interpretation
     484           (Self    : in out Property_Visiter;
     485            Element : Gela.Elements.Element_Access;
     486            Value   : Gela.Interpretations.Interpretation_Kinds);
     487
     488         overriding procedure On_Chosen_Interpretation
     489           (Self    : in out Property_Visiter;
     490            Element : Gela.Elements.Element_Access;
     491            Value   : Gela.Interpretations.Interpretation_Kinds)
     492         is
     493            pragma Unreferenced (Self, Element);
     494         begin
     495            Setters.On_Chosen_Interpretation.Value := Value;
     496         end On_Chosen_Interpretation;
     497
     498         Getter  : aliased Property_Visiter;
     499         Visiter : Gela.Property_Visiters.Visiter (Getter'Access);
     500      begin
     501         Self.Source.Visit (Visiter);
     502      end On_Chosen_Interpretation;
    469503   end Setters;
    470504
  • trunk/ada-2012/src/semantic/gela-int-expressions.adb

    r463 r496  
    1010     (Down            : Gela.Interpretations.Interpretation_Index_Array;
    1111      Expression_Type : Gela.Semantic_Types.Type_Index;
    12       Expression_Flag : Gela.Interpretations.Expression_Flags)
     12      Expression_Kind : Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds)
    1313      return Expression is
    1414   begin
     
    1616              Length          => Down'Length,
    1717              Expression_Type => Expression_Type,
    18               Expression_Flag => Expression_Flag,
     18              Expression_Kind => Expression_Kind,
    1919              Down            => Down);
    2020   end Create;
    2121
    2222   ---------------------
    23    -- Expression_Flag --
     23   -- Expression_Kind --
    2424   ---------------------
    2525
    26    function Expression_Flag
     26   function Expression_Kind
    2727     (Self : Expression)
    28       return Gela.Interpretations.Expression_Flags is
     28      return Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds is
    2929   begin
    30       return Self.Expression_Flag;
    31    end Expression_Flag;
     30      return Self.Expression_Kind;
     31   end Expression_Kind;
    3232
    3333   ---------------------
  • trunk/ada-2012/src/semantic/gela-int-expressions.ads

    r463 r496  
    99     (Down            : Gela.Interpretations.Interpretation_Index_Array;
    1010      Expression_Type : Gela.Semantic_Types.Type_Index;
    11       Expression_Flag : Gela.Interpretations.Expression_Flags)
     11      Expression_Kind : Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds)
    1212      return Expression;
    1313
     
    1616      return Gela.Semantic_Types.Type_Index;
    1717
    18    function Expression_Flag
     18   function Expression_Kind
    1919     (Self : Expression)
    20       return Gela.Interpretations.Expression_Flags;
     20      return Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds;
    2121
    2222private
     
    2424   type Expression is new Interpretation with record
    2525      Expression_Type : Gela.Semantic_Types.Type_Index;
    26       Expression_Flag : Gela.Interpretations.Expression_Flags;
     26      Expression_Kind : Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds;
    2727   end record;
    2828
  • trunk/ada-2012/src/semantic/gela-pass_utils.adb

    r421 r496  
    505505   end Add_Use_Package;
    506506
     507   -------------------------------------------
     508   -- Choose_Auxiliary_Apply_Interpretation --
     509   -------------------------------------------
     510
     511   procedure Choose_Auxiliary_Apply_Interpretation
     512     (Comp   : Gela.Compilations.Compilation_Access;
     513      Down   : Gela.Interpretations.Interpretation_Index;
     514      Result : out Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds)
     515   is
     516      IM : constant Gela.Interpretations.Interpretation_Manager_Access :=
     517        Comp.Context.Interpretation_Manager;
     518
     519      package Visiters is
     520         type Visiter is new Gela.Interpretations.Down_Visiter with record
     521            Result : Gela.Interpretations.Interpretation_Kinds :=
     522              Gela.Interpretations.Function_Call;
     523         end record;
     524
     525         overriding procedure On_Expression
     526           (Self   : in out Visiter;
     527            Tipe   : Gela.Semantic_Types.Type_Index;
     528            Kind   : Gela.Interpretations.Interpretation_Kinds;
     529            Down   : Gela.Interpretations.Interpretation_Index_Array);
     530
     531      end Visiters;
     532
     533      package body Visiters is
     534
     535         overriding procedure On_Expression
     536           (Self   : in out Visiter;
     537            Tipe   : Gela.Semantic_Types.Type_Index;
     538            Kind   : Gela.Interpretations.Interpretation_Kinds;
     539            Down   : Gela.Interpretations.Interpretation_Index_Array)
     540         is
     541            pragma Unreferenced (Down, Tipe);
     542         begin
     543            if Kind in Gela.Interpretations.Auxiliary_Apply_Kinds then
     544               Self.Result := Kind;
     545            end if;
     546         end On_Expression;
     547
     548      end Visiters;
     549
     550      V : Visiters.Visiter;
     551   begin
     552      IM.Visit (Down, V);
     553      Result := V.Result;
     554   end Choose_Auxiliary_Apply_Interpretation;
     555
    507556   ------------------------------
    508557   -- Create_Completion_Region --
  • trunk/ada-2012/src/semantic/gela-pass_utils.ads

    r481 r496  
    1717with Gela.Resolve;
    1818with Gela.Instantiation;
     19with Gela.Interpretations;
    1920
    2021package Gela.Pass_Utils is
     
    114115      Env  : in out Gela.Semantic_Types.Env_Index);
    115116
     117   procedure Choose_Auxiliary_Apply_Interpretation
     118     (Comp   : Gela.Compilations.Compilation_Access;
     119      Down   : Gela.Interpretations.Interpretation_Index;
     120      Result : out Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds);
     121   --  Maybe move it into separate unit???
     122
    116123end Gela.Pass_Utils;
  • trunk/ada-2012/src/semantic/gela-plain_interpretations.adb

    r492 r496  
    9191     (Self   : in out Interpretation_Manager;
    9292      Tipe   : Gela.Semantic_Types.Type_Index;
    93       Flag   : Gela.Interpretations.Expression_Flags :=
    94         Gela.Interpretations.No_Flag;
     93      Kind   : Gela.Interpretations.Interpretation_Kinds :=
     94        Gela.Interpretations.Unknown;
    9595      Down   : Gela.Interpretations.Interpretation_Index_Array;
    9696      Result : in out Gela.Interpretations.Interpretation_Set_Index)
     
    101101             (Down            => Down,
    102102              Expression_Type => Tipe,
    103               Expression_Flag => Flag));
     103              Expression_Kind => Kind));
    104104   begin
    105105      Self.Plain_Int_Set.Add (Result, Item);
     
    330330             (Down            => (1 .. 0 => 0),
    331331              Expression_Type => Tipe,
    332               Expression_Flag => Gela.Interpretations.No_Flag));
     332              Expression_Kind => Gela.Interpretations.Unknown));
    333333   begin
    334334      Self.Plain_Int_Set.Add (Result, Item);
     
    527527            Target.On_Expression
    528528              (Tipe  => Value.Expression_Type,
    529                Flag  => Value.Expression_Flag,
     529               Kind  => Value.Expression_Kind,
    530530               Down  => Value.Down);
    531531         end Expression;
  • trunk/ada-2012/src/semantic/gela-plain_interpretations.ads

    r492 r496  
    6464     (Self   : in out Interpretation_Manager;
    6565      Tipe   : Gela.Semantic_Types.Type_Index;
    66       Flag   : Gela.Interpretations.Expression_Flags :=
    67         Gela.Interpretations.No_Flag;
     66      Kind   : Gela.Interpretations.Interpretation_Kinds :=
     67        Gela.Interpretations.Unknown;
    6868      Down   : Gela.Interpretations.Interpretation_Index_Array;
    6969      Result : in out Gela.Interpretations.Interpretation_Set_Index);
  • trunk/ada-2012/src/semantic/gela-resolve.adb

    r491 r496  
    11771177               Comp.Context.Interpretation_Manager.Add_Expression
    11781178                 (Tipe   => Profile.Return_Type,
    1179                   Flag   => Gela.Interpretations.Function_Call,
     1179                  Kind   => Gela.Interpretations.Function_Call,
    11801180                  Down   => Cursor.Get_Index & Chosen,
    11811181                  Result => Set);
     
    11861186               Comp.Context.Interpretation_Manager.Add_Expression
    11871187                 (Tipe   => Profile.Return_Type,
    1188                   Flag   => Gela.Interpretations.Function_Call,
     1188                  Kind   => Gela.Interpretations.Function_Call,
    11891189                  Down   => Cursor.Get_Index & 0,
    11901190                  Result => Set);
     
    12801280               Comp.Context.Interpretation_Manager.Add_Expression
    12811281                 (Tipe   => Arr.Component_Type,
    1282                   Flag   => Gela.Interpretations.Indexed_Component,
     1282                  Kind   => Gela.Interpretations.Indexed_Component,
    12831283                  Down   => Cursor.Get_Index & Chosen,
    12841284                  Result => Set);
     
    18221822           (Self : in out Visiter;
    18231823            Tipe : Gela.Semantic_Types.Type_Index;
    1824             Flag : Gela.Interpretations.Expression_Flags;
     1824            Kind : Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds;
    18251825            Down : Gela.Interpretations.Interpretation_Index_Array);
    18261826
     
    18521852           (Self : in out Visiter;
    18531853            Tipe : Gela.Semantic_Types.Type_Index;
    1854             Flag : Gela.Interpretations.Expression_Flags;
     1854            Kind : Gela.Interpretations.Unknown_Auxiliary_Apply_Kinds;
    18551855            Down : Gela.Interpretations.Interpretation_Index_Array)
    18561856         is
    1857             pragma Unreferenced (Down, Flag);
     1857            pragma Unreferenced (Down, Kind);
    18581858
    18591859            View   : constant Gela.Types.Type_View_Access := TM.Get (Tipe);
Note: See TracChangeset for help on using the changeset viewer.