@@ -572,13 +572,15 @@ namespace Sass {
572
572
// Trace.
573
573
// ///////////////
574
574
class Trace : public Has_Block {
575
+ ADD_CONSTREF (char , type)
575
576
ADD_CONSTREF (std::string, name)
576
577
public:
577
- Trace (ParserState pstate, std::string n, Block_Obj b = 0 )
578
- : Has_Block(pstate, b), name_(n)
578
+ Trace (ParserState pstate, std::string n, Block_Obj b = 0 , char type = ' m ' )
579
+ : Has_Block(pstate, b), type_(type), name_(n)
579
580
{ }
580
581
Trace (const Trace* ptr)
581
582
: Has_Block(ptr),
583
+ type_ (ptr->type_),
582
584
name_(ptr->name_)
583
585
{ }
584
586
ATTACH_AST_OPERATIONS (Trace)
@@ -943,7 +945,7 @@ namespace Sass {
943
945
// ///////////////////////////////////////////////////////////////////////////
944
946
struct Backtrace ;
945
947
typedef const char * Signature;
946
- typedef Expression_Ptr (*Native_Function)(Env&, Env&, Context&, Signature, ParserState, Backtrace* , std::vector<Selector_List_Obj>);
948
+ typedef Expression_Ptr (*Native_Function)(Env&, Env&, Context&, Signature, ParserState, Backtraces , std::vector<Selector_List_Obj>);
947
949
class Definition : public Has_Block {
948
950
public:
949
951
enum Type { MIXIN, FUNCTION };
@@ -1184,6 +1186,27 @@ namespace Sass {
1184
1186
}
1185
1187
}
1186
1188
1189
+ inline static const std::string sass_op_separator (enum Sass_OP op) {
1190
+ switch (op) {
1191
+ case AND: return " &&" ;
1192
+ case OR: return " ||" ;
1193
+ case EQ: return " ==" ;
1194
+ case NEQ: return " !=" ;
1195
+ case GT: return " >" ;
1196
+ case GTE: return " >=" ;
1197
+ case LT: return " <" ;
1198
+ case LTE: return " <=" ;
1199
+ case ADD: return " +" ;
1200
+ case SUB: return " -" ;
1201
+ case MUL: return " *" ;
1202
+ case DIV: return " /" ;
1203
+ case MOD: return " %" ;
1204
+ // this is only used internally!
1205
+ case NUM_OPS: return " [OPS]" ;
1206
+ default : return " invalid" ;
1207
+ }
1208
+ }
1209
+
1187
1210
// ////////////////////////////////////////////////////////////////////////
1188
1211
// Binary expressions. Represents logical, relational, and arithmetic
1189
1212
// operations. Templatized to avoid large switch statements and repetitive
@@ -1208,44 +1231,10 @@ namespace Sass {
1208
1231
hash_(ptr->hash_)
1209
1232
{ }
1210
1233
const std::string type_name () {
1211
- switch (optype ()) {
1212
- case AND: return " and" ;
1213
- case OR: return " or" ;
1214
- case EQ: return " eq" ;
1215
- case NEQ: return " neq" ;
1216
- case GT: return " gt" ;
1217
- case GTE: return " gte" ;
1218
- case LT: return " lt" ;
1219
- case LTE: return " lte" ;
1220
- case ADD: return " add" ;
1221
- case SUB: return " sub" ;
1222
- case MUL: return " mul" ;
1223
- case DIV: return " div" ;
1224
- case MOD: return " mod" ;
1225
- // this is only used internally!
1226
- case NUM_OPS: return " [OPS]" ;
1227
- default : return " invalid" ;
1228
- }
1234
+ return sass_op_to_name (optype ());
1229
1235
}
1230
1236
const std::string separator () {
1231
- switch (optype ()) {
1232
- case AND: return " &&" ;
1233
- case OR: return " ||" ;
1234
- case EQ: return " ==" ;
1235
- case NEQ: return " !=" ;
1236
- case GT: return " >" ;
1237
- case GTE: return " >=" ;
1238
- case LT: return " <" ;
1239
- case LTE: return " <=" ;
1240
- case ADD: return " +" ;
1241
- case SUB: return " -" ;
1242
- case MUL: return " *" ;
1243
- case DIV: return " /" ;
1244
- case MOD: return " %" ;
1245
- // this is only used internally!
1246
- case NUM_OPS: return " [OPS]" ;
1247
- default : return " invalid" ;
1248
- }
1237
+ return sass_op_separator (optype ());
1249
1238
}
1250
1239
bool is_left_interpolant (void ) const ;
1251
1240
bool is_right_interpolant (void ) const ;
@@ -1360,7 +1349,7 @@ namespace Sass {
1360
1349
: Expression(pstate), value_(val), name_(n), is_rest_argument_(rest), is_keyword_argument_(keyword), hash_(0 )
1361
1350
{
1362
1351
if (!name_.empty () && is_rest_argument_) {
1363
- error (" variable-length argument may not be passed by name" , pstate_);
1352
+ coreError (" variable-length argument may not be passed by name" , pstate_);
1364
1353
}
1365
1354
}
1366
1355
Argument (const Argument* ptr)
@@ -1372,7 +1361,7 @@ namespace Sass {
1372
1361
hash_(ptr->hash_)
1373
1362
{
1374
1363
if (!name_.empty () && is_rest_argument_) {
1375
- error (" variable-length argument may not be passed by name" , pstate_);
1364
+ coreError (" variable-length argument may not be passed by name" , pstate_);
1376
1365
}
1377
1366
}
1378
1367
@@ -2218,22 +2207,22 @@ namespace Sass {
2218
2207
{
2219
2208
if (p->default_value ()) {
2220
2209
if (has_rest_parameter ()) {
2221
- error (" optional parameters may not be combined with variable-length parameters" , p->pstate ());
2210
+ coreError (" optional parameters may not be combined with variable-length parameters" , p->pstate ());
2222
2211
}
2223
2212
has_optional_parameters (true );
2224
2213
}
2225
2214
else if (p->is_rest_parameter ()) {
2226
2215
if (has_rest_parameter ()) {
2227
- error (" functions and mixins cannot have more than one variable-length parameter" , p->pstate ());
2216
+ coreError (" functions and mixins cannot have more than one variable-length parameter" , p->pstate ());
2228
2217
}
2229
2218
has_rest_parameter (true );
2230
2219
}
2231
2220
else {
2232
2221
if (has_rest_parameter ()) {
2233
- error (" required parameters must precede variable-length parameters" , p->pstate ());
2222
+ coreError (" required parameters must precede variable-length parameters" , p->pstate ());
2234
2223
}
2235
2224
if (has_optional_parameters ()) {
2236
- error (" required parameters must precede optional parameters" , p->pstate ());
2225
+ coreError (" required parameters must precede optional parameters" , p->pstate ());
2237
2226
}
2238
2227
}
2239
2228
}
@@ -2872,13 +2861,13 @@ namespace Sass {
2872
2861
Complex_Selector_Obj innermost () { return last (); };
2873
2862
2874
2863
size_t length () const ;
2875
- Selector_List_Ptr resolve_parent_refs (std::vector<Selector_List_Obj>& pstack, bool implicit_parent = true );
2864
+ Selector_List_Ptr resolve_parent_refs (std::vector<Selector_List_Obj>& pstack, Backtraces& traces, bool implicit_parent = true );
2876
2865
virtual bool is_superselector_of (Compound_Selector_Obj sub, std::string wrapping = " " );
2877
2866
virtual bool is_superselector_of (Complex_Selector_Obj sub, std::string wrapping = " " );
2878
2867
virtual bool is_superselector_of (Selector_List_Obj sub, std::string wrapping = " " );
2879
2868
Selector_List_Ptr unify_with (Complex_Selector_Ptr rhs);
2880
2869
Combinator clear_innermost ();
2881
- void append (Complex_Selector_Obj);
2870
+ void append (Complex_Selector_Obj, Backtraces& traces );
2882
2871
void set_innermost (Complex_Selector_Obj, Combinator);
2883
2872
virtual size_t hash ()
2884
2873
{
@@ -2994,7 +2983,7 @@ namespace Sass {
2994
2983
virtual bool has_parent_ref () const ;
2995
2984
virtual bool has_real_parent_ref () const ;
2996
2985
void remove_parent_selectors ();
2997
- Selector_List_Ptr resolve_parent_refs (std::vector<Selector_List_Obj>& pstack, bool implicit_parent = true );
2986
+ Selector_List_Ptr resolve_parent_refs (std::vector<Selector_List_Obj>& pstack, Backtraces& traces, bool implicit_parent = true );
2998
2987
virtual bool is_superselector_of (Compound_Selector_Obj sub, std::string wrapping = " " );
2999
2988
virtual bool is_superselector_of (Complex_Selector_Obj sub, std::string wrapping = " " );
3000
2989
virtual bool is_superselector_of (Selector_List_Obj sub, std::string wrapping = " " );
0 commit comments