Browse Source

- removed several JVM methods that aren't necessary for WebAssembly

git-svn-id: branches/wasm@48058 -
nickysn 4 years ago
parent
commit
5b961c4125
2 changed files with 0 additions and 276 deletions
  1. 0 233
      compiler/wasm32/hlcgcpu.pas
  2. 0 43
      compiler/wasm32/symcpu.pas

+ 0 - 233
compiler/wasm32/hlcgcpu.pas

@@ -109,7 +109,6 @@ uses
       procedure record_generated_code_for_procdef(pd: tprocdef; code, data: TAsmList); override;
       procedure record_generated_code_for_procdef(pd: tprocdef; code, data: TAsmList); override;
 
 
       procedure g_incrrefcount(list : TAsmList;t: tdef; const ref: treference);override;
       procedure g_incrrefcount(list : TAsmList;t: tdef; const ref: treference);override;
-      procedure g_array_rtti_helper(list: TAsmList; t: tdef; const ref: treference; const highloc: tlocation; const name: string); override;
       procedure g_initialize(list : TAsmList;t : tdef;const ref : treference);override;
       procedure g_initialize(list : TAsmList;t : tdef;const ref : treference);override;
       procedure g_finalize(list : TAsmList;t : tdef;const ref : treference);override;
       procedure g_finalize(list : TAsmList;t : tdef;const ref : treference);override;
 
 
@@ -121,8 +120,6 @@ uses
       procedure g_copyvaluepara_openarray(list: TAsmList; const ref: treference; const lenloc: tlocation; arrdef: tarraydef; destreg: tregister); override;
       procedure g_copyvaluepara_openarray(list: TAsmList; const ref: treference; const lenloc: tlocation; arrdef: tarraydef; destreg: tregister); override;
       procedure g_releasevaluepara_openarray(list: TAsmList; arrdef: tarraydef; const l: tlocation); override;
       procedure g_releasevaluepara_openarray(list: TAsmList; arrdef: tarraydef; const l: tlocation); override;
 
 
-      procedure gen_initialize_code(list: TAsmList); override;
-
       procedure gen_entry_code(list: TAsmList); override;
       procedure gen_entry_code(list: TAsmList); override;
       procedure gen_exit_code(list: TAsmList); override;
       procedure gen_exit_code(list: TAsmList); override;
 
 
@@ -200,13 +197,7 @@ uses
 
 
       property maxevalstackheight: longint read fmaxevalstackheight;
       property maxevalstackheight: longint read fmaxevalstackheight;
 
 
-      procedure gen_initialize_fields_code(list:TAsmList);
-
-      procedure gen_typecheck(list: TAsmList; checkop: tasmop; checkdef: tdef);
      protected
      protected
-      function get_enum_init_val_ref(def: tdef; out ref: treference): boolean;
-
-      procedure allocate_implicit_structs_for_st_with_base_ref(list: TAsmList; st: tsymtable; const ref: treference; allocvartyp: tsymtyp);
       procedure allocate_enum_with_base_ref(list: TAsmList; vs: tabstractvarsym; const initref: treference; destbaseref: treference);
       procedure allocate_enum_with_base_ref(list: TAsmList; vs: tabstractvarsym; const initref: treference; destbaseref: treference);
       procedure allocate_implicit_struct_with_base_ref(list: TAsmList; vs: tabstractvarsym; ref: treference);
       procedure allocate_implicit_struct_with_base_ref(list: TAsmList; vs: tabstractvarsym; ref: treference);
       procedure gen_load_uninitialized_function_result(list: TAsmList; pd: tprocdef; resdef: tdef; const resloc: tcgpara); override;
       procedure gen_load_uninitialized_function_result(list: TAsmList; pd: tprocdef; resdef: tdef; const resloc: tcgpara); override;
@@ -1711,59 +1702,6 @@ implementation
       // do nothing
       // do nothing
     end;
     end;
 
 
-  procedure thlcgwasm.g_array_rtti_helper(list: TAsmList; t: tdef; const ref: treference; const highloc: tlocation; const name: string);
-    var
-      normaldim: longint;
-      eleref, tmpref: treference;
-    begin
-      { only in case of initialisation, we have to set all elements to "empty" }
-      if name<>'fpc_initialize_array' then
-        exit;
-      { put array on the stack }
-      tmpref:=ref;
-      a_load_ref_stack(list,ptruinttype,tmpref,prepare_stack_for_ref(list,tmpref,false));
-      { in case it's an open array whose elements are regular arrays, put the
-        dimension of the regular arrays on the stack (otherwise pass 0) }
-      normaldim:=0;
-      while (t.typ=arraydef) and
-            not is_dynamic_array(t) do
-        begin
-          inc(normaldim);
-          t:=tarraydef(t).elementdef;
-        end;
-      a_load_const_stack(list,s32inttype,normaldim,R_INTREGISTER);
-      { highloc is invalid, the length is part of the array in Java }
-      if is_wide_or_unicode_string(t) then
-        g_call_system_proc(list,'fpc_initialize_array_unicodestring',[],nil)
-      else if is_ansistring(t) then
-        g_call_system_proc(list,'fpc_initialize_array_ansistring',[],nil)
-      else if is_dynamic_array(t) then
-        g_call_system_proc(list,'fpc_initialize_array_dynarr',[],nil)
-      else if is_record(t) or
-              (t.typ=setdef) then
-        begin
-          tg.gethltemp(list,t,t.size,tt_persistent,eleref);
-          a_load_ref_stack(list,t,eleref,prepare_stack_for_ref(list,eleref,false));
-          if is_record(t) then
-            g_call_system_proc(list,'fpc_initialize_array_record',[],nil)
-          else if tsetdef(t).elementdef.typ=enumdef then
-            g_call_system_proc(list,'fpc_initialize_array_enumset',[],nil)
-          else
-            g_call_system_proc(list,'fpc_initialize_array_bitset',[],nil);
-          tg.ungettemp(list,eleref);
-        end
-      else if (t.typ=enumdef) then
-        begin
-          if get_enum_init_val_ref(t,eleref) then
-            begin
-              a_load_ref_stack(list,ptruinttype,eleref,prepare_stack_for_ref(list,eleref,false));
-              g_call_system_proc(list,'fpc_initialize_array_object',[],nil);
-            end;
-        end
-      else
-        internalerror(2011031901);
-    end;
-
   procedure thlcgwasm.g_initialize(list: TAsmList; t: tdef; const ref: treference);
   procedure thlcgwasm.g_initialize(list: TAsmList; t: tdef; const ref: treference);
     var
     var
       dummyloc: tlocation;
       dummyloc: tlocation;
@@ -1921,32 +1859,6 @@ implementation
       // do nothing, long live garbage collection!
       // do nothing, long live garbage collection!
     end;
     end;
 
 
-  procedure thlcgwasm.gen_initialize_code(list: TAsmList);
-    var
-      ref: treference;
-    begin
-      { create globals with wrapped types such as arrays/records  }
-      case current_procinfo.procdef.proctypeoption of
-        potype_unitinit:
-          begin
-            cgutils.reference_reset_base(ref,NR_NO,0,ctempposinvalid,1,[]);
-            if assigned(current_module.globalsymtable) then
-              allocate_implicit_structs_for_st_with_base_ref(list,current_module.globalsymtable,ref,staticvarsym);
-            allocate_implicit_structs_for_st_with_base_ref(list,current_module.localsymtable,ref,staticvarsym);
-          end;
-        potype_class_constructor:
-          begin
-            { also initialise local variables, if any }
-            inherited;
-            { initialise class fields }
-            cgutils.reference_reset_base(ref,NR_NO,0,ctempposinvalid,1,[]);
-            allocate_implicit_structs_for_st_with_base_ref(list,tabstractrecorddef(current_procinfo.procdef.owner.defowner).symtable,ref,staticvarsym);
-          end
-        else
-          inherited
-      end;
-    end;
-
   procedure thlcgwasm.gen_entry_code(list: TAsmList);
   procedure thlcgwasm.gen_entry_code(list: TAsmList);
     begin
     begin
       list.concat(Tai_force_line.Create);
       list.concat(Tai_force_line.Create);
@@ -2347,151 +2259,6 @@ implementation
       a_load_ref_ref(list,ptruinttype,ptruinttype,initref,destbaseref);
       a_load_ref_ref(list,ptruinttype,ptruinttype,initref,destbaseref);
     end;
     end;
 
 
-
-  function thlcgwasm.get_enum_init_val_ref(def: tdef; out ref: treference): boolean;
-    var
-      sym: tstaticvarsym;
-    begin
-      result:=false;
-      sym:=tstaticvarsym(tcpuenumdef(tenumdef(def).getbasedef).classdef.symtable.Find('__FPC_ZERO_INITIALIZER'));
-      { no enum with ordinal value 0 -> exit }
-      if not assigned(sym) then
-        exit;
-      reference_reset_symbol(ref,current_asmdata.RefAsmSymbol(sym.mangledname,AT_DATA),0,4,[]);
-      result:=true;
-    end;
-
-
-  procedure thlcgwasm.allocate_implicit_structs_for_st_with_base_ref(list: TAsmList; st: tsymtable; const ref: treference; allocvartyp: tsymtyp);
-    var
-      vs: tabstractvarsym;
-      def: tdef;
-      i: longint;
-      initref: treference;
-    begin
-      for i:=0 to st.symlist.count-1 do
-        begin
-          if (tsym(st.symlist[i]).typ<>allocvartyp) then
-            continue;
-          vs:=tabstractvarsym(st.symlist[i]);
-          if sp_static in vs.symoptions then
-            continue;
-          { vo_is_external and vo_has_local_copy means a staticvarsym that is
-            alias for a constsym, whose sole purpose is for allocating and
-            intialising the constant }
-          if [vo_is_external,vo_has_local_copy]*vs.varoptions=[vo_is_external] then
-             continue;
-          { threadvar innitializations are handled at the node tree level }
-          if vo_is_thread_var in vs.varoptions then
-            begin
-              { nothing }
-            end
-          else if wasmAlwayInMem(vs.vardef) then
-            allocate_implicit_struct_with_base_ref(list,vs,ref)
-          { enums are class instances in Java, while they are ordinals in
-            Pascal. When they are initialized with enum(0), such as in
-            constructors or global variables, initialize them with the
-            enum instance for 0 if it exists (if not, it remains nil since
-            there is no valid enum value in it) }
-          else if (vs.vardef.typ=enumdef) and
-                  ((vs.typ<>fieldvarsym) or
-                   (tdef(vs.owner.defowner).typ<>objectdef) or
-                   (ts_jvm_enum_field_init in current_settings.targetswitches)) and
-                  get_enum_init_val_ref(vs.vardef,initref) then
-            allocate_enum_with_base_ref(list,vs,initref,ref);
-        end;
-      { process symtables of routines part of this symtable (for local typed
-        constants) }
-      if allocvartyp=staticvarsym then
-        begin
-          for i:=0 to st.deflist.count-1 do
-            begin
-              def:=tdef(st.deflist[i]);
-              { the unit symtable also contains the methods of classes defined
-                in that unit -> skip them when processing the unit itself.
-                Localst is not assigned for the main program code.
-                Localst can be the same as st in case of unit init code. }
-              if (def.typ<>procdef) or
-                 (def.owner<>st) or
-                 not assigned(tprocdef(def).localst) or
-                 (tprocdef(def).localst=st) then
-                continue;
-              allocate_implicit_structs_for_st_with_base_ref(list,tprocdef(def).localst,ref,allocvartyp);
-            end;
-        end;
-    end;
-
-  procedure thlcgwasm.gen_initialize_fields_code(list: TAsmList);
-    var
-      sym: tsym;
-      selfpara: tparavarsym;
-      selfreg: tregister;
-      ref: treference;
-      obj: tabstractrecorddef;
-      i: longint;
-      needinit: boolean;
-    begin
-      obj:=tabstractrecorddef(current_procinfo.procdef.owner.defowner);
-      { check whether there are any fields that need initialisation }
-      needinit:=false;
-      for i:=0 to obj.symtable.symlist.count-1 do
-        begin
-          sym:=tsym(obj.symtable.symlist[i]);
-          if (sym.typ=fieldvarsym) and
-             not(sp_static in sym.symoptions) and
-             (wasmAlwayInMem(tfieldvarsym(sym).vardef) or
-              ((tfieldvarsym(sym).vardef.typ=enumdef) and
-               get_enum_init_val_ref(tfieldvarsym(sym).vardef,ref))) then
-            begin
-              needinit:=true;
-              break;
-            end;
-        end;
-      if not needinit then
-        exit;
-      selfpara:=tparavarsym(current_procinfo.procdef.parast.find('self'));
-      if not assigned(selfpara) then
-        internalerror(2011033001);
-      selfreg:=getaddressregister(list,selfpara.vardef);
-      a_load_loc_reg(list,obj,obj,selfpara.localloc,selfreg);
-      cgutils.reference_reset_base(ref,selfreg,0,ctempposinvalid,1,[]);
-      allocate_implicit_structs_for_st_with_base_ref(list,obj.symtable,ref,fieldvarsym);
-    end;
-
-  procedure thlcgwasm.gen_typecheck(list: TAsmList; checkop: tasmop; checkdef: tdef);
-    begin
-      { replace special types with their equivalent class type }
-      if (checkdef.typ=pointerdef) and
-         wasmAlwayInMem(tpointerdef(checkdef).pointeddef) then
-        checkdef:=tpointerdef(checkdef).pointeddef;
-      if (checkdef=voidpointertype) or
-         (checkdef.typ=formaldef) then
-        checkdef:=ptruinttype
-      else if checkdef.typ=enumdef then
-        checkdef:=tcpuenumdef(checkdef).classdef
-      else if checkdef.typ=setdef then
-        begin
-          if tsetdef(checkdef).elementdef.typ=enumdef then
-            checkdef:=java_juenumset
-          else
-            checkdef:=java_jubitset;
-        end
-      else if is_wide_or_unicode_string(checkdef) then
-        checkdef:=java_jlstring
-      else if is_ansistring(checkdef) then
-        checkdef:=java_ansistring
-      else if is_shortstring(checkdef) then
-        checkdef:=java_shortstring;
-      if checkdef.typ in [objectdef,recorddef] then
-        list.concat(taicpu.op_sym(checkop,current_asmdata.RefAsmSymbol(tabstractrecorddef(checkdef).jvm_full_typename(true),AT_METADATA)))
-      else if checkdef.typ=classrefdef then
-        list.concat(taicpu.op_sym(checkop,current_asmdata.RefAsmSymbol('java/lang/Class',AT_METADATA)))
-      { todo: WASM
-      else
-        list.concat(taicpu.op_sym(checkop,current_asmdata.RefAsmSymbol(jvmencodetype(checkdef,false),AT_METADATA)));
-        }
-    end;
-
   procedure thlcgwasm.resizestackfpuval(list: TAsmList; fromsize, tosize: tcgsize);
   procedure thlcgwasm.resizestackfpuval(list: TAsmList; fromsize, tosize: tcgsize);
     begin
     begin
       if (fromsize=OS_F32) and
       if (fromsize=OS_F32) and

+ 0 - 43
compiler/wasm32/symcpu.pas

@@ -115,16 +115,6 @@ type
   tcpustringdefclass = class of tcpustringdef;
   tcpustringdefclass = class of tcpustringdef;
 
 
   tcpuenumdef = class(tenumdef)
   tcpuenumdef = class(tenumdef)
-   protected
-     procedure ppuload_platform(ppufile: tcompilerppufile); override;
-     procedure ppuwrite_platform(ppufile: tcompilerppufile); override;
-   public
-    { class representing this enum on the Java side }
-    classdef  : tobjectdef;
-    classdefderef : tderef;
-    function getcopy: tstoreddef; override;
-    procedure buildderef; override;
-    procedure deref; override;
   end;
   end;
   tcpuenumdefclass = class of tcpuenumdef;
   tcpuenumdefclass = class of tcpuenumdef;
 
 
@@ -222,39 +212,6 @@ implementation
                              tcpuenumdef
                              tcpuenumdef
 ****************************************************************************}
 ****************************************************************************}
 
 
-  procedure tcpuenumdef.ppuload_platform(ppufile: tcompilerppufile);
-    begin
-      inherited;
-      ppufile.getderef(classdefderef);
-    end;
-
-
-  procedure tcpuenumdef.ppuwrite_platform(ppufile: tcompilerppufile);
-    begin
-      inherited;
-      ppufile.putderef(classdefderef);
-    end;
-
-
-  function tcpuenumdef.getcopy: tstoreddef;
-    begin
-      result:=inherited;
-      tcpuenumdef(result).classdef:=classdef;
-    end;
-
-
-  procedure tcpuenumdef.buildderef;
-    begin
-      inherited;
-      classdefderef.build(classdef);
-    end;
-
-
-  procedure tcpuenumdef.deref;
-    begin
-      inherited;
-      classdef:=tobjectdef(classdefderef.resolve);
-    end;
 
 
 {****************************************************************************
 {****************************************************************************
                              tcpuprocdef
                              tcpuprocdef