From 5a2a9f1dcccabea3746dafe30dd94116f28b4aaa Mon Sep 17 00:00:00 2001 From: nickysn Date: Sat, 2 Jan 2021 12:44:34 +0000 Subject: [PATCH] * simplified a_call_name and avoid internal errors, inherited from the jvm code generator git-svn-id: branches/wasm@47969 - --- compiler/wasm32/hlcgcpu.pas | 81 +------------------------------------ 1 file changed, 2 insertions(+), 79 deletions(-) diff --git a/compiler/wasm32/hlcgcpu.pas b/compiler/wasm32/hlcgcpu.pas index c2cb11d85f..d286122519 100644 --- a/compiler/wasm32/hlcgcpu.pas +++ b/compiler/wasm32/hlcgcpu.pas @@ -62,7 +62,6 @@ uses procedure a_load_const_cgpara(list : TAsmList;tosize : tdef;a : tcgint;const cgpara : TCGPara);override; function a_call_name(list : TAsmList;pd : tprocdef;const s : TSymStr; const paras: array of pcgpara; forceresdef: tdef; weak: boolean): tcgpara;override; - function a_call_name_inherited(list : TAsmList;pd : tprocdef;const s : TSymStr; const paras: array of pcgpara): tcgpara;override; function a_call_reg(list: TAsmList; pd: tabstractprocdef; reg: tregister; const paras: array of pcgpara): tcgpara; override; { move instructions - a_load_FROM_TO } @@ -235,8 +234,6 @@ uses { in case of an OS_32 OP_DIV, we have to use an OS_S64 OP_IDIV because the JVM does not support unsigned divisions } procedure maybepreparedivu32(list: TAsmList; var op: topcg; size: tdef; out isdivu32: boolean); - { common implementation of a_call_* } - function a_call_name_intern(list : TAsmList;pd : tprocdef;const s : TSymStr; forceresdef: tdef; inheritedcall: boolean): tcgpara; { concatcopy helpers } procedure concatcopy_normal_array(list: TAsmList; size: tdef; const source, dest: treference); @@ -374,12 +371,8 @@ implementation function thlcgwasm.a_call_name(list: TAsmList; pd: tprocdef; const s: TSymStr; const paras: array of pcgpara; forceresdef: tdef; weak: boolean): tcgpara; begin - result:=a_call_name_intern(list,pd,s,forceresdef,false); - end; - - function thlcgwasm.a_call_name_inherited(list: TAsmList; pd: tprocdef; const s: TSymStr; const paras: array of pcgpara): tcgpara; - begin - result:=a_call_name_intern(list,pd,s,nil,true); + list.concat(taicpu.op_sym(a_call,current_asmdata.RefAsmSymbol(s,AT_FUNCTION))); + result:=get_call_result_cgpara(pd,forceresdef); end; @@ -2549,76 +2542,6 @@ implementation isdivu32:=false; end; - function thlcgwasm.a_call_name_intern(list: TAsmList; pd: tprocdef; const s: TSymStr; forceresdef: tdef; inheritedcall: boolean): tcgpara; - var - opc: tasmop; - begin - { - invoke types: - * invokeinterface: call method from an interface (must also specify - number of parameters in terms of stack slot count!) - * invokespecial: invoke a constructor, method in a superclass, - or private instance method - * invokestatic: invoke a class method (private or not) - * invokevirtual: invoke a regular method - } - case pd.owner.symtabletype of - globalsymtable, - staticsymtable, - localsymtable: - { regular and nested procedures are turned into static methods } - opc:=a_call; - objectsymtable: - begin - Internalerror(2019083004); // no support for symbol table calls - opc:=a_call_indirect; // todo: need a reference to a (funccall) table - - //case tobjectdef(pd.owner.defowner).objecttype of - // - // odt_javaclass: - // begin - // if (po_classmethod in pd.procoptions) or - // (pd.proctypeoption=potype_operator) then - // opc:=a_invokestatic - // else if (pd.visibility=vis_strictprivate) or - // (pd.proctypeoption=potype_constructor) or - // inheritedcall then - // opc:=a_invokespecial - // else - // opc:=a_invokevirtual; - // end; - // odt_interfacejava: - // { static interface methods are not allowed } - // opc:=a_invokeinterface; - // else - // internalerror(2010122601); - //end; - end; - recordsymtable: - begin - if (po_staticmethod in pd.procoptions) or - (pd.proctypeoption=potype_operator) then - opc:=a_call - else if (pd.visibility=vis_strictprivate) or - (pd.proctypeoption=potype_constructor) or - inheritedcall then - opc:=a_call - else - opc:=a_call_indirect; - end - else - internalerror(2010122602); - end; - if (opc<>a_call_indirect) then - list.concat(taicpu.op_sym(opc,current_asmdata.RefAsmSymbol(s,AT_FUNCTION))) - else - begin - pd.init_paraloc_info(calleeside); - list.concat(taicpu.op_sym_const(opc,current_asmdata.RefAsmSymbol(s,AT_FUNCTION),pd.calleeargareasize)); - end; - result:=get_call_result_cgpara(pd,forceresdef); - end; - procedure create_hlcodegen_cpu; begin hlcg:=thlcgwasm.create;