1 #ifndef SASS_AST_DEF_MACROS_H
2 #define SASS_AST_DEF_MACROS_H
4 // Helper class to switch a flag and revert once we go out of scope
8 T* var; // pointer to original variable
9 T orig; // copy of the original option
16 LocalOption(T& var, T orig)
23 *(this->var) = this->orig;
27 #define LOCAL_FLAG(name,opt) LocalOption<bool> flag_##name(name, opt)
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); }
39 #define ADD_PROPERTY(type, name)\
43 type name() const { return name##_; }\
44 type name(type name##__) { return name##_ = name##__; }\
47 #define HASH_PROPERTY(type, name)\
51 type name() const { return name##_; }\
52 type name(type name##__) { hash_ = 0; return name##_ = name##__; }\
55 #define ADD_CONSTREF(type, name) \
59 const type& name() const { return name##_; } \
60 void name(type name##__) { name##_ = name##__; } \
63 #define HASH_CONSTREF(type, name) \
67 const type& name() const { return name##_; } \
68 void name(type name##__) { hash_ = 0; name##_ = name##__; } \