mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-22 13:09:16 +02:00
- remove code to create an attribute using a synthetic function
git-svn-id: trunk@42396 -
This commit is contained in:
parent
402728239f
commit
a64a8f8deb
@ -47,7 +47,6 @@ interface
|
|||||||
procedure property_dec;
|
procedure property_dec;
|
||||||
procedure resourcestring_dec(out had_generic:boolean);
|
procedure resourcestring_dec(out had_generic:boolean);
|
||||||
procedure parse_rttiattributes(var rtti_attrs_def:trtti_attribute_list);
|
procedure parse_rttiattributes(var rtti_attrs_def:trtti_attribute_list);
|
||||||
procedure add_synthetic_rtti_function_declarations(rtti_attrs_def:trtti_attribute_list;name:shortstring);
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -519,28 +518,6 @@ implementation
|
|||||||
consume(_RECKKLAMMER);
|
consume(_RECKKLAMMER);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure add_synthetic_rtti_function_declarations(rtti_attrs_def:trtti_attribute_list;name:shortstring);
|
|
||||||
var
|
|
||||||
i : Integer;
|
|
||||||
sstate : tscannerstate;
|
|
||||||
attribute : trtti_attribute;
|
|
||||||
pd : tprocdef;
|
|
||||||
begin
|
|
||||||
name:=StringReplace(name,'.','_',[rfReplaceAll]);
|
|
||||||
for i:=0 to rtti_attrs_def.get_attribute_count-1 do
|
|
||||||
begin
|
|
||||||
attribute:=trtti_attribute(rtti_attrs_def.rtti_attributes[i]);
|
|
||||||
replace_scanner('rtti_class_attributes',sstate);
|
|
||||||
if str_parse_method_dec('function rtti_'+name+'_'+IntToStr(i)+':'+ attribute.typesym.Name +';',potype_function,false,tabstractrecorddef(ttypesym(attribute.typesym).typedef),pd) then
|
|
||||||
pd.synthetickind:=tsk_get_rttiattribute
|
|
||||||
else
|
|
||||||
internalerror(2012052601);
|
|
||||||
pd.skpara:=attribute;
|
|
||||||
attribute.symbolname:=pd.mangledname;
|
|
||||||
restore_scanner(sstate);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure types_dec(in_structure: boolean;out had_generic:boolean;var rtti_attrs_def: trtti_attribute_list);
|
procedure types_dec(in_structure: boolean;out had_generic:boolean;var rtti_attrs_def: trtti_attribute_list);
|
||||||
|
|
||||||
function determine_generic_def(name:tidstring):tstoreddef;
|
function determine_generic_def(name:tidstring):tstoreddef;
|
||||||
|
@ -465,8 +465,7 @@ type
|
|||||||
tsk_field_setter, // Setter for a field (callthrough property is passed in skpara)
|
tsk_field_setter, // Setter for a field (callthrough property is passed in skpara)
|
||||||
tsk_block_invoke_procvar, // Call a procvar to invoke inside a block
|
tsk_block_invoke_procvar, // Call a procvar to invoke inside a block
|
||||||
tsk_interface_wrapper, // Call through to a method from an interface wrapper
|
tsk_interface_wrapper, // Call through to a method from an interface wrapper
|
||||||
tsk_call_no_parameters, // Call skpara procedure without passing any parameters nor returning a result
|
tsk_call_no_parameters // Call skpara procedure without passing any parameters nor returning a result
|
||||||
tsk_get_rttiattribute // Create and return a TCustomAttribute instance
|
|
||||||
);
|
);
|
||||||
|
|
||||||
{ synthetic procdef supplementary information (tprocdef.skpara) }
|
{ synthetic procdef supplementary information (tprocdef.skpara) }
|
||||||
|
@ -1025,34 +1025,6 @@ implementation
|
|||||||
setverbosity('W+');
|
setverbosity('W+');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function get_attribute_code_block(pd: tprocdef) : tnode;
|
|
||||||
var
|
|
||||||
attribute: trtti_attribute;
|
|
||||||
load: tloadnode;
|
|
||||||
statement: tstatementnode;
|
|
||||||
assignment: tassignmentnode;
|
|
||||||
begin
|
|
||||||
attribute:=trtti_attribute(pd.skpara);
|
|
||||||
|
|
||||||
load := cloadnode.create(pd.funcretsym,pd.funcretsym.Owner);
|
|
||||||
assignment := cassignmentnode.create(load,Attribute.constructorcall.getcopy);
|
|
||||||
assignment.resultdef := voidtype;
|
|
||||||
|
|
||||||
statement := cstatementnode.Create(assignment,nil);
|
|
||||||
result := cblocknode.create(statement);
|
|
||||||
result.resultdef := voidtype;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure implement_get_attribute(pd: tprocdef);
|
|
||||||
var
|
|
||||||
old_parse_only: boolean;
|
|
||||||
begin
|
|
||||||
old_parse_only:=parse_only;
|
|
||||||
parse_only:=false;
|
|
||||||
read_proc(po_classmethod in pd.procoptions,pd,false,@get_attribute_code_block);
|
|
||||||
parse_only:=old_parse_only;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure add_synthetic_method_implementations_for_st(st: tsymtable);
|
procedure add_synthetic_method_implementations_for_st(st: tsymtable);
|
||||||
var
|
var
|
||||||
i : longint;
|
i : longint;
|
||||||
@ -1143,8 +1115,6 @@ implementation
|
|||||||
implement_interface_wrapper(pd);
|
implement_interface_wrapper(pd);
|
||||||
tsk_call_no_parameters:
|
tsk_call_no_parameters:
|
||||||
implement_call_no_parameters(pd);
|
implement_call_no_parameters(pd);
|
||||||
tsk_get_rttiattribute:
|
|
||||||
implement_get_attribute(pd);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -959,8 +959,7 @@ implementation
|
|||||||
if ((tsym(sym).owner.symtabletype<>localsymtable) or
|
if ((tsym(sym).owner.symtabletype<>localsymtable) or
|
||||||
(tprocdef(tsym(sym).owner.defowner).proctypeoption<>potype_constructor)) and
|
(tprocdef(tsym(sym).owner.defowner).proctypeoption<>potype_constructor)) and
|
||||||
not (po_noreturn in tprocdef(tsym(sym).owner.defowner).procoptions) and
|
not (po_noreturn in tprocdef(tsym(sym).owner.defowner).procoptions) and
|
||||||
not(cs_opt_nodedfa in current_settings.optimizerswitches) and
|
not(cs_opt_nodedfa in current_settings.optimizerswitches) then
|
||||||
(tprocdef(tsym(sym).owner.defowner).synthetickind <> tsk_get_rttiattribute) then
|
|
||||||
MessagePos(tsym(sym).fileinfo,sym_w_function_result_not_set)
|
MessagePos(tsym(sym).fileinfo,sym_w_function_result_not_set)
|
||||||
end
|
end
|
||||||
else if (tsym(sym).owner.symtabletype=parasymtable) then
|
else if (tsym(sym).owner.symtabletype=parasymtable) then
|
||||||
|
Loading…
Reference in New Issue
Block a user