diff --git a/parser/nodes.h b/parser/nodes.h index 52fb5c9..0abcfce 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -15,31 +15,31 @@ class Node void addChildren(refptr other); std::vector< refptr > & getChildren() { return m_children; } - virtual int getInteger() const + virtual int getInteger() { std::cerr << "Warning: Node::getInteger() called!" << std::endl; return 0; } - virtual double getNumber() const + virtual double getNumber() { std::cerr << "Warning: Node::getNumber() called!" << std::endl; return 0.0; } - virtual refptr getVector() const + virtual refptr getVector() { std::cerr << "Warning: Node::getVector() called!" << std::endl; return refptr(NULL); } - virtual std::string getString() const + virtual std::string getString() { std::cerr << "Warning: Node::getString() called!" << std::endl; return ""; } - virtual bool isShape() const { return false; } - virtual bool isMaterial() const { return false; } - virtual bool isTransformBlock() const { return false; } - virtual bool isExpression() const { return false; } + virtual bool isShape() { return false; } + virtual bool isMaterial() { return false; } + virtual bool isTransformBlock() { return false; } + virtual bool isExpression() { return false; } protected: std::vector< refptr > m_children; @@ -50,8 +50,8 @@ class IntegerNode : public Node { public: IntegerNode(int number) { m_number = number; } - int getInteger() const { return m_number; } - double getNumber() const { return m_number; } + virtual int getInteger() { return m_number; } + virtual double getNumber() { return m_number; } protected: int m_number; @@ -70,7 +70,7 @@ class NumberNode : public Node addChild(expr); m_direct = false; } - double getNumber() const + virtual double getNumber() { return m_direct ? m_number : m_children[0]->getNumber(); } @@ -93,7 +93,7 @@ class VectorNode : public Node { addChild(node); } - refptr getVector() const + refptr getVector() { if (m_children.size() == 1) { @@ -177,7 +177,7 @@ class IdentifierNode : public Node { public: IdentifierNode(const std::string & str) { m_string = str; } - std::string getString() const + std::string getString() { return m_string; } @@ -272,7 +272,7 @@ class PlanePositionNode : public VectorNode { m_dist = dist; } - double getNumber() const { return m_dist->getNumber(); } + double getNumber() { return m_dist->getNumber(); } protected: refptr m_dist; @@ -430,8 +430,9 @@ class WidthNode : public IntegerNode class ExpressionNode : public Node { public: - bool isExpression() const { return true; } - virtual int getInteger() const { return getNumber(); } + bool isExpression() { return true; } + virtual double getNumber() = 0; + virtual int getInteger() { return getNumber(); } }; class BinOpNode : public ExpressionNode