Commit fcedf218 by Robert Dewar Committed by Arnaud Charlet

g-spipat.adb (Break): Fix accessibility error (vsn taking not null access Vstring)

2007-12-06  Robert Dewar  <dewar@adacore.com>

	* g-spipat.adb (Break): Fix accessibility error (vsn taking not null
	access Vstring)

From-SVN: r130844
parent c80d4855
...@@ -1356,7 +1356,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1356,7 +1356,6 @@ package body GNAT.Spitbol.Patterns is
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
A : constant PE_Ptr := A : constant PE_Ptr :=
new PE'(PC_Assign_Imm, 0, EOP, Var'Unrestricted_Access); new PE'(PC_Assign_Imm, 0, EOP, Var'Unrestricted_Access);
begin begin
return (AFC with P.Stk + 3, Bracket (E, Pat, A)); return (AFC with P.Stk + 3, Bracket (E, Pat, A));
end "*"; end "*";
...@@ -1366,7 +1365,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1366,7 +1365,6 @@ package body GNAT.Spitbol.Patterns is
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
A : constant PE_Ptr := A : constant PE_Ptr :=
new PE'(PC_Assign_Imm, 0, EOP, Var'Unrestricted_Access); new PE'(PC_Assign_Imm, 0, EOP, Var'Unrestricted_Access);
begin begin
return (AFC with 3, Bracket (E, Pat, A)); return (AFC with 3, Bracket (E, Pat, A));
end "*"; end "*";
...@@ -1376,7 +1374,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1376,7 +1374,6 @@ package body GNAT.Spitbol.Patterns is
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
A : constant PE_Ptr := A : constant PE_Ptr :=
new PE'(PC_Assign_Imm, 0, EOP, Var'Unrestricted_Access); new PE'(PC_Assign_Imm, 0, EOP, Var'Unrestricted_Access);
begin begin
return (AFC with 3, Bracket (E, Pat, A)); return (AFC with 3, Bracket (E, Pat, A));
end "*"; end "*";
...@@ -1395,7 +1392,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1395,7 +1392,6 @@ package body GNAT.Spitbol.Patterns is
Pat : constant PE_Ptr := Copy (P.P); Pat : constant PE_Ptr := Copy (P.P);
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
W : constant PE_Ptr := new PE'(PC_Write_Imm, 0, EOP, Fil); W : constant PE_Ptr := new PE'(PC_Write_Imm, 0, EOP, Fil);
begin begin
return (AFC with 3, Bracket (E, Pat, W)); return (AFC with 3, Bracket (E, Pat, W));
end "*"; end "*";
...@@ -1404,7 +1400,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1404,7 +1400,6 @@ package body GNAT.Spitbol.Patterns is
Pat : constant PE_Ptr := S_To_PE (P); Pat : constant PE_Ptr := S_To_PE (P);
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
W : constant PE_Ptr := new PE'(PC_Write_Imm, 0, EOP, Fil); W : constant PE_Ptr := new PE'(PC_Write_Imm, 0, EOP, Fil);
begin begin
return (AFC with 3, Bracket (E, Pat, W)); return (AFC with 3, Bracket (E, Pat, W));
end "*"; end "*";
...@@ -1413,7 +1408,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1413,7 +1408,6 @@ package body GNAT.Spitbol.Patterns is
Pat : constant PE_Ptr := C_To_PE (P); Pat : constant PE_Ptr := C_To_PE (P);
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
W : constant PE_Ptr := new PE'(PC_Write_Imm, 0, EOP, Fil); W : constant PE_Ptr := new PE'(PC_Write_Imm, 0, EOP, Fil);
begin begin
return (AFC with 3, Bracket (E, Pat, W)); return (AFC with 3, Bracket (E, Pat, W));
end "*"; end "*";
...@@ -1437,7 +1431,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1437,7 +1431,6 @@ package body GNAT.Spitbol.Patterns is
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
A : constant PE_Ptr := A : constant PE_Ptr :=
new PE'(PC_Assign_OnM, 0, EOP, Var'Unrestricted_Access); new PE'(PC_Assign_OnM, 0, EOP, Var'Unrestricted_Access);
begin begin
return (AFC with P.Stk + 3, Bracket (E, Pat, A)); return (AFC with P.Stk + 3, Bracket (E, Pat, A));
end "**"; end "**";
...@@ -1447,7 +1440,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1447,7 +1440,6 @@ package body GNAT.Spitbol.Patterns is
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
A : constant PE_Ptr := A : constant PE_Ptr :=
new PE'(PC_Assign_OnM, 0, EOP, Var'Unrestricted_Access); new PE'(PC_Assign_OnM, 0, EOP, Var'Unrestricted_Access);
begin begin
return (AFC with 3, Bracket (E, Pat, A)); return (AFC with 3, Bracket (E, Pat, A));
end "**"; end "**";
...@@ -1457,7 +1449,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1457,7 +1449,6 @@ package body GNAT.Spitbol.Patterns is
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
A : constant PE_Ptr := A : constant PE_Ptr :=
new PE'(PC_Assign_OnM, 0, EOP, Var'Unrestricted_Access); new PE'(PC_Assign_OnM, 0, EOP, Var'Unrestricted_Access);
begin begin
return (AFC with 3, Bracket (E, Pat, A)); return (AFC with 3, Bracket (E, Pat, A));
end "**"; end "**";
...@@ -1476,7 +1467,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1476,7 +1467,6 @@ package body GNAT.Spitbol.Patterns is
Pat : constant PE_Ptr := Copy (P.P); Pat : constant PE_Ptr := Copy (P.P);
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
W : constant PE_Ptr := new PE'(PC_Write_OnM, 0, EOP, Fil); W : constant PE_Ptr := new PE'(PC_Write_OnM, 0, EOP, Fil);
begin begin
return (AFC with P.Stk + 3, Bracket (E, Pat, W)); return (AFC with P.Stk + 3, Bracket (E, Pat, W));
end "**"; end "**";
...@@ -1485,7 +1475,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1485,7 +1475,6 @@ package body GNAT.Spitbol.Patterns is
Pat : constant PE_Ptr := S_To_PE (P); Pat : constant PE_Ptr := S_To_PE (P);
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
W : constant PE_Ptr := new PE'(PC_Write_OnM, 0, EOP, Fil); W : constant PE_Ptr := new PE'(PC_Write_OnM, 0, EOP, Fil);
begin begin
return (AFC with 3, Bracket (E, Pat, W)); return (AFC with 3, Bracket (E, Pat, W));
end "**"; end "**";
...@@ -1494,7 +1483,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1494,7 +1483,6 @@ package body GNAT.Spitbol.Patterns is
Pat : constant PE_Ptr := C_To_PE (P); Pat : constant PE_Ptr := C_To_PE (P);
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
W : constant PE_Ptr := new PE'(PC_Write_OnM, 0, EOP, Fil); W : constant PE_Ptr := new PE'(PC_Write_OnM, 0, EOP, Fil);
begin begin
return (AFC with 3, Bracket (E, Pat, W)); return (AFC with 3, Bracket (E, Pat, W));
end "**"; end "**";
...@@ -1674,7 +1662,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1674,7 +1662,6 @@ package body GNAT.Spitbol.Patterns is
function Arb return Pattern is function Arb return Pattern is
Y : constant PE_Ptr := new PE'(PC_Arb_Y, 1, EOP); Y : constant PE_Ptr := new PE'(PC_Arb_Y, 1, EOP);
X : constant PE_Ptr := new PE'(PC_Arb_X, 2, EOP, Y); X : constant PE_Ptr := new PE'(PC_Arb_X, 2, EOP, Y);
begin begin
return (AFC with 1, X); return (AFC with 1, X);
end Arb; end Arb;
...@@ -1687,7 +1674,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1687,7 +1674,6 @@ package body GNAT.Spitbol.Patterns is
begin begin
if P'Length = 0 then if P'Length = 0 then
return (AFC with 0, EOP); return (AFC with 0, EOP);
else else
return (AFC with 0, Arbno_Simple (S_To_PE (P))); return (AFC with 0, Arbno_Simple (S_To_PE (P)));
end if; end if;
...@@ -1733,7 +1719,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1733,7 +1719,6 @@ package body GNAT.Spitbol.Patterns is
X : constant PE_Ptr := new PE'(PC_Arbno_X, 0, EOP, E); X : constant PE_Ptr := new PE'(PC_Arbno_X, 0, EOP, E);
Y : constant PE_Ptr := new PE'(PC_Arbno_Y, 0, X, P.Stk + 3); Y : constant PE_Ptr := new PE'(PC_Arbno_Y, 0, X, P.Stk + 3);
EPY : constant PE_Ptr := Bracket (E, Pat, Y); EPY : constant PE_Ptr := Bracket (E, Pat, Y);
begin begin
X.Alt := EPY; X.Alt := EPY;
X.Index := EPY.Index + 1; X.Index := EPY.Index + 1;
...@@ -1765,7 +1750,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1765,7 +1750,6 @@ package body GNAT.Spitbol.Patterns is
function Arbno_Simple (P : PE_Ptr) return PE_Ptr is function Arbno_Simple (P : PE_Ptr) return PE_Ptr is
S : constant PE_Ptr := new PE'(PC_Arbno_S, P.Index + 1, EOP, P); S : constant PE_Ptr := new PE'(PC_Arbno_S, P.Index + 1, EOP, P);
begin begin
Set_Successor (P, S); Set_Successor (P, S);
return S; return S;
...@@ -1827,7 +1811,8 @@ package body GNAT.Spitbol.Patterns is ...@@ -1827,7 +1811,8 @@ package body GNAT.Spitbol.Patterns is
function Break (Str : not null access VString) return Pattern is function Break (Str : not null access VString) return Pattern is
begin begin
return (AFC with 0, new PE'(PC_Break_VP, 1, EOP, VString_Ptr (Str))); return (AFC with 0,
new PE'(PC_Break_VP, 1, EOP, Str.all'Unchecked_Access));
end Break; end Break;
function Break (Str : VString_Func) return Pattern is function Break (Str : VString_Func) return Pattern is
...@@ -1888,7 +1873,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -1888,7 +1873,6 @@ package body GNAT.Spitbol.Patterns is
function BreakX_Make (B : PE_Ptr) return Pattern is function BreakX_Make (B : PE_Ptr) return Pattern is
X : constant PE_Ptr := new PE'(PC_BreakX_X, 2, B); X : constant PE_Ptr := new PE'(PC_BreakX_X, 2, B);
A : constant PE_Ptr := new PE'(PC_Alt, 1, EOP, X); A : constant PE_Ptr := new PE'(PC_Alt, 1, EOP, X);
begin begin
B.Pthen := A; B.Pthen := A;
return (AFC with 2, B); return (AFC with 2, B);
...@@ -1904,6 +1888,10 @@ package body GNAT.Spitbol.Patterns is ...@@ -1904,6 +1888,10 @@ package body GNAT.Spitbol.Patterns is
-- Record given pattern element if not already recorded in RA, -- Record given pattern element if not already recorded in RA,
-- and also record any referenced pattern elements recursively. -- and also record any referenced pattern elements recursively.
---------------
-- Record_PE --
---------------
procedure Record_PE (E : PE_Ptr) is procedure Record_PE (E : PE_Ptr) is
begin begin
PutD (" Record_PE called with PE_Ptr = " & Image (E)); PutD (" Record_PE called with PE_Ptr = " & Image (E));
...@@ -2091,6 +2079,10 @@ package body GNAT.Spitbol.Patterns is ...@@ -2091,6 +2079,10 @@ package body GNAT.Spitbol.Patterns is
procedure Write_Node_Id (E : PE_Ptr); procedure Write_Node_Id (E : PE_Ptr);
-- Writes out a string identifying the given pattern element -- Writes out a string identifying the given pattern element
-------------------
-- Write_Node_Id --
-------------------
procedure Write_Node_Id (E : PE_Ptr) is procedure Write_Node_Id (E : PE_Ptr) is
begin begin
if E = EOP then if E = EOP then
...@@ -2118,6 +2110,8 @@ package body GNAT.Spitbol.Patterns is ...@@ -2118,6 +2110,8 @@ package body GNAT.Spitbol.Patterns is
end if; end if;
end Write_Node_Id; end Write_Node_Id;
-- Start of processing for Dump
begin begin
New_Line; New_Line;
Put ("Pattern Dump Output (pattern at " & Put ("Pattern Dump Output (pattern at " &
...@@ -2313,7 +2307,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -2313,7 +2307,6 @@ package body GNAT.Spitbol.Patterns is
Pat : constant PE_Ptr := Copy (P.P); Pat : constant PE_Ptr := Copy (P.P);
E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP); E : constant PE_Ptr := new PE'(PC_R_Enter, 0, EOP);
X : constant PE_Ptr := new PE'(PC_Fence_X, 0, EOP); X : constant PE_Ptr := new PE'(PC_Fence_X, 0, EOP);
begin begin
return (AFC with P.Stk + 1, Bracket (E, Pat, X)); return (AFC with P.Stk + 1, Bracket (E, Pat, X));
end Fence; end Fence;
...@@ -2402,7 +2395,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -2402,7 +2395,6 @@ package body GNAT.Spitbol.Patterns is
procedure Delete_Ampersand is procedure Delete_Ampersand is
L : constant Natural := Length (Result); L : constant Natural := Length (Result);
begin begin
if L > 2 then if L > 2 then
Delete (Result, L - 1, L); Delete (Result, L - 1, L);
...@@ -4340,7 +4332,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -4340,7 +4332,6 @@ package body GNAT.Spitbol.Patterns is
when PC_Len_NF => declare when PC_Len_NF => declare
N : constant Natural := Node.NF.all; N : constant Natural := Node.NF.all;
begin begin
if Cursor + N > Length then if Cursor + N > Length then
goto Fail; goto Fail;
...@@ -4504,7 +4495,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -4504,7 +4495,6 @@ package body GNAT.Spitbol.Patterns is
when PC_Pos_NF => declare when PC_Pos_NF => declare
N : constant Natural := Node.NF.all; N : constant Natural := Node.NF.all;
begin begin
if Cursor = N then if Cursor = N then
goto Succeed; goto Succeed;
...@@ -4593,7 +4583,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -4593,7 +4583,6 @@ package body GNAT.Spitbol.Patterns is
when PC_RPos_NF => declare when PC_RPos_NF => declare
N : constant Natural := Node.NF.all; N : constant Natural := Node.NF.all;
begin begin
if Length - Cursor = N then if Length - Cursor = N then
goto Succeed; goto Succeed;
...@@ -4625,7 +4614,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -4625,7 +4614,6 @@ package body GNAT.Spitbol.Patterns is
when PC_RTab_NF => declare when PC_RTab_NF => declare
N : constant Natural := Node.NF.all; N : constant Natural := Node.NF.all;
begin begin
if Length - Cursor >= N then if Length - Cursor >= N then
Cursor := Length - N; Cursor := Length - N;
...@@ -4654,9 +4642,10 @@ package body GNAT.Spitbol.Patterns is ...@@ -4654,9 +4642,10 @@ package body GNAT.Spitbol.Patterns is
-- Span (one character case) -- Span (one character case)
when PC_Span_CH => declare when PC_Span_CH => declare
P : Natural := Cursor; P : Natural;
begin begin
P := Cursor;
while P < Length while P < Length
and then Subject (P + 1) = Node.Char and then Subject (P + 1) = Node.Char
loop loop
...@@ -4674,9 +4663,10 @@ package body GNAT.Spitbol.Patterns is ...@@ -4674,9 +4663,10 @@ package body GNAT.Spitbol.Patterns is
-- Span (character set case) -- Span (character set case)
when PC_Span_CS => declare when PC_Span_CS => declare
P : Natural := Cursor; P : Natural;
begin begin
P := Cursor;
while P < Length while P < Length
and then Is_In (Subject (P + 1), Node.CS) and then Is_In (Subject (P + 1), Node.CS)
loop loop
...@@ -4807,7 +4797,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -4807,7 +4797,6 @@ package body GNAT.Spitbol.Patterns is
when PC_String => declare when PC_String => declare
Len : constant Natural := Node.Str'Length; Len : constant Natural := Node.Str'Length;
begin begin
if (Length - Cursor) >= Len if (Length - Cursor) >= Len
and then Node.Str.all = Subject (Cursor + 1 .. Cursor + Len) and then Node.Str.all = Subject (Cursor + 1 .. Cursor + Len)
...@@ -4879,7 +4868,6 @@ package body GNAT.Spitbol.Patterns is ...@@ -4879,7 +4868,6 @@ package body GNAT.Spitbol.Patterns is
when PC_Tab_NF => declare when PC_Tab_NF => declare
N : constant Natural := Node.NF.all; N : constant Natural := Node.NF.all;
begin begin
if Cursor <= N then if Cursor <= N then
Cursor := N; Cursor := N;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment