mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 16:31:36 +01:00 
			
		
		
		
	* wrap the init/finalization code even when it is implicitly generated
* only wrap the init/finalization code after the main program has been
    completely processed (pass1, codegen), because this may influence
    the required wrapping in case of the JVM target
  * replace periods with slashes in the package name when constructing
    the classes corresponding to the units (to execute their initialization
    code) -- didn't notice this was wrong previously because due to the
    incomplete wrapping, they were never being initialized until now
git-svn-id: branches/jvmbackend@18645 -
			
			
This commit is contained in:
		
							parent
							
								
									466f6751c8
								
							
						
					
					
						commit
						2376003cd0
					
				| @ -54,7 +54,7 @@ interface | ||||
| implementation | ||||
| 
 | ||||
|     uses | ||||
|       verbose,globals,constexp,fmodule, | ||||
|       verbose,cutils,globals,constexp,fmodule, | ||||
|       aasmdata,aasmtai,cpubase,aasmcpu, | ||||
|       symdef,symbase,symtable,defutil,jvmdef, | ||||
|       nbas,ncnv,ncon,ninl,ncal, | ||||
| @ -157,7 +157,10 @@ implementation | ||||
|                 exit} | ||||
|               unitclassname:=''; | ||||
|               if assigned(hp.u.namespace) then | ||||
|                 unitclassname:=hp.u.namespace^+'.'; | ||||
|                 begin | ||||
|                   unitclassname:=hp.u.namespace^+'/'; | ||||
|                   replace(unitclassname,'.','/'); | ||||
|                 end; | ||||
|               unitclassname:=unitclassname+hp.u.realmodulename^; | ||||
|               unitinits.concat(taicpu.op_sym(a_new,current_asmdata.RefAsmSymbol(unitclassname))); | ||||
|               unitinits.concat(taicpu.op_none(a_pop)); | ||||
|  | ||||
| @ -954,12 +954,14 @@ implementation | ||||
|            a register that is also used in the finalize body (PFV) } | ||||
|          if assigned(init_procinfo) then | ||||
|            begin | ||||
|              init_procinfo.code:=cnodeutils.wrap_proc_body(init_procinfo.procdef,init_procinfo.code); | ||||
|              init_procinfo.generate_code; | ||||
|              init_procinfo.resetprocdef; | ||||
|              release_main_proc(init_procinfo); | ||||
|            end; | ||||
|          if assigned(finalize_procinfo) then | ||||
|            begin | ||||
|              finalize_procinfo.code:=cnodeutils.wrap_proc_body(finalize_procinfo.procdef,finalize_procinfo.code); | ||||
|              finalize_procinfo.generate_code; | ||||
|              finalize_procinfo.resetprocdef; | ||||
|              release_main_proc(finalize_procinfo); | ||||
| @ -1889,12 +1891,14 @@ implementation | ||||
|          release_main_proc(main_procinfo); | ||||
|          if assigned(init_procinfo) then | ||||
|            begin | ||||
|              init_procinfo.code:=cnodeutils.wrap_proc_body(init_procinfo.procdef,init_procinfo.code); | ||||
|              init_procinfo.generate_code; | ||||
|              init_procinfo.resetprocdef; | ||||
|              release_main_proc(init_procinfo); | ||||
|            end; | ||||
|          if assigned(finalize_procinfo) then | ||||
|            begin | ||||
|              finalize_procinfo.code:=cnodeutils.wrap_proc_body(finalize_procinfo.procdef,finalize_procinfo.code); | ||||
|              finalize_procinfo.generate_code; | ||||
|              finalize_procinfo.resetprocdef; | ||||
|              release_main_proc(finalize_procinfo); | ||||
|  | ||||
| @ -269,7 +269,10 @@ implementation | ||||
|                    finish_parentfpstruct(current_procinfo.procdef); | ||||
|                  end; | ||||
|             end; | ||||
|         block:=cnodeutils.wrap_proc_body(current_procinfo.procdef,block); | ||||
|         { init/final code must be wrapped later (after code for main proc body | ||||
|           has been generated } | ||||
|         if not(current_procinfo.procdef.proctypeoption in [potype_unitinit,potype_unitfinalize]) then | ||||
|           block:=cnodeutils.wrap_proc_body(current_procinfo.procdef,block); | ||||
|       end; | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jonas Maebe
						Jonas Maebe