From f58de91f0c45a20aac18aad8070db79814551ed0 Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Sat, 20 Aug 2011 07:57:50 +0000 Subject: [PATCH] + support for JVM string constants git-svn-id: branches/jvmbackend@18416 - --- compiler/jvm/njvmcon.pas | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/compiler/jvm/njvmcon.pas b/compiler/jvm/njvmcon.pas index 119eef8b84..09217ccef0 100644 --- a/compiler/jvm/njvmcon.pas +++ b/compiler/jvm/njvmcon.pas @@ -26,6 +26,7 @@ unit njvmcon; interface uses + symtype, node,ncon,ncgcon; type @@ -33,12 +34,18 @@ interface procedure pass_generate_code;override; end; + tjvmstringconstnode = class(tstringconstnode) + procedure pass_generate_code;override; + end; + + implementation uses - globtype, - aasmdata,defutil, - cgbase,hlcgobj,hlcgcpu,cgutils + globtype,widestr, + symdef,symtable,symconst, + aasmdata,aasmcpu,defutil, + cgbase,hlcgobj,hlcgcpu,cgutils,cpubase ; @@ -55,6 +62,28 @@ implementation end; + { tcgstringconstnode } + + procedure tjvmstringconstnode.pass_generate_code; + begin + location_reset(location,LOC_REGISTER,def_cgsize(resultdef)); + location.register:=hlcg.getaddressregister(current_asmdata.CurrAsmList,resultdef); + case cst_type of + cst_ansistring, + cst_shortstring, + cst_conststring: + current_asmdata.CurrAsmList.concat(taicpu.op_string(a_ldc,len,value_str)); + cst_unicodestring, + cst_widestring: + current_asmdata.CurrAsmList.concat(taicpu.op_wstring(a_ldc,pcompilerwidestring(value_str))); + end; + thlcgjvm(hlcg).incstack(current_asmdata.CurrAsmList,1); + thlcgjvm(hlcg).a_load_stack_reg(current_asmdata.CurrAsmList,resultdef,location.register); + end; + + + begin crealconstnode:=tjvmrealconstnode; + cstringconstnode:=tjvmstringconstnode; end.