+ basic variant type support in the compiler

This commit is contained in:
florian 2001-03-22 00:10:58 +00:00
parent 54b50c539a
commit 82a6a7ed95
5 changed files with 84 additions and 8 deletions

View File

@ -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
}
}

View File

@ -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

View File

@ -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
}
}

View File

@ -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

View File

@ -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