* confusing string error @ 2014-02-14 12:38 agent 2014-02-14 13:03 ` Jacob Sparre Andersen 0 siblings, 1 reply; 13+ messages in thread From: agent @ 2014-02-14 12:38 UTC (permalink / raw) Code fragment: type FSATyp is (delim, op, dgt, allelse); type TokenType is record Ustr : unbounded_string; State : FSATyp; delimCH : Character; delimstate : FSATyp; end record; ch: character; begin ... Token.uStr := null_unbounded_string; ch now contains a plus sign, or an asterisk Token.uStr := Token.uStr & ch this last line fails with error Ada.Strings.INDEX_ERROR I don't understand this. When ch has a digit or an alphabetic character this code works. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-14 12:38 confusing string error agent @ 2014-02-14 13:03 ` Jacob Sparre Andersen 2014-02-15 0:46 ` agent 0 siblings, 1 reply; 13+ messages in thread From: Jacob Sparre Andersen @ 2014-02-14 13:03 UTC (permalink / raw) agent@drrob1.com writes: > Code fragment: > > type FSATyp is (delim, op, dgt, allelse); > type TokenType is record > Ustr : unbounded_string; > State : FSATyp; > delimCH : Character; > delimstate : FSATyp; > end record; > > ch: character; > > begin > ... > > Token.uStr := null_unbounded_string; > > ch now contains a plus sign, or an asterisk > Token.uStr := Token.uStr & ch > > this last line fails with error Ada.Strings.INDEX_ERROR You haven't provided enough information to compile and evaluate your example. Greetings, Jacob -- »You know the world has gone crazy when the best rapper is a white guy, the best golfer is a black guy, the swiss hold the America's cup, France is accusing the U.S. of arrogance, and Germany doesn't want to go to war« ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-14 13:03 ` Jacob Sparre Andersen @ 2014-02-15 0:46 ` agent 2014-02-15 1:50 ` adambeneschan ` (2 more replies) 0 siblings, 3 replies; 13+ messages in thread From: agent @ 2014-02-15 0:46 UTC (permalink / raw) On Fri, 14 Feb 2014 14:03:24 +0100, Jacob Sparre Andersen <jacob@jacob-sparre.dk> wrote: >agent@drrob1.com writes: > >> Code fragment: >> > >You haven't provided enough information to compile and evaluate your >example. > >Greetings, > >Jacob I was trying not to bomb the newsgroup. But it seems you want it. So here we go. Assume that a valid spec file exists. I included the relevent types I define in it in my comments, as it is in my actual code. Package body tokenizea is TKNMAXSIZ : constant := 80; DGTMAXSIZ : constant := 9; OPMAXSIZ : constant := 2; POUNDSIGN : constant Character := '#'; -- (* 35 *) PLUSSIGN : constant Character := '+'; -- (* 43 *) COMMA : constant Character := ','; -- (* 44 *) MINUSSIGN : constant Character := '-'; -- (* 45 *) SEMCOL : constant Character := ';'; -- (* 59 *) LTSIGN : constant Character := '<'; -- (* 60 *) EQUALSIGN : constant Character := '='; -- (* 61 *) GTSIGN : constant Character := '>'; -- (* 62 *) MULTSIGN : constant Character := '*'; DIVSIGN : constant Character := '/'; ASCZERO : constant := Character'Pos('0'); -- 48, 30H. SQUOTE : constant Character := '''; -- Character'Val(39) DQUOTE : constant Character := '"'; -- Character'Val(34); NullChar : constant Character := Character'Val(0); CharDgt0 : constant Character := '0'; CharDgt9 : constant Character := '9'; -- Now declared in package spec file -- TYPE FSATYP is (DELIM, OP, DGT, ALLELSE); -- Type TokenType is Record -- uStr: Unbound_String; -- State : FSATYP; -- delimCH : Character; -- DelimState: FSATYP; -- Sum : Integer; -- END Record; -- Type CharType is Record -- ch : Character; -- State : FSATYP; -- END Record; -- These variables are declared here to make the variable static so -- to maintain -- their values between procedure calls. CURPOSN,HOLDCURPOSN,PREVPOSN : Natural; TKNBUF,HOLDTKNBUF : Unbounded_String; FSAARRAY : ARRAY (Character) OF FSATYP; out_of_range, token_too_long : EXCEPTION ; PROCEDURE InitFSAArray is BEGIN FSAARRAY := (others => AllElse) ; FOR C in CharDgt0 .. CharDgt9 Loop FSAARRAY(C) := DGT; END Loop; FSAARRAY(NullChar) := DELIM; FSAARRAY(' ') := DELIM; FSAARRAY(',') := DELIM; FSAARRAY(';') := DELIM; -- (* semcol *) FSAARRAY('#') := OP; -- (* poundsign *) FSAARRAY('*') := OP; -- (* multsign *) FSAARRAY('+') := OP; -- (* plussign *) FSAARRAY('-') := OP; -- (* minussign *) FSAARRAY('/') := OP; -- (* divsign *) FSAARRAY('<') := OP; -- (* LTSIGN *) FSAARRAY('=') := OP; -- (* EQUAL *) FSAARRAY('>') := OP; -- (* GTSIGN *) END InitFSAArray; PROCEDURE INI1TKN(Str : String) is -- *************************** INI1TKN --INITIALIZE TOKEN. BEGIN CURPOSN := 1; TKNBUF := To_Unbounded_String(Str); PREVPOSN := 0; InitFSAArray; END INI1TKN; PROCEDURE PeekCHR(Char: OUT CharType; EOL : Out BOOLEAN) is BEGIN IF CURPOSN > LENGTH(TKNBUF) THEN EOL := TRUE; Char.ch := NullChar; Char.State := DELIM; RETURN; ELSE EOL := FALSE; END IF; Char.CH := CAP(Element(TKNBUF,CURPOSN)); Char.State := FSAARRAY(Char.CH); END PeekCHR; Procedure NextChr is BEGIN CURPOSN := CurPosn + 1; End NextChr; PROCEDURE GETCHR(Char: OUT CharType; EOL : Out BOOLEAN) is BEGIN PeekChr(Char, EOL); NextChr; END GETCHR; PROCEDURE UNGETCHR is -- ********************************* UNGETCHR BEGIN IF (CURPOSN < 1) OR (CURPOSN > LENGTH(TKNBUF)+1) THEN RAISE out_of_range; END IF; CURPOSN := CurPosn - 1; END UNGETCHR; Function GETOPCODE(TOKEN : TokenType) RETURN Natural is -- *************************** GETOPCODE -- GET OPCODE. -- THIS ROUTINE RECEIVES A TOKEN OF FSATYP OP (MEANING IT IS AN -- OPERATOR) -- AND ANALYZES IT TO DETERMINE AN OPCODE, WHICH IS A -- Number FROM 1..15. -- THE OPCODE ASSIGNMENTS FOR THE OP TOKENS ARE: -- < is 1 <= is 2 -- > is 3 >= is 4 -- = is 5 == is 5 <> is 6 # is 7 -- + is 8 += is 9 -- - is 10 -= is 11 -- * is 12 *= is 13 -- / is 14 /= is 15 -- CH1,CH2 : CHARacter; OpCode : Natural; BEGIN OPCODE := 0; IF (LENGTH(Token.uStr) < 1) OR (LENGTH(Token.uStr) > 2) THEN RAISE token_too_long; RETURN OpCode; END IF; CH1 := Element(Token.uStr,1); CH2 := Element(Token.uStr,2); CASE CH1 is WHEN LTSIGN => OPCODE := 1; WHEN GTSIGN => OPCODE := 3; WHEN EQUALSIGN => OPCODE := 5; WHEN PLUSSIGN => OPCODE := 8; WHEN MINUSSIGN => OPCODE := 10; WHEN POUNDSIGN => OPCODE := 7; WHEN MULTSIGN => OPCODE := 12; WHEN DIVSIGN => OPCODE := 14; WHEN OTHERS => RETURN OpCode; END CASE; IF LENGTH(Token.uStr) = 1 THEN RETURN OpCode; ELSIF (CH2 = EQUALSIGN) AND (CH1 /= EQUALSIGN) AND (CH1 /= POUNDSIGN) THEN OPCODE := OpCode + 1; ELSIF (CH1 = LTSIGN) AND (CH2 = GTSIGN) THEN OPCODE := 6; END IF; Return OpCode; END GETOPCODE; PROCEDURE GETTKN(TOKEN : Out TokenType; EOL : Out BOOLEAN) is --*************************** GETTKN -- NEGATV : BOOLEAN; ORDCH,Len : Natural; CHAR : CHARType; QUOCHR : CHARacter; -- (* Holds the active quote char *) QUOFLG : BOOLEAN; BEGIN QUOCHR := NullChar; QUOFLG := FALSE; PREVPOSN := CURPOSN; ToKeN.STATE := DELIM; Token.SUM := 0; Token.uStr := Null_Unbounded_String; NEGATV := FALSE; LOOP GETCHR(CHAR,EOL); IF EOL THEN -- NO NEXT CHAR. IF TKNSTATE IS DELIM, THEN GETTKN WAS CALLED WHEN -- THERE WERE -- NO MORE TOKENS ON LINE. OTHERWISE IT MEANS THAT WE HAVE FETCHED -- THE LAST -- TOKEN ON THIS LINE. IF Token.STATE = DELIM THEN EOL := TRUE; END IF; EXIT; END IF; ORDCH := Character'Pos(Char.Ch); IF QUOFLG AND (Char.CH /= NullChar) THEN CHaR.STATE := ALLELSE; END IF; CASE ToKeN.STATE is WHEN DELIM => -- token.state CASE CHaR.STATE is WHEN DELIM => -- NULL char is a special delimiter because it will -- immediately cause a return even if there is no token yet, -- i.e., the token is only delimiters. This is because of -- the NULL char is the string terminater for general strings -- and especially for environment strings, for which this -- TOKENIZE module was originally written. *) IF CHAR.CH = NullChar THEN EXIT; END IF; WHEN OP => ToKeN.STATE := OP; Token.uStr := Token.uStr & Char.Ch; IF LENGTH(Token.uStr) > TKNMAXSIZ THEN RAISE token_too_long; END IF; WHEN DGT => Token.uStr := Token.uStr & Char.Ch; ToKeN.STATE := DGT; TOKEN.SUM := ORDCH - ASCZERO; WHEN ALLELSE => Token.uStr := Token.uStr & Char.Ch; ToKeN.STATE := ALLELSE; QUOFLG := (Char.CH = SQUOTE) OR (Char.CH = DQUOTE); IF QUOFLG THEN QUOCHR := Char.CH; ELSE IF LENGTH(Token.uStr) > TKNMAXSIZ THEN RAISE token_too_long; END IF; -- if token too long Token.SUM := ORDCH; END IF; -- QUOFLG END CASE; -- Of Char.State WHEN OP => -- token.state CASE CHaR.STATE is WHEN DELIM => EXIT; WHEN OP => IF LENGTH(Token.uStr) > OPMAXSIZ THEN RAISE token_too_long; END IF; Token.uStr := Token.uStr & Char.CH; WHEN DGT => IF (Element(Token.uStr,LENGTH(Token.uStr)) = '+') OR (Element(Token.uStr,LENGTH(Token.uStr)) = '-') THEN IF LENGTH(Token.uStr) = 1 THEN IF ELEMENT(Token.uStr,1) = '-' THEN NEGATV := TRUE; END IF; ToKeN.STATE := DGT; -- OVERWRITE ARITHMETIC SIGN CHARACTER Token.uStr := Null_Unbounded_String; Token.uStr := Token.uStr & Char.CH; Token.SUM := ORDCH - ASCZERO; ELSE -- TOKEN length > 1 SO MUST FIRST RETURN OP UNGETCHR; -- (* UNGET THIS DIGIT CHAR *) UNGETCHR; -- (* UNGET THE ARITH SIGN CHAR *) Len := LENGTH(Token.uStr); -- SO DELIMCH CORRECTLY RETURNS THE ARITH SIGN CHAR Char.CH := Element(Token.uStr,Len); -- del last char of the token which is the sign character Token.uStr := Delete(Token.uStr,Len,Len); EXIT; END IF; -- if length of the token = 1 ELSE -- IF have a sign character UNGETCHR; EXIT; END IF; -- If have a sign character WHEN ALLELSE => UNGETCHR; EXIT; END CASE; -- Char.State WHEN DGT => -- tokenstate CASE CHaR.STATE is WHEN DELIM => EXIT; WHEN OP => UNGETCHR; EXIT; WHEN DGT => Token.uStr := Token.uStr & Char.CH; Token.SUM := 10*Token.SUM + ORDCH - ASCZERO; WHEN ALLELSE => UNGETCHR; EXIT; END CASE; -- Char.State WHEN ALLELSE => -- tokenstate CASE CHaR.STATE is WHEN DELIM => -- Always exit if get a NULL char as a delim. A quoted string can -- only get here if CH is NULL. EXIT; WHEN OP => UNGETCHR; EXIT; WHEN DGT => IF LENGTH(Token.uStr) > TKNMAXSIZ THEN RAISE token_too_long; END IF; -- if token too long Token.uStr := Token.uStr & Char.CH; Token.SUM := Token.SUM + ORDCH; WHEN ALLELSE => IF Char.CH = QUOCHR THEN QUOFLG := FALSE; CHaR.STATE := DELIM; EXIT; ELSE IF LENGTH(Token.uStr) > TKNMAXSIZ THEN RAISE token_too_long; END IF; -- if token too long Token.uStr := Token.uStr & Char.CH; Token.SUM := Token.SUM + ORDCH; END IF; -- if char is a quote char END CASE; -- Char.State END CASE; -- of Token.State END LOOP; -- to process characters Token.DELIMCH := Char.CH; Token.DELIMSTATE := CHaR.STATE; IF (ToKeN.STATE = DGT) AND NEGATV THEN Token.SUM := -Token.SUM; END IF; -- For OP tokens, must return the opcode as the sum value. Do this -- by calling GETOPCODE. IF ToKeN.STATE = OP THEN Token.SUM := GetOpCode(Token); END IF; END GETTKN; BEGIN -- main package body routine. HOLDCURPOSN := 0; -- probably not needed in Ada. HOLDTKNBUF := Null_unbounded_string; -- looks like Ada automatically init's all declarations to either 0 or null, as suits the data type InitFSAArray; END tokenizea; with tokenizea; use tokenizea; Procedure testtokenizea is subType Str255Type is String(1..256); INBUF,s : Str255type; Token : TokenType; Char : CharType; I,J : INTEGER; Last : Natural; L : LONG_INTeger; CH : CHARacter; EOL : Boolean; BEGIN Put(" Input line : "); Get_Line(s,Last); New_line; I := s'last; Put(" Number of characters read is "); Put(Last); Put(". Value of s'last is "); Put(I); INI1TKN(s(1..Last)); LOOP GETTKN(TOKEN,EOL); Put(To_String(TOKEN.uStr)); put(", token.state = "); Put(FSATyp'Image(ToKeN.STATE)); Put(", sum="); Put(Token.Sum); Put(", DELIMCH= "); Put(Token.DELIMCH); Put(", DELIMSTATE= "); Put(FSATyp'Image(Token.DELIMSTATE)); New_Line; EXIT When EOL; END LOOP; -- getting subsequent tokens on same line END testtokenizea; Thanks in advance --Rob ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-15 0:46 ` agent @ 2014-02-15 1:50 ` adambeneschan 2014-02-15 8:41 ` Simon Wright 2014-02-15 1:57 ` adambeneschan 2014-02-15 9:33 ` Simon Wright 2 siblings, 1 reply; 13+ messages in thread From: adambeneschan @ 2014-02-15 1:50 UTC (permalink / raw) On Friday, February 14, 2014 4:46:51 PM UTC-8, ag...@drrob1.com wrote: Just one note: this comment: HOLDTKNBUF := Null_unbounded_string; -- looks like Ada automatically init's all declarations to either 0 or null, as suits the data type is wrong. Integers are not initialized to anything and cannot be counted on; same for floats, booleans, other enumeration types, etc. Access types *are* initialized to null by default, though, and the language specifically requires that Unbounded_String types be initialized by default. It's possible that everything could get initialized to 0 in a particular implementation, though, either because the compiler vendors decided to make the code do that, or the OS does that when loading the program, or often just by luck. -- Adam ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-15 1:50 ` adambeneschan @ 2014-02-15 8:41 ` Simon Wright 0 siblings, 0 replies; 13+ messages in thread From: Simon Wright @ 2014-02-15 8:41 UTC (permalink / raw) adambeneschan@gmail.com writes: > It's possible that everything could get initialized to 0 in a > particular implementation, though, either because the compiler vendors > decided to make the code do that, or the OS does that when loading the > program, or often just by luck. A colleague's code failed disastrously when moved from Windows (the development environment) to VxWorks (the target), precisely because allocated records weren't initialized to zeros on the target. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-15 0:46 ` agent 2014-02-15 1:50 ` adambeneschan @ 2014-02-15 1:57 ` adambeneschan 2014-02-15 9:33 ` Simon Wright 2 siblings, 0 replies; 13+ messages in thread From: adambeneschan @ 2014-02-15 1:57 UTC (permalink / raw) On Friday, February 14, 2014 4:46:51 PM UTC-8, ag...@drrob1.com wrote: I don't know what input you're entering. I get the error on this line: CH2 := Element(Token.uStr,2); which would make sense if the string's length is only 1. I'm not sure why you think the error is on this line: Token.uStr := Token.uStr & ch; which shouldn't be raising an Index_Error. -- Adam ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-15 0:46 ` agent 2014-02-15 1:50 ` adambeneschan 2014-02-15 1:57 ` adambeneschan @ 2014-02-15 9:33 ` Simon Wright 2014-02-15 12:53 ` agent 2014-02-15 13:15 ` agent 2 siblings, 2 replies; 13+ messages in thread From: Simon Wright @ 2014-02-15 9:33 UTC (permalink / raw) agent@drrob1.com writes: > I was trying not to bomb the newsgroup. But it seems you want it. So > here we go. Assume that a valid spec file exists. I included the > relevent types I define in it in my comments, as it is in my actual > code. You are the one asking the questions, we are the ones who are trying to help. You do not make it easy; it just took me about half an hour to get the code you supply to the state where it compiles; and I still don't know what CAP is in Char.CH := CAP(Element(TKNBUF,CURPOSN)); so I just removed it (guessing it's supposed to convert to upper case). There is no problem if I enter "12345" or "abcde" or "1+2". However, if I enter "1+" or "1+2+" I get the same index error as Adam, on CH2 := Element(Token.UStr,2); Postponing this statement to the point where we know the length is greater than 1, I get no exceptions. Perhaps, for the purposes of asking the question here, you should change Testtokenizea so that the problematic input is a constant string rather than being read from the input. See for example http://stackoverflow.com/help/mcve - the 'minimal' isn't quite so important as the 'complete', 'tested', and 'readable'. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-15 9:33 ` Simon Wright @ 2014-02-15 12:53 ` agent 2014-02-15 16:58 ` adambeneschan 2014-02-15 13:15 ` agent 1 sibling, 1 reply; 13+ messages in thread From: agent @ 2014-02-15 12:53 UTC (permalink / raw) On Sat, 15 Feb 2014 09:33:25 +0000, Simon Wright <simon@pushface.org> wrote: >agent@drrob1.com writes: > >> I was trying not to bomb the newsgroup. But it seems you want it. So >> here we go. Assume that a valid spec file exists. I included the >> relevent types I define in it in my comments, as it is in my actual >> code. > >You are the one asking the questions, we are the ones who are trying to >help. You do not make it easy; it just took me about half an hour to get >the code you supply to the state where it compiles; and I still don't >know what CAP is in > > Char.CH := CAP(Element(TKNBUF,CURPOSN)); > >so I just removed it (guessing it's supposed to convert to upper case). > >There is no problem if I enter "12345" or "abcde" or "1+2". However, if >I enter "1+" or "1+2+" I get the same index error as Adam, on > > CH2 := Element(Token.UStr,2); > >Postponing this statement to the point where we know the length is >greater than 1, I get no exceptions. > >Perhaps, for the purposes of asking the question here, you should change >Testtokenizea so that the problematic input is a constant string rather >than being read from the input. > >See for example http://stackoverflow.com/help/mcve - the 'minimal' isn't >quite so important as the 'complete', 'tested', and 'readable'. I guess this is a case of the error code does not match the error. I kept getting an error message about the character appending line. I tried GDB and stepped through, and seemed to get the same error. I don't know why, but I agree that is the error. I understand now that I knew that in Modula-2 when the token was 1 character, then CH2 would just get the null termination character for all strings. I still don't understand why stepping line by line did not show me the correct failure point. Thanks guys for your help --rob PS: CAP is a holdover from Modula-2. I am used to it, and it is defined in my spec file to renames Ada.Character.Handling.To_Upper ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-15 12:53 ` agent @ 2014-02-15 16:58 ` adambeneschan 2014-02-15 18:29 ` Simon Wright 0 siblings, 1 reply; 13+ messages in thread From: adambeneschan @ 2014-02-15 16:58 UTC (permalink / raw) On Saturday, February 15, 2014 4:53:42 AM UTC-8, ag...@drrob1.com wrote: > On Sat, 15 Feb 2014 09:33:25 +0000, Simon Wright wrote: > I guess this is a case of the error code does not match the error. I > kept getting an error message about the character appending line. > > I tried GDB and stepped through, and seemed to get the same error. Sometimes the Put_Line debugger does a better job than other debuggers. > I still don't understand why stepping line by line did not show me the > correct failure point. I don't have a way to tell. (I found out what line it was because I tried it using Irvine Compiler's debugger, which did tell me what the correct line was.) There are some possible reasons that I can think of why incorrect lines might show up (based on my general experience, not on any particular knowledge of GNAT/GDB). The source files could just be out of sync; e.g. you edited a file to add some comments but didn't recompile it, or you linked using an object file from the wrong place. If your source was in one large file, and GNATCHOP was called on to split it up, the line may refer to the larger file rather than the split-up one or vice versa. Finally, optimization can cause problems when the compiler rearranges code; it can be very difficult to get it to display correct line numbers. Plus we can't rule out a compiler bug. -- Adam ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-15 16:58 ` adambeneschan @ 2014-02-15 18:29 ` Simon Wright 2014-02-17 12:57 ` agent 0 siblings, 1 reply; 13+ messages in thread From: Simon Wright @ 2014-02-15 18:29 UTC (permalink / raw) adambeneschan@gmail.com writes: > On Saturday, February 15, 2014 4:53:42 AM UTC-8, ag...@drrob1.com wrote: >> On Sat, 15 Feb 2014 09:33:25 +0000, Simon Wright wrote: > >> I guess this is a case of the error code does not match the error. I >> kept getting an error message about the character appending line. >> >> I tried GDB and stepped through, and seemed to get the same error. > > Sometimes the Put_Line debugger does a better job than other debuggers. > > >> I still don't understand why stepping line by line did not show me the >> correct failure point. > > I don't have a way to tell. (I found out what line it was because I > tried it using Irvine Compiler's debugger, which did tell me what the > correct line was.) There are some possible reasons that I can think > of why incorrect lines might show up (based on my general experience, > not on any particular knowledge of GNAT/GDB). The source files could > just be out of sync; e.g. you edited a file to add some comments but > didn't recompile it, or you linked using an object file from the wrong > place. If your source was in one large file, and GNATCHOP was called > on to split it up, the line may refer to the larger file rather than > the split-up one or vice versa. Finally, optimization can cause > problems when the compiler rearranges code; it can be very difficult > to get it to display correct line numbers. Plus we can't rule out a > compiler bug. GNAT/GDB finds it correctly for me; (gdb) catch exception Catchpoint 1: all Ada exceptions (gdb) run Starting program: /Users/simon/tmp/testtokenizea Input line : 1+ Number of characters read is 2. Value of s'last is 2561, token.state = DGT, sum= 1, DELIMCH= +, DELIMSTATE= OP Catchpoint 1, ADA.STRINGS.INDEX_ERROR at 0x0000000100001cdb in tokenizea__getopcode (token=...) at tokenizea.adb:121 121 CH2 := Element(Token.UStr,2); ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-15 18:29 ` Simon Wright @ 2014-02-17 12:57 ` agent 0 siblings, 0 replies; 13+ messages in thread From: agent @ 2014-02-17 12:57 UTC (permalink / raw) On Sat, 15 Feb 2014 18:29:29 +0000, Simon Wright <simon@pushface.org> wrote: >adambeneschan@gmail.com writes: > >> On Saturday, February 15, 2014 4:53:42 AM UTC-8, ag...@drrob1.com wrote: >>> On Sat, 15 Feb 2014 09:33:25 +0000, Simon Wright wrote: >> >>> I guess this is a case of the error code does not match the error. I >>> kept getting an error message about the character appending line. >>> >>> I tried GDB and stepped through, and seemed to get the same error. > >GNAT/GDB finds it correctly for me; > > (gdb) catch exception > Catchpoint 1: all Ada exceptions > (gdb) run > Starting program: /Users/simon/tmp/testtokenizea > Input line : 1+ > > Number of characters read is 2. Value of s'last is 2561, token.state = DGT, sum= 1, DELIMCH= +, DELIMSTATE= OP > > Catchpoint 1, ADA.STRINGS.INDEX_ERROR at 0x0000000100001cdb in tokenizea__getopcode (token=...) at tokenizea.adb:121 > 121 CH2 := Element(Token.UStr,2); I'll have to use the catch command in the future, now that you have taught it to me. Thanks --rob ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-15 9:33 ` Simon Wright 2014-02-15 12:53 ` agent @ 2014-02-15 13:15 ` agent 2014-02-15 17:56 ` Jeffrey Carter 1 sibling, 1 reply; 13+ messages in thread From: agent @ 2014-02-15 13:15 UTC (permalink / raw) On Sat, 15 Feb 2014 09:33:25 +0000, Simon Wright <simon@pushface.org> wrote: >agent@drrob1.com writes: > >> I was trying not to bomb the newsgroup. But it seems you want it. So >> here we go. Assume that a valid spec file exists. I included the >> relevent types I define in it in my comments, as it is in my actual >> code. > >You are the one asking the questions, we are the ones who are trying to >help. You do not make it easy; it just took me about half an hour to get >the code you supply to the state where it compiles; and I still don't >know what CAP is in > ok. Next time I will post the .ads also. As I said, I didn't want to bomb the group. I guess posting code is not bombing it. --rob ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: confusing string error 2014-02-15 13:15 ` agent @ 2014-02-15 17:56 ` Jeffrey Carter 0 siblings, 0 replies; 13+ messages in thread From: Jeffrey Carter @ 2014-02-15 17:56 UTC (permalink / raw) On 02/15/2014 06:15 AM, agent@drrob1.com wrote: >> > ok. Next time I will post the .ads also. As I said, I didn't want to > bomb the group. I guess posting code is not bombing it. Generally we expect some effort on the poster's part to reduce the code demonstrating the error as much as possible. In this case, a compilable main-program procedure containing the offending subprogram and calling it with a string that causes the error would have been helpful. -- Jeff Carter "In the frozen land of Nador they were forced to eat Robin's minstrels, and there was much rejoicing." Monty Python & the Holy Grail 70 ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-02-17 12:57 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-02-14 12:38 confusing string error agent 2014-02-14 13:03 ` Jacob Sparre Andersen 2014-02-15 0:46 ` agent 2014-02-15 1:50 ` adambeneschan 2014-02-15 8:41 ` Simon Wright 2014-02-15 1:57 ` adambeneschan 2014-02-15 9:33 ` Simon Wright 2014-02-15 12:53 ` agent 2014-02-15 16:58 ` adambeneschan 2014-02-15 18:29 ` Simon Wright 2014-02-17 12:57 ` agent 2014-02-15 13:15 ` agent 2014-02-15 17:56 ` Jeffrey Carter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox