Coverage Report

Created: 2025-08-28 06:06

/src/libsass/src/eval.hpp
Line
Count
Source (jump to first uncovered line)
1
#ifndef SASS_EVAL_H
2
#define SASS_EVAL_H
3
4
// sass.hpp must go before all system headers to get the
5
// __EXTENSIONS__ fix on Solaris.
6
#include "sass.hpp"
7
#include "ast.hpp"
8
9
#include "context.hpp"
10
#include "listize.hpp"
11
#include "operation.hpp"
12
#include "environment.hpp"
13
14
namespace Sass {
15
16
  class Expand;
17
  class Context;
18
19
  class Eval : public Operation_CRTP<Expression*, Eval> {
20
21
   public:
22
    Expand& exp;
23
    Context& ctx;
24
    Backtraces& traces;
25
    Eval(Expand& exp);
26
    ~Eval();
27
28
    bool force;
29
    bool is_in_comment;
30
    bool is_in_selector_schema;
31
32
    Boolean_Obj bool_true;
33
    Boolean_Obj bool_false;
34
35
    Env* environment();
36
    EnvStack& env_stack();
37
    const sass::string cwd();
38
    CalleeStack& callee_stack();
39
    struct Sass_Inspect_Options& options();
40
    struct Sass_Compiler* compiler();
41
42
    // for evaluating function bodies
43
    Expression* operator()(Block*);
44
    Expression* operator()(Assignment*);
45
    Expression* operator()(If*);
46
    Expression* operator()(ForRule*);
47
    Expression* operator()(EachRule*);
48
    Expression* operator()(WhileRule*);
49
    Expression* operator()(Return*);
50
    Expression* operator()(WarningRule*);
51
    Expression* operator()(ErrorRule*);
52
    Expression* operator()(DebugRule*);
53
54
    Expression* operator()(List*);
55
    Expression* operator()(Map*);
56
    Expression* operator()(Binary_Expression*);
57
    Expression* operator()(Unary_Expression*);
58
    Expression* operator()(Function_Call*);
59
    Expression* operator()(Variable*);
60
    Expression* operator()(Number*);
61
    Expression* operator()(Color_RGBA*);
62
    Expression* operator()(Color_HSLA*);
63
    Expression* operator()(Boolean*);
64
    Expression* operator()(String_Schema*);
65
    Expression* operator()(String_Quoted*);
66
    Expression* operator()(String_Constant*);
67
    Media_Query* operator()(Media_Query*);
68
    Expression* operator()(Media_Query_Expression*);
69
    Expression* operator()(At_Root_Query*);
70
    Expression* operator()(SupportsOperation*);
71
    Expression* operator()(SupportsNegation*);
72
    Expression* operator()(SupportsDeclaration*);
73
    Expression* operator()(Supports_Interpolation*);
74
    Expression* operator()(Null*);
75
    Expression* operator()(Argument*);
76
    Expression* operator()(Arguments*);
77
    Expression* operator()(Comment*);
78
79
    // these will return selectors
80
    SelectorList* operator()(SelectorList*);
81
    SelectorList* operator()(ComplexSelector*);
82
    CompoundSelector* operator()(CompoundSelector*);
83
    SelectorComponent* operator()(SelectorComponent*);
84
    SimpleSelector* operator()(SimpleSelector* s);
85
    PseudoSelector* operator()(PseudoSelector* s);
86
87
    // they don't have any specific implementation (yet)
88
0
    IDSelector* operator()(IDSelector* s) { return s; };
89
0
    ClassSelector* operator()(ClassSelector* s) { return s; };
90
1
    TypeSelector* operator()(TypeSelector* s) { return s; };
91
0
    AttributeSelector* operator()(AttributeSelector* s) { return s; };
92
0
    PlaceholderSelector* operator()(PlaceholderSelector* s) { return s; };
93
94
    // actual evaluated selectors
95
    SelectorList* operator()(Selector_Schema*);
96
    Expression* operator()(Parent_Reference*);
97
98
    // generic fallback
99
    template <typename U>
100
    Expression* fallback(U x)
101
0
    { return Cast<Expression>(x); }
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Block*>(Sass::Block*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Assignment*>(Sass::Assignment*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::WarningRule*>(Sass::WarningRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::ErrorRule*>(Sass::ErrorRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::DebugRule*>(Sass::DebugRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Comment*>(Sass::Comment*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::If*>(Sass::If*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::ForRule*>(Sass::ForRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::EachRule*>(Sass::EachRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::WhileRule*>(Sass::WhileRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Return*>(Sass::Return*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Null*>(Sass::Null*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::List*>(Sass::List*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Map*>(Sass::Map*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Binary_Expression*>(Sass::Binary_Expression*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Unary_Expression*>(Sass::Unary_Expression*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Function_Call*>(Sass::Function_Call*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Variable*>(Sass::Variable*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Number*>(Sass::Number*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Color_RGBA*>(Sass::Color_RGBA*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Color_HSLA*>(Sass::Color_HSLA*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Boolean*>(Sass::Boolean*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::String_Schema*>(Sass::String_Schema*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::String_Quoted*>(Sass::String_Quoted*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::String_Constant*>(Sass::String_Constant*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::SupportsOperation*>(Sass::SupportsOperation*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::SupportsNegation*>(Sass::SupportsNegation*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::SupportsDeclaration*>(Sass::SupportsDeclaration*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Supports_Interpolation*>(Sass::Supports_Interpolation*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Media_Query*>(Sass::Media_Query*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Media_Query_Expression*>(Sass::Media_Query_Expression*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::At_Root_Query*>(Sass::At_Root_Query*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Parent_Reference*>(Sass::Parent_Reference*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Argument*>(Sass::Argument*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Arguments*>(Sass::Arguments*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Selector_Schema*>(Sass::Selector_Schema*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::PlaceholderSelector*>(Sass::PlaceholderSelector*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::TypeSelector*>(Sass::TypeSelector*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::ClassSelector*>(Sass::ClassSelector*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::IDSelector*>(Sass::IDSelector*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::AttributeSelector*>(Sass::AttributeSelector*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::PseudoSelector*>(Sass::PseudoSelector*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::SelectorComponent*>(Sass::SelectorComponent*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::CompoundSelector*>(Sass::CompoundSelector*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::ComplexSelector*>(Sass::ComplexSelector*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::SelectorList*>(Sass::SelectorList*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::AST_Node*>(Sass::AST_Node*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::StyleRule*>(Sass::StyleRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Bubble*>(Sass::Bubble*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Trace*>(Sass::Trace*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::SupportsRule*>(Sass::SupportsRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::MediaRule*>(Sass::MediaRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::CssMediaRule*>(Sass::CssMediaRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::CssMediaQuery*>(Sass::CssMediaQuery*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::AtRootRule*>(Sass::AtRootRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::AtRule*>(Sass::AtRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Keyframe_Rule*>(Sass::Keyframe_Rule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Declaration*>(Sass::Declaration*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Import*>(Sass::Import*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Import_Stub*>(Sass::Import_Stub*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Content*>(Sass::Content*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::ExtendRule*>(Sass::ExtendRule*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Definition*>(Sass::Definition*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Mixin_Call*>(Sass::Mixin_Call*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Function*>(Sass::Function*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Custom_Warning*>(Sass::Custom_Warning*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Custom_Error*>(Sass::Custom_Error*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Color*>(Sass::Color*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::SupportsCondition*>(Sass::SupportsCondition*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Parameter*>(Sass::Parameter*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::Parameters*>(Sass::Parameters*)
Unexecuted instantiation: Sass::Expression* Sass::Eval::fallback<Sass::SelectorCombinator*>(Sass::SelectorCombinator*)
102
103
  private:
104
    void interpolation(Context& ctx, sass::string& res, ExpressionObj ex, bool into_quotes, bool was_itpl = false);
105
106
  };
107
108
}
109
110
#endif