mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 04:09:30 +02:00
* scanner object to class
This commit is contained in:
parent
fdeadeed22
commit
f0a0c63c77
@ -277,10 +277,10 @@ begin
|
||||
actasmpattern:='';
|
||||
{ while space and tab , continue scan... }
|
||||
while c in [' ',#9] do
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
{ get token pos }
|
||||
if not (c in [newline,#13,'{',';']) then
|
||||
current_scanner^.gettokenpos;
|
||||
current_scanner.gettokenpos;
|
||||
{ Local Label, Label, Directive, Prefix or Opcode }
|
||||
if firsttoken and not(c in [newline,#13,'{',';']) then
|
||||
begin
|
||||
@ -292,12 +292,12 @@ begin
|
||||
inc(len);
|
||||
actasmpattern[len]:=c;
|
||||
{ Let us point to the next character }
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
while c in ['A'..'Z','a'..'z','0'..'9','_','$'] do
|
||||
begin
|
||||
inc(len);
|
||||
actasmpattern[len]:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
actasmpattern[0]:=chr(len);
|
||||
{ this is a local label... }
|
||||
@ -305,7 +305,7 @@ begin
|
||||
Begin
|
||||
{ local variables are case sensitive }
|
||||
actasmtoken:=AS_LLABEL;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
firsttoken:=true;
|
||||
exit;
|
||||
end
|
||||
@ -323,7 +323,7 @@ begin
|
||||
begin
|
||||
inc(len);
|
||||
actasmpattern[len]:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
actasmpattern[0]:=chr(len);
|
||||
{ Label ? }
|
||||
@ -331,7 +331,7 @@ begin
|
||||
begin
|
||||
actasmtoken:=AS_LABEL;
|
||||
{ let us point to the next character }
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
firsttoken:=true;
|
||||
exit;
|
||||
end;
|
||||
@ -360,16 +360,16 @@ begin
|
||||
begin
|
||||
if (prevasmtoken in [AS_ID,AS_RPAREN]) then
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
actasmtoken:=AS_DOT;
|
||||
exit;
|
||||
end;
|
||||
actasmpattern:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
while c in ['A'..'Z','a'..'z','0'..'9','_','$'] do
|
||||
begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
if is_asmdirective(actasmpattern) then
|
||||
exit;
|
||||
@ -387,7 +387,7 @@ begin
|
||||
begin
|
||||
inc(len);
|
||||
actasmpattern[len]:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
actasmpattern[0]:=chr(len);
|
||||
uppervar(actasmpattern);
|
||||
@ -416,7 +416,7 @@ begin
|
||||
begin
|
||||
len:=1;
|
||||
actasmpattern[len]:='%';
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
{ to be a register there must be a letter and not a number }
|
||||
if c in ['0'..'9'] then
|
||||
begin
|
||||
@ -429,25 +429,25 @@ begin
|
||||
Begin
|
||||
inc(len);
|
||||
actasmpattern[len]:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
actasmpattern[0]:=chr(len);
|
||||
uppervar(actasmpattern);
|
||||
if (actasmpattern = '%ST') and (c='(') then
|
||||
Begin
|
||||
actasmpattern:=actasmpattern+c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c in ['0'..'9'] then
|
||||
actasmpattern:=actasmpattern + c
|
||||
else
|
||||
Message(asmr_e_invalid_fpu_register);
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c <> ')' then
|
||||
Message(asmr_e_invalid_fpu_register)
|
||||
else
|
||||
Begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar; { let us point to next character. }
|
||||
c:=current_scanner.asmgetchar; { let us point to next character. }
|
||||
end;
|
||||
end;
|
||||
if is_register(actasmpattern) then
|
||||
@ -464,7 +464,7 @@ begin
|
||||
Begin
|
||||
inc(len);
|
||||
actasmpattern[len]:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
actasmpattern[0]:=chr(len);
|
||||
actasmpattern:=tostr(ValDecimal(actasmpattern));
|
||||
@ -474,15 +474,15 @@ begin
|
||||
'0' : { octal,hexa,real or binary number. }
|
||||
begin
|
||||
actasmpattern:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
case upcase(c) of
|
||||
'B': { binary }
|
||||
Begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
while c in ['0','1'] do
|
||||
Begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
actasmpattern:=tostr(ValBinary(actasmpattern));
|
||||
actasmtoken:=AS_INTNUM;
|
||||
@ -490,42 +490,42 @@ begin
|
||||
end;
|
||||
'D': { real }
|
||||
Begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
{ get ridd of the 0d }
|
||||
if (c in ['+','-']) then
|
||||
begin
|
||||
actasmpattern:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end
|
||||
else
|
||||
actasmpattern:='';
|
||||
while c in ['0'..'9'] do
|
||||
Begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
if c='.' then
|
||||
begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
while c in ['0'..'9'] do
|
||||
Begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
if upcase(c) = 'E' then
|
||||
begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if (c in ['+','-']) then
|
||||
begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
while c in ['0'..'9'] do
|
||||
Begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
end;
|
||||
actasmtoken:=AS_REALNUM;
|
||||
@ -539,11 +539,11 @@ begin
|
||||
end;
|
||||
'X': { hexadecimal }
|
||||
Begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
while c in ['0'..'9','a'..'f','A'..'F'] do
|
||||
Begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
actasmpattern:=tostr(ValHexaDecimal(actasmpattern));
|
||||
actasmtoken:=AS_INTNUM;
|
||||
@ -555,7 +555,7 @@ begin
|
||||
while c in ['0'..'7'] do
|
||||
Begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
actasmpattern:=tostr(ValOctal(actasmpattern));
|
||||
actasmtoken:=AS_INTNUM;
|
||||
@ -572,27 +572,27 @@ begin
|
||||
|
||||
'&' :
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
actasmtoken:=AS_AND;
|
||||
end;
|
||||
|
||||
'''' : { char }
|
||||
begin
|
||||
current_scanner^.in_asm_string:=true;
|
||||
current_scanner.in_asm_string:=true;
|
||||
actasmpattern:='';
|
||||
repeat
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
case c of
|
||||
'\' :
|
||||
begin
|
||||
{ copy also the next char so \" is parsed correctly }
|
||||
actasmpattern:=actasmpattern+c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
actasmpattern:=actasmpattern+c;
|
||||
end;
|
||||
'''' :
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
break;
|
||||
end;
|
||||
newline:
|
||||
@ -603,27 +603,27 @@ begin
|
||||
until false;
|
||||
actasmpattern:=EscapeToPascal(actasmpattern);
|
||||
actasmtoken:=AS_STRING;
|
||||
current_scanner^.in_asm_string:=false;
|
||||
current_scanner.in_asm_string:=false;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'"' : { string }
|
||||
begin
|
||||
current_scanner^.in_asm_string:=true;
|
||||
current_scanner.in_asm_string:=true;
|
||||
actasmpattern:='';
|
||||
repeat
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
case c of
|
||||
'\' :
|
||||
begin
|
||||
{ copy also the next char so \" is parsed correctly }
|
||||
actasmpattern:=actasmpattern+c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
actasmpattern:=actasmpattern+c;
|
||||
end;
|
||||
'"' :
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
break;
|
||||
end;
|
||||
newline:
|
||||
@ -634,60 +634,60 @@ begin
|
||||
until false;
|
||||
actasmpattern:=EscapeToPascal(actasmpattern);
|
||||
actasmtoken:=AS_STRING;
|
||||
current_scanner^.in_asm_string:=false;
|
||||
current_scanner.in_asm_string:=false;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'$' :
|
||||
begin
|
||||
actasmtoken:=AS_DOLLAR;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
',' :
|
||||
begin
|
||||
actasmtoken:=AS_COMMA;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'<' :
|
||||
begin
|
||||
actasmtoken:=AS_SHL;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c = '<' then
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'>' :
|
||||
begin
|
||||
actasmtoken:=AS_SHL;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c = '>' then
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'|' :
|
||||
begin
|
||||
actasmtoken:=AS_OR;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'^' :
|
||||
begin
|
||||
actasmtoken:=AS_XOR;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'!' :
|
||||
begin
|
||||
Message(asmr_e_nor_not_supported);
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
actasmtoken:=AS_NONE;
|
||||
exit;
|
||||
end;
|
||||
@ -695,48 +695,48 @@ begin
|
||||
'(' :
|
||||
begin
|
||||
actasmtoken:=AS_LPAREN;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
')' :
|
||||
begin
|
||||
actasmtoken:=AS_RPAREN;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
':' :
|
||||
begin
|
||||
actasmtoken:=AS_COLON;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'+' :
|
||||
begin
|
||||
actasmtoken:=AS_PLUS;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'-' :
|
||||
begin
|
||||
actasmtoken:=AS_MINUS;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'*' :
|
||||
begin
|
||||
actasmtoken:=AS_STAR;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'/' :
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
actasmtoken:=AS_SLASH;
|
||||
exit;
|
||||
end;
|
||||
@ -744,14 +744,14 @@ begin
|
||||
'{',#13,newline,';' :
|
||||
begin
|
||||
{ the comment is read by asmgetchar }
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
firsttoken:=TRUE;
|
||||
actasmtoken:=AS_SEPARATOR;
|
||||
exit;
|
||||
end;
|
||||
|
||||
else
|
||||
current_scanner^.illegal_char(c);
|
||||
current_scanner.illegal_char(c);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -1887,7 +1887,7 @@ Begin
|
||||
{ setup label linked list }
|
||||
LocalLabelList:=TLocalLabelList.Create;
|
||||
{ start tokenizer }
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
gettoken;
|
||||
{ main loop }
|
||||
repeat
|
||||
@ -2119,7 +2119,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.9 2001-04-13 01:22:21 peter
|
||||
Revision 1.10 2001-04-13 18:20:21 peter
|
||||
* scanner object to class
|
||||
|
||||
Revision 1.9 2001/04/13 01:22:21 peter
|
||||
* symtable change to classes
|
||||
* range check generation and errors fixed, make cycle DEBUG=1 works
|
||||
* memory leaks fixed
|
||||
|
@ -95,15 +95,15 @@ interface
|
||||
retstr:=upper(tostr(procinfo^.return_offset)+'('+att_reg2str[procinfo^.framepointer]+')')
|
||||
else
|
||||
retstr:='';
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
code:=TAAsmoutput.Create;
|
||||
while not(ende) do
|
||||
begin
|
||||
{ wrong placement
|
||||
current_scanner^.gettokenpos; }
|
||||
current_scanner.gettokenpos; }
|
||||
case c of
|
||||
'A'..'Z','a'..'z','_' : begin
|
||||
current_scanner^.gettokenpos;
|
||||
current_scanner.gettokenpos;
|
||||
i:=0;
|
||||
hs:='';
|
||||
while ((ord(c)>=ord('A')) and (ord(c)<=ord('Z')))
|
||||
@ -113,7 +113,7 @@ interface
|
||||
begin
|
||||
inc(i);
|
||||
hs[i]:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
hs[0]:=chr(i);
|
||||
if upper(hs)='END' then
|
||||
@ -268,15 +268,15 @@ interface
|
||||
if pos(retstr,s) > 0 then
|
||||
procinfo^.funcret_state:=vs_assigned;
|
||||
writeasmline;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
#26 : Message(scan_f_end_of_file);
|
||||
else
|
||||
begin
|
||||
current_scanner^.gettokenpos;
|
||||
current_scanner.gettokenpos;
|
||||
inc(byte(s[0]));
|
||||
s[length(s)]:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -287,7 +287,10 @@ interface
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.7 2001-04-13 01:22:21 peter
|
||||
Revision 1.8 2001-04-13 18:20:21 peter
|
||||
* scanner object to class
|
||||
|
||||
Revision 1.7 2001/04/13 01:22:21 peter
|
||||
* symtable change to classes
|
||||
* range check generation and errors fixed, make cycle DEBUG=1 works
|
||||
* memory leaks fixed
|
||||
|
@ -267,10 +267,10 @@ begin
|
||||
actasmpattern:='';
|
||||
{ while space and tab , continue scan... }
|
||||
while (c in [' ',#9]) do
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
{ get token pos }
|
||||
if not (c in [newline,#13,'{',';']) then
|
||||
current_scanner^.gettokenpos;
|
||||
current_scanner.gettokenpos;
|
||||
{ Local Label, Label, Directive, Prefix or Opcode }
|
||||
if firsttoken and not (c in [newline,#13,'{',';']) then
|
||||
begin
|
||||
@ -283,7 +283,7 @@ begin
|
||||
forcelabel:=TRUE;
|
||||
inc(len);
|
||||
actasmpattern[len]:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
actasmpattern[0]:=chr(len);
|
||||
uppervar(actasmpattern);
|
||||
@ -295,7 +295,7 @@ begin
|
||||
else
|
||||
actasmtoken:=AS_LABEL;
|
||||
{ let us point to the next character }
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
firsttoken:=true;
|
||||
exit;
|
||||
end;
|
||||
@ -324,11 +324,11 @@ begin
|
||||
{ - @Result, @Code or @Data special variables. }
|
||||
begin
|
||||
actasmpattern:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
while c in ['A'..'Z','a'..'z','0'..'9','_','@'] do
|
||||
begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
uppervar(actasmpattern);
|
||||
actasmtoken:=AS_ID;
|
||||
@ -338,11 +338,11 @@ begin
|
||||
'A'..'Z','a'..'z','_': { identifier, register, opcode, prefix or directive }
|
||||
begin
|
||||
actasmpattern:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
while c in ['A'..'Z','a'..'z','0'..'9','_'] do
|
||||
begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
uppervar(actasmpattern);
|
||||
{ after prefix we allow also a new opcode }
|
||||
@ -358,18 +358,18 @@ begin
|
||||
if (actasmpattern = 'ST') and (c='(') then
|
||||
Begin
|
||||
actasmpattern:=actasmpattern+c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c in ['0'..'7'] then
|
||||
actasmpattern:=actasmpattern + c
|
||||
else
|
||||
Message(asmr_e_invalid_fpu_register);
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c <> ')' then
|
||||
Message(asmr_e_invalid_fpu_register)
|
||||
else
|
||||
Begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
end;
|
||||
if is_register(actasmpattern) then
|
||||
@ -385,18 +385,18 @@ begin
|
||||
'&' : { override operator... not supported }
|
||||
begin
|
||||
Message(asmr_w_override_op_not_supported);
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
actasmtoken:=AS_NONE;
|
||||
end;
|
||||
|
||||
'''' : { string or character }
|
||||
begin
|
||||
actasmpattern:='';
|
||||
current_scanner^.in_asm_string:=true;
|
||||
current_scanner.in_asm_string:=true;
|
||||
repeat
|
||||
if c = '''' then
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c=newline then
|
||||
begin
|
||||
Message(scan_f_string_exceeds_line);
|
||||
@ -405,11 +405,11 @@ begin
|
||||
repeat
|
||||
if c='''' then
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c='''' then
|
||||
begin
|
||||
actasmpattern:=actasmpattern+'''';
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c=newline then
|
||||
begin
|
||||
Message(scan_f_string_exceeds_line);
|
||||
@ -422,7 +422,7 @@ begin
|
||||
else
|
||||
begin
|
||||
actasmpattern:=actasmpattern+c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c=newline then
|
||||
begin
|
||||
Message(scan_f_string_exceeds_line);
|
||||
@ -434,19 +434,19 @@ begin
|
||||
else
|
||||
break; { end if }
|
||||
until false;
|
||||
current_scanner^.in_asm_string:=false;
|
||||
current_scanner.in_asm_string:=false;
|
||||
actasmtoken:=AS_STRING;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'"' : { string or character }
|
||||
begin
|
||||
current_scanner^.in_asm_string:=true;
|
||||
current_scanner.in_asm_string:=true;
|
||||
actasmpattern:='';
|
||||
repeat
|
||||
if c = '"' then
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c=newline then
|
||||
begin
|
||||
Message(scan_f_string_exceeds_line);
|
||||
@ -455,11 +455,11 @@ begin
|
||||
repeat
|
||||
if c='"' then
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c='"' then
|
||||
begin
|
||||
actasmpattern:=actasmpattern+'"';
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c=newline then
|
||||
begin
|
||||
Message(scan_f_string_exceeds_line);
|
||||
@ -472,7 +472,7 @@ begin
|
||||
else
|
||||
begin
|
||||
actasmpattern:=actasmpattern+c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
if c=newline then
|
||||
begin
|
||||
Message(scan_f_string_exceeds_line);
|
||||
@ -484,18 +484,18 @@ begin
|
||||
else
|
||||
break; { end if }
|
||||
until false;
|
||||
current_scanner^.in_asm_string:=false;
|
||||
current_scanner.in_asm_string:=false;
|
||||
actasmtoken:=AS_STRING;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'$' :
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
while c in ['0'..'9','A'..'F','a'..'f'] do
|
||||
begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
actasmpattern:=tostr(ValHexaDecimal(actasmpattern));
|
||||
actasmtoken:=AS_INTNUM;
|
||||
@ -505,89 +505,89 @@ begin
|
||||
',' :
|
||||
begin
|
||||
actasmtoken:=AS_COMMA;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'[' :
|
||||
begin
|
||||
actasmtoken:=AS_LBRACKET;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
']' :
|
||||
begin
|
||||
actasmtoken:=AS_RBRACKET;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'(' :
|
||||
begin
|
||||
actasmtoken:=AS_LPAREN;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
')' :
|
||||
begin
|
||||
actasmtoken:=AS_RPAREN;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
':' :
|
||||
begin
|
||||
actasmtoken:=AS_COLON;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'.' :
|
||||
begin
|
||||
actasmtoken:=AS_DOT;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'+' :
|
||||
begin
|
||||
actasmtoken:=AS_PLUS;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'-' :
|
||||
begin
|
||||
actasmtoken:=AS_MINUS;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'*' :
|
||||
begin
|
||||
actasmtoken:=AS_STAR;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'/' :
|
||||
begin
|
||||
actasmtoken:=AS_SLASH;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
|
||||
'0'..'9':
|
||||
begin
|
||||
actasmpattern:=c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
{ Get the possible characters }
|
||||
while c in ['0'..'9','A'..'F','a'..'f'] do
|
||||
begin
|
||||
actasmpattern:=actasmpattern + c;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
end;
|
||||
{ Get ending character }
|
||||
uppervar(actasmpattern);
|
||||
@ -608,14 +608,14 @@ begin
|
||||
Begin
|
||||
actasmpattern:=tostr(ValOctal(actasmpattern));
|
||||
actasmtoken:=AS_INTNUM;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
'H' :
|
||||
Begin
|
||||
actasmpattern:=tostr(ValHexaDecimal(actasmpattern));
|
||||
actasmtoken:=AS_INTNUM;
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
exit;
|
||||
end;
|
||||
else { must be an integer number }
|
||||
@ -630,14 +630,14 @@ begin
|
||||
|
||||
';','{',#13,newline :
|
||||
begin
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
firsttoken:=TRUE;
|
||||
actasmtoken:=AS_SEPARATOR;
|
||||
exit;
|
||||
end;
|
||||
|
||||
else
|
||||
current_scanner^.illegal_char(c);
|
||||
current_scanner.illegal_char(c);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -1841,7 +1841,7 @@ Begin
|
||||
{ setup label linked list }
|
||||
LocalLabelList:=TLocalLabelList.Create;
|
||||
{ start tokenizer }
|
||||
c:=current_scanner^.asmgetchar;
|
||||
c:=current_scanner.asmgetchar;
|
||||
gettoken;
|
||||
{ main loop }
|
||||
repeat
|
||||
@ -1948,7 +1948,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.12 2001-04-13 01:22:21 peter
|
||||
Revision 1.13 2001-04-13 18:20:21 peter
|
||||
* scanner object to class
|
||||
|
||||
Revision 1.12 2001/04/13 01:22:21 peter
|
||||
* symtable change to classes
|
||||
* range check generation and errors fixed, make cycle DEBUG=1 works
|
||||
* memory leaks fixed
|
||||
|
Loading…
Reference in New Issue
Block a user