Explorar o código

* free the placeholder for the count of the dynamic array in end_dynarray_const() and document it as such

(cherry picked from commit 1180589046372dfb838bd87ce3f48b698853641f)
Sven/Sarah Barth %!s(int64=3) %!d(string=hai) anos
pai
achega
d8aa721f88
Modificáronse 1 ficheiros con 2 adicións e 0 borrados
  1. 2 0
      compiler/aasmcnst.pas

+ 2 - 0
compiler/aasmcnst.pas

@@ -352,6 +352,7 @@ type
      procedure emit_dynarray_offset(const ll:tasmlabofs;const arrlength:asizeint;const arrdef:tdef);virtual;
      procedure emit_dynarray_offset(const ll:tasmlabofs;const arrlength:asizeint;const arrdef:tdef);virtual;
      { starts a dynamic array constant so that its data can be emitted directly afterwards }
      { starts a dynamic array constant so that its data can be emitted directly afterwards }
      function begin_dynarray_const(arrdef:tdef;var startlab:tasmlabel;out arrlengthloc:ttypedconstplaceholder):tasmlabofs;virtual;
      function begin_dynarray_const(arrdef:tdef;var startlab:tasmlabel;out arrlengthloc:ttypedconstplaceholder):tasmlabofs;virtual;
+     { ends a dynamic array constant by updating the count field; the arrlengthloc will be freed }
      function end_dynarray_const(arrdef:tdef;arrlength:asizeint;arrlengthloc:ttypedconstplaceholder):tdef;virtual;
      function end_dynarray_const(arrdef:tdef;arrlength:asizeint;arrlengthloc:ttypedconstplaceholder):tdef;virtual;
 
 
      { emit a shortstring constant, and return its def }
      { emit a shortstring constant, and return its def }
@@ -1761,6 +1762,7 @@ implementation
      begin
      begin
        { we emit the high value, not the count }
        { we emit the high value, not the count }
        arrlengthloc.replace(tai_const.Create_sizeint(arrlength-1),sizesinttype);
        arrlengthloc.replace(tai_const.Create_sizeint(arrlength-1),sizesinttype);
+       arrlengthloc.free;
        result:=end_anonymous_record;
        result:=end_anonymous_record;
      end;
      end;