Skip to content

Commit

Permalink
fix some mem leaks
Browse files Browse the repository at this point in the history
  • Loading branch information
f0xeri committed Mar 10, 2024
1 parent aece62f commit 6766f41
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 23 deletions.
26 changes: 14 additions & 12 deletions examples/StdString.sl
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ module StdString
end strstr;

public class String inherits Object
private field-array[0] character arrayOfChars;
private field-array[12] character arrayOfChars;
private field-integer length := 0;

public method clear(String this)()
Expand All @@ -89,15 +89,11 @@ module StdString

// TODO: does it leak?
public method init(String this)(in array[] character str)
// delete clears not malloced pointer if we are passing element of array of objects
// TODO: fix array of objects initialization
//delete this.arrayOfChars;
variable-integer capacity := strlen(str);

variable-array[capacity + 1] character newCharArray;
let newCharArray := strcpy(newCharArray, str);

let this.arrayOfChars := newCharArray;
delete this.arrayOfChars;
let this.arrayOfChars := new array[capacity + 1] character;
let this.arrayOfChars := strcpy(this.arrayOfChars, str);
//let this.capacity := capacity;
let this.length := capacity;
end init;
Expand All @@ -109,9 +105,10 @@ module StdString
variable-array[totalLength + 1] character newCharArray;
let newCharArray := strcpy(newCharArray, this.arrayOfChars);
let newCharArray := strcat(newCharArray, str);

delete this.arrayOfChars;
let this.arrayOfChars := newCharArray;
let this.arrayOfChars := new array[totalLength + 1] character;
let this.arrayOfChars := strcpy(this.arrayOfChars, newCharArray);
delete newCharArray;
//let this.capacity := totalLength;
let this.length := totalLength;
end concat;
Expand Down Expand Up @@ -226,7 +223,9 @@ module StdString
end while;
let newCharArray[j] := "\0";
delete this.arrayOfChars;
let this.arrayOfChars := newCharArray;
let this.arrayOfChars := new array[newLength + 1] character;
let this.arrayOfChars := strcpy(this.arrayOfChars, newCharArray);
delete newCharArray;
let this.length := newLength;
return this;
end insert;
Expand Down Expand Up @@ -292,7 +291,9 @@ module StdString
end while;
let newCharArray[j] := "\0";
delete this.arrayOfChars;
let this.arrayOfChars := newCharArray;
let this.arrayOfChars := new array[newLength + 2] character;
let this.arrayOfChars := strcpy(this.arrayOfChars, newCharArray);
delete newCharArray;
let this.length := newLength;
return this;
end replaceAll;
Expand Down Expand Up @@ -389,6 +390,7 @@ module StdString
variable-integer finalSize := ipartSize + symbolsAfterPoint + 1;
variable-array[finalSize] character str;
let str := strcpy(str, intPartStr);
delete intPartStr;
variable-integer i := 0;
let tempFpart := fpart;
if (symbolsAfterPoint > 0) then
Expand Down
5 changes: 4 additions & 1 deletion tests/StdString.sl
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ module StdString
delete this.arrayOfChars;
let this.arrayOfChars := new array[totalLength + 1] character;
let this.arrayOfChars := strcpy(this.arrayOfChars, newCharArray);

delete newCharArray;
//let this.capacity := totalLength;
let this.length := totalLength;
end concat;
Expand Down Expand Up @@ -225,6 +225,7 @@ module StdString
delete this.arrayOfChars;
let this.arrayOfChars := new array[newLength + 1] character;
let this.arrayOfChars := strcpy(this.arrayOfChars, newCharArray);
delete newCharArray;
let this.length := newLength;
return this;
end insert;
Expand Down Expand Up @@ -292,6 +293,7 @@ module StdString
delete this.arrayOfChars;
let this.arrayOfChars := new array[newLength + 2] character;
let this.arrayOfChars := strcpy(this.arrayOfChars, newCharArray);
delete newCharArray;
let this.length := newLength;
return this;
end replaceAll;
Expand Down Expand Up @@ -388,6 +390,7 @@ module StdString
variable-integer finalSize := ipartSize + symbolsAfterPoint + 1;
variable-array[finalSize] character str;
let str := strcpy(str, intPartStr);
delete intPartStr;
variable-integer i := 0;
let tempFpart := fpart;
if (symbolsAfterPoint > 0) then
Expand Down
20 changes: 10 additions & 10 deletions tests/runTests.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,16 @@ def runTest(self):
f"Building StdStringTests.sl...\n"
f"Building StdString.sl...\n"
f"Building StdMath.sl...\n"
f"StdString.sl(362,35): warning: Implicit conversion from 'character' to 'integer'.\n"
f"StdString.sl(362,12): warning: Implicit conversion from 'integer' to 'character'.\n"
f"StdString.sl(375,8): warning: Implicit conversion from 'real' to 'integer'.\n"
f"StdString.sl(376,37): warning: Implicit conversion from 'integer' to 'real'.\n"
f"StdString.sl(384,41): warning: Implicit conversion from 'integer' to 'real'.\n"
f"StdString.sl(395,41): warning: Implicit conversion from 'integer' to 'real'.\n"
f"StdString.sl(399,46): warning: Implicit conversion from 'integer' to 'real'.\n"
f"StdString.sl(399,51): warning: Implicit conversion from 'character' to 'real'.\n"
f"StdString.sl(399,20): warning: Implicit conversion from 'real' to 'character'.\n"
f"StdString.sl(403,45): warning: Implicit conversion from 'integer' to 'real'.\n",
f"StdString.sl(364,35): warning: Implicit conversion from 'character' to 'integer'.\n"
f"StdString.sl(364,12): warning: Implicit conversion from 'integer' to 'character'.\n"
f"StdString.sl(377,8): warning: Implicit conversion from 'real' to 'integer'.\n"
f"StdString.sl(378,37): warning: Implicit conversion from 'integer' to 'real'.\n"
f"StdString.sl(386,41): warning: Implicit conversion from 'integer' to 'real'.\n"
f"StdString.sl(398,41): warning: Implicit conversion from 'integer' to 'real'.\n"
f"StdString.sl(402,46): warning: Implicit conversion from 'integer' to 'real'.\n"
f"StdString.sl(402,51): warning: Implicit conversion from 'character' to 'real'.\n"
f"StdString.sl(402,20): warning: Implicit conversion from 'real' to 'character'.\n"
f"StdString.sl(406,45): warning: Implicit conversion from 'integer' to 'real'.\n",
expected_program_output)
test.compile_test()
self.assertEqual(test.check_outs(), True)
Expand Down

0 comments on commit 6766f41

Please sign in to comment.