with Ada.Containers.Generic_Array_Sort; with Ada.Text_IO; use Ada.Text_IO; with GNATCOLL.VFS; use GNATCOLL.VFS; with Langkit_Support.Text; use Langkit_Support.Text; with Libfoolang.Analysis; use Libfoolang.Analysis; with Libfoolang.Common; use Libfoolang.Common; with Libfoolang.Generic_API.Introspection; use Libfoolang.Generic_API.Introspection; with Libfoolang.Rewriting; use Libfoolang.Rewriting; procedure Iter_Units is Buffer_A : constant String := "def a = 1" & ASCII.LF; Buffer_B : constant String := "def b = 2" & ASCII.LF; Buffer_C : constant String := "def c = 3" & ASCII.LF; Ctx : constant Analysis_Context := Create_Context; Unit_A : constant Analysis_Unit := Get_From_Buffer (Ctx, "a.txt", Buffer => Buffer_A); Unit_B : constant Analysis_Unit := Get_From_Buffer (Ctx, "b.txt", Buffer => Buffer_B); Dummy : constant Analysis_Unit := Get_From_Buffer (Ctx, "c.txt", Buffer => Buffer_C); RH : Rewriting_Handle := Start_Rewriting (Ctx); DA : constant Node_Rewriting_Handle := Handle (Root (Unit_A).Child (1)); DB : constant Node_Rewriting_Handle := Handle (Root (Unit_B).Child (1)); begin Set_Child (DA, Member_Refs.Decl_F_Expr, Create_Token_Node (RH, Foo_Literal, "11")); Set_Child (DB, Member_Refs.Decl_F_Expr, Create_Token_Node (RH, Foo_Literal, "22")); declare function Is_Before (Left, Right : Unit_Rewriting_Handle) return Boolean; --------------- -- Is_Before -- --------------- function Is_Before (Left, Right : Unit_Rewriting_Handle) return Boolean is begin return Get_Filename (Unit (Left)) < Get_Filename (Unit (Right)); end Is_Before; procedure Sort is new Ada.Containers.Generic_Array_Sort (Positive, Unit_Rewriting_Handle, Unit_Rewriting_Handle_Array, Is_Before); Units : Unit_Rewriting_Handle_Array := Unit_Handles (RH); begin -- Sort units per filename so that we get stable output ordering across -- runs. Sort (Units); for U of Units loop declare F : constant String := +Create (+Get_Filename (Unit (U))).Base_Name; begin Put_Line ("Rewritten unit " & F & ": " & Image (Unparse (Root (U)))); end; end loop; end; Abort_Rewriting (RH); Put_Line ("iter_units.adb: Done."); end Iter_Units;