mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 11:49:23 +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;
|
||||
ibansistringdef = 55;
|
||||
ibwidestringdef = 56;
|
||||
ibvariantdef = 57;
|
||||
|
||||
{ unit flags }
|
||||
uf_init = $1;
|
||||
@ -889,7 +890,10 @@ end;
|
||||
end.
|
||||
{
|
||||
$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
|
||||
parsed as unsigned constants (otherwise, $80000000 got sign extended
|
||||
and became $ffffffff80000000), all constants in the longint range
|
||||
@ -913,4 +917,4 @@ end.
|
||||
Revision 1.2 2000/07/13 11:32:45 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -110,6 +110,7 @@ begin
|
||||
p^.insert(new(ptypesym,initdef('$void_farpointer',voidfarpointerdef)));
|
||||
p^.insert(new(ptypesym,initdef('$openchararray',openchararraydef)));
|
||||
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('$s64real',s64floatdef)));
|
||||
p^.insert(new(ptypesym,initdef('$s80real',s80floatdef)));
|
||||
@ -162,6 +163,7 @@ begin
|
||||
p^.insert(new(ptypesym,initdef('QWord',cu64bitdef)));
|
||||
p^.insert(new(ptypesym,initdef('Int64',cs64bitdef)));
|
||||
p^.insert(new(ptypesym,initdef('TypedFile',new(pfiledef,inittypeddef(voiddef)))));
|
||||
p^.insert(new(ptypesym,initdef('Variant',cvariantdef)));
|
||||
end;
|
||||
|
||||
|
||||
@ -198,6 +200,7 @@ begin
|
||||
voidfarpointerdef:=ppointerdef(globaldef('void_farpointer'));
|
||||
cfiledef:=pfiledef(globaldef('file'));
|
||||
pvmtdef:=ppointerdef(globaldef('pvmt'));
|
||||
cvariantdef:=pvariantdef(globaldef('variant'));
|
||||
end;
|
||||
|
||||
|
||||
@ -252,6 +255,7 @@ begin
|
||||
charpointerdef:=new(ppointerdef,initdef(cchardef));
|
||||
voidfarpointerdef:=new(ppointerdef,initfardef(voiddef));
|
||||
cfiledef:=new(pfiledef,inituntyped);
|
||||
cvariantdef:=new(pvariantdef,init);
|
||||
registerdef:=oldregisterdef;
|
||||
end;
|
||||
|
||||
@ -259,7 +263,10 @@ end;
|
||||
end.
|
||||
{
|
||||
$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
|
||||
parsed as unsigned constants (otherwise, $80000000 got sign extended
|
||||
and became $ffffffff80000000), all constants in the longint range
|
||||
|
@ -390,7 +390,7 @@ type
|
||||
tdeftype = (abstractdef,arraydef,recorddef,pointerdef,orddef,
|
||||
stringdef,enumdef,procdef,objectdef,errordef,
|
||||
filedef,formaldef,setdef,procvardef,floatdef,
|
||||
classrefdef,forwarddef);
|
||||
classrefdef,forwarddef,variantdef);
|
||||
|
||||
{ possible types for symtable entries }
|
||||
tsymtyp = (abstractsym,varsym,typesym,procsym,unitsym,
|
||||
@ -455,7 +455,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$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
|
||||
|
||||
Revision 1.12 2000/11/04 14:25:21 florian
|
||||
@ -488,4 +491,4 @@ end.
|
||||
Revision 1.2 2000/07/13 11:32:49 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -138,6 +138,16 @@ interface
|
||||
{$endif GDB}
|
||||
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;
|
||||
tformaldef = object(tstoreddef)
|
||||
constructor init;
|
||||
@ -649,6 +659,8 @@ interface
|
||||
cfiledef : pfiledef; { get the same definition for all file }
|
||||
{ used for stabs }
|
||||
|
||||
cvariantdef : pvariantdef; { we use only one variant def }
|
||||
|
||||
class_tobject : pobjectdef; { pointer to the anchestor of all classes }
|
||||
interface_iunknown : pobjectdef; { KAZ: pointer to the ancestor }
|
||||
rec_tguid : precorddef; { KAZ: pointer to the TGUID type }
|
||||
@ -2111,6 +2123,49 @@ implementation
|
||||
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
|
||||
@ -5565,7 +5620,10 @@ Const local_symtable_index : longint = $8001;
|
||||
end.
|
||||
{
|
||||
$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
|
||||
|
||||
Revision 1.20 2001/01/06 20:11:29 peter
|
||||
|
@ -540,6 +540,7 @@ implementation
|
||||
ibfiledef : hp:=new(pfiledef,load);
|
||||
ibclassrefdef : hp:=new(pclassrefdef,load);
|
||||
ibformaldef : hp:=new(pformaldef,load);
|
||||
ibvariantdef : hp:=new(pvariantdef,load);
|
||||
ibenddefs : break;
|
||||
ibend : Message(unit_f_ppu_read_error);
|
||||
else
|
||||
@ -2375,7 +2376,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$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
|
||||
|
||||
Revision 1.27 2001/03/11 22:58:51 peter
|
||||
|
Loading…
Reference in New Issue
Block a user