Commit 40050f5a by Aaron Leung

Cleaning up the token object.

parent 24e20128
...@@ -105,7 +105,8 @@ namespace Sass { ...@@ -105,7 +105,8 @@ namespace Sass {
Node values(Node::values); Node values(Node::values);
while(try_munching<identifier>() || try_munching<dimension>() || while(try_munching<identifier>() || try_munching<dimension>() ||
try_munching<percentage>() || try_munching<number>() || try_munching<percentage>() || try_munching<number>() ||
try_munching<hex>() || try_munching<variable>()) { try_munching<hex>() || try_munching<string_constant>() ||
try_munching<variable>()) {
if (top.begin[0] == '$') { if (top.begin[0] == '$') {
Node stuff(environment[string(top)]); Node stuff(environment[string(top)]);
for (int i = 0; i < stuff.children.size(); ++i) { for (int i = 0; i < stuff.children.size(); ++i) {
......
...@@ -34,7 +34,7 @@ namespace Sass { ...@@ -34,7 +34,7 @@ namespace Sass {
else if (mx == spaces || mx == ancestor_of) { else if (mx == spaces || mx == ancestor_of) {
after_whitespace = spaces(position); after_whitespace = spaces(position);
if (after_whitespace) { if (after_whitespace) {
top = Token(mx, position, after_whitespace, line_number); top = Token(position, after_whitespace);
line_number += count_interval<'\n'>(position, after_whitespace); line_number += count_interval<'\n'>(position, after_whitespace);
position = after_whitespace; position = after_whitespace;
return last_munch_succeeded = true; return last_munch_succeeded = true;
...@@ -52,7 +52,7 @@ namespace Sass { ...@@ -52,7 +52,7 @@ namespace Sass {
line_number += count_interval<'\n'>(position, after_whitespace); line_number += count_interval<'\n'>(position, after_whitespace);
char* after_token = mx(after_whitespace); char* after_token = mx(after_whitespace);
if (after_token) { if (after_token) {
top = Token(mx, after_whitespace, after_token, line_number); top = Token(after_whitespace, after_token);
position = after_token; position = after_token;
return last_munch_succeeded = true; return last_munch_succeeded = true;
} }
......
#include "token.hpp" #include "token.hpp"
namespace Sass { namespace Sass {
Token::Token() { Token::Token() : begin(0), end(0) { }
begin = 0; Token::Token(const char* _begin, const char* _end)
end = 0; : begin(_begin), end(_end) { }
line_number = 1;
}
Token::Token(Prelexer::prelexer _type,
const char* _begin,
const char* _end,
unsigned int _line_number) {
type = _type;
if (_begin > _end) begin = end = 0;
else begin = _begin, end = _end;
line_number = _line_number;
}
Token::Token(const Token& t) {
type = t.type;
begin = t.begin;
end = t.end;
line_number = t.line_number;
}
} }
\ No newline at end of file
...@@ -5,22 +5,13 @@ namespace Sass { ...@@ -5,22 +5,13 @@ namespace Sass {
using std::string; using std::string;
struct Token { struct Token {
Prelexer::prelexer type;
const char* begin; const char* begin;
const char* end; const char* end;
unsigned int line_number;
Token(); Token();
Token(Prelexer::prelexer _type, Token(const char* _begin, const char* _end);
const char* _begin,
const char* _end,
unsigned int _line_number);
Token(const Token& t);
inline bool is_null() { return begin == 0 || end == 0; } inline bool is_null() { return begin == 0 || end == 0; }
inline operator string() const { return string(begin, end - begin); } inline operator string() const { return string(begin, end - begin); }
inline bool operator<(const Token& rhs) const {
return (begin < rhs.begin) ||
(begin == rhs.begin && end < rhs.end);
}
}; };
} }
\ No newline at end of file
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