|
@@ -587,12 +587,50 @@
|
|
|
|
|
|
destructor tpropertysym.done;
|
|
destructor tpropertysym.done;
|
|
|
|
|
|
|
|
+ procedure disposepropsymlist(p:ppropsymlist);
|
|
|
|
+ var
|
|
|
|
+ hp : ppropsymlist;
|
|
|
|
+ begin
|
|
|
|
+ while assigned(p) do
|
|
|
|
+ begin
|
|
|
|
+ hp:=p;
|
|
|
|
+ p:=p^.next;
|
|
|
|
+ dispose(hp);
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+
|
|
begin
|
|
begin
|
|
|
|
+ disposepropsymlist(readaccesssym);
|
|
|
|
+ disposepropsymlist(writeaccesssym);
|
|
|
|
+ disposepropsymlist(storedsym);
|
|
inherited done;
|
|
inherited done;
|
|
end;
|
|
end;
|
|
|
|
|
|
constructor tpropertysym.load;
|
|
constructor tpropertysym.load;
|
|
|
|
|
|
|
|
+ function readpropsymlist:ppropsymlist;
|
|
|
|
+ var
|
|
|
|
+ root,last,p : ppropsymlist;
|
|
|
|
+ sym : psym;
|
|
|
|
+ begin
|
|
|
|
+ root:=nil;
|
|
|
|
+ last:=nil;
|
|
|
|
+ repeat
|
|
|
|
+ sym:=readsymref;
|
|
|
|
+ if sym=nil then
|
|
|
|
+ break;
|
|
|
|
+ new(p);
|
|
|
|
+ p^.sym:=sym;
|
|
|
|
+ p^.next:=nil;
|
|
|
|
+ if assigned(last) then
|
|
|
|
+ last^.next:=p
|
|
|
|
+ else
|
|
|
|
+ root:=p;
|
|
|
|
+ last:=p;
|
|
|
|
+ until false;
|
|
|
|
+ readpropsymlist:=root;
|
|
|
|
+ end;
|
|
|
|
+
|
|
begin
|
|
begin
|
|
inherited load;
|
|
inherited load;
|
|
typ:=propertysym;
|
|
typ:=propertysym;
|
|
@@ -600,11 +638,11 @@
|
|
readsmallset(propoptions);
|
|
readsmallset(propoptions);
|
|
index:=readlong;
|
|
index:=readlong;
|
|
default:=readlong;
|
|
default:=readlong;
|
|
- { it's hack ... }
|
|
|
|
- readaccesssym:=readsymref;
|
|
|
|
- writeaccesssym:=readsymref;
|
|
|
|
- storedsym:=readsymref;
|
|
|
|
- { now the defs: }
|
|
|
|
|
|
+ { the syms }
|
|
|
|
+ readaccesssym:=readpropsymlist;
|
|
|
|
+ writeaccesssym:=readpropsymlist;
|
|
|
|
+ storedsym:=readpropsymlist;
|
|
|
|
+ { now the defs }
|
|
readaccessdef:=readdefref;
|
|
readaccessdef:=readdefref;
|
|
writeaccessdef:=readdefref;
|
|
writeaccessdef:=readdefref;
|
|
storeddef:=readdefref;
|
|
storeddef:=readdefref;
|
|
@@ -612,14 +650,23 @@
|
|
|
|
|
|
procedure tpropertysym.deref;
|
|
procedure tpropertysym.deref;
|
|
|
|
|
|
|
|
+ procedure resolvepropsymlist(p:ppropsymlist);
|
|
|
|
+ begin
|
|
|
|
+ while assigned(p) do
|
|
|
|
+ begin
|
|
|
|
+ resolvesym(p^.sym);
|
|
|
|
+ p:=p^.next;
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+
|
|
begin
|
|
begin
|
|
resolvedef(proptype);
|
|
resolvedef(proptype);
|
|
resolvedef(readaccessdef);
|
|
resolvedef(readaccessdef);
|
|
resolvedef(writeaccessdef);
|
|
resolvedef(writeaccessdef);
|
|
resolvedef(storeddef);
|
|
resolvedef(storeddef);
|
|
- resolvesym(readaccesssym);
|
|
|
|
- resolvesym(writeaccesssym);
|
|
|
|
- resolvesym(storedsym);
|
|
|
|
|
|
+ resolvepropsymlist(readaccesssym);
|
|
|
|
+ resolvepropsymlist(writeaccesssym);
|
|
|
|
+ resolvepropsymlist(storedsym);
|
|
end;
|
|
end;
|
|
|
|
|
|
function tpropertysym.getsize : longint;
|
|
function tpropertysym.getsize : longint;
|
|
@@ -630,15 +677,25 @@
|
|
|
|
|
|
procedure tpropertysym.write;
|
|
procedure tpropertysym.write;
|
|
|
|
|
|
|
|
+ procedure writepropsymlist(p:ppropsymlist);
|
|
|
|
+ begin
|
|
|
|
+ while assigned(p) do
|
|
|
|
+ begin
|
|
|
|
+ writesymref(p^.sym);
|
|
|
|
+ p:=p^.next;
|
|
|
|
+ end;
|
|
|
|
+ writesymref(nil);
|
|
|
|
+ end;
|
|
|
|
+
|
|
begin
|
|
begin
|
|
tsym.write;
|
|
tsym.write;
|
|
writedefref(proptype);
|
|
writedefref(proptype);
|
|
writesmallset(propoptions);
|
|
writesmallset(propoptions);
|
|
writelong(index);
|
|
writelong(index);
|
|
writelong(default);
|
|
writelong(default);
|
|
- writesymref(readaccesssym);
|
|
|
|
- writesymref(writeaccesssym);
|
|
|
|
- writesymref(storedsym);
|
|
|
|
|
|
+ writepropsymlist(readaccesssym);
|
|
|
|
+ writepropsymlist(writeaccesssym);
|
|
|
|
+ writepropsymlist(storedsym);
|
|
writedefref(readaccessdef);
|
|
writedefref(readaccessdef);
|
|
writedefref(writeaccessdef);
|
|
writedefref(writeaccessdef);
|
|
writedefref(storeddef);
|
|
writedefref(storeddef);
|
|
@@ -1052,7 +1109,7 @@
|
|
|
|
|
|
function tvarsym.getsize : longint;
|
|
function tvarsym.getsize : longint;
|
|
begin
|
|
begin
|
|
- if assigned(definition) and (varspez=vs_value) and
|
|
|
|
|
|
+ if assigned(definition) and (varspez=vs_value) and
|
|
((definition^.deftype<>arraydef) or (Parraydef(definition)^.highrange>=
|
|
((definition^.deftype<>arraydef) or (Parraydef(definition)^.highrange>=
|
|
Parraydef(definition)^.lowrange)) then
|
|
Parraydef(definition)^.lowrange)) then
|
|
getsize:=definition^.size
|
|
getsize:=definition^.size
|
|
@@ -2104,7 +2161,10 @@
|
|
|
|
|
|
{
|
|
{
|
|
$Log$
|
|
$Log$
|
|
- Revision 1.112 1999-08-13 14:24:20 pierre
|
|
|
|
|
|
+ Revision 1.113 1999-08-14 00:39:00 peter
|
|
|
|
+ * hack to support property with record fields
|
|
|
|
+
|
|
|
|
+ Revision 1.112 1999/08/13 14:24:20 pierre
|
|
+ stabs for classes and classref working,
|
|
+ stabs for classes and classref working,
|
|
a class still needs an ^ to get that content of it,
|
|
a class still needs an ^ to get that content of it,
|
|
but the class fields inside a class don't result into an
|
|
but the class fields inside a class don't result into an
|