mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 20:09:27 +02:00
+ basic variant type support in the compiler
This commit is contained in:
parent
54b50c539a
commit
82a6a7ed95
@ -113,6 +113,7 @@ const
|
|||||||
iblongstringdef = 54;
|
iblongstringdef = 54;
|
||||||
ibansistringdef = 55;
|
ibansistringdef = 55;
|
||||||
ibwidestringdef = 56;
|
ibwidestringdef = 56;
|
||||||
|
ibvariantdef = 57;
|
||||||
|
|
||||||
{ unit flags }
|
{ unit flags }
|
||||||
uf_init = $1;
|
uf_init = $1;
|
||||||
@ -889,7 +890,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.6 2000-12-07 17:19:43 jonas
|
Revision 1.7 2001-03-22 00:10:58 florian
|
||||||
|
+ basic variant type support in the compiler
|
||||||
|
|
||||||
|
Revision 1.6 2000/12/07 17:19:43 jonas
|
||||||
* new constant handling: from now on, hex constants >$7fffffff are
|
* new constant handling: from now on, hex constants >$7fffffff are
|
||||||
parsed as unsigned constants (otherwise, $80000000 got sign extended
|
parsed as unsigned constants (otherwise, $80000000 got sign extended
|
||||||
and became $ffffffff80000000), all constants in the longint range
|
and became $ffffffff80000000), all constants in the longint range
|
||||||
|
@ -110,6 +110,7 @@ begin
|
|||||||
p^.insert(new(ptypesym,initdef('$void_farpointer',voidfarpointerdef)));
|
p^.insert(new(ptypesym,initdef('$void_farpointer',voidfarpointerdef)));
|
||||||
p^.insert(new(ptypesym,initdef('$openchararray',openchararraydef)));
|
p^.insert(new(ptypesym,initdef('$openchararray',openchararraydef)));
|
||||||
p^.insert(new(ptypesym,initdef('$file',cfiledef)));
|
p^.insert(new(ptypesym,initdef('$file',cfiledef)));
|
||||||
|
p^.insert(new(ptypesym,initdef('$variant',cvariantdef)));
|
||||||
p^.insert(new(ptypesym,initdef('$s32real',s32floatdef)));
|
p^.insert(new(ptypesym,initdef('$s32real',s32floatdef)));
|
||||||
p^.insert(new(ptypesym,initdef('$s64real',s64floatdef)));
|
p^.insert(new(ptypesym,initdef('$s64real',s64floatdef)));
|
||||||
p^.insert(new(ptypesym,initdef('$s80real',s80floatdef)));
|
p^.insert(new(ptypesym,initdef('$s80real',s80floatdef)));
|
||||||
@ -162,6 +163,7 @@ begin
|
|||||||
p^.insert(new(ptypesym,initdef('QWord',cu64bitdef)));
|
p^.insert(new(ptypesym,initdef('QWord',cu64bitdef)));
|
||||||
p^.insert(new(ptypesym,initdef('Int64',cs64bitdef)));
|
p^.insert(new(ptypesym,initdef('Int64',cs64bitdef)));
|
||||||
p^.insert(new(ptypesym,initdef('TypedFile',new(pfiledef,inittypeddef(voiddef)))));
|
p^.insert(new(ptypesym,initdef('TypedFile',new(pfiledef,inittypeddef(voiddef)))));
|
||||||
|
p^.insert(new(ptypesym,initdef('Variant',cvariantdef)));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -198,6 +200,7 @@ begin
|
|||||||
voidfarpointerdef:=ppointerdef(globaldef('void_farpointer'));
|
voidfarpointerdef:=ppointerdef(globaldef('void_farpointer'));
|
||||||
cfiledef:=pfiledef(globaldef('file'));
|
cfiledef:=pfiledef(globaldef('file'));
|
||||||
pvmtdef:=ppointerdef(globaldef('pvmt'));
|
pvmtdef:=ppointerdef(globaldef('pvmt'));
|
||||||
|
cvariantdef:=pvariantdef(globaldef('variant'));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -252,6 +255,7 @@ begin
|
|||||||
charpointerdef:=new(ppointerdef,initdef(cchardef));
|
charpointerdef:=new(ppointerdef,initdef(cchardef));
|
||||||
voidfarpointerdef:=new(ppointerdef,initfardef(voiddef));
|
voidfarpointerdef:=new(ppointerdef,initfardef(voiddef));
|
||||||
cfiledef:=new(pfiledef,inituntyped);
|
cfiledef:=new(pfiledef,inituntyped);
|
||||||
|
cvariantdef:=new(pvariantdef,init);
|
||||||
registerdef:=oldregisterdef;
|
registerdef:=oldregisterdef;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -259,7 +263,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.11 2000-12-07 17:19:43 jonas
|
Revision 1.12 2001-03-22 00:10:58 florian
|
||||||
|
+ basic variant type support in the compiler
|
||||||
|
|
||||||
|
Revision 1.11 2000/12/07 17:19:43 jonas
|
||||||
* new constant handling: from now on, hex constants >$7fffffff are
|
* new constant handling: from now on, hex constants >$7fffffff are
|
||||||
parsed as unsigned constants (otherwise, $80000000 got sign extended
|
parsed as unsigned constants (otherwise, $80000000 got sign extended
|
||||||
and became $ffffffff80000000), all constants in the longint range
|
and became $ffffffff80000000), all constants in the longint range
|
||||||
|
@ -390,7 +390,7 @@ type
|
|||||||
tdeftype = (abstractdef,arraydef,recorddef,pointerdef,orddef,
|
tdeftype = (abstractdef,arraydef,recorddef,pointerdef,orddef,
|
||||||
stringdef,enumdef,procdef,objectdef,errordef,
|
stringdef,enumdef,procdef,objectdef,errordef,
|
||||||
filedef,formaldef,setdef,procvardef,floatdef,
|
filedef,formaldef,setdef,procvardef,floatdef,
|
||||||
classrefdef,forwarddef);
|
classrefdef,forwarddef,variantdef);
|
||||||
|
|
||||||
{ possible types for symtable entries }
|
{ possible types for symtable entries }
|
||||||
tsymtyp = (abstractsym,varsym,typesym,procsym,unitsym,
|
tsymtyp = (abstractsym,varsym,typesym,procsym,unitsym,
|
||||||
@ -455,7 +455,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.13 2001-02-26 19:44:55 peter
|
Revision 1.14 2001-03-22 00:10:58 florian
|
||||||
|
+ basic variant type support in the compiler
|
||||||
|
|
||||||
|
Revision 1.13 2001/02/26 19:44:55 peter
|
||||||
* merged generic m68k updates from fixes branch
|
* merged generic m68k updates from fixes branch
|
||||||
|
|
||||||
Revision 1.12 2000/11/04 14:25:21 florian
|
Revision 1.12 2000/11/04 14:25:21 florian
|
||||||
|
@ -138,6 +138,16 @@ interface
|
|||||||
{$endif GDB}
|
{$endif GDB}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
pvariantdef = ^tvariantdef;
|
||||||
|
tvariantdef = object(tstoreddef)
|
||||||
|
constructor init;
|
||||||
|
constructor load;
|
||||||
|
procedure write;virtual;
|
||||||
|
procedure setsize;
|
||||||
|
function needs_inittable : boolean;virtual;
|
||||||
|
procedure write_rtti_data;virtual;
|
||||||
|
end;
|
||||||
|
|
||||||
pformaldef = ^tformaldef;
|
pformaldef = ^tformaldef;
|
||||||
tformaldef = object(tstoreddef)
|
tformaldef = object(tstoreddef)
|
||||||
constructor init;
|
constructor init;
|
||||||
@ -649,6 +659,8 @@ interface
|
|||||||
cfiledef : pfiledef; { get the same definition for all file }
|
cfiledef : pfiledef; { get the same definition for all file }
|
||||||
{ used for stabs }
|
{ used for stabs }
|
||||||
|
|
||||||
|
cvariantdef : pvariantdef; { we use only one variant def }
|
||||||
|
|
||||||
class_tobject : pobjectdef; { pointer to the anchestor of all classes }
|
class_tobject : pobjectdef; { pointer to the anchestor of all classes }
|
||||||
interface_iunknown : pobjectdef; { KAZ: pointer to the ancestor }
|
interface_iunknown : pobjectdef; { KAZ: pointer to the ancestor }
|
||||||
rec_tguid : precorddef; { KAZ: pointer to the TGUID type }
|
rec_tguid : precorddef; { KAZ: pointer to the TGUID type }
|
||||||
@ -2111,6 +2123,49 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{****************************************************************************
|
||||||
|
TVARIANTDEF
|
||||||
|
****************************************************************************}
|
||||||
|
|
||||||
|
constructor tvariantdef.init;
|
||||||
|
begin
|
||||||
|
inherited init;
|
||||||
|
deftype:=variantdef;
|
||||||
|
setsize;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
constructor tvariantdef.load;
|
||||||
|
begin
|
||||||
|
inherited load;
|
||||||
|
deftype:=variantdef;
|
||||||
|
setsize;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure tvariantdef.write;
|
||||||
|
begin
|
||||||
|
inherited write;
|
||||||
|
current_ppu^.writeentry(ibvariantdef);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure tvariantdef.setsize;
|
||||||
|
begin
|
||||||
|
savesize:=16;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure tvariantdef.write_rtti_data;
|
||||||
|
begin
|
||||||
|
rttiList.concat(Tai_const.Create_8bit(tkVariant));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function tvariantdef.needs_inittable : boolean;
|
||||||
|
begin
|
||||||
|
needs_inittable:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
{****************************************************************************
|
{****************************************************************************
|
||||||
TPOINTERDEF
|
TPOINTERDEF
|
||||||
@ -5565,7 +5620,10 @@ Const local_symtable_index : longint = $8001;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.21 2001-03-11 22:58:50 peter
|
Revision 1.22 2001-03-22 00:10:58 florian
|
||||||
|
+ basic variant type support in the compiler
|
||||||
|
|
||||||
|
Revision 1.21 2001/03/11 22:58:50 peter
|
||||||
* getsym redesign, removed the globals srsym,srsymtable
|
* getsym redesign, removed the globals srsym,srsymtable
|
||||||
|
|
||||||
Revision 1.20 2001/01/06 20:11:29 peter
|
Revision 1.20 2001/01/06 20:11:29 peter
|
||||||
|
@ -540,6 +540,7 @@ implementation
|
|||||||
ibfiledef : hp:=new(pfiledef,load);
|
ibfiledef : hp:=new(pfiledef,load);
|
||||||
ibclassrefdef : hp:=new(pclassrefdef,load);
|
ibclassrefdef : hp:=new(pclassrefdef,load);
|
||||||
ibformaldef : hp:=new(pformaldef,load);
|
ibformaldef : hp:=new(pformaldef,load);
|
||||||
|
ibvariantdef : hp:=new(pvariantdef,load);
|
||||||
ibenddefs : break;
|
ibenddefs : break;
|
||||||
ibend : Message(unit_f_ppu_read_error);
|
ibend : Message(unit_f_ppu_read_error);
|
||||||
else
|
else
|
||||||
@ -2375,7 +2376,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.28 2001-03-13 18:45:07 peter
|
Revision 1.29 2001-03-22 00:10:58 florian
|
||||||
|
+ basic variant type support in the compiler
|
||||||
|
|
||||||
|
Revision 1.28 2001/03/13 18:45:07 peter
|
||||||
* fixed some memory leaks
|
* fixed some memory leaks
|
||||||
|
|
||||||
Revision 1.27 2001/03/11 22:58:51 peter
|
Revision 1.27 2001/03/11 22:58:51 peter
|
||||||
|
Loading…
Reference in New Issue
Block a user