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
119133ps_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
130140ps_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 ;
0 commit comments