浏览代码

Use the indirect symbol to access the exported "emptychar" variable.

ncgcnv.pas, tcgtypeconvnode:
  * second_cstring_to_pchar & second_ansistring_to_pchar: use the indirect symbol to access FPC_EMPTYCHAR if the target supports packages

git-svn-id: branches/svenbarth/packages@28968 -
svenbarth 10 年之前
父节点
当前提交
c94c356561
共有 1 个文件被更改,包括 20 次插入4 次删除
  1. 20 4
      compiler/ncgcnv.pas

+ 20 - 4
compiler/ncgcnv.pas

@@ -298,9 +298,17 @@ interface
                 begin
                 begin
                   { FPC_EMPTYCHAR is a widechar -> 2 bytes }
                   { FPC_EMPTYCHAR is a widechar -> 2 bytes }
                   reference_reset(hr,2);
                   reference_reset(hr,2);
-                  hr.symbol:=current_asmdata.RefAsmSymbol('FPC_EMPTYCHAR');
                   location.register:=hlcg.getaddressregister(current_asmdata.CurrAsmList,resultdef);
                   location.register:=hlcg.getaddressregister(current_asmdata.CurrAsmList,resultdef);
-                  hlcg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,left.resultdef,resultdef,hr,location.register);
+                  if tf_supports_packages in target_info.flags then
+                    begin
+                      hr.symbol:=current_asmdata.RefAsmSymbol('FPC_EMPTYCHAR'+indirect_suffix);
+                      hlcg.a_load_ref_reg(current_asmdata.CurrAsmList,left.resultdef,resultdef,hr,location.register);
+                    end
+                  else
+                    begin
+                      hr.symbol:=current_asmdata.RefAsmSymbol('FPC_EMPTYCHAR');
+                      hlcg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,left.resultdef,resultdef,hr,location.register);
+                    end;
                 end
                 end
                else
                else
                 begin
                 begin
@@ -675,8 +683,16 @@ interface
          hlcg.a_cmp_const_reg_label(current_asmdata.CurrAsmList,resultdef,OC_NE,0,location.register,l1);
          hlcg.a_cmp_const_reg_label(current_asmdata.CurrAsmList,resultdef,OC_NE,0,location.register,l1);
          { FPC_EMPTYCHAR is a widechar -> 2 bytes }
          { FPC_EMPTYCHAR is a widechar -> 2 bytes }
          reference_reset(hr,2);
          reference_reset(hr,2);
-         hr.symbol:=current_asmdata.RefAsmSymbol('FPC_EMPTYCHAR');
-         hlcg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,left.resultdef,resultdef,hr,location.register);
+         if tf_supports_packages in target_info.flags then
+           begin
+             hr.symbol:=current_asmdata.RefAsmSymbol('FPC_EMPTYCHAR'+indirect_suffix);
+             hlcg.a_load_ref_reg(current_asmdata.CurrAsmList,left.resultdef,resultdef,hr,location.register);
+           end
+         else
+           begin
+             hr.symbol:=current_asmdata.RefAsmSymbol('FPC_EMPTYCHAR');
+             hlcg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,left.resultdef,resultdef,hr,location.register);
+           end;
          hlcg.a_label(current_asmdata.CurrAsmList,l1);
          hlcg.a_label(current_asmdata.CurrAsmList,l1);
       end;
       end;