Skip to content

Commit 47bc665

Browse files
committed
Fix append function when handling argument lists
Fixes #1171
1 parent 66631c0 commit 47bc665

File tree

2 files changed

+17
-37
lines changed

2 files changed

+17
-37
lines changed

debugger.hpp

Lines changed: 5 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ inline void debug_ast(AST_Node* node, string ind = "", Env* env = 0)
290290
cerr << ind << "Import " << block;
291291
cerr << " (" << pstate_source_position(node) << ")";
292292
cerr << " " << block->tabs() << endl;
293-
debug_ast(block->media_queries(), ind + " @ ");
293+
// debug_ast(block->media_queries(), ind + " @ ");
294294
// vector<string> files_;
295295
for (auto imp : block->urls()) debug_ast(imp, "@ ", env);
296296
} else if (dynamic_cast<Assignment*>(node)) {
@@ -390,39 +390,26 @@ inline void debug_ast(AST_Node* node, string ind = "", Env* env = 0)
390390
if (env && env->has(name)) debug_ast(static_cast<Expression*>((*env)[name]), ind + " -> ", env);
391391
} else if (dynamic_cast<Function_Call_Schema*>(node)) {
392392
Function_Call_Schema* expression = dynamic_cast<Function_Call_Schema*>(node);
393-
cerr << ind << "Function_Call_Schema " << expression << "]";
394-
if (expression->is_delayed()) cerr << " [delayed]";
395-
cerr << endl;
396393
cerr << ind << "Function_Call_Schema " << expression;
397394
cerr << " (" << pstate_source_position(node) << ")";
398395
cerr << "" << endl;
399396
debug_ast(expression->name(), ind + "name: ", env);
400397
debug_ast(expression->arguments(), ind + " args: ", env);
401398
} else if (dynamic_cast<Function_Call*>(node)) {
402399
Function_Call* expression = dynamic_cast<Function_Call*>(node);
403-
cerr << ind << "Function_Call " << expression << " [" << expression->name() << "]";
404-
if (expression->is_delayed()) cerr << " [delayed]";
405-
cerr << endl;
406400
cerr << ind << "Function_Call " << expression;
407401
cerr << " (" << pstate_source_position(node) << ")";
408402
cerr << " [" << expression->name() << "]" << endl;
409403
debug_ast(expression->arguments(), ind + " args: ", env);
410404
} else if (dynamic_cast<Arguments*>(node)) {
411405
Arguments* expression = dynamic_cast<Arguments*>(node);
412-
cerr << ind << "Arguments " << expression << "]";
413-
if (expression->is_delayed()) cerr << " [delayed]";
414-
cerr << endl;
415406
cerr << ind << "Arguments " << expression;
407+
if (expression->is_delayed()) cerr << " [delayed]";
416408
cerr << " (" << pstate_source_position(node) << ")";
417409
cerr << endl;
418410
for(auto i : expression->elements()) { debug_ast(i, ind + " ", env); }
419411
} else if (dynamic_cast<Argument*>(node)) {
420412
Argument* expression = dynamic_cast<Argument*>(node);
421-
cerr << ind << "Argument " << expression << " [" << expression->value() << "]";
422-
if (expression->is_delayed()) cerr << " [delayed]";
423-
if (expression->is_rest_argument()) cerr << " [is_rest_argument]";
424-
if (expression->is_keyword_argument()) cerr << " [is_keyword_argument]";
425-
cerr << endl;
426413
cerr << ind << "Argument " << expression;
427414
cerr << " (" << pstate_source_position(node) << ")";
428415
cerr << " [" << expression->value() << "]";
@@ -447,18 +434,12 @@ inline void debug_ast(AST_Node* node, string ind = "", Env* env = 0)
447434
cerr << " [rest: " << expression->is_rest_parameter() << "] " << endl;
448435
} else if (dynamic_cast<Unary_Expression*>(node)) {
449436
Unary_Expression* expression = dynamic_cast<Unary_Expression*>(node);
450-
cerr << ind << "Unary_Expression " << expression << " [" << expression->type_name() << "]";
451-
if (expression->is_delayed()) cerr << " [delayed]";
452-
cerr << endl;
453437
cerr << ind << "Unary_Expression " << expression;
454438
cerr << " (" << pstate_source_position(node) << ")";
455439
cerr << " [" << expression->type() << "]" << endl;
456440
debug_ast(expression->operand(), ind + " operand: ", env);
457441
} else if (dynamic_cast<Binary_Expression*>(node)) {
458442
Binary_Expression* expression = dynamic_cast<Binary_Expression*>(node);
459-
cerr << ind << "Binary_Expression " << expression << " [" << expression->type_name() << "]";
460-
if (expression->is_delayed()) cerr << " [delayed]";
461-
cerr << endl;
462443
cerr << ind << "Binary_Expression " << expression;
463444
cerr << " (" << pstate_source_position(node) << ")";
464445
cerr << " [" << expression->type() << "]" << endl;
@@ -476,9 +457,6 @@ inline void debug_ast(AST_Node* node, string ind = "", Env* env = 0)
476457
cerr << " (" << expression->length() << ") " <<
477458
(expression->separator() == Sass::List::Separator::COMMA ? "Comma " : "Space ") <<
478459
" [delayed: " << expression->is_delayed() << "] " <<
479-
" [interpolant: " << expression->is_interpolant() << "]";
480-
if (expression->is_arglist()) cerr << " [is_arglist]";
481-
cerr << endl;
482460
" [interpolant: " << expression->is_interpolant() << "] " <<
483461
" [arglist: " << expression->is_arglist() << "] " <<
484462
endl;
@@ -490,25 +468,16 @@ inline void debug_ast(AST_Node* node, string ind = "", Env* env = 0)
490468
cerr << " [Statement]" << endl;
491469
} else if (dynamic_cast<Boolean*>(node)) {
492470
Boolean* expression = dynamic_cast<Boolean*>(node);
493-
cerr << ind << "Boolean " << expression << " [" << expression->value() << "]";
494-
if (expression->is_delayed()) cerr << " [delayed]";
495-
cerr << endl;
496471
cerr << ind << "Boolean " << expression;
497472
cerr << " (" << pstate_source_position(node) << ")";
498473
cerr << " [" << expression->value() << "]" << endl;
499474
} else if (dynamic_cast<Color*>(node)) {
500475
Color* expression = dynamic_cast<Color*>(node);
501-
cerr << ind << "Color " << expression << " [" << expression->r() << ":" << expression->g() << ":" << expression->b() << "@" << expression->a() << "]";
502-
if (expression->is_delayed()) cerr << " [delayed]";
503-
cerr << endl;
504476
cerr << ind << "Color " << expression;
505477
cerr << " (" << pstate_source_position(node) << ")";
506478
cerr << " [" << expression->r() << ":" << expression->g() << ":" << expression->b() << "@" << expression->a() << "]" << endl;
507479
} else if (dynamic_cast<Number*>(node)) {
508480
Number* expression = dynamic_cast<Number*>(node);
509-
cerr << ind << "Number " << expression << " [" << expression->value() << expression->unit() << "]";
510-
if (expression->is_delayed()) cerr << " [delayed]";
511-
cerr << endl;
512481
cerr << ind << "Number " << expression;
513482
cerr << " (" << pstate_source_position(node) << ")";
514483
cerr << " [" << expression->value() << expression->unit() << "]" << endl;
@@ -533,7 +502,7 @@ inline void debug_ast(AST_Node* node, string ind = "", Env* env = 0)
533502
cerr << " [" << prettyprint(expression->value()) << "]";
534503
if (expression->is_delayed()) cerr << " [delayed]";
535504
if (expression->sass_fix_1291()) cerr << " [sass_fix_1291]";
536-
cerr " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << endl;
505+
cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << endl;
537506
cerr << ind << "String_Constant : " << expression;
538507
cerr << " (" << pstate_source_position(node) << ")";
539508
cerr << " [" << prettyprint(expression->value()) << "]" <<
@@ -546,7 +515,7 @@ inline void debug_ast(AST_Node* node, string ind = "", Env* env = 0)
546515
cerr << ind << "String_Schema " << expression << " [" << expression->concrete_type() << "]";
547516
if (expression->is_delayed()) cerr << " [delayed]";
548517
if (expression->has_interpolants()) cerr << " [has_interpolants]";
549-
cerr " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << endl;
518+
cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << endl;
550519
cerr << ind << "String_Schema " << expression;
551520
cerr << " (" << pstate_source_position(node) << ")";
552521
cerr << " " << expression->concrete_type() <<
@@ -557,7 +526,7 @@ inline void debug_ast(AST_Node* node, string ind = "", Env* env = 0)
557526
String* expression = dynamic_cast<String*>(node);
558527
cerr << ind << "String " << expression << expression->concrete_type();
559528
if (expression->sass_fix_1291()) cerr << " [sass_fix_1291]";
560-
cerr " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << endl;
529+
cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << endl;
561530
cerr << ind << "String " << expression;
562531
cerr << " (" << pstate_source_position(node) << ")";
563532
cerr << expression->concrete_type() <<

functions.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1217,7 +1217,18 @@ namespace Sass {
12171217
else if (sep_str == "comma") result->separator(List::COMMA);
12181218
else if (sep_str != "auto") error("argument `$separator` of `" + string(sig) + "` must be `space`, `comma`, or `auto`", pstate);
12191219
*result += l;
1220-
*result << v;
1220+
bool is_arglist = l->is_arglist();
1221+
result->is_arglist(is_arglist);
1222+
if (is_arglist) {
1223+
*result << new (ctx.mem) Argument(v->pstate(),
1224+
v,
1225+
"",
1226+
false,
1227+
false);
1228+
1229+
} else {
1230+
*result << v;
1231+
}
12211232
return result;
12221233
}
12231234

0 commit comments

Comments
 (0)