summaryrefslogtreecommitdiff
path: root/compiler/pdecsub.pas
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-01-05 16:26:29 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-01-05 16:26:29 +0000
commitd91ce7e3d1e1785074539bf2aac8b99c9e859724 (patch)
tree8799139203c7f42974d7c7ad940fd1ebb75d89ca /compiler/pdecsub.pas
parentde020ceeb371755b410c089fca88f1c25455d878 (diff)
downloadfpc-d91ce7e3d1e1785074539bf2aac8b99c9e859724.tar.gz
* moved handle_calling_convention() to pparautl
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@40772 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/pdecsub.pas')
-rw-r--r--compiler/pdecsub.pas135
1 files changed, 0 insertions, 135 deletions
diff --git a/compiler/pdecsub.pas b/compiler/pdecsub.pas
index 2e39c22cc8..b9f93985cc 100644
--- a/compiler/pdecsub.pas
+++ b/compiler/pdecsub.pas
@@ -55,23 +55,12 @@ interface
);
tpdflags=set of tpdflag;
- // flags of handle_calling_convention routine
- thccflag=(
- hcc_check, // perform checks and outup errors if found
- hcc_insert_hidden_paras // insert hidden parameters
- );
- thccflags=set of thccflag;
- const
- hcc_all=[hcc_check,hcc_insert_hidden_paras];
-
function check_proc_directive(isprocvar:boolean):boolean;
function proc_add_definition(var currpd:tprocdef):boolean;
function proc_get_importname(pd:tprocdef):string;
procedure proc_set_mangledname(pd:tprocdef);
- procedure handle_calling_convention(pd:tabstractprocdef;flags:thccflags=hcc_all);
-
procedure parse_parameter_dec(pd:tabstractprocdef);
procedure parse_proc_directives(pd:tabstractprocdef;var pdflags:tpdflags);
procedure parse_var_proc_directives(sym:tsym);
@@ -223,19 +212,6 @@ implementation
end;
- procedure set_addr_param_regable(p:TObject;arg:pointer);
- begin
- if (tsym(p).typ<>paravarsym) then
- exit;
- with tparavarsym(p) do
- begin
- if (not needs_finalization) and
- paramanager.push_addr_param(varspez,vardef,tprocdef(arg).proccalloption) then
- varregable:=vr_addr;
- end;
- end;
-
-
procedure parse_parameter_dec(pd:tabstractprocdef);
{
handle_procvar needs the same changes
@@ -3279,117 +3255,6 @@ const
end;
- procedure handle_calling_convention(pd:tabstractprocdef;flags:thccflags=hcc_all);
- begin
- if hcc_check in flags then
- begin
- { set the default calling convention if none provided }
- if (pd.typ=procdef) and
- (is_objc_class_or_protocol(tprocdef(pd).struct) or
- is_cppclass(tprocdef(pd).struct)) then
- begin
- { none of the explicit calling conventions should be allowed }
- if (po_hascallingconvention in pd.procoptions) then
- internalerror(2009032501);
- if is_cppclass(tprocdef(pd).struct) then
- pd.proccalloption:=pocall_cppdecl
- else
- pd.proccalloption:=pocall_cdecl;
- end
- else if not(po_hascallingconvention in pd.procoptions) then
- pd.proccalloption:=current_settings.defproccall
- else
- begin
- if pd.proccalloption=pocall_none then
- internalerror(200309081);
- end;
-
- { handle proccall specific settings }
- case pd.proccalloption of
- pocall_cdecl,
- pocall_cppdecl,
- pocall_sysv_abi_cdecl,
- pocall_ms_abi_cdecl:
- begin
- { check C cdecl para types }
- check_c_para(pd);
- end;
- pocall_far16 :
- begin
- { Temporary stub, must be rewritten to support OS/2 far16 }
- Message1(parser_w_proc_directive_ignored,'FAR16');
- end;
- end;
-
- { Inlining is enabled and supported? }
- if (po_inline in pd.procoptions) and
- not(cs_do_inline in current_settings.localswitches) then
- begin
- { Give an error if inline is not supported by the compiler mode,
- otherwise only give a hint that this procedure will not be inlined }
- if not(m_default_inline in current_settings.modeswitches) then
- Message(parser_e_proc_inline_not_supported)
- else
- Message(parser_h_inlining_disabled);
- exclude(pd.procoptions,po_inline);
- end;
-
- { For varargs directive also cdecl and external must be defined }
- if (po_varargs in pd.procoptions) then
- begin
- { check first for external in the interface, if available there
- then the cdecl must also be there since there is no implementation
- available to contain it }
- if parse_only then
- begin
- { if external is available, then cdecl must also be available,
- procvars don't need external }
- if not((po_external in pd.procoptions) or
- (pd.typ=procvardef) or
- { for objcclasses this is checked later, because the entire
- class may be external. }
- is_objc_class_or_protocol(tprocdef(pd).struct)) and
- not(pd.proccalloption in (cdecl_pocalls + [pocall_stdcall])) then
- Message(parser_e_varargs_need_cdecl_and_external);
- end
- else
- begin
- { both must be defined now }
- if not((po_external in pd.procoptions) or
- (pd.typ=procvardef)) or
- not(pd.proccalloption in (cdecl_pocalls + [pocall_stdcall])) then
- Message(parser_e_varargs_need_cdecl_and_external);
- end;
- end;
- end;
-
- if hcc_insert_hidden_paras in flags then
- begin
- { insert hidden high parameters }
- pd.parast.SymList.ForEachCall(@insert_hidden_para,pd);
-
- { insert hidden self parameter }
- insert_self_and_vmt_para(pd);
-
- { insert funcret parameter if required }
- insert_funcret_para(pd);
-
- { Make var parameters regable, this must be done after the calling
- convention is set. }
- { this must be done before parentfp is insert, because getting all cases
- where parentfp must be in a memory location isn't catched properly so
- we put parentfp never in a register }
- pd.parast.SymList.ForEachCall(@set_addr_param_regable,pd);
-
- { insert parentfp parameter if required }
- insert_parentfp_para(pd);
- end;
-
- { Calculate parameter tlist }
- pd.calcparas;
- end;
-
-
procedure parse_proc_directives(pd:tabstractprocdef;var pdflags:tpdflags);
{
Parse the procedure directives. It does not matter if procedure directives