Skip to content

Commit 6537833

Browse files
authored
Merge pull request #2282 from xzyfer/bracketed-list-c-api
Add list is_bracketed support to the C API
2 parents 01074d8 + eb0c346 commit 6537833

9 files changed

+33
-21
lines changed

docs/api-value.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ union Sass_Value* sass_make_string (const char* val);
5858
union Sass_Value* sass_make_qstring (const char* val);
5959
union Sass_Value* sass_make_number (double val, const char* unit);
6060
union Sass_Value* sass_make_color (double r, double g, double b, double a);
61-
union Sass_Value* sass_make_list (size_t len, enum Sass_Separator sep);
61+
union Sass_Value* sass_make_list (size_t len, enum Sass_Separator sep, bool is_bracketed);
6262
union Sass_Value* sass_make_map (size_t len);
6363
union Sass_Value* sass_make_error (const char* msg);
6464
union Sass_Value* sass_make_warning (const char* msg);
@@ -124,6 +124,8 @@ size_t sass_list_get_length (const union Sass_Value* v);
124124
// Getters and setters for Sass_List
125125
enum Sass_Separator sass_list_get_separator (const union Sass_Value* v);
126126
void sass_list_set_separator (union Sass_Value* v, enum Sass_Separator value);
127+
bool sass_list_get_is_bracketed (const union Sass_Value* v);
128+
void sass_list_set_is_bracketed (union Sass_Value* v, bool value);
127129
// Getters and setters for Sass_List values
128130
union Sass_Value* sass_list_get_value (const union Sass_Value* v, size_t i);
129131
void sass_list_set_value (union Sass_Value* v, size_t i, union Sass_Value* value);

docs/custom-functions-internal.md

+10-8
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,16 @@ The cookie can hold any pointer you want. In the `perl-libsass` implementation i
4545

4646
```C
4747
// allocate memory (copies passed strings)
48-
union Sass_Value* make_sass_boolean (int val);
49-
union Sass_Value* make_sass_number (double val, const char* unit);
50-
union Sass_Value* make_sass_color (double r, double g, double b, double a);
51-
union Sass_Value* make_sass_string (const char* val);
52-
union Sass_Value* make_sass_list (size_t len, enum Sass_Separator sep);
53-
union Sass_Value* make_sass_map (size_t len);
54-
union Sass_Value* make_sass_null ();
55-
union Sass_Value* make_sass_error (const char* msg);
48+
union Sass_Value* sass_make_null (void);
49+
union Sass_Value* sass_make_boolean (bool val);
50+
union Sass_Value* sass_make_string (const char* val);
51+
union Sass_Value* sass_make_qstring (const char* val);
52+
union Sass_Value* sass_make_number (double val, const char* unit);
53+
union Sass_Value* sass_make_color (double r, double g, double b, double a);
54+
union Sass_Value* sass_make_list (size_t len, enum Sass_Separator sep, bool is_bracketed);
55+
union Sass_Value* sass_make_map (size_t len);
56+
union Sass_Value* sass_make_error (const char* msg);
57+
union Sass_Value* sass_make_warning (const char* msg);
5658

5759
// Make a deep cloned copy of the given sass value
5860
union Sass_Value* sass_clone_value (const union Sass_Value* val);

include/sass/values.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ ADDAPI union Sass_Value* ADDCALL sass_make_string (const char* val);
5050
ADDAPI union Sass_Value* ADDCALL sass_make_qstring (const char* val);
5151
ADDAPI union Sass_Value* ADDCALL sass_make_number (double val, const char* unit);
5252
ADDAPI union Sass_Value* ADDCALL sass_make_color (double r, double g, double b, double a);
53-
ADDAPI union Sass_Value* ADDCALL sass_make_list (size_t len, enum Sass_Separator sep);
53+
ADDAPI union Sass_Value* ADDCALL sass_make_list (size_t len, enum Sass_Separator sep, bool is_bracketed);
5454
ADDAPI union Sass_Value* ADDCALL sass_make_map (size_t len);
5555
ADDAPI union Sass_Value* ADDCALL sass_make_error (const char* msg);
5656
ADDAPI union Sass_Value* ADDCALL sass_make_warning (const char* msg);
@@ -116,6 +116,8 @@ ADDAPI size_t ADDCALL sass_list_get_length (const union Sass_Value* v);
116116
// Getters and setters for Sass_List
117117
ADDAPI enum Sass_Separator ADDCALL sass_list_get_separator (const union Sass_Value* v);
118118
ADDAPI void ADDCALL sass_list_set_separator (union Sass_Value* v, enum Sass_Separator value);
119+
ADDAPI bool ADDCALL sass_list_get_is_bracketed (const union Sass_Value* v);
120+
ADDAPI void ADDCALL sass_list_set_is_bracketed (union Sass_Value* v, bool value);
119121
// Getters and setters for Sass_List values
120122
ADDAPI union Sass_Value* ADDCALL sass_list_get_value (const union Sass_Value* v, size_t i);
121123
ADDAPI void ADDCALL sass_list_set_value (union Sass_Value* v, size_t i, union Sass_Value* value);

src/GNUmakefile.am

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ include $(top_srcdir)/Makefile.conf
3434

3535
libsass_la_SOURCES = ${CSOURCES} ${SOURCES}
3636

37-
libsass_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined -version-info 0:9:0
37+
libsass_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined -version-info 1:0:0
3838

3939
if ENABLE_TESTS
4040
if ENABLE_COVERAGE

src/eval.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ namespace Sass {
341341
Sass_Function_Fn c_func = sass_function_get_function(c_function);
342342

343343
To_C to_c;
344-
union Sass_Value* c_args = sass_make_list(1, SASS_COMMA);
344+
union Sass_Value* c_args = sass_make_list(1, SASS_COMMA, false);
345345
sass_list_set_value(c_args, 0, message->perform(&to_c));
346346
union Sass_Value* c_val = c_func(c_args, c_function, ctx.c_compiler);
347347
ctx.c_options.output_style = outstyle;
@@ -377,7 +377,7 @@ namespace Sass {
377377
Sass_Function_Fn c_func = sass_function_get_function(c_function);
378378

379379
To_C to_c;
380-
union Sass_Value* c_args = sass_make_list(1, SASS_COMMA);
380+
union Sass_Value* c_args = sass_make_list(1, SASS_COMMA, false);
381381
sass_list_set_value(c_args, 0, message->perform(&to_c));
382382
union Sass_Value* c_val = c_func(c_args, c_function, ctx.c_compiler);
383383
ctx.c_options.output_style = outstyle;
@@ -410,7 +410,7 @@ namespace Sass {
410410
Sass_Function_Fn c_func = sass_function_get_function(c_function);
411411

412412
To_C to_c;
413-
union Sass_Value* c_args = sass_make_list(1, SASS_COMMA);
413+
union Sass_Value* c_args = sass_make_list(1, SASS_COMMA, false);
414414
sass_list_set_value(c_args, 0, message->perform(&to_c));
415415
union Sass_Value* c_val = c_func(c_args, c_function, ctx.c_compiler);
416416
ctx.c_options.output_style = outstyle;
@@ -907,7 +907,7 @@ namespace Sass {
907907
exp.backtrace_stack.push_back(&here);
908908

909909
To_C to_c;
910-
union Sass_Value* c_args = sass_make_list(params->length(), SASS_COMMA);
910+
union Sass_Value* c_args = sass_make_list(params->length(), SASS_COMMA, false);
911911
for(size_t i = 0; i < params->length(); i++) {
912912
Parameter_Obj param = params->at(i);
913913
std::string key = param->name();
@@ -1613,6 +1613,7 @@ namespace Sass {
16131613
for (size_t i = 0, L = sass_list_get_length(v); i < L; ++i) {
16141614
l->append(cval_to_astnode(sass_list_get_value(v, i), backtrace, pstate));
16151615
}
1616+
l->is_bracketed(sass_list_get_is_bracketed(v));
16161617
e = l;
16171618
} break;
16181619
case SASS_MAP: {

src/sass_values.cpp

+5-2
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ extern "C" {
5454
size_t ADDCALL sass_list_get_length(const union Sass_Value* v) { return v->list.length; }
5555
enum Sass_Separator ADDCALL sass_list_get_separator(const union Sass_Value* v) { return v->list.separator; }
5656
void ADDCALL sass_list_set_separator(union Sass_Value* v, enum Sass_Separator separator) { v->list.separator = separator; }
57+
bool ADDCALL sass_list_get_is_bracketed(const union Sass_Value* v) { return v->list.is_bracketed; }
58+
void ADDCALL sass_list_set_is_bracketed(union Sass_Value* v, bool is_bracketed) { v->list.is_bracketed = is_bracketed; }
5759
// Getters and setters for Sass_List values
5860
union Sass_Value* ADDCALL sass_list_get_value(const union Sass_Value* v, size_t i) { return v->list.values[i]; }
5961
void ADDCALL sass_list_set_value(union Sass_Value* v, size_t i, union Sass_Value* value) { v->list.values[i] = value; }
@@ -130,13 +132,14 @@ extern "C" {
130132
return v;
131133
}
132134

133-
union Sass_Value* ADDCALL sass_make_list(size_t len, enum Sass_Separator sep)
135+
union Sass_Value* ADDCALL sass_make_list(size_t len, enum Sass_Separator sep, bool is_bracketed)
134136
{
135137
union Sass_Value* v = (Sass_Value*) calloc(1, sizeof(Sass_Value));
136138
if (v == 0) return 0;
137139
v->list.tag = SASS_LIST;
138140
v->list.length = len;
139141
v->list.separator = sep;
142+
v->list.is_bracketed = is_bracketed;
140143
v->list.values = (union Sass_Value**) calloc(len, sizeof(union Sass_Value*));
141144
if (v->list.values == 0) { free(v); return 0; }
142145
return v;
@@ -247,7 +250,7 @@ extern "C" {
247250
return sass_string_is_quoted(val) ? sass_make_qstring(val->string.value) : sass_make_string(val->string.value);
248251
} break;
249252
case SASS_LIST: {
250-
union Sass_Value* list = sass_make_list(val->list.length, val->list.separator);
253+
union Sass_Value* list = sass_make_list(val->list.length, val->list.separator, val->list.is_bracketed);
251254
for (i = 0; i < list->list.length; i++) {
252255
list->list.values[i] = sass_clone_value(val->list.values[i]);
253256
}

src/sass_values.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ struct Sass_String {
3535
struct Sass_List {
3636
enum Sass_Tag tag;
3737
enum Sass_Separator separator;
38+
bool is_bracketed;
3839
size_t length;
3940
// null terminated "array"
4041
union Sass_Value** values;
@@ -78,4 +79,4 @@ struct Sass_MapPair {
7879
union Sass_Value* value;
7980
};
8081

81-
#endif
82+
#endif

src/to_c.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ namespace Sass {
3636

3737
union Sass_Value* To_C::operator()(List_Ptr l)
3838
{
39-
union Sass_Value* v = sass_make_list(l->length(), l->separator());
39+
union Sass_Value* v = sass_make_list(l->length(), l->separator(), l->is_bracketed());
4040
for (size_t i = 0, L = l->length(); i < L; ++i) {
4141
sass_list_set_value(v, i, (*l)[i]->perform(this));
4242
}
@@ -57,7 +57,7 @@ namespace Sass {
5757

5858
union Sass_Value* To_C::operator()(Arguments_Ptr a)
5959
{
60-
union Sass_Value* v = sass_make_list(a->length(), SASS_COMMA);
60+
union Sass_Value* v = sass_make_list(a->length(), SASS_COMMA, false);
6161
for (size_t i = 0, L = a->length(); i < L; ++i) {
6262
sass_list_set_value(v, i, (*a)[i]->perform(this));
6363
}

src/values.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace Sass {
2222
else if (val->concrete_type() == Expression::LIST)
2323
{
2424
List_Ptr_Const l = dynamic_cast<List_Ptr_Const>(val);
25-
union Sass_Value* list = sass_make_list(l->size(), l->separator());
25+
union Sass_Value* list = sass_make_list(l->size(), l->separator(), l->is_bracketed());
2626
for (size_t i = 0, L = l->length(); i < L; ++i) {
2727
Expression_Obj obj = l->at(i);
2828
auto val = ast_node_to_sass_value(&obj);
@@ -106,6 +106,7 @@ namespace Sass {
106106
for (size_t i = 0, L = sass_list_get_length(val); i < L; ++i) {
107107
l->append(sass_value_to_ast_node(sass_list_get_value(val, i)));
108108
}
109+
l->is_bracketed(sass_list_get_is_bracketed(val));
109110
return l;
110111
}
111112
break;

0 commit comments

Comments
 (0)