summaryrefslogtreecommitdiff
path: root/src/packrat-tokens.adb
blob: 4cb10bf197a0b381e48e0e968aeaa10bbaf4121d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116


with

    Ada.Unchecked_Deallocation;


separate (Packrat)
package body Tokens is


    procedure Free_Array is new Ada.Unchecked_Deallocation
        (Object => Element_Array, Name => Element_Array_Access);





    procedure Initialize
           (This : in out Token) is
    begin
        This.Start_At := 1;
        This.Finish_At := 0;
    end Initialize;


    procedure Adjust
           (This : in out Token)
    is
        New_Array : Element_Array_Access :=
            new Element_Array (This.Token_Value'Range);
    begin
        New_Array.all := This.Token_Value.all;
        This.Token_Value := New_Array;
    end Adjust;


    procedure Finalize
           (This : in out Token) is
    begin
        if This.Token_Value /= null then
            Free_Array (This.Token_Value);
        end if;
    end Finalize;





    function Create
           (Ident  : in Label_Enum;
            Start  : in Positive;
            Finish : in Natural;
            Value  : in Element_Array)
        return Token
    is
        This : Token;
    begin
        This.Identifier := Ident;
        This.Start_At := Start;
        This.Finish_At := Finish;
        This.Token_Value := new Element_Array (Value'Range);
        This.Token_Value.all := Value;
        return This;
    end Create;





    function Initialized
           (This : in Token)
        return Boolean is
    begin
        return This.Token_Value /= null;
    end Initialized;





    function Label
           (This : in Token)
        return Label_Enum is
    begin
        return This.Identifier;
    end Label;


    function Start
           (This : in Token)
        return Positive is
    begin
        return This.Start_At;
    end Start;


    function Finish
           (This : in Token)
        return Natural is
    begin
        return This.Finish_At;
    end Finish;


    function Value
           (This : in Token)
        return Element_Array is
    begin
        return This.Token_Value.all;
    end Value;


end Tokens;