|
Packit Service |
7770af |
#ifndef SASS_AST_DEF_MACROS_H
|
|
Packit Service |
7770af |
#define SASS_AST_DEF_MACROS_H
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
// Helper class to switch a flag and revert once we go out of scope
|
|
Packit Service |
7770af |
template <class T>
|
|
Packit Service |
7770af |
class LocalOption {
|
|
Packit Service |
7770af |
private:
|
|
Packit Service |
7770af |
T* var; // pointer to original variable
|
|
Packit Service |
7770af |
T orig; // copy of the original option
|
|
Packit Service |
7770af |
public:
|
|
Packit Service |
7770af |
LocalOption(T& var)
|
|
Packit Service |
7770af |
{
|
|
Packit Service |
7770af |
this->var = &var;
|
|
Packit Service |
7770af |
this->orig = var;
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
LocalOption(T& var, T orig)
|
|
Packit Service |
7770af |
{
|
|
Packit Service |
7770af |
this->var = &var;
|
|
Packit Service |
7770af |
this->orig = var;
|
|
Packit Service |
7770af |
*(this->var) = orig;
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
void reset()
|
|
Packit Service |
7770af |
{
|
|
Packit Service |
7770af |
*(this->var) = this->orig;
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
~LocalOption() {
|
|
Packit Service |
7770af |
*(this->var) = this->orig;
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
};
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#define LOCAL_FLAG(name,opt) LocalOption<bool> flag_##name(name, opt)
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#define ATTACH_OPERATIONS()\
|
|
Packit Service |
7770af |
virtual void perform(Operation<void>* op) { (*op)(this); }\
|
|
Packit Service |
7770af |
virtual AST_Node_Ptr perform(Operation<AST_Node_Ptr>* op) { return (*op)(this); }\
|
|
Packit Service |
7770af |
virtual Statement_Ptr perform(Operation<Statement_Ptr>* op) { return (*op)(this); }\
|
|
Packit Service |
7770af |
virtual Expression_Ptr perform(Operation<Expression_Ptr>* op) { return (*op)(this); }\
|
|
Packit Service |
7770af |
virtual Selector_Ptr perform(Operation<Selector_Ptr>* op) { return (*op)(this); }\
|
|
Packit Service |
7770af |
virtual std::string perform(Operation<std::string>* op) { return (*op)(this); }\
|
|
Packit Service |
7770af |
virtual union Sass_Value* perform(Operation<union Sass_Value*>* op) { return (*op)(this); }\
|
|
Packit Service |
7770af |
virtual Value_Ptr perform(Operation<Value_Ptr>* op) { return (*op)(this); }
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#define ADD_PROPERTY(type, name)\
|
|
Packit Service |
7770af |
protected:\
|
|
Packit Service |
7770af |
type name##_;\
|
|
Packit Service |
7770af |
public:\
|
|
Packit Service |
7770af |
type name() const { return name##_; }\
|
|
Packit Service |
7770af |
type name(type name##__) { return name##_ = name##__; }\
|
|
Packit Service |
7770af |
private:
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#define HASH_PROPERTY(type, name)\
|
|
Packit Service |
7770af |
protected:\
|
|
Packit Service |
7770af |
type name##_;\
|
|
Packit Service |
7770af |
public:\
|
|
Packit Service |
7770af |
type name() const { return name##_; }\
|
|
Packit Service |
7770af |
type name(type name##__) { hash_ = 0; return name##_ = name##__; }\
|
|
Packit Service |
7770af |
private:
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#define ADD_CONSTREF(type, name) \
|
|
Packit Service |
7770af |
protected: \
|
|
Packit Service |
7770af |
type name##_; \
|
|
Packit Service |
7770af |
public: \
|
|
Packit Service |
7770af |
const type& name() const { return name##_; } \
|
|
Packit Service |
7770af |
void name(type name##__) { name##_ = name##__; } \
|
|
Packit Service |
7770af |
private:
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#define HASH_CONSTREF(type, name) \
|
|
Packit Service |
7770af |
protected: \
|
|
Packit Service |
7770af |
type name##_; \
|
|
Packit Service |
7770af |
public: \
|
|
Packit Service |
7770af |
const type& name() const { return name##_; } \
|
|
Packit Service |
7770af |
void name(type name##__) { hash_ = 0; name##_ = name##__; } \
|
|
Packit Service |
7770af |
private:
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#endif
|