mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 19:29:24 +02:00
* fixed const s : ^string
* first things for const pchar : @string[1]
This commit is contained in:
parent
4fbc61f5ea
commit
c7230805a2
@ -190,11 +190,10 @@ unit pdecl;
|
||||
end;
|
||||
COLON:
|
||||
begin
|
||||
consume(COLON);
|
||||
{ this was missed, so const s : ^string = nil gives an
|
||||
error (FK)
|
||||
}
|
||||
{ set the blocktype first so a consume also supports a
|
||||
caret, to support const s : ^string = nil }
|
||||
block_type:=bt_type;
|
||||
consume(COLON);
|
||||
ignore_equal:=true;
|
||||
def:=read_type('');
|
||||
ignore_equal:=false;
|
||||
@ -2124,7 +2123,11 @@ unit pdecl;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.89 1998-12-11 00:03:30 peter
|
||||
Revision 1.90 1998-12-15 17:16:00 peter
|
||||
* fixed const s : ^string
|
||||
* first things for const pchar : @string[1]
|
||||
|
||||
Revision 1.89 1998/12/11 00:03:30 peter
|
||||
+ globtype,tokens,version unit splitted from globals
|
||||
|
||||
Revision 1.88 1998/11/30 09:43:20 pierre
|
||||
|
@ -214,22 +214,24 @@ unit ptconst;
|
||||
if p^.treetype=addrn then
|
||||
begin
|
||||
hp:=p^.left;
|
||||
while assigned(hp) and (hp^.treetype=subscriptn) do
|
||||
while assigned(hp) and (hp^.treetype in [subscriptn,vecn]) do
|
||||
hp:=hp^.left;
|
||||
if (is_equal(ppointerdef(p^.resulttype)^.definition,ppointerdef(def)^.definition) or
|
||||
(is_equal(ppointerdef(p^.resulttype)^.definition,voiddef)) or
|
||||
(is_equal(ppointerdef(def)^.definition,voiddef))) and
|
||||
(hp^.treetype = loadn) then
|
||||
(hp^.treetype=loadn) then
|
||||
begin
|
||||
firstpass(p^.left);
|
||||
hp:=p^.left;
|
||||
offset:=0;
|
||||
while assigned(hp) and (hp^.treetype<>loadn) do
|
||||
begin
|
||||
if hp^.treetype=subscriptn then
|
||||
inc(offset,hp^.vs^.address)
|
||||
case hp^.treetype of
|
||||
vecn : internalerror(9779);
|
||||
subscriptn : inc(offset,hp^.vs^.address)
|
||||
else
|
||||
Message(cg_e_illegal_expression);
|
||||
end;
|
||||
hp:=hp^.left;
|
||||
end;
|
||||
datasegment^.concat(new(pai_const_symbol_offset,init(
|
||||
@ -659,7 +661,11 @@ unit ptconst;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.32 1998-12-11 16:50:23 florian
|
||||
Revision 1.33 1998-12-15 17:16:01 peter
|
||||
* fixed const s : ^string
|
||||
* first things for const pchar : @string[1]
|
||||
|
||||
Revision 1.32 1998/12/11 16:50:23 florian
|
||||
+ typed const int64 and qword
|
||||
+ unary minus-operator q1:=-q2;
|
||||
+ not-operator
|
||||
|
@ -349,6 +349,9 @@ implementation
|
||||
var
|
||||
harr : pdef;
|
||||
ct : tconverttype;
|
||||
{$ifdef consteval}
|
||||
tcsym : ptypedconstsym;
|
||||
{$endif}
|
||||
begin
|
||||
firstpass(p^.left);
|
||||
firstpass(p^.right);
|
||||
@ -368,17 +371,14 @@ implementation
|
||||
{ Never convert a boolean or a char !}
|
||||
{ maybe type conversion }
|
||||
if (p^.right^.resulttype^.deftype<>enumdef) and
|
||||
not ((p^.right^.resulttype^.deftype=orddef) and
|
||||
(Porddef(p^.right^.resulttype)^.typ in [bool8bit,bool16bit,bool32bit,uchar])) then
|
||||
begin
|
||||
p^.right:=gentypeconvnode(p^.right,s32bitdef);
|
||||
{ once more firstpass }
|
||||
{?? It's better to only firstpass when the tree has
|
||||
changed, isn't it ?}
|
||||
firstpass(p^.right);
|
||||
end;
|
||||
if codegenerror then
|
||||
exit;
|
||||
not(is_char(p^.right^.resulttype)) and
|
||||
not(is_boolean(p^.right^.resulttype)) then
|
||||
begin
|
||||
p^.right:=gentypeconvnode(p^.right,s32bitdef);
|
||||
firstpass(p^.right);
|
||||
if codegenerror then
|
||||
exit;
|
||||
end;
|
||||
|
||||
{ determine return type }
|
||||
if not assigned(p^.resulttype) then
|
||||
@ -413,6 +413,18 @@ implementation
|
||||
{ the register calculation is easy if a const index is used }
|
||||
if p^.right^.treetype=ordconstn then
|
||||
begin
|
||||
{$ifdef consteval}
|
||||
{ constant evaluation }
|
||||
if (p^.left^.treetype=loadn) and
|
||||
(p^.left^.symtableentry^.typ=typedconstsym) then
|
||||
begin
|
||||
tcsym:=ptypedconstsym(p^.left^.symtableentry);
|
||||
if tcsym^.defintion^.typ=stringdef then
|
||||
begin
|
||||
|
||||
end;
|
||||
end;
|
||||
{$endif}
|
||||
p^.registers32:=p^.left^.registers32;
|
||||
|
||||
{ for ansi/wide strings, we need at least one register }
|
||||
@ -508,7 +520,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.5 1998-12-11 00:03:57 peter
|
||||
Revision 1.6 1998-12-15 17:16:02 peter
|
||||
* fixed const s : ^string
|
||||
* first things for const pchar : @string[1]
|
||||
|
||||
Revision 1.5 1998/12/11 00:03:57 peter
|
||||
+ globtype,tokens,version unit splitted from globals
|
||||
|
||||
Revision 1.4 1998/11/25 19:12:53 pierre
|
||||
|
Loading…
Reference in New Issue
Block a user