Skip to content
This repository was archived by the owner on Oct 24, 2025. It is now read-only.

Commit 9c16b17

Browse files
author
Aaron Leung
committed
More eval edge cases.
1 parent a64a5c4 commit 9c16b17

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

document_parser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ namespace Sass {
237237
Node var(context.new_Node(Node::variable, path, line, lexed));
238238
lex< exactly<':'> >();
239239
Node val(parse_space_list());
240-
// val.should_eval() = true;
240+
val.should_eval() = true;
241241
Node assn(context.new_Node(Node::assignment, path, line, 2));
242242
assn << var << val;
243243
return assn;
@@ -253,7 +253,7 @@ namespace Sass {
253253
Node var(context.new_Node(Node::variable, path, line, lexed));
254254
lex< exactly<':'> >();
255255
Node val(parse_space_list());
256-
// val.should_eval() = true;
256+
val.should_eval() = true;
257257
Node assn(context.new_Node(Node::assignment, path, line, 2));
258258
assn << var << val;
259259
return assn;

eval_apply.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -610,8 +610,10 @@ namespace Sass {
610610
evaluated_args << eval(args[i], prefix, env, f_env, new_Node, ctx);
611611
if (evaluated_args.back().type() == Node::list) {
612612
Node arg_list(evaluated_args.back());
613+
Node new_arg_list(new_Node(Node::list, arg_list.path(), arg_list.line(), arg_list.size()));
613614
for (size_t j = 0, S = arg_list.size(); j < S; ++j) {
614-
if (arg_list[j].should_eval()) arg_list[j] = eval(arg_list[j], prefix, env, f_env, new_Node, ctx);
615+
if (arg_list[j].should_eval()) new_arg_list << eval(arg_list[j], prefix, env, f_env, new_Node, ctx);
616+
else new_arg_list << arg_list[j];
615617
}
616618
}
617619
}
@@ -621,16 +623,20 @@ namespace Sass {
621623
kwdarg << eval(args[i][1], prefix, env, f_env, new_Node, ctx);
622624
if (kwdarg.back().type() == Node::list) {
623625
Node arg_list(kwdarg.back());
626+
Node new_arg_list(new_Node(Node::list, arg_list.path(), arg_list.line(), arg_list.size()));
624627
for (size_t j = 0, S = arg_list.size(); j < S; ++j) {
625-
if (arg_list[j].should_eval()) arg_list[j] = eval(arg_list[j], prefix, env, f_env, new_Node, ctx);
628+
if (arg_list[j].should_eval()) new_arg_list << eval(arg_list[j], prefix, env, f_env, new_Node, ctx);
629+
else new_arg_list << arg_list[j];
626630
}
631+
kwdarg[1] = new_arg_list;
627632
}
628633
evaluated_args << kwdarg;
629634
}
630635
}
631636
// eval twice because args may be delayed
632637
for (size_t i = 0, S = evaluated_args.size(); i < S; ++i) {
633638
if (evaluated_args[i].type() != Node::assignment) {
639+
evaluated_args[i].should_eval() = true;
634640
evaluated_args[i] = eval(evaluated_args[i], prefix, env, f_env, new_Node, ctx);
635641
if (evaluated_args[i].type() == Node::list) {
636642
Node arg_list(evaluated_args[i]);
@@ -641,6 +647,7 @@ namespace Sass {
641647
}
642648
else {
643649
Node kwdarg(evaluated_args[i]);
650+
kwdarg[1].should_eval() = true;
644651
kwdarg[1] = eval(kwdarg[1], prefix, env, f_env, new_Node, ctx);
645652
if (kwdarg[1].type() == Node::list) {
646653
Node arg_list(kwdarg[1]);

0 commit comments

Comments
 (0)