Blame src/ast_def_macros.hpp

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