Commit 83a92d81 by Aaron Leung

Putting the node type-tag enum back inside the Node class.

parent 4808d322
...@@ -177,10 +177,10 @@ namespace Sass { ...@@ -177,10 +177,10 @@ namespace Sass {
{ {
switch (type) switch (type)
{ {
case number: case Node::number:
case numeric_percentage: case Node::numeric_percentage:
return value.numeric; return value.numeric;
case numeric_dimension: case Node::numeric_dimension:
return value.dimension.numeric; return value.dimension.numeric;
default: default:
break; break;
...@@ -193,11 +193,11 @@ namespace Sass { ...@@ -193,11 +193,11 @@ namespace Sass {
{ {
switch (type) switch (type)
{ {
case numeric_percentage: { case Node::numeric_percentage: {
return "\"%\""; return "\"%\"";
} break; } break;
case numeric_dimension: { case Node::numeric_dimension: {
string result("\""); string result("\"");
result += value.dimension.unit.to_string(); result += value.dimension.unit.to_string();
result += "\""; result += "\"";
......
...@@ -6,90 +6,6 @@ ...@@ -6,90 +6,6 @@
namespace Sass { namespace Sass {
using namespace std; using namespace std;
enum Node_Type {
none,
flags,
comment,
root,
ruleset,
propset,
selector_group,
selector,
selector_combinator,
simple_selector_sequence,
backref,
simple_selector,
type_selector,
class_selector,
id_selector,
pseudo,
pseudo_negation,
functional_pseudo,
attribute_selector,
block,
rule,
property,
nil,
comma_list,
space_list,
disjunction,
conjunction,
relation,
eq,
neq,
gt,
gte,
lt,
lte,
expression,
add,
sub,
term,
mul,
div,
factor,
unary_plus,
unary_minus,
values,
value,
identifier,
uri,
textual_percentage,
textual_dimension,
textual_number,
textual_hex,
color_name,
string_constant,
number,
numeric_percentage,
numeric_dimension,
numeric_color,
boolean,
important,
value_schema,
string_schema,
css_import,
function_call,
mixin,
parameters,
expansion,
arguments,
variable,
assignment
};
struct Node_Impl; struct Node_Impl;
class Node { class Node {
...@@ -100,8 +16,92 @@ namespace Sass { ...@@ -100,8 +16,92 @@ namespace Sass {
Node(); Node();
Node(Node_Impl* ip); // : ip_(ip) { } Node(Node_Impl* ip); // : ip_(ip) { }
public: public:
Node_Type type(); // { return ip_->type; } enum Type {
none,
flags,
comment,
root,
ruleset,
propset,
selector_group,
selector,
selector_combinator,
simple_selector_sequence,
backref,
simple_selector,
type_selector,
class_selector,
id_selector,
pseudo,
pseudo_negation,
functional_pseudo,
attribute_selector,
block,
rule,
property,
nil,
comma_list,
space_list,
disjunction,
conjunction,
relation,
eq,
neq,
gt,
gte,
lt,
lte,
expression,
add,
sub,
term,
mul,
div,
factor,
unary_plus,
unary_minus,
values,
value,
identifier,
uri,
textual_percentage,
textual_dimension,
textual_number,
textual_hex,
color_name,
string_constant,
number,
numeric_percentage,
numeric_dimension,
numeric_color,
boolean,
important,
value_schema,
string_schema,
css_import,
function_call,
mixin,
parameters,
expansion,
arguments,
variable,
assignment
};
Type type(); // { return ip_->type; }
bool has_children(); // { return ip_->has_children; } bool has_children(); // { return ip_->has_children; }
bool has_statements(); // { return ip_->has_statements; } bool has_statements(); // { return ip_->has_statements; }
...@@ -197,7 +197,7 @@ namespace Sass { ...@@ -197,7 +197,7 @@ namespace Sass {
string* file_name; string* file_name;
size_t line_number; size_t line_number;
Node_Type type; Node::Type type;
bool has_children; bool has_children;
bool has_statements; bool has_statements;
...@@ -219,7 +219,7 @@ namespace Sass { ...@@ -219,7 +219,7 @@ namespace Sass {
// bool boolean_value(); // bool boolean_value();
bool is_numeric() bool is_numeric()
{ return type >= number && type <= numeric_dimension; } { return type >= Node::number && type <= Node::numeric_dimension; }
size_t size() size_t size()
{ return children.size(); } { return children.size(); }
...@@ -252,7 +252,7 @@ namespace Sass { ...@@ -252,7 +252,7 @@ namespace Sass {
inline Node::Node(Node_Impl* ip) : ip_(ip) { } inline Node::Node(Node_Impl* ip) : ip_(ip) { }
inline Node_Type Node::type() { return ip_->type; } inline Node::Type Node::type() { return ip_->type; }
inline bool Node::has_children() { return ip_->has_children; } inline bool Node::has_children() { return ip_->has_children; }
inline bool Node::has_statements() { return ip_->has_statements; } inline bool Node::has_statements() { return ip_->has_statements; }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
namespace Sass { namespace Sass {
Node_Impl* Node_Factory::alloc_Node_Impl(Node_Type type, string* file, size_t line) Node_Impl* Node_Factory::alloc_Node_Impl(Node::Type type, string* file, size_t line)
{ {
Node_Impl* ip = new Node_Impl(); Node_Impl* ip = new Node_Impl();
ip->type = type; ip->type = type;
...@@ -12,14 +12,14 @@ namespace Sass { ...@@ -12,14 +12,14 @@ namespace Sass {
return ip; return ip;
} }
Node Node_Factory::node(Node_Type type, string* file, size_t line, const Token& t) Node Node_Factory::node(Node::Type type, string* file, size_t line, const Token& t)
{ {
Node_Impl* ip = alloc_Node_Impl(type, file, line); Node_Impl* ip = alloc_Node_Impl(type, file, line);
ip->value.token = t; ip->value.token = t;
return Node(ip); return Node(ip);
} }
Node Node_Factory::node(Node_Type type, string* file, size_t line, size_t size) Node Node_Factory::node(Node::Type type, string* file, size_t line, size_t size)
{ {
Node_Impl* ip = alloc_Node_Impl(type, file, line); Node_Impl* ip = alloc_Node_Impl(type, file, line);
ip->has_children = true; ip->has_children = true;
...@@ -29,14 +29,14 @@ namespace Sass { ...@@ -29,14 +29,14 @@ namespace Sass {
Node Node_Factory::node(string* file, size_t line, double v) Node Node_Factory::node(string* file, size_t line, double v)
{ {
Node_Impl* ip = alloc_Node_Impl(number, file, line); Node_Impl* ip = alloc_Node_Impl(Node::number, file, line);
ip->value.numeric = v; ip->value.numeric = v;
return Node(ip); return Node(ip);
} }
Node Node_Factory::node(string* file, size_t line, double v, const Token& t) Node Node_Factory::node(string* file, size_t line, double v, const Token& t)
{ {
Node_Impl* ip = alloc_Node_Impl(numeric_dimension, file, line); Node_Impl* ip = alloc_Node_Impl(Node::numeric_dimension, file, line);
ip->value.dimension.numeric = v; ip->value.dimension.numeric = v;
ip->value.dimension.unit = t; ip->value.dimension.unit = t;
return Node(ip); return Node(ip);
...@@ -44,7 +44,7 @@ namespace Sass { ...@@ -44,7 +44,7 @@ namespace Sass {
Node Node_Factory::node(string* file, size_t line, double r, double g, double b, double a) Node Node_Factory::node(string* file, size_t line, double r, double g, double b, double a)
{ {
Node color(node(numeric_color, file, line, 4)); Node color(node(Node::numeric_color, file, line, 4));
color << node(file, line, r) color << node(file, line, r)
<< node(file, line, g) << node(file, line, g)
<< node(file, line, b) << node(file, line, b)
......
...@@ -12,10 +12,10 @@ namespace Sass { ...@@ -12,10 +12,10 @@ namespace Sass {
class Node_Factory { class Node_Factory {
vector<Node_Impl*> pool_; vector<Node_Impl*> pool_;
Node_Impl* alloc_Node_Impl(Node_Type type, string* file, size_t line); Node_Impl* alloc_Node_Impl(Node::Type type, string* file, size_t line);
public: public:
Node node(Node_Type type, string* file, size_t line, const Token& t); Node node(Node::Type type, string* file, size_t line, const Token& t);
Node node(Node_Type type, string* file, size_t line, size_t size); Node node(Node::Type type, string* file, size_t line, size_t size);
Node node(string* file, size_t line, double v); Node node(string* file, size_t line, double v);
Node node(string* file, size_t line, double v, const Token& t); Node node(string* file, size_t line, double v, const Token& t);
Node node(string* file, size_t line, double r, double g, double b, double a = 1.0); Node node(string* file, size_t line, double r, double g, double b, double a = 1.0);
......
...@@ -16,7 +16,7 @@ int main() ...@@ -16,7 +16,7 @@ int main()
Node_Factory make = Node_Factory(); Node_Factory make = Node_Factory();
Node interior(make.node(block, 0, 0, 3)); Node interior(make.node(Node::block, 0, 0, 3));
cout << interior.size() << endl; cout << interior.size() << endl;
cout << interior.has_children() << endl; cout << interior.has_children() << endl;
......
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