Initial commit
[yaffs-website] / node_modules / node-sass / src / libsass / src / ast_def_macros.hpp
1 #ifndef SASS_AST_DEF_MACROS_H
2 #define SASS_AST_DEF_MACROS_H
3
4 // Helper class to switch a flag and revert once we go out of scope
5 template <class T>
6 class LocalOption {
7   private:
8     T* var; // pointer to original variable
9     T orig; // copy of the original option
10   public:
11     LocalOption(T& var)
12     {
13       this->var = &var;
14       this->orig = var;
15     }
16     LocalOption(T& var, T orig)
17     {
18       this->var = &var;
19       this->orig = var;
20       *(this->var) = orig;
21     }
22     ~LocalOption() {
23       *(this->var) = this->orig;
24     }
25 };
26
27 #define LOCAL_FLAG(name,opt) LocalOption<bool> flag_##name(name, opt)
28
29 #define ATTACH_OPERATIONS()\
30 virtual void perform(Operation<void>* op) { (*op)(this); }\
31 virtual AST_Node_Ptr perform(Operation<AST_Node_Ptr>* op) { return (*op)(this); }\
32 virtual Statement_Ptr perform(Operation<Statement_Ptr>* op) { return (*op)(this); }\
33 virtual Expression_Ptr perform(Operation<Expression_Ptr>* op) { return (*op)(this); }\
34 virtual Selector_Ptr perform(Operation<Selector_Ptr>* op) { return (*op)(this); }\
35 virtual std::string perform(Operation<std::string>* op) { return (*op)(this); }\
36 virtual union Sass_Value* perform(Operation<union Sass_Value*>* op) { return (*op)(this); }\
37 virtual Value_Ptr perform(Operation<Value_Ptr>* op) { return (*op)(this); }
38
39 #define ADD_PROPERTY(type, name)\
40 protected:\
41   type name##_;\
42 public:\
43   type name() const        { return name##_; }\
44   type name(type name##__) { return name##_ = name##__; }\
45 private:
46
47 #define HASH_PROPERTY(type, name)\
48 protected:\
49   type name##_;\
50 public:\
51   type name() const        { return name##_; }\
52   type name(type name##__) { hash_ = 0; return name##_ = name##__; }\
53 private:
54
55 #define ADD_CONSTREF(type, name) \
56 protected: \
57   type name##_; \
58 public: \
59   const type& name() const { return name##_; } \
60   void name(type name##__) { name##_ = name##__; } \
61 private:
62
63 #define HASH_CONSTREF(type, name) \
64 protected: \
65   type name##_; \
66 public: \
67   const type& name() const { return name##_; } \
68   void name(type name##__) { hash_ = 0; name##_ = name##__; } \
69 private:
70
71 #endif