mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-24 15:29:18 +02:00
* fixed some reported bugs
This commit is contained in:
parent
e407fb7848
commit
6731abb0db
@ -1137,11 +1137,14 @@ type
|
|||||||
{ also, this checking can only be done if the constructor is directly
|
{ also, this checking can only be done if the constructor is directly
|
||||||
called, indirect constructor calls cannot be checked.
|
called, indirect constructor calls cannot be checked.
|
||||||
}
|
}
|
||||||
if assigned(methodpointer) and
|
if assigned(methodpointer) then
|
||||||
(methodpointer.resulttype.def.deftype = classrefdef) and
|
|
||||||
(methodpointer.nodetype in [typen,loadvmtaddrn]) then
|
|
||||||
begin
|
begin
|
||||||
if (tclassrefdef(methodpointer.resulttype.def).pointertype.def.deftype = objectdef) then
|
if (methodpointer.resulttype.def.deftype = objectdef) then
|
||||||
|
objectdf:=tobjectdef(methodpointer.resulttype.def)
|
||||||
|
else
|
||||||
|
if (methodpointer.resulttype.def.deftype = classrefdef) and
|
||||||
|
(tclassrefdef(methodpointer.resulttype.def).pointertype.def.deftype = objectdef) and
|
||||||
|
(methodpointer.nodetype in [typen,loadvmtaddrn]) then
|
||||||
objectdf:=tobjectdef(tclassrefdef(methodpointer.resulttype.def).pointertype.def);
|
objectdf:=tobjectdef(tclassrefdef(methodpointer.resulttype.def).pointertype.def);
|
||||||
end;
|
end;
|
||||||
if not assigned(objectdf) then
|
if not assigned(objectdf) then
|
||||||
@ -2163,7 +2166,7 @@ type
|
|||||||
while assigned(hpt) and (hpt.nodetype in [subscriptn,vecn]) do
|
while assigned(hpt) and (hpt.nodetype in [subscriptn,vecn]) do
|
||||||
hpt:=tunarynode(hpt).left;
|
hpt:=tunarynode(hpt).left;
|
||||||
|
|
||||||
if (procdefinition.proctypeoption in [potype_constructor,potype_destructor]) and
|
if (procdefinition.proctypeoption=potype_constructor) and
|
||||||
assigned(symtableproc) and
|
assigned(symtableproc) and
|
||||||
(symtableproc.symtabletype=withsymtable) and
|
(symtableproc.symtabletype=withsymtable) and
|
||||||
(tnode(twithsymtable(symtableproc).withrefnode).nodetype=temprefn) then
|
(tnode(twithsymtable(symtableproc).withrefnode).nodetype=temprefn) then
|
||||||
@ -2646,7 +2649,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.174 2003-07-25 09:54:57 jonas
|
Revision 1.175 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.174 2003/07/25 09:54:57 jonas
|
||||||
* fixed bogus abstract method warnings
|
* fixed bogus abstract method warnings
|
||||||
|
|
||||||
Revision 1.173 2003/06/25 18:31:23 peter
|
Revision 1.173 2003/06/25 18:31:23 peter
|
||||||
|
@ -109,7 +109,7 @@ implementation
|
|||||||
lcont,lbreak,lloop,
|
lcont,lbreak,lloop,
|
||||||
oldclabel,oldblabel : tasmlabel;
|
oldclabel,oldblabel : tasmlabel;
|
||||||
otlabel,oflabel : tasmlabel;
|
otlabel,oflabel : tasmlabel;
|
||||||
|
oldflowcontrol : tflowcontrol;
|
||||||
begin
|
begin
|
||||||
location_reset(location,LOC_VOID,OS_NO);
|
location_reset(location,LOC_VOID,OS_NO);
|
||||||
|
|
||||||
@ -117,6 +117,7 @@ implementation
|
|||||||
objectlibrary.getlabel(lcont);
|
objectlibrary.getlabel(lcont);
|
||||||
objectlibrary.getlabel(lbreak);
|
objectlibrary.getlabel(lbreak);
|
||||||
{ arrange continue and breaklabels: }
|
{ arrange continue and breaklabels: }
|
||||||
|
oldflowcontrol:=flowcontrol;
|
||||||
oldclabel:=aktcontinuelabel;
|
oldclabel:=aktcontinuelabel;
|
||||||
oldblabel:=aktbreaklabel;
|
oldblabel:=aktbreaklabel;
|
||||||
|
|
||||||
@ -168,7 +169,7 @@ implementation
|
|||||||
aktcontinuelabel:=oldclabel;
|
aktcontinuelabel:=oldclabel;
|
||||||
aktbreaklabel:=oldblabel;
|
aktbreaklabel:=oldblabel;
|
||||||
{ a break/continue in a while/repeat block can't be seen outside }
|
{ a break/continue in a while/repeat block can't be seen outside }
|
||||||
flowcontrol:=flowcontrol-[fc_break,fc_continue];
|
flowcontrol:=oldflowcontrol+(flowcontrol-[fc_break,fc_continue]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -354,10 +355,11 @@ implementation
|
|||||||
opsize : tcgsize;
|
opsize : tcgsize;
|
||||||
count_var_is_signed,do_loopvar_at_end : boolean;
|
count_var_is_signed,do_loopvar_at_end : boolean;
|
||||||
cmp_const:Tconstexprint;
|
cmp_const:Tconstexprint;
|
||||||
|
oldflowcontrol : tflowcontrol;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
location_reset(location,LOC_VOID,OS_NO);
|
location_reset(location,LOC_VOID,OS_NO);
|
||||||
|
oldflowcontrol:=flowcontrol;
|
||||||
oldclabel:=aktcontinuelabel;
|
oldclabel:=aktcontinuelabel;
|
||||||
oldblabel:=aktbreaklabel;
|
oldblabel:=aktbreaklabel;
|
||||||
objectlibrary.getlabel(aktcontinuelabel);
|
objectlibrary.getlabel(aktcontinuelabel);
|
||||||
@ -702,8 +704,8 @@ implementation
|
|||||||
|
|
||||||
aktcontinuelabel:=oldclabel;
|
aktcontinuelabel:=oldclabel;
|
||||||
aktbreaklabel:=oldblabel;
|
aktbreaklabel:=oldblabel;
|
||||||
{ a break/continue in a for block can't be seen outside }
|
{ a break/continue in a while/repeat block can't be seen outside }
|
||||||
flowcontrol:=flowcontrol-[fc_break,fc_continue];
|
flowcontrol:=oldflowcontrol+(flowcontrol-[fc_break,fc_continue]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -1539,7 +1541,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.74 2003-08-09 18:56:54 daniel
|
Revision 1.75 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.74 2003/08/09 18:56:54 daniel
|
||||||
* cs_regalloc renamed to cs_regvars to avoid confusion with register
|
* cs_regalloc renamed to cs_regvars to avoid confusion with register
|
||||||
allocator
|
allocator
|
||||||
* Some preventive changes to i386 spillinh code
|
* Some preventive changes to i386 spillinh code
|
||||||
|
@ -42,10 +42,6 @@ interface
|
|||||||
procedure pass_2;override;
|
procedure pass_2;override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
tcgdoubleaddrnode = class(tdoubleaddrnode)
|
|
||||||
procedure pass_2;override;
|
|
||||||
end;
|
|
||||||
|
|
||||||
tcgderefnode = class(tderefnode)
|
tcgderefnode = class(tderefnode)
|
||||||
procedure pass_2;override;
|
procedure pass_2;override;
|
||||||
end;
|
end;
|
||||||
@ -186,39 +182,15 @@ implementation
|
|||||||
location_reset(location,LOC_REGISTER,OS_ADDR);
|
location_reset(location,LOC_REGISTER,OS_ADDR);
|
||||||
location.register:=rg.getaddressregister(exprasmlist);
|
location.register:=rg.getaddressregister(exprasmlist);
|
||||||
{ @ on a procvar means returning an address to the procedure that
|
{ @ on a procvar means returning an address to the procedure that
|
||||||
is stored in it.}
|
is stored in it }
|
||||||
{ yes but left.symtableentry can be nil
|
|
||||||
for example on self !! }
|
|
||||||
{ symtableentry can be also invalid, if left is no tree node }
|
|
||||||
if (m_tp_procvar in aktmodeswitches) and
|
if (m_tp_procvar in aktmodeswitches) and
|
||||||
(left.nodetype=loadn) and
|
(left.nodetype=loadn) and
|
||||||
|
(tloadnode(left).resulttype.def.deftype=procvardef) and
|
||||||
assigned(tloadnode(left).symtableentry) and
|
assigned(tloadnode(left).symtableentry) and
|
||||||
(tloadnode(left).symtableentry.typ=varsym) and
|
(tloadnode(left).symtableentry.typ=varsym) then
|
||||||
(tvarsym(tloadnode(left).symtableentry).vartype.def.deftype=procvardef) then
|
cg.a_load_ref_reg(exprasmlist,OS_ADDR,OS_ADDR,left.location.reference,location.register)
|
||||||
cg.a_load_ref_reg(exprasmlist,OS_ADDR,OS_ADDR,left.location.reference,
|
|
||||||
location.register)
|
|
||||||
else
|
else
|
||||||
begin
|
cg.a_loadaddr_ref_reg(exprasmlist,left.location.reference,location.register);
|
||||||
cg.a_loadaddr_ref_reg(exprasmlist,left.location.reference,
|
|
||||||
location.register);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
{*****************************************************************************
|
|
||||||
TCGDOUBLEADDRNODE
|
|
||||||
*****************************************************************************}
|
|
||||||
|
|
||||||
procedure tcgdoubleaddrnode.pass_2;
|
|
||||||
begin
|
|
||||||
secondpass(left);
|
|
||||||
|
|
||||||
location_release(exprasmlist,left.location);
|
|
||||||
location_reset(location,LOC_REGISTER,OS_ADDR);
|
|
||||||
location.register:=rg.getaddressregister(exprasmlist);
|
|
||||||
|
|
||||||
cg.a_loadaddr_ref_reg(exprasmlist,left.location.reference,
|
|
||||||
location.register);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -479,7 +451,6 @@ implementation
|
|||||||
poslabel,
|
poslabel,
|
||||||
neglabel : tasmlabel;
|
neglabel : tasmlabel;
|
||||||
hreg : tregister;
|
hreg : tregister;
|
||||||
i:Tsuperregister;
|
|
||||||
{$ifndef newra}
|
{$ifndef newra}
|
||||||
pushed : tpushedsavedint;
|
pushed : tpushedsavedint;
|
||||||
{$endif}
|
{$endif}
|
||||||
@ -890,7 +861,6 @@ implementation
|
|||||||
begin
|
begin
|
||||||
cloadvmtaddrnode:=tcgloadvmtaddrnode;
|
cloadvmtaddrnode:=tcgloadvmtaddrnode;
|
||||||
caddrnode:=tcgaddrnode;
|
caddrnode:=tcgaddrnode;
|
||||||
cdoubleaddrnode:=tcgdoubleaddrnode;
|
|
||||||
cderefnode:=tcgderefnode;
|
cderefnode:=tcgderefnode;
|
||||||
csubscriptnode:=tcgsubscriptnode;
|
csubscriptnode:=tcgsubscriptnode;
|
||||||
cwithnode:=tcgwithnode;
|
cwithnode:=tcgwithnode;
|
||||||
@ -898,7 +868,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.68 2003-08-09 18:56:54 daniel
|
Revision 1.69 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.68 2003/08/09 18:56:54 daniel
|
||||||
* cs_regalloc renamed to cs_regvars to avoid confusion with register
|
* cs_regalloc renamed to cs_regvars to avoid confusion with register
|
||||||
allocator
|
allocator
|
||||||
* Some preventive changes to i386 spillinh code
|
* Some preventive changes to i386 spillinh code
|
||||||
|
@ -1294,6 +1294,8 @@ implementation
|
|||||||
that has an extra addrn }
|
that has an extra addrn }
|
||||||
if (m_tp_procvar in aktmodeswitches) and
|
if (m_tp_procvar in aktmodeswitches) and
|
||||||
(resulttype.def.deftype<>procvardef) and
|
(resulttype.def.deftype<>procvardef) and
|
||||||
|
{ ignore internal typecasts to access methodpointer fields }
|
||||||
|
(resulttype.def<>methodpointertype.def) and
|
||||||
(left.resulttype.def.deftype=procvardef) and
|
(left.resulttype.def.deftype=procvardef) and
|
||||||
(not is_void(tprocvardef(left.resulttype.def).rettype.def)) then
|
(not is_void(tprocvardef(left.resulttype.def).rettype.def)) then
|
||||||
begin
|
begin
|
||||||
@ -2111,7 +2113,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.115 2003-06-05 20:05:55 peter
|
Revision 1.116 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.115 2003/06/05 20:05:55 peter
|
||||||
* removed changesettype because that will change the definition
|
* removed changesettype because that will change the definition
|
||||||
of the setdef forever and can result in a different between
|
of the setdef forever and can result in a different between
|
||||||
original interface and current implementation definition
|
original interface and current implementation definition
|
||||||
|
@ -53,13 +53,6 @@ interface
|
|||||||
end;
|
end;
|
||||||
taddrnodeclass = class of taddrnode;
|
taddrnodeclass = class of taddrnode;
|
||||||
|
|
||||||
tdoubleaddrnode = class(tunarynode)
|
|
||||||
constructor create(l : tnode);virtual;
|
|
||||||
function pass_1 : tnode;override;
|
|
||||||
function det_resulttype:tnode;override;
|
|
||||||
end;
|
|
||||||
tdoubleaddrnodeclass = class of tdoubleaddrnode;
|
|
||||||
|
|
||||||
tderefnode = class(tunarynode)
|
tderefnode = class(tunarynode)
|
||||||
constructor create(l : tnode);virtual;
|
constructor create(l : tnode);virtual;
|
||||||
function pass_1 : tnode;override;
|
function pass_1 : tnode;override;
|
||||||
@ -109,7 +102,6 @@ interface
|
|||||||
var
|
var
|
||||||
cloadvmtaddrnode : tloadvmtaddrnodeclass;
|
cloadvmtaddrnode : tloadvmtaddrnodeclass;
|
||||||
caddrnode : taddrnodeclass;
|
caddrnode : taddrnodeclass;
|
||||||
cdoubleaddrnode : tdoubleaddrnodeclass;
|
|
||||||
cderefnode : tderefnodeclass;
|
cderefnode : tderefnodeclass;
|
||||||
csubscriptnode : tsubscriptnodeclass;
|
csubscriptnode : tsubscriptnodeclass;
|
||||||
cvecnode : tvecnodeclass;
|
cvecnode : tvecnodeclass;
|
||||||
@ -405,56 +397,6 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{*****************************************************************************
|
|
||||||
TDOUBLEADDRNODE
|
|
||||||
*****************************************************************************}
|
|
||||||
|
|
||||||
constructor tdoubleaddrnode.create(l : tnode);
|
|
||||||
begin
|
|
||||||
inherited create(doubleaddrn,l);
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
function tdoubleaddrnode.det_resulttype:tnode;
|
|
||||||
begin
|
|
||||||
result:=nil;
|
|
||||||
resulttypepass(left);
|
|
||||||
if codegenerror then
|
|
||||||
exit;
|
|
||||||
|
|
||||||
inc(parsing_para_level);
|
|
||||||
set_varstate(left,false);
|
|
||||||
dec(parsing_para_level);
|
|
||||||
|
|
||||||
if (left.resulttype.def.deftype)<>procvardef then
|
|
||||||
CGMessage(cg_e_illegal_expression);
|
|
||||||
|
|
||||||
resulttype:=voidpointertype;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
function tdoubleaddrnode.pass_1 : tnode;
|
|
||||||
begin
|
|
||||||
result:=nil;
|
|
||||||
make_not_regable(left);
|
|
||||||
firstpass(left);
|
|
||||||
if codegenerror then
|
|
||||||
exit;
|
|
||||||
|
|
||||||
if (left.expectloc<>LOC_REFERENCE) then
|
|
||||||
CGMessage(cg_e_illegal_expression);
|
|
||||||
|
|
||||||
registers32:=left.registers32;
|
|
||||||
registersfpu:=left.registersfpu;
|
|
||||||
{$ifdef SUPPORT_MMX}
|
|
||||||
registersmmx:=left.registersmmx;
|
|
||||||
{$endif SUPPORT_MMX}
|
|
||||||
if registers32<1 then
|
|
||||||
registers32:=1;
|
|
||||||
expectloc:=LOC_REGISTER;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
{*****************************************************************************
|
{*****************************************************************************
|
||||||
TDEREFNODE
|
TDEREFNODE
|
||||||
*****************************************************************************}
|
*****************************************************************************}
|
||||||
@ -905,7 +847,6 @@ implementation
|
|||||||
begin
|
begin
|
||||||
cloadvmtaddrnode := tloadvmtaddrnode;
|
cloadvmtaddrnode := tloadvmtaddrnode;
|
||||||
caddrnode := taddrnode;
|
caddrnode := taddrnode;
|
||||||
cdoubleaddrnode := tdoubleaddrnode;
|
|
||||||
cderefnode := tderefnode;
|
cderefnode := tderefnode;
|
||||||
csubscriptnode := tsubscriptnode;
|
csubscriptnode := tsubscriptnode;
|
||||||
cvecnode := tvecnode;
|
cvecnode := tvecnode;
|
||||||
@ -913,7 +854,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.59 2003-06-17 19:24:08 jonas
|
Revision 1.60 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.59 2003/06/17 19:24:08 jonas
|
||||||
* fixed conversion of fpc_*str_unique to compilerproc
|
* fixed conversion of fpc_*str_unique to compilerproc
|
||||||
|
|
||||||
Revision 1.58 2003/06/17 16:34:44 jonas
|
Revision 1.58 2003/06/17 16:34:44 jonas
|
||||||
|
@ -1163,16 +1163,11 @@ implementation
|
|||||||
{ class abstract and it's not allow to }
|
{ class abstract and it's not allow to }
|
||||||
{ generates an instance }
|
{ generates an instance }
|
||||||
if (po_abstractmethod in procdefcoll^.data.procoptions) then
|
if (po_abstractmethod in procdefcoll^.data.procoptions) then
|
||||||
begin
|
List.concat(Tai_const_symbol.Createname('FPC_ABSTRACTERROR'))
|
||||||
include(_class.objectoptions,oo_has_abstract);
|
|
||||||
List.concat(Tai_const_symbol.Createname('FPC_ABSTRACTERROR'));
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
begin
|
|
||||||
List.concat(Tai_const_symbol.createname(procdefcoll^.data.mangledname));
|
List.concat(Tai_const_symbol.createname(procdefcoll^.data.mangledname));
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
procdefcoll:=procdefcoll^.next;
|
procdefcoll:=procdefcoll^.next;
|
||||||
end;
|
end;
|
||||||
symcoll:=symcoll^.next;
|
symcoll:=symcoll^.next;
|
||||||
@ -1333,7 +1328,10 @@ initialization
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.44 2003-06-01 21:38:06 peter
|
Revision 1.45 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.44 2003/06/01 21:38:06 peter
|
||||||
* getregisterfpu size parameter added
|
* getregisterfpu size parameter added
|
||||||
* op_const_reg size parameter added
|
* op_const_reg size parameter added
|
||||||
* sparc updates
|
* sparc updates
|
||||||
|
@ -70,7 +70,6 @@ interface
|
|||||||
subscriptn, {Field in a record/object}
|
subscriptn, {Field in a record/object}
|
||||||
derefn, {Dereferences a pointer}
|
derefn, {Dereferences a pointer}
|
||||||
addrn, {Represents the @ operator}
|
addrn, {Represents the @ operator}
|
||||||
doubleaddrn, {Represents the @@ operator}
|
|
||||||
ordconstn, {Represents an ordinal value}
|
ordconstn, {Represents an ordinal value}
|
||||||
typeconvn, {Represents type-conversion/typecast}
|
typeconvn, {Represents type-conversion/typecast}
|
||||||
calln, {Represents a call node}
|
calln, {Represents a call node}
|
||||||
@ -149,7 +148,6 @@ interface
|
|||||||
'subscriptn',
|
'subscriptn',
|
||||||
'derefn',
|
'derefn',
|
||||||
'addrn',
|
'addrn',
|
||||||
'doubleaddrn',
|
|
||||||
'ordconstn',
|
'ordconstn',
|
||||||
'typeconvn',
|
'typeconvn',
|
||||||
'calln',
|
'calln',
|
||||||
@ -982,7 +980,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.62 2003-05-26 21:17:17 peter
|
Revision 1.63 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.62 2003/05/26 21:17:17 peter
|
||||||
* procinlinenode removed
|
* procinlinenode removed
|
||||||
* aktexit2label removed, fast exit removed
|
* aktexit2label removed, fast exit removed
|
||||||
+ tcallnode.inlined_pass_2 added
|
+ tcallnode.inlined_pass_2 added
|
||||||
|
@ -96,7 +96,6 @@ implementation
|
|||||||
'subscriptn', {subscriptn}
|
'subscriptn', {subscriptn}
|
||||||
'dderef', {derefn}
|
'dderef', {derefn}
|
||||||
'addr', {addrn}
|
'addr', {addrn}
|
||||||
'doubleaddr', {doubleaddrn}
|
|
||||||
'ordconst', {ordconstn}
|
'ordconst', {ordconstn}
|
||||||
'typeconv', {typeconvn}
|
'typeconv', {typeconvn}
|
||||||
'calln', {calln}
|
'calln', {calln}
|
||||||
@ -316,7 +315,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.61 2003-07-06 17:58:22 peter
|
Revision 1.62 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.61 2003/07/06 17:58:22 peter
|
||||||
* framepointer fixes for sparc
|
* framepointer fixes for sparc
|
||||||
* parent framepointer code more generic
|
* parent framepointer code more generic
|
||||||
|
|
||||||
|
@ -1358,7 +1358,8 @@ implementation
|
|||||||
procsym :
|
procsym :
|
||||||
begin
|
begin
|
||||||
{ are we in a class method ? }
|
{ are we in a class method ? }
|
||||||
possible_error:=(srsym.owner.symtabletype=objectsymtable) and
|
possible_error:=(srsymtable.symtabletype<>withsymtable) and
|
||||||
|
(srsym.owner.symtabletype=objectsymtable) and
|
||||||
not(is_interface(tdef(srsym.owner.defowner))) and
|
not(is_interface(tdef(srsym.owner.defowner))) and
|
||||||
assigned(current_procinfo) and
|
assigned(current_procinfo) and
|
||||||
(po_classmethod in current_procinfo.procdef.procoptions);
|
(po_classmethod in current_procinfo.procdef.procoptions);
|
||||||
@ -2412,7 +2413,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.123 2003-06-13 21:19:31 peter
|
Revision 1.124 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.123 2003/06/13 21:19:31 peter
|
||||||
* current_procdef removed, use current_procinfo.procdef instead
|
* current_procdef removed, use current_procinfo.procdef instead
|
||||||
|
|
||||||
Revision 1.122 2003/06/03 21:02:57 peter
|
Revision 1.122 2003/06/03 21:02:57 peter
|
||||||
|
@ -355,9 +355,6 @@ implementation
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
classh:=tobjectdef(tpointerdef(p1.resulttype.def).pointertype.def);
|
classh:=tobjectdef(tpointerdef(p1.resulttype.def).pointertype.def);
|
||||||
{ check for an abstract class }
|
|
||||||
if (oo_has_abstract in classh.objectoptions) then
|
|
||||||
Message(sym_e_no_instance_of_abstract_object);
|
|
||||||
{ use the objectdef for loading the VMT }
|
{ use the objectdef for loading the VMT }
|
||||||
p2:=p1;
|
p2:=p1;
|
||||||
p1:=ctypenode.create(tpointerdef(p1.resulttype.def).pointertype);
|
p1:=ctypenode.create(tpointerdef(p1.resulttype.def).pointertype);
|
||||||
@ -682,7 +679,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.15 2003-05-17 13:30:08 jonas
|
Revision 1.16 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.15 2003/05/17 13:30:08 jonas
|
||||||
* changed tt_persistant to tt_persistent :)
|
* changed tt_persistant to tt_persistent :)
|
||||||
* tempcreatenode now doesn't accept a boolean anymore for persistent
|
* tempcreatenode now doesn't accept a boolean anymore for persistent
|
||||||
temps, but a ttemptype, so you can also create ansistring temps etc
|
temps, but a ttemptype, so you can also create ansistring temps etc
|
||||||
|
@ -385,7 +385,6 @@ implementation
|
|||||||
nodeclass[subscriptn]:=csubscriptnode;
|
nodeclass[subscriptn]:=csubscriptnode;
|
||||||
nodeclass[derefn]:=cderefnode;
|
nodeclass[derefn]:=cderefnode;
|
||||||
nodeclass[addrn]:=caddrnode;
|
nodeclass[addrn]:=caddrnode;
|
||||||
nodeclass[doubleaddrn]:=cdoubleaddrnode;
|
|
||||||
nodeclass[ordconstn]:=cordconstnode;
|
nodeclass[ordconstn]:=cordconstnode;
|
||||||
nodeclass[typeconvn]:=ctypeconvnode;
|
nodeclass[typeconvn]:=ctypeconvnode;
|
||||||
nodeclass[calln]:=ccallnode;
|
nodeclass[calln]:=ccallnode;
|
||||||
@ -493,7 +492,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.52 2003-05-26 21:17:18 peter
|
Revision 1.53 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.52 2003/05/26 21:17:18 peter
|
||||||
* procinlinenode removed
|
* procinlinenode removed
|
||||||
* aktexit2label removed, fast exit removed
|
* aktexit2label removed, fast exit removed
|
||||||
+ tcallnode.inlined_pass_2 added
|
+ tcallnode.inlined_pass_2 added
|
||||||
|
@ -2371,12 +2371,6 @@ implementation
|
|||||||
'@' :
|
'@' :
|
||||||
begin
|
begin
|
||||||
readchar;
|
readchar;
|
||||||
if c='@' then
|
|
||||||
begin
|
|
||||||
readchar;
|
|
||||||
token:=_DOUBLEADDR;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
token:=_KLAMMERAFFE;
|
token:=_KLAMMERAFFE;
|
||||||
goto exit_label;
|
goto exit_label;
|
||||||
end;
|
end;
|
||||||
@ -2814,7 +2808,10 @@ exit_label:
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.59 2003-05-25 10:26:43 peter
|
Revision 1.60 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.59 2003/05/25 10:26:43 peter
|
||||||
* recursive include depth check
|
* recursive include depth check
|
||||||
|
|
||||||
Revision 1.58 2003/04/26 00:30:27 peter
|
Revision 1.58 2003/04/26 00:30:27 peter
|
||||||
|
@ -224,7 +224,6 @@ type
|
|||||||
oo_has_vmt, { the object/class has a vmt }
|
oo_has_vmt, { the object/class has a vmt }
|
||||||
oo_has_msgstr,
|
oo_has_msgstr,
|
||||||
oo_has_msgint,
|
oo_has_msgint,
|
||||||
oo_has_abstract, { the object/class has an abstract method => no instances can be created }
|
|
||||||
oo_can_have_published { the class has rtti, i.e. you can publish properties }
|
oo_can_have_published { the class has rtti, i.e. you can publish properties }
|
||||||
);
|
);
|
||||||
tobjectoptions=set of tobjectoption;
|
tobjectoptions=set of tobjectoption;
|
||||||
@ -356,7 +355,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.58 2003-06-25 18:31:23 peter
|
Revision 1.59 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.58 2003/06/25 18:31:23 peter
|
||||||
* sym,def resolving partly rewritten to support also parent objects
|
* sym,def resolving partly rewritten to support also parent objects
|
||||||
not directly available through the uses clause
|
not directly available through the uses clause
|
||||||
|
|
||||||
|
@ -67,7 +67,6 @@ type
|
|||||||
_SEMICOLON,
|
_SEMICOLON,
|
||||||
_KLAMMERAFFE,
|
_KLAMMERAFFE,
|
||||||
_POINTPOINT,
|
_POINTPOINT,
|
||||||
_DOUBLEADDR,
|
|
||||||
_EOF,
|
_EOF,
|
||||||
_ID,
|
_ID,
|
||||||
_NOID,
|
_NOID,
|
||||||
@ -291,7 +290,6 @@ const
|
|||||||
(str:';' ;special:true ;keyword:m_none;op:NOTOKEN),
|
(str:';' ;special:true ;keyword:m_none;op:NOTOKEN),
|
||||||
(str:'@' ;special:true ;keyword:m_none;op:NOTOKEN),
|
(str:'@' ;special:true ;keyword:m_none;op:NOTOKEN),
|
||||||
(str:'..' ;special:true ;keyword:m_none;op:NOTOKEN),
|
(str:'..' ;special:true ;keyword:m_none;op:NOTOKEN),
|
||||||
(str:'@@' ;special:true ;keyword:m_none;op:NOTOKEN),
|
|
||||||
(str:'end of file' ;special:true ;keyword:m_none;op:NOTOKEN),
|
(str:'end of file' ;special:true ;keyword:m_none;op:NOTOKEN),
|
||||||
(str:'identifier' ;special:true ;keyword:m_none;op:NOTOKEN),
|
(str:'identifier' ;special:true ;keyword:m_none;op:NOTOKEN),
|
||||||
(str:'non identifier';special:true ;keyword:m_none;op:NOTOKEN),
|
(str:'non identifier';special:true ;keyword:m_none;op:NOTOKEN),
|
||||||
@ -506,7 +504,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.21 2003-03-26 12:50:54 armin
|
Revision 1.22 2003-08-10 17:25:23 peter
|
||||||
|
* fixed some reported bugs
|
||||||
|
|
||||||
|
Revision 1.21 2003/03/26 12:50:54 armin
|
||||||
* avoid problems with the ide in init/dome
|
* avoid problems with the ide in init/dome
|
||||||
|
|
||||||
Revision 1.20 2002/11/29 22:31:21 carl
|
Revision 1.20 2002/11/29 22:31:21 carl
|
||||||
|
Loading…
Reference in New Issue
Block a user