#ifndef SASS_EVAL_H #define SASS_EVAL_H // sass.hpp must go before all system headers to get the // __EXTENSIONS__ fix on Solaris. #include "sass.hpp" #include "ast.hpp" #include "context.hpp" #include "listize.hpp" #include "operation.hpp" #include "environment.hpp" namespace Sass { class Expand; class Context; class Eval : public Operation_CRTP { public: Expand& exp; Context& ctx; Backtraces& traces; Eval(Expand& exp); ~Eval(); bool force; bool is_in_comment; bool is_in_selector_schema; Boolean_Obj bool_true; Boolean_Obj bool_false; Env* environment(); EnvStack& env_stack(); const sass::string cwd(); CalleeStack& callee_stack(); struct Sass_Inspect_Options& options(); struct Sass_Compiler* compiler(); // for evaluating function bodies Expression* operator()(Block*); Expression* operator()(Assignment*); Expression* operator()(If*); Expression* operator()(ForRule*); Expression* operator()(EachRule*); Expression* operator()(WhileRule*); Expression* operator()(Return*); Expression* operator()(WarningRule*); Expression* operator()(ErrorRule*); Expression* operator()(DebugRule*); Expression* operator()(List*); Expression* operator()(Map*); Expression* operator()(Binary_Expression*); Expression* operator()(Unary_Expression*); Expression* operator()(Function_Call*); Expression* operator()(Variable*); Expression* operator()(Number*); Expression* operator()(Color_RGBA*); Expression* operator()(Color_HSLA*); Expression* operator()(Boolean*); Expression* operator()(String_Schema*); Expression* operator()(String_Quoted*); Expression* operator()(String_Constant*); Media_Query* operator()(Media_Query*); Expression* operator()(Media_Query_Expression*); Expression* operator()(At_Root_Query*); Expression* operator()(SupportsOperation*); Expression* operator()(SupportsNegation*); Expression* operator()(SupportsDeclaration*); Expression* operator()(Supports_Interpolation*); Expression* operator()(Null*); Expression* operator()(Argument*); Expression* operator()(Arguments*); Expression* operator()(Comment*); // these will return selectors SelectorList* operator()(SelectorList*); SelectorList* operator()(ComplexSelector*); CompoundSelector* operator()(CompoundSelector*); SelectorComponent* operator()(SelectorComponent*); SimpleSelector* operator()(SimpleSelector* s); PseudoSelector* operator()(PseudoSelector* s); // they don't have any specific implementation (yet) IDSelector* operator()(IDSelector* s) { return s; }; ClassSelector* operator()(ClassSelector* s) { return s; }; TypeSelector* operator()(TypeSelector* s) { return s; }; AttributeSelector* operator()(AttributeSelector* s) { return s; }; PlaceholderSelector* operator()(PlaceholderSelector* s) { return s; }; // actual evaluated selectors SelectorList* operator()(Selector_Schema*); Expression* operator()(Parent_Reference*); // generic fallback template Expression* fallback(U x) { return Cast(x); } private: void interpolation(Context& ctx, sass::string& res, ExpressionObj ex, bool into_quotes, bool was_itpl = false); }; } #endif