@@ -35,22 +35,22 @@ ps_value *ps_value_free(ps_value *value)
3535 if (value == NULL || !value -> allocated )
3636 return NULL ;
3737 ps_value_type type = ps_value_get_type (value );
38- switch (type )
38+ switch (type )
3939 {
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 ;
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 ;
5454 }
5555 ps_memory_free (PS_MEMORY_VALUE , value );
5656 return NULL ;
@@ -155,12 +155,18 @@ ps_error ps_value_copy(const ps_value *from, ps_value *to, bool range_check)
155155 // If destination type is NONE, set it to source type
156156 if (to -> type == & ps_system_none || to_base == PS_TYPE_NONE )
157157 to -> type = from -> type ;
158- // Same type, just copy value
158+ // Same value type, just copy value
159159 if (from -> type == to -> type )
160160 {
161+ // TODO copy array?
161162 to -> data = from -> data ;
162163 return PS_ERROR_NONE ;
163164 }
165+ // Enum can only be copied to same enum type
166+ if (ps_value_get_type (from ) == PS_TYPE_ENUM )
167+ {
168+ return PS_ERROR_TYPE_MISMATCH ;
169+ }
164170 // Char => Char? (subrange)
165171 if (from_base == PS_TYPE_CHAR && to_base == PS_TYPE_CHAR )
166172 {
0 commit comments