@@ -65,6 +65,21 @@ Object *object_list(Heap *heap, int len)
65
65
return obj ;
66
66
}
67
67
68
+ void object_copy (Object * dst , Object * src )
69
+ {
70
+ memcpy (dst , src , sizeof (Object ));
71
+ switch (src -> type )
72
+ {
73
+ case OBJECT_TYPE_STRING :
74
+ dst -> str = malloc (strlen (src -> str ) + 1 );
75
+ strcpy (dst -> str , src -> str );
76
+ break ;
77
+
78
+ defualt :
79
+ break ;
80
+ }
81
+ }
82
+
68
83
void object_free (Object * object )
69
84
{
70
85
switch (object -> type )
@@ -130,9 +145,9 @@ Object *object_add(Heap *heap, Object *lhs, Object *rhs)
130
145
case OBJECT_TYPE_LIST :
131
146
{
132
147
Object * list = object_list (heap , 1 + rhs -> list_len );
133
- memcpy (& list -> items [0 ], lhs , sizeof ( Object ) );
148
+ object_copy (& list -> items [0 ], lhs );
134
149
for (int i = 0 ; i < rhs -> list_len ; i ++ )
135
- list -> items [i + 1 ] = rhs -> items [i ];
150
+ object_copy ( & list -> items [i + 1 ], & rhs -> items [i ]) ;
136
151
return list ;
137
152
}
138
153
@@ -155,18 +170,18 @@ Object *object_add(Heap *heap, Object *lhs, Object *rhs)
155
170
{
156
171
Object * list = object_list (heap , 1 + lhs -> list_len );
157
172
for (int i = 0 ; i < lhs -> list_len ; i ++ )
158
- list -> items [i ] = lhs -> items [i ];
159
- memcpy (& list -> items [lhs -> list_len ], rhs , sizeof ( Object ) );
173
+ object_copy ( & list -> items [i ], & lhs -> items [i ]) ;
174
+ object_copy (& list -> items [lhs -> list_len ], rhs );
160
175
return list ;
161
176
}
162
177
163
178
case OBJECT_TYPE_LIST :
164
179
{
165
180
Object * list = object_list (heap , lhs -> list_len + rhs -> list_len );
166
181
for (int i = 0 ; i < lhs -> list_len ; i ++ )
167
- list -> items [i ] = lhs -> items [i ];
182
+ object_copy ( & list -> items [i ], & lhs -> items [i ]) ;
168
183
for (int i = 0 ; i < rhs -> list_len ; i ++ )
169
- list -> items [i + lhs -> list_len ] = rhs -> items [i ];
184
+ object_copy ( & list -> items [i + lhs -> list_len ], & rhs -> items [i ]) ;
170
185
return list ;
171
186
}
172
187
0 commit comments