@@ -86,65 +86,65 @@ extern "C" {
86
86
};
87
87
88
88
// Return the sass tag for a generic sass value
89
- enum Sass_Tag sass_value_get_tag (union Sass_Value* v) { return v->unknown .tag ; }
89
+ enum Sass_Tag sass_value_get_tag (const union Sass_Value* v) { return v->unknown .tag ; }
90
90
91
91
// Check value for specified type
92
- bool sass_value_is_null (union Sass_Value* v) { return v->unknown .tag == SASS_NULL; }
93
- bool sass_value_is_number (union Sass_Value* v) { return v->unknown .tag == SASS_NUMBER; }
94
- bool sass_value_is_string (union Sass_Value* v) { return v->unknown .tag == SASS_STRING; }
95
- bool sass_value_is_boolean (union Sass_Value* v) { return v->unknown .tag == SASS_BOOLEAN; }
96
- bool sass_value_is_color (union Sass_Value* v) { return v->unknown .tag == SASS_COLOR; }
97
- bool sass_value_is_list (union Sass_Value* v) { return v->unknown .tag == SASS_LIST; }
98
- bool sass_value_is_map (union Sass_Value* v) { return v->unknown .tag == SASS_MAP; }
99
- bool sass_value_is_error (union Sass_Value* v) { return v->unknown .tag == SASS_ERROR; }
100
- bool sass_value_is_warning (union Sass_Value* v) { return v->unknown .tag == SASS_WARNING; }
92
+ bool sass_value_is_null (const union Sass_Value* v) { return v->unknown .tag == SASS_NULL; }
93
+ bool sass_value_is_number (const union Sass_Value* v) { return v->unknown .tag == SASS_NUMBER; }
94
+ bool sass_value_is_string (const union Sass_Value* v) { return v->unknown .tag == SASS_STRING; }
95
+ bool sass_value_is_boolean (const union Sass_Value* v) { return v->unknown .tag == SASS_BOOLEAN; }
96
+ bool sass_value_is_color (const union Sass_Value* v) { return v->unknown .tag == SASS_COLOR; }
97
+ bool sass_value_is_list (const union Sass_Value* v) { return v->unknown .tag == SASS_LIST; }
98
+ bool sass_value_is_map (const union Sass_Value* v) { return v->unknown .tag == SASS_MAP; }
99
+ bool sass_value_is_error (const union Sass_Value* v) { return v->unknown .tag == SASS_ERROR; }
100
+ bool sass_value_is_warning (const union Sass_Value* v) { return v->unknown .tag == SASS_WARNING; }
101
101
102
102
// Getters and setters for Sass_Number
103
- double sass_number_get_value (union Sass_Value* v) { return v->number .value ; }
103
+ double sass_number_get_value (const union Sass_Value* v) { return v->number .value ; }
104
104
void sass_number_set_value (union Sass_Value* v, double value) { v->number .value = value; }
105
- const char * sass_number_get_unit (union Sass_Value* v) { return v->number .unit ; }
105
+ const char * sass_number_get_unit (const union Sass_Value* v) { return v->number .unit ; }
106
106
void sass_number_set_unit (union Sass_Value* v, char * unit) { v->number .unit = unit; }
107
107
108
108
// Getters and setters for Sass_String
109
- const char * sass_string_get_value (union Sass_Value* v) { return v->string .value ; }
109
+ const char * sass_string_get_value (const union Sass_Value* v) { return v->string .value ; }
110
110
void sass_string_set_value (union Sass_Value* v, char * value) { v->string .value = value; }
111
111
112
112
// Getters and setters for Sass_Boolean
113
- bool sass_boolean_get_value (union Sass_Value* v) { return v->boolean .value ; }
113
+ bool sass_boolean_get_value (const union Sass_Value* v) { return v->boolean .value ; }
114
114
void sass_boolean_set_value (union Sass_Value* v, bool value) { v->boolean .value = value; }
115
115
116
116
// Getters and setters for Sass_Color
117
- double sass_color_get_r (union Sass_Value* v) { return v->color .r ; }
117
+ double sass_color_get_r (const union Sass_Value* v) { return v->color .r ; }
118
118
void sass_color_set_r (union Sass_Value* v, double r) { v->color .r = r; }
119
- double sass_color_get_g (union Sass_Value* v) { return v->color .g ; }
119
+ double sass_color_get_g (const union Sass_Value* v) { return v->color .g ; }
120
120
void sass_color_set_g (union Sass_Value* v, double g) { v->color .g = g; }
121
- double sass_color_get_b (union Sass_Value* v) { return v->color .b ; }
121
+ double sass_color_get_b (const union Sass_Value* v) { return v->color .b ; }
122
122
void sass_color_set_b (union Sass_Value* v, double b) { v->color .b = b; }
123
- double sass_color_get_a (union Sass_Value* v) { return v->color .a ; }
123
+ double sass_color_get_a (const union Sass_Value* v) { return v->color .a ; }
124
124
void sass_color_set_a (union Sass_Value* v, double a) { v->color .a = a; }
125
125
126
126
// Getters and setters for Sass_List
127
- size_t sass_list_get_length (union Sass_Value* v) { return v->list .length ; }
128
- enum Sass_Separator sass_list_get_separator (union Sass_Value* v) { return v->list .separator ; }
127
+ size_t sass_list_get_length (const union Sass_Value* v) { return v->list .length ; }
128
+ enum Sass_Separator sass_list_get_separator (const union Sass_Value* v) { return v->list .separator ; }
129
129
void sass_list_set_separator (union Sass_Value* v, enum Sass_Separator separator) { v->list .separator = separator; }
130
130
// Getters and setters for Sass_List values
131
- union Sass_Value* sass_list_get_value (union Sass_Value* v, size_t i) { return v->list .values [i]; }
131
+ union Sass_Value* sass_list_get_value (const union Sass_Value* v, size_t i) { return v->list .values [i]; }
132
132
void sass_list_set_value (union Sass_Value* v, size_t i, union Sass_Value* value) { v->list .values [i] = value; }
133
133
134
134
// Getters and setters for Sass_Map
135
- size_t sass_map_get_length (union Sass_Value* v) { return v->map .length ; }
135
+ size_t sass_map_get_length (const union Sass_Value* v) { return v->map .length ; }
136
136
// Getters and setters for Sass_List keys and values
137
- union Sass_Value* sass_map_get_key (union Sass_Value* v, size_t i) { return v->map .pairs [i].key ; }
138
- union Sass_Value* sass_map_get_value (union Sass_Value* v, size_t i) { return v->map .pairs [i].value ; }
137
+ union Sass_Value* sass_map_get_key (const union Sass_Value* v, size_t i) { return v->map .pairs [i].key ; }
138
+ union Sass_Value* sass_map_get_value (const union Sass_Value* v, size_t i) { return v->map .pairs [i].value ; }
139
139
void sass_map_set_key (union Sass_Value* v, size_t i, union Sass_Value* key) { v->map .pairs [i].key = key; }
140
140
void sass_map_set_value (union Sass_Value* v, size_t i, union Sass_Value* val) { v->map .pairs [i].value = val; }
141
141
142
142
// Getters and setters for Sass_Error
143
- char * sass_error_get_message (union Sass_Value* v) { return v->error .message ; };
143
+ char * sass_error_get_message (const union Sass_Value* v) { return v->error .message ; };
144
144
void sass_error_set_message (union Sass_Value* v, char * msg) { v->error .message = msg; };
145
145
146
146
// Getters and setters for Sass_Warning
147
- char * sass_warning_get_message (union Sass_Value* v) { return v->warning .message ; };
147
+ char * sass_warning_get_message (const union Sass_Value* v) { return v->warning .message ; };
148
148
void sass_warning_set_message (union Sass_Value* v, char * msg) { v->warning .message = msg; };
149
149
150
150
// Creator functions for all value types
@@ -283,6 +283,55 @@ extern "C" {
283
283
284
284
free (val);
285
285
286
+ }
287
+
288
+ // Make a deep cloned copy of the given sass value
289
+ union Sass_Value* sass_clone_value (const union Sass_Value* val)
290
+ {
291
+
292
+ size_t i;
293
+ if (val == 0 ) return 0 ;
294
+ switch (val->unknown .tag ) {
295
+ case SASS_NULL: {
296
+ return sass_make_null ();
297
+ } break ;
298
+ case SASS_BOOLEAN: {
299
+ return sass_make_boolean (val->boolean .value );
300
+ } break ;
301
+ case SASS_NUMBER: {
302
+ return sass_make_number (val->number .value , val->number .unit );
303
+ } break ;
304
+ case SASS_COLOR: {
305
+ return sass_make_color (val->color .r , val->color .g , val->color .b , val->color .a );
306
+ } break ;
307
+ case SASS_STRING: {
308
+ return sass_make_string (val->string .value );
309
+ } break ;
310
+ case SASS_LIST: {
311
+ union Sass_Value* list = sass_make_list (val->list .length , val->list .separator );
312
+ for (i = 0 ; i < list->list .length ; i++) {
313
+ list->list .values [i] = sass_clone_value (val->list .values [i]);
314
+ }
315
+ return list;
316
+ } break ;
317
+ case SASS_MAP: {
318
+ union Sass_Value* map = sass_make_map (val->map .length );
319
+ for (i = 0 ; i < val->map .length ; i++) {
320
+ map->map .pairs [i].key = sass_clone_value (val->map .pairs [i].key );
321
+ map->map .pairs [i].value = sass_clone_value (val->map .pairs [i].value );
322
+ }
323
+ return map;
324
+ } break ;
325
+ case SASS_ERROR: {
326
+ return sass_make_error (val->error .message );
327
+ } break ;
328
+ case SASS_WARNING: {
329
+ return sass_make_warning (val->warning .message );
330
+ } break ;
331
+ }
332
+
333
+ return 0 ;
334
+
286
335
}
287
336
288
337
}
0 commit comments