Initial commit
[yaffs-website] / node_modules / node-sass / src / libsass / src / eval.hpp
1 #ifndef SASS_EVAL_H
2 #define SASS_EVAL_H
3
4 #include "ast.hpp"
5 #include "context.hpp"
6 #include "listize.hpp"
7 #include "operation.hpp"
8 #include "environment.hpp"
9
10 namespace Sass {
11
12   class Expand;
13   class Context;
14
15   class Eval : public Operation_CRTP<Expression_Ptr, Eval> {
16
17    private:
18     Expression_Ptr fallback_impl(AST_Node_Ptr n);
19
20    public:
21     Expand&  exp;
22     Context& ctx;
23     Eval(Expand& exp);
24     ~Eval();
25
26     bool force;
27     bool is_in_comment;
28
29     Env* environment();
30     Backtrace* backtrace();
31     Selector_List_Obj selector();
32
33     // for evaluating function bodies
34     Expression_Ptr operator()(Block_Ptr);
35     Expression_Ptr operator()(Assignment_Ptr);
36     Expression_Ptr operator()(If_Ptr);
37     Expression_Ptr operator()(For_Ptr);
38     Expression_Ptr operator()(Each_Ptr);
39     Expression_Ptr operator()(While_Ptr);
40     Expression_Ptr operator()(Return_Ptr);
41     Expression_Ptr operator()(Warning_Ptr);
42     Expression_Ptr operator()(Error_Ptr);
43     Expression_Ptr operator()(Debug_Ptr);
44
45     Expression_Ptr operator()(List_Ptr);
46     Expression_Ptr operator()(Map_Ptr);
47     Expression_Ptr operator()(Binary_Expression_Ptr);
48     Expression_Ptr operator()(Unary_Expression_Ptr);
49     Expression_Ptr operator()(Function_Call_Ptr);
50     Expression_Ptr operator()(Function_Call_Schema_Ptr);
51     Expression_Ptr operator()(Variable_Ptr);
52     Expression_Ptr operator()(Textual_Ptr);
53     Expression_Ptr operator()(Number_Ptr);
54     Expression_Ptr operator()(Color_Ptr);
55     Expression_Ptr operator()(Boolean_Ptr);
56     Expression_Ptr operator()(String_Schema_Ptr);
57     Expression_Ptr operator()(String_Quoted_Ptr);
58     Expression_Ptr operator()(String_Constant_Ptr);
59     // Expression_Ptr operator()(Selector_List_Ptr);
60     Expression_Ptr operator()(Media_Query_Ptr);
61     Expression_Ptr operator()(Media_Query_Expression_Ptr);
62     Expression_Ptr operator()(At_Root_Query_Ptr);
63     Expression_Ptr operator()(Supports_Operator_Ptr);
64     Expression_Ptr operator()(Supports_Negation_Ptr);
65     Expression_Ptr operator()(Supports_Declaration_Ptr);
66     Expression_Ptr operator()(Supports_Interpolation_Ptr);
67     Expression_Ptr operator()(Null_Ptr);
68     Expression_Ptr operator()(Argument_Ptr);
69     Expression_Ptr operator()(Arguments_Ptr);
70     Expression_Ptr operator()(Comment_Ptr);
71
72     // these will return selectors
73     Selector_List_Ptr operator()(Selector_List_Ptr);
74     Selector_List_Ptr operator()(Complex_Selector_Ptr);
75     Attribute_Selector_Ptr operator()(Attribute_Selector_Ptr);
76     // they don't have any specific implementatio (yet)
77     Element_Selector_Ptr operator()(Element_Selector_Ptr s) { return s; };
78     Pseudo_Selector_Ptr operator()(Pseudo_Selector_Ptr s) { return s; };
79     Wrapped_Selector_Ptr operator()(Wrapped_Selector_Ptr s) { return s; };
80     Class_Selector_Ptr operator()(Class_Selector_Ptr s) { return s; };
81     Id_Selector_Ptr operator()(Id_Selector_Ptr s) { return s; };
82     Placeholder_Selector_Ptr operator()(Placeholder_Selector_Ptr s) { return s; };
83     // actual evaluated selectors
84     Selector_List_Ptr operator()(Selector_Schema_Ptr);
85     Expression_Ptr operator()(Parent_Selector_Ptr);
86
87     template <typename U>
88     Expression_Ptr fallback(U x) { return fallback_impl(x); }
89
90     // -- only need to define two comparisons, and the rest can be implemented in terms of them
91     static bool eq(Expression_Obj, Expression_Obj);
92     static bool lt(Expression_Obj, Expression_Obj, std::string op);
93     // -- arithmetic on the combinations that matter
94     static Value_Ptr op_numbers(enum Sass_OP, const Number&, const Number&, struct Sass_Inspect_Options opt, ParserState* pstate = 0);
95     static Value_Ptr op_number_color(enum Sass_OP, const Number&, const Color&, struct Sass_Inspect_Options opt, ParserState* pstate = 0);
96     static Value_Ptr op_color_number(enum Sass_OP, const Color&, const Number&, struct Sass_Inspect_Options opt, ParserState* pstate = 0);
97     static Value_Ptr op_colors(enum Sass_OP, const Color&, const Color&, struct Sass_Inspect_Options opt, ParserState* pstate = 0);
98     static Value_Ptr op_strings(Sass::Operand, Value&, Value&, struct Sass_Inspect_Options opt, ParserState* pstate = 0, bool interpolant = false);
99
100   private:
101     void interpolation(Context& ctx, std::string& res, Expression_Obj ex, bool into_quotes, bool was_itpl = false);
102
103   };
104
105   Expression_Ptr cval_to_astnode(union Sass_Value* v, Backtrace* backtrace, ParserState pstate = ParserState("[AST]"));
106
107 }
108
109 #endif