Skip to content

Commit efc0331

Browse files
committed
Rename ast2c and move c2ast to own compile unit
1 parent aa7386f commit efc0331

11 files changed

+129
-98
lines changed

Makefile.conf

+2-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ SOURCES = \
5151
sass2scss.cpp \
5252
backtrace.cpp \
5353
operators.cpp \
54-
to_c.cpp \
54+
ast2c.cpp \
55+
c2ast.cpp \
5556
to_value.cpp \
5657
source_map.cpp \
5758
subset_map.cpp \
+13-16
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
#include "sass.hpp"
2-
#include "to_c.hpp"
2+
#include "ast2c.hpp"
33
#include "ast.hpp"
44

55
namespace Sass {
66

7-
union Sass_Value* To_C::fallback_impl(AST_Node_Ptr n)
8-
{ return sass_make_error("unknown type for C-API"); }
9-
10-
union Sass_Value* To_C::operator()(Boolean_Ptr b)
7+
union Sass_Value* AST2C::operator()(Boolean_Ptr b)
118
{ return sass_make_boolean(b->value()); }
129

13-
union Sass_Value* To_C::operator()(Number_Ptr n)
10+
union Sass_Value* AST2C::operator()(Number_Ptr n)
1411
{ return sass_make_number(n->value(), n->unit().c_str()); }
1512

16-
union Sass_Value* To_C::operator()(Custom_Warning_Ptr w)
13+
union Sass_Value* AST2C::operator()(Custom_Warning_Ptr w)
1714
{ return sass_make_warning(w->message().c_str()); }
1815

19-
union Sass_Value* To_C::operator()(Custom_Error_Ptr e)
16+
union Sass_Value* AST2C::operator()(Custom_Error_Ptr e)
2017
{ return sass_make_error(e->message().c_str()); }
2118

22-
union Sass_Value* To_C::operator()(Color_Ptr c)
19+
union Sass_Value* AST2C::operator()(Color_Ptr c)
2320
{ return sass_make_color(c->r(), c->g(), c->b(), c->a()); }
2421

25-
union Sass_Value* To_C::operator()(String_Constant_Ptr s)
22+
union Sass_Value* AST2C::operator()(String_Constant_Ptr s)
2623
{
2724
if (s->quote_mark()) {
2825
return sass_make_qstring(s->value().c_str());
@@ -31,10 +28,10 @@ namespace Sass {
3128
}
3229
}
3330

34-
union Sass_Value* To_C::operator()(String_Quoted_Ptr s)
31+
union Sass_Value* AST2C::operator()(String_Quoted_Ptr s)
3532
{ return sass_make_qstring(s->value().c_str()); }
3633

37-
union Sass_Value* To_C::operator()(List_Ptr l)
34+
union Sass_Value* AST2C::operator()(List_Ptr l)
3835
{
3936
union Sass_Value* v = sass_make_list(l->length(), l->separator(), l->is_bracketed());
4037
for (size_t i = 0, L = l->length(); i < L; ++i) {
@@ -43,7 +40,7 @@ namespace Sass {
4340
return v;
4441
}
4542

46-
union Sass_Value* To_C::operator()(Map_Ptr m)
43+
union Sass_Value* AST2C::operator()(Map_Ptr m)
4744
{
4845
union Sass_Value* v = sass_make_map(m->length());
4946
int i = 0;
@@ -55,7 +52,7 @@ namespace Sass {
5552
return v;
5653
}
5754

58-
union Sass_Value* To_C::operator()(Arguments_Ptr a)
55+
union Sass_Value* AST2C::operator()(Arguments_Ptr a)
5956
{
6057
union Sass_Value* v = sass_make_list(a->length(), SASS_COMMA, false);
6158
for (size_t i = 0, L = a->length(); i < L; ++i) {
@@ -64,11 +61,11 @@ namespace Sass {
6461
return v;
6562
}
6663

67-
union Sass_Value* To_C::operator()(Argument_Ptr a)
64+
union Sass_Value* AST2C::operator()(Argument_Ptr a)
6865
{ return a->value()->perform(this); }
6966

7067
// not strictly necessary because of the fallback
71-
union Sass_Value* To_C::operator()(Null_Ptr n)
68+
union Sass_Value* AST2C::operator()(Null_Ptr n)
7269
{ return sass_make_null(); }
7370

7471
};

src/to_c.hpp renamed to src/ast2c.hpp

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
1-
#ifndef SASS_TO_C_H
2-
#define SASS_TO_C_H
1+
#ifndef SASS_AST2C_H
2+
#define SASS_AST2C_H
33

44
#include "ast_fwd_decl.hpp"
55
#include "operation.hpp"
66
#include "sass/values.h"
77

88
namespace Sass {
99

10-
class To_C : public Operation_CRTP<union Sass_Value*, To_C> {
11-
// override this to define a catch-all
12-
union Sass_Value* fallback_impl(AST_Node_Ptr n);
10+
class AST2C : public Operation_CRTP<union Sass_Value*, AST2C> {
1311

1412
public:
1513

16-
To_C() { }
17-
~To_C() { }
14+
AST2C() { }
15+
~AST2C() { }
1816

1917
union Sass_Value* operator()(Boolean_Ptr);
2018
union Sass_Value* operator()(Number_Ptr);
@@ -29,9 +27,10 @@ namespace Sass {
2927
union Sass_Value* operator()(Arguments_Ptr);
3028
union Sass_Value* operator()(Argument_Ptr);
3129

32-
// dispatch to fallback implementation
30+
// return sass error if type is not supported
3331
union Sass_Value* fallback(AST_Node_Ptr x)
34-
{ return fallback_impl(x); }
32+
{ return sass_make_error("unknown type for C-API"); }
33+
3534
};
3635

3736
}

src/c2ast.cpp

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include "ast.hpp"
2+
#include "units.hpp"
3+
#include "position.hpp"
4+
#include "backtrace.hpp"
5+
#include "sass/values.h"
6+
#include "ast_fwd_decl.hpp"
7+
#include "error_handling.hpp"
8+
9+
namespace Sass {
10+
11+
Value_Ptr c2ast(union Sass_Value* v, Backtraces traces, ParserState pstate)
12+
{
13+
using std::strlen;
14+
using std::strcpy;
15+
Value_Ptr e = NULL;
16+
switch (sass_value_get_tag(v)) {
17+
case SASS_BOOLEAN: {
18+
e = SASS_MEMORY_NEW(Boolean, pstate, !!sass_boolean_get_value(v));
19+
} break;
20+
case SASS_NUMBER: {
21+
e = SASS_MEMORY_NEW(Number, pstate, sass_number_get_value(v), sass_number_get_unit(v));
22+
} break;
23+
case SASS_COLOR: {
24+
e = SASS_MEMORY_NEW(Color, pstate, sass_color_get_r(v), sass_color_get_g(v), sass_color_get_b(v), sass_color_get_a(v));
25+
} break;
26+
case SASS_STRING: {
27+
if (sass_string_is_quoted(v))
28+
e = SASS_MEMORY_NEW(String_Quoted, pstate, sass_string_get_value(v));
29+
else {
30+
e = SASS_MEMORY_NEW(String_Constant, pstate, sass_string_get_value(v));
31+
}
32+
} break;
33+
case SASS_LIST: {
34+
List_Ptr l = SASS_MEMORY_NEW(List, pstate, sass_list_get_length(v), sass_list_get_separator(v));
35+
for (size_t i = 0, L = sass_list_get_length(v); i < L; ++i) {
36+
l->append(c2ast(sass_list_get_value(v, i), traces, pstate));
37+
}
38+
l->is_bracketed(sass_list_get_is_bracketed(v));
39+
e = l;
40+
} break;
41+
case SASS_MAP: {
42+
Map_Ptr m = SASS_MEMORY_NEW(Map, pstate);
43+
for (size_t i = 0, L = sass_map_get_length(v); i < L; ++i) {
44+
*m << std::make_pair(
45+
c2ast(sass_map_get_key(v, i), traces, pstate),
46+
c2ast(sass_map_get_value(v, i), traces, pstate));
47+
}
48+
e = m;
49+
} break;
50+
case SASS_NULL: {
51+
e = SASS_MEMORY_NEW(Null, pstate);
52+
} break;
53+
case SASS_ERROR: {
54+
error("Error in C function: " + std::string(sass_error_get_message(v)), pstate, traces);
55+
} break;
56+
case SASS_WARNING: {
57+
error("Warning in C function: " + std::string(sass_warning_get_message(v)), pstate, traces);
58+
} break;
59+
default: break;
60+
}
61+
return e;
62+
}
63+
64+
}

src/c2ast.hpp

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef SASS_C2AST_H
2+
#define SASS_C2AST_H
3+
4+
#include "position.hpp"
5+
#include "backtrace.hpp"
6+
#include "ast_fwd_decl.hpp"
7+
8+
namespace Sass {
9+
10+
Value_Ptr c2ast(union Sass_Value* v, Backtraces traces, ParserState pstate);
11+
12+
}
13+
14+
#endif

src/eval.cpp

+11-65
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
#include "position.hpp"
1818
#include "sass/values.h"
1919
#include "to_value.hpp"
20-
#include "to_c.hpp"
20+
#include "ast2c.hpp"
21+
#include "c2ast.hpp"
2122
#include "context.hpp"
2223
#include "backtrace.hpp"
2324
#include "lexer.hpp"
@@ -333,9 +334,9 @@ namespace Sass {
333334
Sass_Function_Entry c_function = def->c_function();
334335
Sass_Function_Fn c_func = sass_function_get_function(c_function);
335336

336-
To_C to_c;
337+
AST2C ast2c;
337338
union Sass_Value* c_args = sass_make_list(1, SASS_COMMA, false);
338-
sass_list_set_value(c_args, 0, message->perform(&to_c));
339+
sass_list_set_value(c_args, 0, message->perform(&ast2c));
339340
union Sass_Value* c_val = c_func(c_args, c_function, ctx.c_compiler);
340341
ctx.c_options.output_style = outstyle;
341342
ctx.callee_stack.pop_back();
@@ -381,9 +382,9 @@ namespace Sass {
381382
Sass_Function_Entry c_function = def->c_function();
382383
Sass_Function_Fn c_func = sass_function_get_function(c_function);
383384

384-
To_C to_c;
385+
AST2C ast2c;
385386
union Sass_Value* c_args = sass_make_list(1, SASS_COMMA, false);
386-
sass_list_set_value(c_args, 0, message->perform(&to_c));
387+
sass_list_set_value(c_args, 0, message->perform(&ast2c));
387388
union Sass_Value* c_val = c_func(c_args, c_function, ctx.c_compiler);
388389
ctx.c_options.output_style = outstyle;
389390
ctx.callee_stack.pop_back();
@@ -425,9 +426,9 @@ namespace Sass {
425426
Sass_Function_Entry c_function = def->c_function();
426427
Sass_Function_Fn c_func = sass_function_get_function(c_function);
427428

428-
To_C to_c;
429+
AST2C ast2c;
429430
union Sass_Value* c_args = sass_make_list(1, SASS_COMMA, false);
430-
sass_list_set_value(c_args, 0, message->perform(&to_c));
431+
sass_list_set_value(c_args, 0, message->perform(&ast2c));
431432
union Sass_Value* c_val = c_func(c_args, c_function, ctx.c_compiler);
432433
ctx.c_options.output_style = outstyle;
433434
ctx.callee_stack.pop_back();
@@ -1054,22 +1055,22 @@ namespace Sass {
10541055
{ env }
10551056
});
10561057

1057-
To_C to_c;
1058+
AST2C ast2c;
10581059
union Sass_Value* c_args = sass_make_list(params->length(), SASS_COMMA, false);
10591060
for(size_t i = 0; i < params->length(); i++) {
10601061
Parameter_Obj param = params->at(i);
10611062
std::string key = param->name();
10621063
AST_Node_Obj node = fn_env.get_local(key);
10631064
Expression_Obj arg = Cast<Expression>(node);
1064-
sass_list_set_value(c_args, i, arg->perform(&to_c));
1065+
sass_list_set_value(c_args, i, arg->perform(&ast2c));
10651066
}
10661067
union Sass_Value* c_val = c_func(c_args, c_function, ctx.c_compiler);
10671068
if (sass_value_get_tag(c_val) == SASS_ERROR) {
10681069
error("error in C function " + c->name() + ": " + sass_error_get_message(c_val), c->pstate(), traces);
10691070
} else if (sass_value_get_tag(c_val) == SASS_WARNING) {
10701071
error("warning in C function " + c->name() + ": " + sass_warning_get_message(c_val), c->pstate(), traces);
10711072
}
1072-
result = cval_to_astnode(c_val, traces, c->pstate());
1073+
result = c2ast(c_val, traces, c->pstate());
10731074

10741075
ctx.callee_stack.pop_back();
10751076
traces.pop_back();
@@ -1467,61 +1468,6 @@ namespace Sass {
14671468
return 0;
14681469
}
14691470

1470-
// All the binary helpers.
1471-
1472-
Expression_Ptr cval_to_astnode(union Sass_Value* v, Backtraces traces, ParserState pstate)
1473-
{
1474-
using std::strlen;
1475-
using std::strcpy;
1476-
Expression_Ptr e = NULL;
1477-
switch (sass_value_get_tag(v)) {
1478-
case SASS_BOOLEAN: {
1479-
e = SASS_MEMORY_NEW(Boolean, pstate, !!sass_boolean_get_value(v));
1480-
} break;
1481-
case SASS_NUMBER: {
1482-
e = SASS_MEMORY_NEW(Number, pstate, sass_number_get_value(v), sass_number_get_unit(v));
1483-
} break;
1484-
case SASS_COLOR: {
1485-
e = SASS_MEMORY_NEW(Color, pstate, sass_color_get_r(v), sass_color_get_g(v), sass_color_get_b(v), sass_color_get_a(v));
1486-
} break;
1487-
case SASS_STRING: {
1488-
if (sass_string_is_quoted(v))
1489-
e = SASS_MEMORY_NEW(String_Quoted, pstate, sass_string_get_value(v));
1490-
else {
1491-
e = SASS_MEMORY_NEW(String_Constant, pstate, sass_string_get_value(v));
1492-
}
1493-
} break;
1494-
case SASS_LIST: {
1495-
List_Ptr l = SASS_MEMORY_NEW(List, pstate, sass_list_get_length(v), sass_list_get_separator(v));
1496-
for (size_t i = 0, L = sass_list_get_length(v); i < L; ++i) {
1497-
l->append(cval_to_astnode(sass_list_get_value(v, i), traces, pstate));
1498-
}
1499-
l->is_bracketed(sass_list_get_is_bracketed(v));
1500-
e = l;
1501-
} break;
1502-
case SASS_MAP: {
1503-
Map_Ptr m = SASS_MEMORY_NEW(Map, pstate);
1504-
for (size_t i = 0, L = sass_map_get_length(v); i < L; ++i) {
1505-
*m << std::make_pair(
1506-
cval_to_astnode(sass_map_get_key(v, i), traces, pstate),
1507-
cval_to_astnode(sass_map_get_value(v, i), traces, pstate));
1508-
}
1509-
e = m;
1510-
} break;
1511-
case SASS_NULL: {
1512-
e = SASS_MEMORY_NEW(Null, pstate);
1513-
} break;
1514-
case SASS_ERROR: {
1515-
error("Error in C function: " + std::string(sass_error_get_message(v)), pstate, traces);
1516-
} break;
1517-
case SASS_WARNING: {
1518-
error("Warning in C function: " + std::string(sass_warning_get_message(v)), pstate, traces);
1519-
} break;
1520-
default: break;
1521-
}
1522-
return e;
1523-
}
1524-
15251471
Selector_List_Ptr Eval::operator()(Selector_List_Ptr s)
15261472
{
15271473
SelectorStack rv;

src/eval.hpp

-2
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,6 @@ namespace Sass {
9898

9999
};
100100

101-
Expression_Ptr cval_to_astnode(union Sass_Value* v, Backtraces traces, ParserState pstate = ParserState("[AST]"));
102-
103101
}
104102

105103
#endif

src/fn_colors.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <cctype>
12
#include <iomanip>
23
#include "ast.hpp"
34
#include "fn_utils.hpp"
@@ -738,4 +739,4 @@ namespace Sass {
738739

739740
}
740741

741-
}
742+
}

src/fn_strings.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
#include <cctype>
2+
#include "utf8.h"
13
#include "ast.hpp"
4+
#include "sass.hpp"
25
#include "fn_utils.hpp"
36
#include "fn_strings.hpp"
47

win/libsass.targets

+4-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@
6363
<ClInclude Include="$(LIBSASS_HEADERS_DIR)\sass_values.hpp" />
6464
<ClInclude Include="$(LIBSASS_HEADERS_DIR)\source_map.hpp" />
6565
<ClInclude Include="$(LIBSASS_HEADERS_DIR)\subset_map.hpp" />
66-
<ClInclude Include="$(LIBSASS_HEADERS_DIR)\to_c.hpp" />
66+
<ClInclude Include="$(LIBSASS_HEADERS_DIR)\ast2c.hpp" />
67+
<ClInclude Include="$(LIBSASS_HEADERS_DIR)\c2ast.hpp" />
6768
<ClInclude Include="$(LIBSASS_HEADERS_DIR)\to_value.hpp" />
6869
<ClInclude Include="$(LIBSASS_HEADERS_DIR)\units.hpp" />
6970
<ClInclude Include="$(LIBSASS_HEADERS_DIR)\utf8.h" />
@@ -124,7 +125,8 @@
124125
<ClCompile Include="$(LIBSASS_SRC_DIR)\sass2scss.cpp" />
125126
<ClCompile Include="$(LIBSASS_SRC_DIR)\source_map.cpp" />
126127
<ClCompile Include="$(LIBSASS_SRC_DIR)\subset_map.cpp" />
127-
<ClCompile Include="$(LIBSASS_SRC_DIR)\to_c.cpp" />
128+
<ClCompile Include="$(LIBSASS_SRC_DIR)\ast2c.cpp" />
129+
<ClCompile Include="$(LIBSASS_SRC_DIR)\c2ast.cpp" />
128130
<ClCompile Include="$(LIBSASS_SRC_DIR)\to_value.cpp" />
129131
<ClCompile Include="$(LIBSASS_SRC_DIR)\units.cpp" />
130132
<ClCompile Include="$(LIBSASS_SRC_DIR)\utf8_string.cpp" />

0 commit comments

Comments
 (0)