Commit f0f7765d by Lars Immisch

default statements and "control reaches end of non-void function"

One warning remains and should be taken care of properly.

In any case: this patch should be reviewed carefully.
parent 1825d0b3
...@@ -24,7 +24,7 @@ libsass: libsass_objs ...@@ -24,7 +24,7 @@ libsass: libsass_objs
prelexer.o prelexer.o
libsass_objs: sass_interface.cpp $(CPP_FILES) libsass_objs: sass_interface.cpp $(CPP_FILES)
g++ -O2 -c -combine sass_interface.cpp $(CPP_FILES) g++ -O2 -Wall -c -combine sass_interface.cpp $(CPP_FILES)
clean: clean:
rm -rf *.o *.a rm -rf *.o *.a
\ No newline at end of file
...@@ -139,9 +139,11 @@ namespace Sass { ...@@ -139,9 +139,11 @@ namespace Sass {
case expanded: case expanded:
root.emit_expanded_css(output, ""); root.emit_expanded_css(output, "");
break; break;
default:
break;
} }
string retval(output.str()); string retval(output.str());
if (!retval.empty()) retval.resize(retval.size()-1); if (!retval.empty()) retval.resize(retval.size()-1);
return retval; return retval;
} }
} }
\ No newline at end of file
...@@ -85,6 +85,8 @@ namespace Sass { ...@@ -85,6 +85,8 @@ namespace Sass {
catch (string& path) { catch (string& path) {
read_error("error reading file \"" + path + "\""); read_error("error reading file \"" + path + "\"");
} }
// unreached statement
return Node(Node::none);
} }
Node Document::parse_mixin_definition() Node Document::parse_mixin_definition()
...@@ -370,10 +372,9 @@ namespace Sass { ...@@ -370,10 +372,9 @@ namespace Sass {
else if (peek< exactly<'['> >(position)) { else if (peek< exactly<'['> >(position)) {
return parse_attribute_selector(); return parse_attribute_selector();
} }
else { syntax_error("invalid selector after " + lexed.to_string());
syntax_error("invalid selector after " + lexed.to_string()); // unreached statement
} return Node(Node::none);}
}
Node Document::parse_pseudo() { Node Document::parse_pseudo() {
if (lex< pseudo_not >()) { if (lex< pseudo_not >()) {
...@@ -420,9 +421,9 @@ namespace Sass { ...@@ -420,9 +421,9 @@ namespace Sass {
else if (lex < sequence< pseudo_prefix, identifier > >()) { else if (lex < sequence< pseudo_prefix, identifier > >()) {
return Node(Node::pseudo, line_number, lexed); return Node(Node::pseudo, line_number, lexed);
} }
else { syntax_error("unrecognized pseudo-class or pseudo-element");
syntax_error("unrecognized pseudo-class or pseudo-element"); // unreached statement
} return Node(Node::none);
} }
Node Document::parse_attribute_selector() Node Document::parse_attribute_selector()
...@@ -834,6 +835,8 @@ namespace Sass { ...@@ -834,6 +835,8 @@ namespace Sass {
} }
syntax_error("error reading values after " + lexed.to_string()); syntax_error("error reading values after " + lexed.to_string());
// unreached statement
return Node(Node::none);
} }
extern const char hash_lbrace[] = "#{"; extern const char hash_lbrace[] = "#{";
......
...@@ -142,6 +142,9 @@ namespace Sass { ...@@ -142,6 +142,9 @@ namespace Sass {
case Node::gte: return (lhs >= rhs) ? T : F; case Node::gte: return (lhs >= rhs) ? T : F;
case Node::lt: return (lhs < rhs) ? T : F; case Node::lt: return (lhs < rhs) ? T : F;
case Node::lte: return (lhs <= rhs) ? T : F; case Node::lte: return (lhs <= rhs) ? T : F;
default:
eval_error("unknown comparison operator " + expr.content.token.to_string(), expr.line_number, expr.file_name);
return Node(Node::none);
} }
} break; } break;
...@@ -150,7 +153,7 @@ namespace Sass { ...@@ -150,7 +153,7 @@ namespace Sass {
acc << eval(expr[0], env, f_env, registry); acc << eval(expr[0], env, f_env, registry);
Node rhs(eval(expr[2], env, f_env, registry)); Node rhs(eval(expr[2], env, f_env, registry));
accumulate(expr[1].type, acc, rhs, registry); accumulate(expr[1].type, acc, rhs, registry);
for (int i = 3; i < expr.size(); i += 2) { for (size_t i = 3; i < expr.size(); i += 2) {
Node rhs(eval(expr[i+1], env, f_env, registry)); Node rhs(eval(expr[i+1], env, f_env, registry));
accumulate(expr[i].type, acc, rhs, registry); accumulate(expr[i].type, acc, rhs, registry);
} }
...@@ -163,7 +166,7 @@ namespace Sass { ...@@ -163,7 +166,7 @@ namespace Sass {
acc << eval(expr[0], env, f_env, registry); acc << eval(expr[0], env, f_env, registry);
Node rhs(eval(expr[2], env, f_env, registry)); Node rhs(eval(expr[2], env, f_env, registry));
accumulate(expr[1].type, acc, rhs, registry); accumulate(expr[1].type, acc, rhs, registry);
for (int i = 3; i < expr.size(); i += 2) { for (size_t i = 3; i < expr.size(); i += 2) {
Node rhs(eval(expr[i+1], env, f_env, registry)); Node rhs(eval(expr[i+1], env, f_env, registry));
accumulate(expr[i].type, acc, rhs, registry); accumulate(expr[i].type, acc, rhs, registry);
} }
...@@ -248,7 +251,7 @@ namespace Sass { ...@@ -248,7 +251,7 @@ namespace Sass {
case Node::string_schema: case Node::string_schema:
case Node::value_schema: { case Node::value_schema: {
// cerr << "evaluating schema of size " << expr.size() << endl; // cerr << "evaluating schema of size " << expr.size() << endl;
for (int i = 0; i < expr.size(); ++i) { for (size_t i = 0; i < expr.size(); ++i) {
expr[i] = eval(expr[i], env, f_env, registry); expr[i] = eval(expr[i], env, f_env, registry);
} }
return expr; return expr;
...@@ -258,6 +261,8 @@ namespace Sass { ...@@ -258,6 +261,8 @@ namespace Sass {
return expr; return expr;
} }
} }
return expr;
} }
Node accumulate(Node::Type op, Node& acc, Node& rhs, vector<vector<Node>*>& registry) Node accumulate(Node::Type op, Node& acc, Node& rhs, vector<vector<Node>*>& registry)
......
...@@ -568,12 +568,11 @@ namespace Sass { ...@@ -568,12 +568,11 @@ namespace Sass {
else if (!n1.is_numeric() && !n2.is_numeric()) { else if (!n1.is_numeric() && !n2.is_numeric()) {
eval_error("arguments to comparable must be numeric", n1.line_number, n1.file_name); eval_error("arguments to comparable must be numeric", n1.line_number, n1.file_name);
} }
else {
Node F(Node::boolean); Node F(Node::boolean);
F.line_number = n1.line_number; F.line_number = n1.line_number;
F.content.boolean_value = false; F.content.boolean_value = false;
return F; return F;
}
} }
// Boolean Functions /////////////////////////////////////////////////// // Boolean Functions ///////////////////////////////////////////////////
...@@ -597,4 +596,4 @@ namespace Sass { ...@@ -597,4 +596,4 @@ namespace Sass {
} }
} }
\ No newline at end of file
...@@ -393,6 +393,8 @@ namespace Sass { ...@@ -393,6 +393,8 @@ namespace Sass {
case value: case value:
buf << ' ' << string(content.token); buf << ' ' << string(content.token);
break; break;
default:
break;
} }
} }
......
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