Initial commit
[yaffs-website] / node_modules / node-sass / src / libsass / src / operation.hpp
1 #ifndef SASS_OPERATION_H
2 #define SASS_OPERATION_H
3
4 #include "ast_fwd_decl.hpp"
5
6 namespace Sass {
7
8   template<typename T>
9   class Operation {
10   public:
11     virtual T operator()(AST_Node_Ptr x)               = 0;
12     virtual ~Operation()                            { }
13     // statements
14     virtual T operator()(Block_Ptr x)                  = 0;
15     virtual T operator()(Ruleset_Ptr x)                = 0;
16     virtual T operator()(Bubble_Ptr x)                 = 0;
17     virtual T operator()(Trace_Ptr x)                  = 0;
18     virtual T operator()(Supports_Block_Ptr x)         = 0;
19     virtual T operator()(Media_Block_Ptr x)            = 0;
20     virtual T operator()(At_Root_Block_Ptr x)          = 0;
21     virtual T operator()(Directive_Ptr x)              = 0;
22     virtual T operator()(Keyframe_Rule_Ptr x)          = 0;
23     virtual T operator()(Declaration_Ptr x)            = 0;
24     virtual T operator()(Assignment_Ptr x)             = 0;
25     virtual T operator()(Import_Ptr x)                 = 0;
26     virtual T operator()(Import_Stub_Ptr x)            = 0;
27     virtual T operator()(Warning_Ptr x)                = 0;
28     virtual T operator()(Error_Ptr x)                  = 0;
29     virtual T operator()(Debug_Ptr x)                  = 0;
30     virtual T operator()(Comment_Ptr x)                = 0;
31     virtual T operator()(If_Ptr x)                     = 0;
32     virtual T operator()(For_Ptr x)                    = 0;
33     virtual T operator()(Each_Ptr x)                   = 0;
34     virtual T operator()(While_Ptr x)                  = 0;
35     virtual T operator()(Return_Ptr x)                 = 0;
36     virtual T operator()(Content_Ptr x)                = 0;
37     virtual T operator()(Extension_Ptr x)              = 0;
38     virtual T operator()(Definition_Ptr x)             = 0;
39     virtual T operator()(Mixin_Call_Ptr x)             = 0;
40     // expressions
41     virtual T operator()(List_Ptr x)                   = 0;
42     virtual T operator()(Map_Ptr x)                    = 0;
43     virtual T operator()(Binary_Expression_Ptr x)      = 0;
44     virtual T operator()(Unary_Expression_Ptr x)       = 0;
45     virtual T operator()(Function_Call_Ptr x)          = 0;
46     virtual T operator()(Function_Call_Schema_Ptr x)   = 0;
47     virtual T operator()(Custom_Warning_Ptr x)         = 0;
48     virtual T operator()(Custom_Error_Ptr x)           = 0;
49     virtual T operator()(Variable_Ptr x)               = 0;
50     virtual T operator()(Textual_Ptr x)                = 0;
51     virtual T operator()(Number_Ptr x)                 = 0;
52     virtual T operator()(Color_Ptr x)                  = 0;
53     virtual T operator()(Boolean_Ptr x)                = 0;
54     virtual T operator()(String_Schema_Ptr x)          = 0;
55     virtual T operator()(String_Quoted_Ptr x)          = 0;
56     virtual T operator()(String_Constant_Ptr x)        = 0;
57     virtual T operator()(Supports_Condition_Ptr x)     = 0;
58     virtual T operator()(Supports_Operator_Ptr x)      = 0;
59     virtual T operator()(Supports_Negation_Ptr x)      = 0;
60     virtual T operator()(Supports_Declaration_Ptr x)   = 0;
61     virtual T operator()(Supports_Interpolation_Ptr x) = 0;
62     virtual T operator()(Media_Query_Ptr x)            = 0;
63     virtual T operator()(Media_Query_Expression_Ptr x) = 0;
64     virtual T operator()(At_Root_Query_Ptr x)          = 0;
65     virtual T operator()(Null_Ptr x)                   = 0;
66     virtual T operator()(Parent_Selector_Ptr x)        = 0;
67     // parameters and arguments
68     virtual T operator()(Parameter_Ptr x)              = 0;
69     virtual T operator()(Parameters_Ptr x)             = 0;
70     virtual T operator()(Argument_Ptr x)               = 0;
71     virtual T operator()(Arguments_Ptr x)              = 0;
72     // selectors
73     virtual T operator()(Selector_Schema_Ptr x)        = 0;
74     virtual T operator()(Placeholder_Selector_Ptr x)   = 0;
75     virtual T operator()(Element_Selector_Ptr x)       = 0;
76     virtual T operator()(Class_Selector_Ptr x)         = 0;
77     virtual T operator()(Id_Selector_Ptr x)            = 0;
78     virtual T operator()(Attribute_Selector_Ptr x)     = 0;
79     virtual T operator()(Pseudo_Selector_Ptr x)        = 0;
80     virtual T operator()(Wrapped_Selector_Ptr x)       = 0;
81     virtual T operator()(Compound_Selector_Ptr x)= 0;
82     virtual T operator()(Complex_Selector_Ptr x)      = 0;
83     virtual T operator()(Selector_List_Ptr x) = 0;
84
85     template <typename U>
86     T fallback(U x) { return T(); }
87   };
88
89   template <typename T, typename D>
90   class Operation_CRTP : public Operation<T> {
91   public:
92     D& impl() { return static_cast<D&>(*this); }
93   public:
94     T operator()(AST_Node_Ptr x)               { return static_cast<D*>(this)->fallback(x); }
95     // statements
96     T operator()(Block_Ptr x)                  { return static_cast<D*>(this)->fallback(x); }
97     T operator()(Ruleset_Ptr x)                { return static_cast<D*>(this)->fallback(x); }
98     T operator()(Bubble_Ptr x)                 { return static_cast<D*>(this)->fallback(x); }
99     T operator()(Trace_Ptr x)                  { return static_cast<D*>(this)->fallback(x); }
100     T operator()(Supports_Block_Ptr x)         { return static_cast<D*>(this)->fallback(x); }
101     T operator()(Media_Block_Ptr x)            { return static_cast<D*>(this)->fallback(x); }
102     T operator()(At_Root_Block_Ptr x)          { return static_cast<D*>(this)->fallback(x); }
103     T operator()(Directive_Ptr x)              { return static_cast<D*>(this)->fallback(x); }
104     T operator()(Keyframe_Rule_Ptr x)          { return static_cast<D*>(this)->fallback(x); }
105     T operator()(Declaration_Ptr x)            { return static_cast<D*>(this)->fallback(x); }
106     T operator()(Assignment_Ptr x)             { return static_cast<D*>(this)->fallback(x); }
107     T operator()(Import_Ptr x)                 { return static_cast<D*>(this)->fallback(x); }
108     T operator()(Import_Stub_Ptr x)            { return static_cast<D*>(this)->fallback(x); }
109     T operator()(Warning_Ptr x)                { return static_cast<D*>(this)->fallback(x); }
110     T operator()(Error_Ptr x)                  { return static_cast<D*>(this)->fallback(x); }
111     T operator()(Debug_Ptr x)                  { return static_cast<D*>(this)->fallback(x); }
112     T operator()(Comment_Ptr x)                { return static_cast<D*>(this)->fallback(x); }
113     T operator()(If_Ptr x)                     { return static_cast<D*>(this)->fallback(x); }
114     T operator()(For_Ptr x)                    { return static_cast<D*>(this)->fallback(x); }
115     T operator()(Each_Ptr x)                   { return static_cast<D*>(this)->fallback(x); }
116     T operator()(While_Ptr x)                  { return static_cast<D*>(this)->fallback(x); }
117     T operator()(Return_Ptr x)                 { return static_cast<D*>(this)->fallback(x); }
118     T operator()(Content_Ptr x)                { return static_cast<D*>(this)->fallback(x); }
119     T operator()(Extension_Ptr x)              { return static_cast<D*>(this)->fallback(x); }
120     T operator()(Definition_Ptr x)             { return static_cast<D*>(this)->fallback(x); }
121     T operator()(Mixin_Call_Ptr x)             { return static_cast<D*>(this)->fallback(x); }
122     // expressions
123     T operator()(List_Ptr x)                   { return static_cast<D*>(this)->fallback(x); }
124     T operator()(Map_Ptr x)                    { return static_cast<D*>(this)->fallback(x); }
125     T operator()(Binary_Expression_Ptr x)      { return static_cast<D*>(this)->fallback(x); }
126     T operator()(Unary_Expression_Ptr x)       { return static_cast<D*>(this)->fallback(x); }
127     T operator()(Function_Call_Ptr x)          { return static_cast<D*>(this)->fallback(x); }
128     T operator()(Function_Call_Schema_Ptr x)   { return static_cast<D*>(this)->fallback(x); }
129     T operator()(Custom_Warning_Ptr x)         { return static_cast<D*>(this)->fallback(x); }
130     T operator()(Custom_Error_Ptr x)           { return static_cast<D*>(this)->fallback(x); }
131     T operator()(Variable_Ptr x)               { return static_cast<D*>(this)->fallback(x); }
132     T operator()(Textual_Ptr x)                { return static_cast<D*>(this)->fallback(x); }
133     T operator()(Number_Ptr x)                 { return static_cast<D*>(this)->fallback(x); }
134     T operator()(Color_Ptr x)                  { return static_cast<D*>(this)->fallback(x); }
135     T operator()(Boolean_Ptr x)                { return static_cast<D*>(this)->fallback(x); }
136     T operator()(String_Schema_Ptr x)          { return static_cast<D*>(this)->fallback(x); }
137     T operator()(String_Constant_Ptr x)        { return static_cast<D*>(this)->fallback(x); }
138     T operator()(String_Quoted_Ptr x)          { return static_cast<D*>(this)->fallback(x); }
139     T operator()(Supports_Condition_Ptr x)     { return static_cast<D*>(this)->fallback(x); }
140     T operator()(Supports_Operator_Ptr x)      { return static_cast<D*>(this)->fallback(x); }
141     T operator()(Supports_Negation_Ptr x)      { return static_cast<D*>(this)->fallback(x); }
142     T operator()(Supports_Declaration_Ptr x)   { return static_cast<D*>(this)->fallback(x); }
143     T operator()(Supports_Interpolation_Ptr x) { return static_cast<D*>(this)->fallback(x); }
144     T operator()(Media_Query_Ptr x)            { return static_cast<D*>(this)->fallback(x); }
145     T operator()(Media_Query_Expression_Ptr x) { return static_cast<D*>(this)->fallback(x); }
146     T operator()(At_Root_Query_Ptr x)          { return static_cast<D*>(this)->fallback(x); }
147     T operator()(Null_Ptr x)                   { return static_cast<D*>(this)->fallback(x); }
148     T operator()(Parent_Selector_Ptr x)        { return static_cast<D*>(this)->fallback(x); }
149     // parameters and arguments
150     T operator()(Parameter_Ptr x)              { return static_cast<D*>(this)->fallback(x); }
151     T operator()(Parameters_Ptr x)             { return static_cast<D*>(this)->fallback(x); }
152     T operator()(Argument_Ptr x)               { return static_cast<D*>(this)->fallback(x); }
153     T operator()(Arguments_Ptr x)              { return static_cast<D*>(this)->fallback(x); }
154     // selectors
155     T operator()(Selector_Schema_Ptr x)        { return static_cast<D*>(this)->fallback(x); }
156     T operator()(Placeholder_Selector_Ptr x)   { return static_cast<D*>(this)->fallback(x); }
157     T operator()(Element_Selector_Ptr x)       { return static_cast<D*>(this)->fallback(x); }
158     T operator()(Class_Selector_Ptr x)         { return static_cast<D*>(this)->fallback(x); }
159     T operator()(Id_Selector_Ptr x)            { return static_cast<D*>(this)->fallback(x); }
160     T operator()(Attribute_Selector_Ptr x)     { return static_cast<D*>(this)->fallback(x); }
161     T operator()(Pseudo_Selector_Ptr x)        { return static_cast<D*>(this)->fallback(x); }
162     T operator()(Wrapped_Selector_Ptr x)       { return static_cast<D*>(this)->fallback(x); }
163     T operator()(Compound_Selector_Ptr x){ return static_cast<D*>(this)->fallback(x); }
164     T operator()(Complex_Selector_Ptr x)      { return static_cast<D*>(this)->fallback(x); }
165     T operator()(Selector_List_Ptr x) { return static_cast<D*>(this)->fallback(x); }
166
167     template <typename U>
168     T fallback(U x)                         { return T(); }
169   };
170
171 }
172
173 #endif