Commit 2dbc45a0 by Aaron Leung

More fixes for evaluation edge-cases.

parent f25d02b2
...@@ -215,12 +215,10 @@ namespace Sass { ...@@ -215,12 +215,10 @@ namespace Sass {
if (lex< exactly<'('> >()) { if (lex< exactly<'('> >()) {
if (!peek< exactly<')'> >(position)) { if (!peek< exactly<')'> >(position)) {
Node arg(parse_argument(Node::none)); Node arg(parse_argument(Node::none));
arg.should_eval() = true;
args << arg; args << arg;
if (arg.type() == Node::assignment) arg_type = Node::assignment; if (arg.type() == Node::assignment) arg_type = Node::assignment;
while (lex< exactly<','> >()) { while (lex< exactly<','> >()) {
Node arg(parse_argument(arg_type)); Node arg(parse_argument(arg_type));
arg.should_eval() = true;
args << arg; args << arg;
if (arg.type() == Node::assignment) arg_type = Node::assignment; if (arg.type() == Node::assignment) arg_type = Node::assignment;
} }
...@@ -239,6 +237,7 @@ namespace Sass { ...@@ -239,6 +237,7 @@ namespace Sass {
Node var(context.new_Node(Node::variable, path, line, lexed)); Node var(context.new_Node(Node::variable, path, line, lexed));
lex< exactly<':'> >(); lex< exactly<':'> >();
Node val(parse_space_list()); Node val(parse_space_list());
// val.should_eval() = true;
Node assn(context.new_Node(Node::assignment, path, line, 2)); Node assn(context.new_Node(Node::assignment, path, line, 2));
assn << var << val; assn << var << val;
return assn; return assn;
...@@ -254,23 +253,14 @@ namespace Sass { ...@@ -254,23 +253,14 @@ namespace Sass {
Node var(context.new_Node(Node::variable, path, line, lexed)); Node var(context.new_Node(Node::variable, path, line, lexed));
lex< exactly<':'> >(); lex< exactly<':'> >();
Node val(parse_space_list()); Node val(parse_space_list());
// val.should_eval() = true;
Node assn(context.new_Node(Node::assignment, path, line, 2)); Node assn(context.new_Node(Node::assignment, path, line, 2));
assn << var << val; assn << var << val;
return assn; return assn;
} }
return parse_space_list(); Node val(parse_space_list());
// if (peek< sequence < variable, spaces_and_comments, exactly<':'> > >()) { val.should_eval() = true;
// lex< variable >(); return val;
// Node var(context.new_Node(Node::variable, path, line, lexed));
// lex< exactly<':'> >();
// Node val(parse_space_list());
// Node assn(context.new_Node(Node::assignment, path, line, 2));
// assn << var << val;
// return assn;
// }
// else {
// return parse_space_list();
// }
} }
Node Document::parse_assignment() Node Document::parse_assignment()
...@@ -909,45 +899,45 @@ namespace Sass { ...@@ -909,45 +899,45 @@ namespace Sass {
if (lex< identifier >()) if (lex< identifier >())
{ return context.new_Node(Node::identifier, path, line, lexed); } { return context.new_Node(Node::identifier, path, line, lexed); }
// if (lex< percentage >()) if (lex< percentage >())
// { return context.new_Node(Node::textual_percentage, path, line, lexed); } { return context.new_Node(Node::textual_percentage, path, line, lexed); }
// if (lex< dimension >()) if (lex< dimension >())
// { return context.new_Node(Node::textual_dimension, path, line, lexed); } { return context.new_Node(Node::textual_dimension, path, line, lexed); }
// if (lex< number >()) if (lex< number >())
// { return context.new_Node(Node::textual_number, path, line, lexed); } { return context.new_Node(Node::textual_number, path, line, lexed); }
// if (lex< hex >()) if (lex< hex >())
// { return context.new_Node(Node::textual_hex, path, line, lexed); } { return context.new_Node(Node::textual_hex, path, line, lexed); }
if (lex< percentage >()) // if (lex< percentage >())
{ return context.new_Node(path, line, atof(lexed.begin), Node::numeric_percentage); } // { return context.new_Node(path, line, atof(lexed.begin), Node::numeric_percentage); }
if (lex< dimension >()) { // if (lex< dimension >()) {
return context.new_Node(path, line, atof(lexed.begin), // return context.new_Node(path, line, atof(lexed.begin),
Token::make(Prelexer::number(lexed.begin), lexed.end)); // Token::make(Prelexer::number(lexed.begin), lexed.end));
} // }
if (lex< number >()) // if (lex< number >())
{ return context.new_Node(path, line, atof(lexed.begin)); } // { return context.new_Node(path, line, atof(lexed.begin)); }
if (lex< hex >()) { // if (lex< hex >()) {
Node triple(context.new_Node(Node::numeric_color, path, line, 4)); // Node triple(context.new_Node(Node::numeric_color, path, line, 4));
Token hext(Token::make(lexed.begin+1, lexed.end)); // Token hext(Token::make(lexed.begin+1, lexed.end));
if (hext.length() == 6) { // if (hext.length() == 6) {
for (int i = 0; i < 6; i += 2) { // for (int i = 0; i < 6; i += 2) {
triple << context.new_Node(path, line, static_cast<double>(strtol(string(hext.begin+i, 2).c_str(), NULL, 16))); // triple << context.new_Node(path, line, static_cast<double>(strtol(string(hext.begin+i, 2).c_str(), NULL, 16)));
} // }
} // }
else { // else {
for (int i = 0; i < 3; ++i) { // for (int i = 0; i < 3; ++i) {
triple << context.new_Node(path, line, static_cast<double>(strtol(string(2, hext.begin[i]).c_str(), NULL, 16))); // triple << context.new_Node(path, line, static_cast<double>(strtol(string(2, hext.begin[i]).c_str(), NULL, 16)));
} // }
} // }
triple << context.new_Node(path, line, 1.0); // triple << context.new_Node(path, line, 1.0);
return triple; // return triple;
} // }
if (peek< string_constant >()) if (peek< string_constant >())
{ return parse_string(); } { return parse_string(); }
...@@ -1023,30 +1013,34 @@ namespace Sass { ...@@ -1023,30 +1013,34 @@ namespace Sass {
schema << context.new_Node(Node::identifier, path, line, lexed); schema << context.new_Node(Node::identifier, path, line, lexed);
} }
else if (lex< percentage >()) { else if (lex< percentage >()) {
schema << context.new_Node(path, line, atof(lexed.begin), Node::numeric_percentage); schema << context.new_Node(Node::textual_percentage, path, line, lexed);
// schema << context.new_Node(path, line, atof(lexed.begin), Node::numeric_percentage);
} }
else if (lex< dimension >()) { else if (lex< dimension >()) {
schema << context.new_Node(path, line, atof(lexed.begin), schema << context.new_Node(Node::textual_dimension, path, line, lexed);
Token::make(Prelexer::number(lexed.begin), lexed.end)); // schema << context.new_Node(path, line, atof(lexed.begin),
// Token::make(Prelexer::number(lexed.begin), lexed.end));
} }
else if (lex< number >()) { else if (lex< number >()) {
schema << context.new_Node(path, line, atof(lexed.begin)); schema << context.new_Node(Node::textual_number, path, line, lexed);
// schema << context.new_Node(path, line, atof(lexed.begin));
} }
else if (lex< hex >()) { else if (lex< hex >()) {
Node triple(context.new_Node(Node::numeric_color, path, line, 4)); schema << context.new_Node(Node::textual_hex, path, line, lexed);
Token hext(Token::make(lexed.begin+1, lexed.end)); // Node triple(context.new_Node(Node::numeric_color, path, line, 4));
if (hext.length() == 6) { // Token hext(Token::make(lexed.begin+1, lexed.end));
for (int i = 0; i < 6; i += 2) { // if (hext.length() == 6) {
triple << context.new_Node(path, line, static_cast<double>(strtol(string(hext.begin+i, 2).c_str(), NULL, 16))); // for (int i = 0; i < 6; i += 2) {
} // triple << context.new_Node(path, line, static_cast<double>(strtol(string(hext.begin+i, 2).c_str(), NULL, 16)));
} // }
else { // }
for (int i = 0; i < 3; ++i) { // else {
triple << context.new_Node(path, line, static_cast<double>(strtol(string(2, hext.begin[i]).c_str(), NULL, 16))); // for (int i = 0; i < 3; ++i) {
} // triple << context.new_Node(path, line, static_cast<double>(strtol(string(2, hext.begin[i]).c_str(), NULL, 16)));
} // }
triple << context.new_Node(path, line, 1.0); // }
schema << triple; // triple << context.new_Node(path, line, 1.0);
// schema << triple;
} }
else if (lex< string_constant >()) { else if (lex< string_constant >()) {
Node str(context.new_Node(Node::string_constant, path, line, lexed)); Node str(context.new_Node(Node::string_constant, path, line, lexed));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment