|
Packit Service |
7770af |
#ifndef SASS_AST_FWD_DECL_H
|
|
Packit Service |
7770af |
#define SASS_AST_FWD_DECL_H
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#include <map>
|
|
Packit Service |
7770af |
#include <set>
|
|
Packit Service |
7770af |
#include <deque>
|
|
Packit Service |
7770af |
#include <vector>
|
|
Packit Service |
7770af |
#include <typeinfo>
|
|
Packit Service |
7770af |
#include <iostream>
|
|
Packit Service |
7770af |
#include <algorithm>
|
|
Packit Service |
7770af |
#include <unordered_map>
|
|
Packit Service |
7770af |
#include <unordered_set>
|
|
Packit Service |
7770af |
#include "memory/SharedPtr.hpp"
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
/////////////////////////////////////////////
|
|
Packit Service |
7770af |
// Forward declarations for the AST visitors.
|
|
Packit Service |
7770af |
/////////////////////////////////////////////
|
|
Packit Service |
7770af |
namespace Sass {
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class AST_Node;
|
|
Packit Service |
7770af |
typedef AST_Node* AST_Node_Ptr;
|
|
Packit Service |
7770af |
typedef AST_Node const* AST_Node_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Has_Block;
|
|
Packit Service |
7770af |
typedef Has_Block* Has_Block_Ptr;
|
|
Packit Service |
7770af |
typedef Has_Block const* Has_Block_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Simple_Selector;
|
|
Packit Service |
7770af |
typedef Simple_Selector* Simple_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Simple_Selector const* Simple_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class PreValue;
|
|
Packit Service |
7770af |
typedef PreValue* PreValue_Ptr;
|
|
Packit Service |
7770af |
typedef PreValue const* PreValue_Ptr_Const;
|
|
Packit Service |
7770af |
class Thunk;
|
|
Packit Service |
7770af |
typedef Thunk* Thunk_Ptr;
|
|
Packit Service |
7770af |
typedef Thunk const* Thunk_Ptr_Const;
|
|
Packit Service |
7770af |
class Block;
|
|
Packit Service |
7770af |
typedef Block* Block_Ptr;
|
|
Packit Service |
7770af |
typedef Block const* Block_Ptr_Const;
|
|
Packit Service |
7770af |
class Expression;
|
|
Packit Service |
7770af |
typedef Expression* Expression_Ptr;
|
|
Packit Service |
7770af |
typedef Expression const* Expression_Ptr_Const;
|
|
Packit Service |
7770af |
class Statement;
|
|
Packit Service |
7770af |
typedef Statement* Statement_Ptr;
|
|
Packit Service |
7770af |
typedef Statement const* Statement_Ptr_Const;
|
|
Packit Service |
7770af |
class Value;
|
|
Packit Service |
7770af |
typedef Value* Value_Ptr;
|
|
Packit Service |
7770af |
typedef Value const* Value_Ptr_Const;
|
|
Packit Service |
7770af |
class Declaration;
|
|
Packit Service |
7770af |
typedef Declaration* Declaration_Ptr;
|
|
Packit Service |
7770af |
typedef Declaration const* Declaration_Ptr_Const;
|
|
Packit Service |
7770af |
class Ruleset;
|
|
Packit Service |
7770af |
typedef Ruleset* Ruleset_Ptr;
|
|
Packit Service |
7770af |
typedef Ruleset const* Ruleset_Ptr_Const;
|
|
Packit Service |
7770af |
class Bubble;
|
|
Packit Service |
7770af |
typedef Bubble* Bubble_Ptr;
|
|
Packit Service |
7770af |
typedef Bubble const* Bubble_Ptr_Const;
|
|
Packit Service |
7770af |
class Trace;
|
|
Packit Service |
7770af |
typedef Trace* Trace_Ptr;
|
|
Packit Service |
7770af |
typedef Trace const* Trace_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Media_Block;
|
|
Packit Service |
7770af |
typedef Media_Block* Media_Block_Ptr;
|
|
Packit Service |
7770af |
typedef Media_Block const* Media_Block_Ptr_Const;
|
|
Packit Service |
7770af |
class Supports_Block;
|
|
Packit Service |
7770af |
typedef Supports_Block* Supports_Block_Ptr;
|
|
Packit Service |
7770af |
typedef Supports_Block const* Supports_Block_Ptr_Const;
|
|
Packit Service |
7770af |
class Directive;
|
|
Packit Service |
7770af |
typedef Directive* Directive_Ptr;
|
|
Packit Service |
7770af |
typedef Directive const* Directive_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Keyframe_Rule;
|
|
Packit Service |
7770af |
typedef Keyframe_Rule* Keyframe_Rule_Ptr;
|
|
Packit Service |
7770af |
typedef Keyframe_Rule const* Keyframe_Rule_Ptr_Const;
|
|
Packit Service |
7770af |
class At_Root_Block;
|
|
Packit Service |
7770af |
typedef At_Root_Block* At_Root_Block_Ptr;
|
|
Packit Service |
7770af |
typedef At_Root_Block const* At_Root_Block_Ptr_Const;
|
|
Packit Service |
7770af |
class Assignment;
|
|
Packit Service |
7770af |
typedef Assignment* Assignment_Ptr;
|
|
Packit Service |
7770af |
typedef Assignment const* Assignment_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Import;
|
|
Packit Service |
7770af |
typedef Import* Import_Ptr;
|
|
Packit Service |
7770af |
typedef Import const* Import_Ptr_Const;
|
|
Packit Service |
7770af |
class Import_Stub;
|
|
Packit Service |
7770af |
typedef Import_Stub* Import_Stub_Ptr;
|
|
Packit Service |
7770af |
typedef Import_Stub const* Import_Stub_Ptr_Const;
|
|
Packit Service |
7770af |
class Warning;
|
|
Packit Service |
7770af |
typedef Warning* Warning_Ptr;
|
|
Packit Service |
7770af |
typedef Warning const* Warning_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Error;
|
|
Packit Service |
7770af |
typedef Error* Error_Ptr;
|
|
Packit Service |
7770af |
typedef Error const* Error_Ptr_Const;
|
|
Packit Service |
7770af |
class Debug;
|
|
Packit Service |
7770af |
typedef Debug* Debug_Ptr;
|
|
Packit Service |
7770af |
typedef Debug const* Debug_Ptr_Const;
|
|
Packit Service |
7770af |
class Comment;
|
|
Packit Service |
7770af |
typedef Comment* Comment_Ptr;
|
|
Packit Service |
7770af |
typedef Comment const* Comment_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class If;
|
|
Packit Service |
7770af |
typedef If* If_Ptr;
|
|
Packit Service |
7770af |
typedef If const* If_Ptr_Const;
|
|
Packit Service |
7770af |
class For;
|
|
Packit Service |
7770af |
typedef For* For_Ptr;
|
|
Packit Service |
7770af |
typedef For const* For_Ptr_Const;
|
|
Packit Service |
7770af |
class Each;
|
|
Packit Service |
7770af |
typedef Each* Each_Ptr;
|
|
Packit Service |
7770af |
typedef Each const* Each_Ptr_Const;
|
|
Packit Service |
7770af |
class While;
|
|
Packit Service |
7770af |
typedef While* While_Ptr;
|
|
Packit Service |
7770af |
typedef While const* While_Ptr_Const;
|
|
Packit Service |
7770af |
class Return;
|
|
Packit Service |
7770af |
typedef Return* Return_Ptr;
|
|
Packit Service |
7770af |
typedef Return const* Return_Ptr_Const;
|
|
Packit Service |
7770af |
class Content;
|
|
Packit Service |
7770af |
typedef Content* Content_Ptr;
|
|
Packit Service |
7770af |
typedef Content const* Content_Ptr_Const;
|
|
Packit Service |
7770af |
class Extension;
|
|
Packit Service |
7770af |
typedef Extension* Extension_Ptr;
|
|
Packit Service |
7770af |
typedef Extension const* Extension_Ptr_Const;
|
|
Packit Service |
7770af |
class Definition;
|
|
Packit Service |
7770af |
typedef Definition* Definition_Ptr;
|
|
Packit Service |
7770af |
typedef Definition const* Definition_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class List;
|
|
Packit Service |
7770af |
typedef List* List_Ptr;
|
|
Packit Service |
7770af |
typedef List const* List_Ptr_Const;
|
|
Packit Service |
7770af |
class Map;
|
|
Packit Service |
7770af |
typedef Map* Map_Ptr;
|
|
Packit Service |
7770af |
typedef Map const* Map_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Mixin_Call;
|
|
Packit Service |
7770af |
typedef Mixin_Call* Mixin_Call_Ptr;
|
|
Packit Service |
7770af |
typedef Mixin_Call const* Mixin_Call_Ptr_Const;
|
|
Packit Service |
7770af |
class Binary_Expression;
|
|
Packit Service |
7770af |
typedef Binary_Expression* Binary_Expression_Ptr;
|
|
Packit Service |
7770af |
typedef Binary_Expression const* Binary_Expression_Ptr_Const;
|
|
Packit Service |
7770af |
class Unary_Expression;
|
|
Packit Service |
7770af |
typedef Unary_Expression* Unary_Expression_Ptr;
|
|
Packit Service |
7770af |
typedef Unary_Expression const* Unary_Expression_Ptr_Const;
|
|
Packit Service |
7770af |
class Function_Call;
|
|
Packit Service |
7770af |
typedef Function_Call* Function_Call_Ptr;
|
|
Packit Service |
7770af |
typedef Function_Call const* Function_Call_Ptr_Const;
|
|
Packit Service |
7770af |
class Function_Call_Schema;
|
|
Packit Service |
7770af |
typedef Function_Call_Schema* Function_Call_Schema_Ptr;
|
|
Packit Service |
7770af |
typedef Function_Call_Schema const* Function_Call_Schema_Ptr_Const;
|
|
Packit Service |
7770af |
class Custom_Warning;
|
|
Packit Service |
7770af |
typedef Custom_Warning* Custom_Warning_Ptr;
|
|
Packit Service |
7770af |
typedef Custom_Warning const* Custom_Warning_Ptr_Const;
|
|
Packit Service |
7770af |
class Custom_Error;
|
|
Packit Service |
7770af |
typedef Custom_Error* Custom_Error_Ptr;
|
|
Packit Service |
7770af |
typedef Custom_Error const* Custom_Error_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Variable;
|
|
Packit Service |
7770af |
typedef Variable* Variable_Ptr;
|
|
Packit Service |
7770af |
typedef Variable const* Variable_Ptr_Const;
|
|
Packit Service |
7770af |
class Number;
|
|
Packit Service |
7770af |
typedef Number* Number_Ptr;
|
|
Packit Service |
7770af |
typedef Number const* Number_Ptr_Const;
|
|
Packit Service |
7770af |
class Color;
|
|
Packit Service |
7770af |
typedef Color* Color_Ptr;
|
|
Packit Service |
7770af |
typedef Color const* Color_Ptr_Const;
|
|
Packit Service |
7770af |
class Boolean;
|
|
Packit Service |
7770af |
typedef Boolean* Boolean_Ptr;
|
|
Packit Service |
7770af |
typedef Boolean const* Boolean_Ptr_Const;
|
|
Packit Service |
7770af |
class String;
|
|
Packit Service |
7770af |
typedef String* String_Ptr;
|
|
Packit Service |
7770af |
typedef String const* String_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class String_Schema;
|
|
Packit Service |
7770af |
typedef String_Schema* String_Schema_Ptr;
|
|
Packit Service |
7770af |
typedef String_Schema const* String_Schema_Ptr_Const;
|
|
Packit Service |
7770af |
class String_Constant;
|
|
Packit Service |
7770af |
typedef String_Constant* String_Constant_Ptr;
|
|
Packit Service |
7770af |
typedef String_Constant const* String_Constant_Ptr_Const;
|
|
Packit Service |
7770af |
class String_Quoted;
|
|
Packit Service |
7770af |
typedef String_Quoted* String_Quoted_Ptr;
|
|
Packit Service |
7770af |
typedef String_Quoted const* String_Quoted_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Media_Query;
|
|
Packit Service |
7770af |
typedef Media_Query* Media_Query_Ptr;
|
|
Packit Service |
7770af |
typedef Media_Query const* Media_Query_Ptr_Const;
|
|
Packit Service |
7770af |
class Media_Query_Expression;
|
|
Packit Service |
7770af |
typedef Media_Query_Expression* Media_Query_Expression_Ptr;
|
|
Packit Service |
7770af |
typedef Media_Query_Expression const* Media_Query_Expression_Ptr_Const;
|
|
Packit Service |
7770af |
class Supports_Condition;
|
|
Packit Service |
7770af |
typedef Supports_Condition* Supports_Condition_Ptr;
|
|
Packit Service |
7770af |
typedef Supports_Condition const* Supports_Condition_Ptr_Const;
|
|
Packit Service |
7770af |
class Supports_Operator;
|
|
Packit Service |
7770af |
typedef Supports_Operator* Supports_Operator_Ptr;
|
|
Packit Service |
7770af |
typedef Supports_Operator const* Supports_Operator_Ptr_Const;
|
|
Packit Service |
7770af |
class Supports_Negation;
|
|
Packit Service |
7770af |
typedef Supports_Negation* Supports_Negation_Ptr;
|
|
Packit Service |
7770af |
typedef Supports_Negation const* Supports_Negation_Ptr_Const;
|
|
Packit Service |
7770af |
class Supports_Declaration;
|
|
Packit Service |
7770af |
typedef Supports_Declaration* Supports_Declaration_Ptr;
|
|
Packit Service |
7770af |
typedef Supports_Declaration const* Supports_Declaration_Ptr_Const;
|
|
Packit Service |
7770af |
class Supports_Interpolation;
|
|
Packit Service |
7770af |
typedef Supports_Interpolation* Supports_Interpolation_Ptr;
|
|
Packit Service |
7770af |
typedef Supports_Interpolation const* Supports_Interpolation_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Null;
|
|
Packit Service |
7770af |
typedef Null* Null_Ptr;
|
|
Packit Service |
7770af |
typedef Null const* Null_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class At_Root_Query;
|
|
Packit Service |
7770af |
typedef At_Root_Query* At_Root_Query_Ptr;
|
|
Packit Service |
7770af |
typedef At_Root_Query const* At_Root_Query_Ptr_Const;
|
|
Packit Service |
7770af |
class Parent_Selector;
|
|
Packit Service |
7770af |
typedef Parent_Selector* Parent_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Parent_Selector const* Parent_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
class Parameter;
|
|
Packit Service |
7770af |
typedef Parameter* Parameter_Ptr;
|
|
Packit Service |
7770af |
typedef Parameter const* Parameter_Ptr_Const;
|
|
Packit Service |
7770af |
class Parameters;
|
|
Packit Service |
7770af |
typedef Parameters* Parameters_Ptr;
|
|
Packit Service |
7770af |
typedef Parameters const* Parameters_Ptr_Const;
|
|
Packit Service |
7770af |
class Argument;
|
|
Packit Service |
7770af |
typedef Argument* Argument_Ptr;
|
|
Packit Service |
7770af |
typedef Argument const* Argument_Ptr_Const;
|
|
Packit Service |
7770af |
class Arguments;
|
|
Packit Service |
7770af |
typedef Arguments* Arguments_Ptr;
|
|
Packit Service |
7770af |
typedef Arguments const* Arguments_Ptr_Const;
|
|
Packit Service |
7770af |
class Selector;
|
|
Packit Service |
7770af |
typedef Selector* Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Selector const* Selector_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Selector_Schema;
|
|
Packit Service |
7770af |
typedef Selector_Schema* Selector_Schema_Ptr;
|
|
Packit Service |
7770af |
typedef Selector_Schema const* Selector_Schema_Ptr_Const;
|
|
Packit Service |
7770af |
class Placeholder_Selector;
|
|
Packit Service |
7770af |
typedef Placeholder_Selector* Placeholder_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Placeholder_Selector const* Placeholder_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
class Element_Selector;
|
|
Packit Service |
7770af |
typedef Element_Selector* Element_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Element_Selector const* Element_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
class Class_Selector;
|
|
Packit Service |
7770af |
typedef Class_Selector* Class_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Class_Selector const* Class_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
class Id_Selector;
|
|
Packit Service |
7770af |
typedef Id_Selector* Id_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Id_Selector const* Id_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
class Attribute_Selector;
|
|
Packit Service |
7770af |
typedef Attribute_Selector* Attribute_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Attribute_Selector const* Attribute_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
class Pseudo_Selector;
|
|
Packit Service |
7770af |
typedef Pseudo_Selector* Pseudo_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Pseudo_Selector const * Pseudo_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
class Wrapped_Selector;
|
|
Packit Service |
7770af |
typedef Wrapped_Selector* Wrapped_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Wrapped_Selector const * Wrapped_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
class Compound_Selector;
|
|
Packit Service |
7770af |
typedef Compound_Selector* Compound_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Compound_Selector const * Compound_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
class Complex_Selector;
|
|
Packit Service |
7770af |
typedef Complex_Selector* Complex_Selector_Ptr;
|
|
Packit Service |
7770af |
typedef Complex_Selector const * Complex_Selector_Ptr_Const;
|
|
Packit Service |
7770af |
class Selector_List;
|
|
Packit Service |
7770af |
typedef Selector_List* Selector_List_Ptr;
|
|
Packit Service |
7770af |
typedef Selector_List const * Selector_List_Ptr_Const;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
// common classes
|
|
Packit Service |
7770af |
class Context;
|
|
Packit Service |
7770af |
class Expand;
|
|
Packit Service |
7770af |
class Eval;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
// declare classes that are instances of memory nodes
|
|
Packit Service |
7770af |
// #define IMPL_MEM_OBJ(type) using type##_Obj = SharedImpl<type>
|
|
Packit Service |
7770af |
#define IMPL_MEM_OBJ(type) typedef SharedImpl<type> type##_Obj
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(AST_Node);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Statement);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Block);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Ruleset);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Bubble);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Trace);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Media_Block);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Supports_Block);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Directive);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Keyframe_Rule);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(At_Root_Block);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Declaration);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Assignment);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Import);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Import_Stub);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Warning);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Error);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Debug);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Comment);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(PreValue);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Has_Block);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Thunk);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(If);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(For);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Each);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(While);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Return);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Content);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Extension);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Definition);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Mixin_Call);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Value);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Expression);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(List);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Map);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Binary_Expression);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Unary_Expression);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Function_Call);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Function_Call_Schema);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Custom_Warning);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Custom_Error);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Variable);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Number);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Color);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Boolean);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(String_Schema);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(String);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(String_Constant);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(String_Quoted);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Media_Query);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Media_Query_Expression);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Supports_Condition);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Supports_Operator);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Supports_Negation);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Supports_Declaration);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Supports_Interpolation);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(At_Root_Query);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Null);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Parent_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Parameter);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Parameters);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Argument);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Arguments);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Selector_Schema);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Simple_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Placeholder_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Element_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Class_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Id_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Attribute_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Pseudo_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Wrapped_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Compound_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Complex_Selector);
|
|
Packit Service |
7770af |
IMPL_MEM_OBJ(Selector_List);
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
// ###########################################################################
|
|
Packit Service |
7770af |
// Implement compare, order and hashing operations for AST Nodes
|
|
Packit Service |
7770af |
// ###########################################################################
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
struct HashNodes {
|
|
Packit Service |
7770af |
template <class T>
|
|
Packit Service |
7770af |
size_t operator() (const T& ex) const {
|
|
Packit Service |
7770af |
return ex.isNull() ? 0 : ex->hash();
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
};
|
|
Packit Service |
7770af |
struct OrderNodes {
|
|
Packit Service |
7770af |
template <class T>
|
|
Packit Service |
7770af |
bool operator() (const T& lhs, const T& rhs) const {
|
|
Packit Service |
7770af |
return !lhs.isNull() && !rhs.isNull() && *lhs < *rhs;
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
};
|
|
Packit Service |
7770af |
struct CompareNodes {
|
|
Packit Service |
7770af |
template <class T>
|
|
Packit Service |
7770af |
bool operator() (const T& lhs, const T& rhs) const {
|
|
Packit Service |
7770af |
// code around sass logic issue. 1px == 1 is true
|
|
Packit Service |
7770af |
// but both items are still different keys in maps
|
|
Packit Service |
7770af |
if (dynamic_cast<Number*>(lhs.ptr()))
|
|
Packit Service |
7770af |
if (dynamic_cast<Number*>(rhs.ptr()))
|
|
Packit Service |
7770af |
return lhs->hash() == rhs->hash();
|
|
Packit Service |
7770af |
return !lhs.isNull() && !rhs.isNull() && *lhs == *rhs;
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
};
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
// ###########################################################################
|
|
Packit Service |
7770af |
// some often used typedefs
|
|
Packit Service |
7770af |
// ###########################################################################
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
typedef std::unordered_map<
|
|
Packit Service |
7770af |
Expression_Obj, // key
|
|
Packit Service |
7770af |
Expression_Obj, // value
|
|
Packit Service |
7770af |
HashNodes, // hasher
|
|
Packit Service |
7770af |
CompareNodes // compare
|
|
Packit Service |
7770af |
> ExpressionMap;
|
|
Packit Service |
7770af |
typedef std::unordered_set<
|
|
Packit Service |
7770af |
Expression_Obj, // value
|
|
Packit Service |
7770af |
HashNodes, // hasher
|
|
Packit Service |
7770af |
CompareNodes // compare
|
|
Packit Service |
7770af |
> ExpressionSet;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
typedef std::string SubSetMapKey;
|
|
Packit Service |
7770af |
typedef std::vector<std::string> SubSetMapKeys;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
typedef std::pair<Complex_Selector_Obj, Compound_Selector_Obj> SubSetMapPair;
|
|
Packit Service |
7770af |
typedef std::pair<Compound_Selector_Obj, Complex_Selector_Obj> SubSetMapLookup;
|
|
Packit Service |
7770af |
typedef std::vector<SubSetMapPair> SubSetMapPairs;
|
|
Packit Service |
7770af |
typedef std::vector<SubSetMapLookup> SubSetMapLookups;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
typedef std::pair<Complex_Selector_Obj, SubSetMapPairs> SubSetMapResult;
|
|
Packit Service |
7770af |
typedef std::vector<SubSetMapResult> SubSetMapResults;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
typedef std::deque<Complex_Selector_Obj> ComplexSelectorDeque;
|
|
Packit Service |
7770af |
typedef std::set<Simple_Selector_Obj, OrderNodes> SimpleSelectorSet;
|
|
Packit Service |
7770af |
typedef std::set<Complex_Selector_Obj, OrderNodes> ComplexSelectorSet;
|
|
Packit Service |
7770af |
typedef std::set<Compound_Selector_Obj, OrderNodes> CompoundSelectorSet;
|
|
Packit Service |
7770af |
typedef std::unordered_set<Simple_Selector_Obj, HashNodes, CompareNodes> SimpleSelectorDict;
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
// only to switch implementations for testing
|
|
Packit Service |
7770af |
#define environment_map std::map
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
// ###########################################################################
|
|
Packit Service |
7770af |
// explicit type conversion functions
|
|
Packit Service |
7770af |
// ###########################################################################
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
template<class T>
|
|
Packit Service |
7770af |
T* Cast(AST_Node* ptr);
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
template<class T>
|
|
Packit Service |
7770af |
const T* Cast(const AST_Node* ptr);
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
// sometimes you know the class you want to cast to is final
|
|
Packit Service |
7770af |
// in this case a simple typeid check is faster and safe to use
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#define DECLARE_BASE_CAST(T) \
|
|
Packit Service |
7770af |
template<> T* Cast(AST_Node* ptr); \
|
|
Packit Service |
7770af |
template<> const T* Cast(const AST_Node* ptr); \
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
// ###########################################################################
|
|
Packit Service |
7770af |
// implement specialization for final classes
|
|
Packit Service |
7770af |
// ###########################################################################
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(AST_Node)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(Expression)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(Statement)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(Has_Block)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(PreValue)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(Value)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(List)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(String)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(String_Constant)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(Supports_Condition)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(Selector)
|
|
Packit Service |
7770af |
DECLARE_BASE_CAST(Simple_Selector)
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#endif
|