Skip to content

Commit 5f3c713

Browse files
committed
fix some valgrind signaled memory leaks
1 parent dfe05b8 commit 5f3c713

4 files changed

Lines changed: 20 additions & 14 deletions

File tree

src/ps_array.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ ps_array_data *ps_array_alloc(const ps_symbol *array_type)
3636
return array_data;
3737
}
3838

39-
// TODO do not forget to call this when necessary
4039
ps_array_data *ps_array_free(ps_array_data *array_data)
4140
{
4241
if (ps_array_debug)

src/ps_symbol_table.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ ps_symbol_table_error ps_symbol_table_grow(ps_symbol_table *table)
128128
error = PS_SYMBOL_TABLE_ERROR_INVALID;
129129
goto cleanup;
130130
}
131-
ps_symbol_table_log("*** GROW from %u to %u ***\n", old_size, table->size);
131+
ps_memory_free(PS_MEMORY_SYMBOL, old_symbols);
132+
ps_symbol_table_log("*** GROW from %u to %u ***\n", old_size, new_size);
132133
return PS_SYMBOL_TABLE_ERROR_NONE;
133134
cleanup:
134135
if (new_symbols != NULL)

src/ps_value.c

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <stdio.h>
1111
#include <string.h>
1212

13+
#include "ps_array.h"
1314
#include "ps_error.h"
1415
#include "ps_memory.h"
1516
#include "ps_string.h"
@@ -33,10 +34,23 @@ ps_value *ps_value_free(ps_value *value)
3334
{
3435
if (value == NULL || !value->allocated)
3536
return NULL;
36-
if (value->type != NULL && value->type->value != NULL && value->type->value->data.t != NULL &&
37-
value->type->value->data.t->base == PS_TYPE_EXECUTABLE)
37+
ps_value_type type = ps_value_get_type(value);
38+
switch(type)
3839
{
39-
ps_executable_free(value->data.x);
40+
// case PS_TYPE_STRING:
41+
// ps_string_free(value->data.s);
42+
// break;
43+
case PS_TYPE_ARRAY:
44+
ps_array_free(value->data.a);
45+
break;
46+
case PS_TYPE_EXECUTABLE:
47+
ps_executable_free(value->data.x);
48+
break;
49+
case PS_TYPE_DEFINITION:
50+
ps_type_definition_free(value->data.t);
51+
break;
52+
default:
53+
break;
4054
}
4155
ps_memory_free(PS_MEMORY_VALUE, value);
4256
return NULL;
@@ -118,21 +132,13 @@ bool ps_value_is_array(const ps_value *value)
118132

119133
ps_value_type ps_value_get_type(const ps_value *value)
120134
{
121-
// if (value == NULL)
122-
// fprintf(stderr, "ps_value_get_type: NULL!\n");
123-
// else
124-
// ps_value_debug(stderr, "ps_value_get_type: ", value);
125135
if (value == NULL || value->type == NULL || value->type->value == NULL || value->type->value->data.t == NULL)
126136
return PS_TYPE_NONE;
127137
return value->type->value->data.t->type;
128138
}
129139

130140
ps_value_type ps_value_get_base(const ps_value *value)
131141
{
132-
// if (value == NULL)
133-
// fprintf(stderr, "ps_value_get_base: NULL!\n");
134-
// else
135-
// ps_value_debug(stderr, "ps_value_get_base: ", value);
136142
if (value == NULL || value->type == NULL || value->type->value == NULL || value->type->value->data.t == NULL)
137143
return PS_TYPE_NONE;
138144
return value->type->value->data.t->base;

src/ps_visit_type.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ static bool ps_type_definition_register(ps_interpreter *interpreter, ps_interpre
6363
ps_symbol_free(*symbol);
6464
ps_value_free(value);
6565
ps_type_definition_free(type_def);
66-
RETURN_ERROR(PS_ERROR_SYMBOL_NOT_ADDED)
66+
TRACE_ERROR("REGISTER")
6767
}
6868

6969
VISIT_END("OK");

0 commit comments

Comments
 (0)