sassc4 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.gitmodules +3 -0
- data/.travis.yml +16 -0
- data/CHANGELOG.md +97 -0
- data/CODE_OF_CONDUCT.md +10 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +22 -0
- data/README.md +80 -0
- data/Rakefile +51 -0
- data/ext/depend +4 -0
- data/ext/extconf.rb +92 -0
- data/ext/libsass/VERSION +1 -0
- data/ext/libsass/contrib/plugin.cpp +60 -0
- data/ext/libsass/include/sass/base.h +97 -0
- data/ext/libsass/include/sass/context.h +174 -0
- data/ext/libsass/include/sass/functions.h +139 -0
- data/ext/libsass/include/sass/values.h +145 -0
- data/ext/libsass/include/sass/version.h +12 -0
- data/ext/libsass/include/sass.h +15 -0
- data/ext/libsass/include/sass2scss.h +120 -0
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +953 -0
- data/ext/libsass/src/ast.hpp +1064 -0
- data/ext/libsass/src/ast2c.cpp +80 -0
- data/ext/libsass/src/ast2c.hpp +39 -0
- data/ext/libsass/src/ast_def_macros.hpp +140 -0
- data/ext/libsass/src/ast_fwd_decl.cpp +31 -0
- data/ext/libsass/src/ast_fwd_decl.hpp +274 -0
- data/ext/libsass/src/ast_helpers.hpp +316 -0
- data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
- data/ext/libsass/src/ast_sel_super.cpp +539 -0
- data/ext/libsass/src/ast_sel_unify.cpp +275 -0
- data/ext/libsass/src/ast_sel_weave.cpp +616 -0
- data/ext/libsass/src/ast_selectors.cpp +1070 -0
- data/ext/libsass/src/ast_selectors.hpp +523 -0
- data/ext/libsass/src/ast_supports.cpp +114 -0
- data/ext/libsass/src/ast_supports.hpp +121 -0
- data/ext/libsass/src/ast_values.cpp +1154 -0
- data/ext/libsass/src/ast_values.hpp +498 -0
- data/ext/libsass/src/b64/cencode.h +32 -0
- data/ext/libsass/src/b64/encode.h +79 -0
- data/ext/libsass/src/backtrace.cpp +50 -0
- data/ext/libsass/src/backtrace.hpp +29 -0
- data/ext/libsass/src/base64vlq.cpp +47 -0
- data/ext/libsass/src/base64vlq.hpp +30 -0
- data/ext/libsass/src/bind.cpp +312 -0
- data/ext/libsass/src/bind.hpp +15 -0
- data/ext/libsass/src/c2ast.cpp +64 -0
- data/ext/libsass/src/c2ast.hpp +14 -0
- data/ext/libsass/src/c99func.c +54 -0
- data/ext/libsass/src/cencode.c +106 -0
- data/ext/libsass/src/check_nesting.cpp +393 -0
- data/ext/libsass/src/check_nesting.hpp +70 -0
- data/ext/libsass/src/color_maps.cpp +652 -0
- data/ext/libsass/src/color_maps.hpp +323 -0
- data/ext/libsass/src/color_spaces.cpp +241 -0
- data/ext/libsass/src/color_spaces.hpp +227 -0
- data/ext/libsass/src/constants.cpp +199 -0
- data/ext/libsass/src/constants.hpp +200 -0
- data/ext/libsass/src/context.cpp +870 -0
- data/ext/libsass/src/context.hpp +140 -0
- data/ext/libsass/src/cssize.cpp +521 -0
- data/ext/libsass/src/cssize.hpp +71 -0
- data/ext/libsass/src/dart_helpers.hpp +199 -0
- data/ext/libsass/src/debug.hpp +43 -0
- data/ext/libsass/src/debugger.hpp +964 -0
- data/ext/libsass/src/emitter.cpp +297 -0
- data/ext/libsass/src/emitter.hpp +101 -0
- data/ext/libsass/src/environment.cpp +260 -0
- data/ext/libsass/src/environment.hpp +124 -0
- data/ext/libsass/src/error_handling.cpp +239 -0
- data/ext/libsass/src/error_handling.hpp +248 -0
- data/ext/libsass/src/eval.cpp +1543 -0
- data/ext/libsass/src/eval.hpp +110 -0
- data/ext/libsass/src/eval_selectors.cpp +75 -0
- data/ext/libsass/src/expand.cpp +875 -0
- data/ext/libsass/src/expand.hpp +98 -0
- data/ext/libsass/src/extender.cpp +1226 -0
- data/ext/libsass/src/extender.hpp +399 -0
- data/ext/libsass/src/extension.cpp +43 -0
- data/ext/libsass/src/extension.hpp +89 -0
- data/ext/libsass/src/file.cpp +531 -0
- data/ext/libsass/src/file.hpp +124 -0
- data/ext/libsass/src/fn_colors.cpp +836 -0
- data/ext/libsass/src/fn_colors.hpp +99 -0
- data/ext/libsass/src/fn_lists.cpp +285 -0
- data/ext/libsass/src/fn_lists.hpp +34 -0
- data/ext/libsass/src/fn_maps.cpp +94 -0
- data/ext/libsass/src/fn_maps.hpp +30 -0
- data/ext/libsass/src/fn_miscs.cpp +248 -0
- data/ext/libsass/src/fn_miscs.hpp +40 -0
- data/ext/libsass/src/fn_numbers.cpp +246 -0
- data/ext/libsass/src/fn_numbers.hpp +45 -0
- data/ext/libsass/src/fn_selectors.cpp +205 -0
- data/ext/libsass/src/fn_selectors.hpp +35 -0
- data/ext/libsass/src/fn_strings.cpp +268 -0
- data/ext/libsass/src/fn_strings.hpp +34 -0
- data/ext/libsass/src/fn_utils.cpp +159 -0
- data/ext/libsass/src/fn_utils.hpp +62 -0
- data/ext/libsass/src/inspect.cpp +1126 -0
- data/ext/libsass/src/inspect.hpp +101 -0
- data/ext/libsass/src/json.cpp +1436 -0
- data/ext/libsass/src/json.hpp +117 -0
- data/ext/libsass/src/kwd_arg_macros.hpp +28 -0
- data/ext/libsass/src/lexer.cpp +122 -0
- data/ext/libsass/src/lexer.hpp +304 -0
- data/ext/libsass/src/listize.cpp +70 -0
- data/ext/libsass/src/listize.hpp +37 -0
- data/ext/libsass/src/mapping.hpp +19 -0
- data/ext/libsass/src/memory/allocator.cpp +48 -0
- data/ext/libsass/src/memory/allocator.hpp +138 -0
- data/ext/libsass/src/memory/config.hpp +20 -0
- data/ext/libsass/src/memory/memory_pool.hpp +186 -0
- data/ext/libsass/src/memory/shared_ptr.cpp +33 -0
- data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
- data/ext/libsass/src/memory.hpp +12 -0
- data/ext/libsass/src/operation.hpp +223 -0
- data/ext/libsass/src/operators.cpp +267 -0
- data/ext/libsass/src/operators.hpp +30 -0
- data/ext/libsass/src/ordered_map.hpp +112 -0
- data/ext/libsass/src/output.cpp +320 -0
- data/ext/libsass/src/output.hpp +47 -0
- data/ext/libsass/src/parser.cpp +3059 -0
- data/ext/libsass/src/parser.hpp +395 -0
- data/ext/libsass/src/parser_selectors.cpp +189 -0
- data/ext/libsass/src/permutate.hpp +164 -0
- data/ext/libsass/src/plugins.cpp +188 -0
- data/ext/libsass/src/plugins.hpp +57 -0
- data/ext/libsass/src/position.cpp +163 -0
- data/ext/libsass/src/position.hpp +147 -0
- data/ext/libsass/src/prelexer.cpp +1780 -0
- data/ext/libsass/src/prelexer.hpp +484 -0
- data/ext/libsass/src/remove_placeholders.cpp +86 -0
- data/ext/libsass/src/remove_placeholders.hpp +37 -0
- data/ext/libsass/src/sass.cpp +156 -0
- data/ext/libsass/src/sass.hpp +147 -0
- data/ext/libsass/src/sass2scss.cpp +895 -0
- data/ext/libsass/src/sass_context.cpp +742 -0
- data/ext/libsass/src/sass_context.hpp +129 -0
- data/ext/libsass/src/sass_functions.cpp +210 -0
- data/ext/libsass/src/sass_functions.hpp +50 -0
- data/ext/libsass/src/sass_values.cpp +362 -0
- data/ext/libsass/src/sass_values.hpp +82 -0
- data/ext/libsass/src/settings.hpp +19 -0
- data/ext/libsass/src/source.cpp +69 -0
- data/ext/libsass/src/source.hpp +95 -0
- data/ext/libsass/src/source_data.hpp +32 -0
- data/ext/libsass/src/source_map.cpp +202 -0
- data/ext/libsass/src/source_map.hpp +65 -0
- data/ext/libsass/src/stylesheet.cpp +22 -0
- data/ext/libsass/src/stylesheet.hpp +57 -0
- data/ext/libsass/src/to_value.cpp +114 -0
- data/ext/libsass/src/to_value.hpp +46 -0
- data/ext/libsass/src/units.cpp +507 -0
- data/ext/libsass/src/units.hpp +110 -0
- data/ext/libsass/src/utf8/checked.h +336 -0
- data/ext/libsass/src/utf8/core.h +332 -0
- data/ext/libsass/src/utf8/unchecked.h +235 -0
- data/ext/libsass/src/utf8.h +34 -0
- data/ext/libsass/src/utf8_string.cpp +104 -0
- data/ext/libsass/src/utf8_string.hpp +38 -0
- data/ext/libsass/src/util.cpp +723 -0
- data/ext/libsass/src/util.hpp +105 -0
- data/ext/libsass/src/util_string.cpp +125 -0
- data/ext/libsass/src/util_string.hpp +73 -0
- data/ext/libsass/src/values.cpp +140 -0
- data/ext/libsass/src/values.hpp +12 -0
- data/lib/sassc/dependency.rb +17 -0
- data/lib/sassc/engine.rb +141 -0
- data/lib/sassc/error.rb +37 -0
- data/lib/sassc/functions_handler.rb +73 -0
- data/lib/sassc/import_handler.rb +50 -0
- data/lib/sassc/importer.rb +31 -0
- data/lib/sassc/native/native_context_api.rb +147 -0
- data/lib/sassc/native/native_functions_api.rb +159 -0
- data/lib/sassc/native/sass2scss_api.rb +10 -0
- data/lib/sassc/native/sass_input_style.rb +13 -0
- data/lib/sassc/native/sass_output_style.rb +12 -0
- data/lib/sassc/native/sass_value.rb +97 -0
- data/lib/sassc/native/string_list.rb +10 -0
- data/lib/sassc/native.rb +64 -0
- data/lib/sassc/sass_2_scss.rb +9 -0
- data/lib/sassc/script/functions.rb +8 -0
- data/lib/sassc/script/value/bool.rb +32 -0
- data/lib/sassc/script/value/color.rb +95 -0
- data/lib/sassc/script/value/list.rb +136 -0
- data/lib/sassc/script/value/map.rb +69 -0
- data/lib/sassc/script/value/number.rb +389 -0
- data/lib/sassc/script/value/string.rb +96 -0
- data/lib/sassc/script/value.rb +137 -0
- data/lib/sassc/script/value_conversion/base.rb +13 -0
- data/lib/sassc/script/value_conversion/bool.rb +13 -0
- data/lib/sassc/script/value_conversion/color.rb +18 -0
- data/lib/sassc/script/value_conversion/list.rb +25 -0
- data/lib/sassc/script/value_conversion/map.rb +21 -0
- data/lib/sassc/script/value_conversion/number.rb +13 -0
- data/lib/sassc/script/value_conversion/string.rb +17 -0
- data/lib/sassc/script/value_conversion.rb +69 -0
- data/lib/sassc/script.rb +17 -0
- data/lib/sassc/util/normalized_map.rb +117 -0
- data/lib/sassc/util.rb +231 -0
- data/lib/sassc/version.rb +5 -0
- data/lib/sassc.rb +57 -0
- data/sassc.gemspec +69 -0
- data/test/css_color_level4_test.rb +168 -0
- data/test/custom_importer_test.rb +127 -0
- data/test/engine_test.rb +314 -0
- data/test/error_test.rb +29 -0
- data/test/fixtures/paths.scss +10 -0
- data/test/functions_test.rb +340 -0
- data/test/native_test.rb +213 -0
- data/test/output_style_test.rb +107 -0
- data/test/sass_2_scss_test.rb +14 -0
- data/test/test_helper.rb +45 -0
- metadata +396 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// sass.hpp must go before all system headers to get the
|
|
2
|
+
// __EXTENSIONS__ fix on Solaris.
|
|
3
|
+
#include "sass.hpp"
|
|
4
|
+
|
|
5
|
+
#include "ast2c.hpp"
|
|
6
|
+
#include "ast.hpp"
|
|
7
|
+
|
|
8
|
+
namespace Sass {
|
|
9
|
+
|
|
10
|
+
union Sass_Value* AST2C::operator()(Boolean* b)
|
|
11
|
+
{ return sass_make_boolean(b->value()); }
|
|
12
|
+
|
|
13
|
+
union Sass_Value* AST2C::operator()(Number* n)
|
|
14
|
+
{ return sass_make_number(n->value(), n->unit().c_str()); }
|
|
15
|
+
|
|
16
|
+
union Sass_Value* AST2C::operator()(Custom_Warning* w)
|
|
17
|
+
{ return sass_make_warning(w->message().c_str()); }
|
|
18
|
+
|
|
19
|
+
union Sass_Value* AST2C::operator()(Custom_Error* e)
|
|
20
|
+
{ return sass_make_error(e->message().c_str()); }
|
|
21
|
+
|
|
22
|
+
union Sass_Value* AST2C::operator()(Color_RGBA* c)
|
|
23
|
+
{ return sass_make_color(c->r(), c->g(), c->b(), c->a()); }
|
|
24
|
+
|
|
25
|
+
union Sass_Value* AST2C::operator()(Color_HSLA* c)
|
|
26
|
+
{
|
|
27
|
+
Color_RGBA_Obj rgba = c->copyAsRGBA();
|
|
28
|
+
return operator()(rgba.ptr());
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
union Sass_Value* AST2C::operator()(String_Constant* s)
|
|
32
|
+
{
|
|
33
|
+
if (s->quote_mark()) {
|
|
34
|
+
return sass_make_qstring(s->value().c_str());
|
|
35
|
+
} else {
|
|
36
|
+
return sass_make_string(s->value().c_str());
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
union Sass_Value* AST2C::operator()(String_Quoted* s)
|
|
41
|
+
{ return sass_make_qstring(s->value().c_str()); }
|
|
42
|
+
|
|
43
|
+
union Sass_Value* AST2C::operator()(List* l)
|
|
44
|
+
{
|
|
45
|
+
union Sass_Value* v = sass_make_list(l->length(), l->separator(), l->is_bracketed());
|
|
46
|
+
for (size_t i = 0, L = l->length(); i < L; ++i) {
|
|
47
|
+
sass_list_set_value(v, i, (*l)[i]->perform(this));
|
|
48
|
+
}
|
|
49
|
+
return v;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
union Sass_Value* AST2C::operator()(Map* m)
|
|
53
|
+
{
|
|
54
|
+
union Sass_Value* v = sass_make_map(m->length());
|
|
55
|
+
int i = 0;
|
|
56
|
+
for (auto key : m->keys()) {
|
|
57
|
+
sass_map_set_key(v, i, key->perform(this));
|
|
58
|
+
sass_map_set_value(v, i, m->at(key)->perform(this));
|
|
59
|
+
i++;
|
|
60
|
+
}
|
|
61
|
+
return v;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
union Sass_Value* AST2C::operator()(Arguments* a)
|
|
65
|
+
{
|
|
66
|
+
union Sass_Value* v = sass_make_list(a->length(), SASS_COMMA, false);
|
|
67
|
+
for (size_t i = 0, L = a->length(); i < L; ++i) {
|
|
68
|
+
sass_list_set_value(v, i, (*a)[i]->perform(this));
|
|
69
|
+
}
|
|
70
|
+
return v;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
union Sass_Value* AST2C::operator()(Argument* a)
|
|
74
|
+
{ return a->value()->perform(this); }
|
|
75
|
+
|
|
76
|
+
// not strictly necessary because of the fallback
|
|
77
|
+
union Sass_Value* AST2C::operator()(Null* n)
|
|
78
|
+
{ return sass_make_null(); }
|
|
79
|
+
|
|
80
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#ifndef SASS_AST2C_H
|
|
2
|
+
#define SASS_AST2C_H
|
|
3
|
+
|
|
4
|
+
#include "ast_fwd_decl.hpp"
|
|
5
|
+
#include "operation.hpp"
|
|
6
|
+
#include "sass/values.h"
|
|
7
|
+
|
|
8
|
+
namespace Sass {
|
|
9
|
+
|
|
10
|
+
class AST2C : public Operation_CRTP<union Sass_Value*, AST2C> {
|
|
11
|
+
|
|
12
|
+
public:
|
|
13
|
+
|
|
14
|
+
AST2C() { }
|
|
15
|
+
~AST2C() { }
|
|
16
|
+
|
|
17
|
+
union Sass_Value* operator()(Boolean*);
|
|
18
|
+
union Sass_Value* operator()(Number*);
|
|
19
|
+
union Sass_Value* operator()(Color_RGBA*);
|
|
20
|
+
union Sass_Value* operator()(Color_HSLA*);
|
|
21
|
+
union Sass_Value* operator()(String_Constant*);
|
|
22
|
+
union Sass_Value* operator()(String_Quoted*);
|
|
23
|
+
union Sass_Value* operator()(Custom_Warning*);
|
|
24
|
+
union Sass_Value* operator()(Custom_Error*);
|
|
25
|
+
union Sass_Value* operator()(List*);
|
|
26
|
+
union Sass_Value* operator()(Map*);
|
|
27
|
+
union Sass_Value* operator()(Null*);
|
|
28
|
+
union Sass_Value* operator()(Arguments*);
|
|
29
|
+
union Sass_Value* operator()(Argument*);
|
|
30
|
+
|
|
31
|
+
// return sass error if type is not supported
|
|
32
|
+
union Sass_Value* fallback(AST_Node* x)
|
|
33
|
+
{ return sass_make_error("unknown type for C-API"); }
|
|
34
|
+
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#endif
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#ifndef SASS_AST_DEF_MACROS_H
|
|
2
|
+
#define SASS_AST_DEF_MACROS_H
|
|
3
|
+
|
|
4
|
+
// Helper class to switch a flag and revert once we go out of scope
|
|
5
|
+
template <class T>
|
|
6
|
+
class LocalOption {
|
|
7
|
+
private:
|
|
8
|
+
T* var; // pointer to original variable
|
|
9
|
+
T orig; // copy of the original option
|
|
10
|
+
public:
|
|
11
|
+
LocalOption(T& var)
|
|
12
|
+
{
|
|
13
|
+
this->var = &var;
|
|
14
|
+
this->orig = var;
|
|
15
|
+
}
|
|
16
|
+
LocalOption(T& var, T orig)
|
|
17
|
+
{
|
|
18
|
+
this->var = &var;
|
|
19
|
+
this->orig = var;
|
|
20
|
+
*(this->var) = orig;
|
|
21
|
+
}
|
|
22
|
+
void reset()
|
|
23
|
+
{
|
|
24
|
+
*(this->var) = this->orig;
|
|
25
|
+
}
|
|
26
|
+
~LocalOption() {
|
|
27
|
+
*(this->var) = this->orig;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
#define LOCAL_FLAG(name,opt) LocalOption<bool> flag_##name(name, opt)
|
|
32
|
+
#define LOCAL_COUNT(name,opt) LocalOption<size_t> cnt_##name(name, opt)
|
|
33
|
+
|
|
34
|
+
#define NESTING_GUARD(name) \
|
|
35
|
+
LocalOption<size_t> cnt_##name(name, name + 1); \
|
|
36
|
+
if (name > MAX_NESTING) throw Exception::NestingLimitError(pstate, traces); \
|
|
37
|
+
|
|
38
|
+
#define ADD_PROPERTY(type, name)\
|
|
39
|
+
protected:\
|
|
40
|
+
type name##_;\
|
|
41
|
+
public:\
|
|
42
|
+
type name() const { return name##_; }\
|
|
43
|
+
type name(type name##__) { return name##_ = name##__; }\
|
|
44
|
+
private:
|
|
45
|
+
|
|
46
|
+
#define HASH_PROPERTY(type, name)\
|
|
47
|
+
protected:\
|
|
48
|
+
type name##_;\
|
|
49
|
+
public:\
|
|
50
|
+
type name() const { return name##_; }\
|
|
51
|
+
type name(type name##__) { hash_ = 0; return name##_ = name##__; }\
|
|
52
|
+
private:
|
|
53
|
+
|
|
54
|
+
#define ADD_CONSTREF(type, name) \
|
|
55
|
+
protected: \
|
|
56
|
+
type name##_; \
|
|
57
|
+
public: \
|
|
58
|
+
const type& name() const { return name##_; } \
|
|
59
|
+
void name(type name##__) { name##_ = name##__; } \
|
|
60
|
+
private:
|
|
61
|
+
|
|
62
|
+
#define HASH_CONSTREF(type, name) \
|
|
63
|
+
protected: \
|
|
64
|
+
type name##_; \
|
|
65
|
+
public: \
|
|
66
|
+
const type& name() const { return name##_; } \
|
|
67
|
+
void name(type name##__) { hash_ = 0; name##_ = name##__; } \
|
|
68
|
+
private:
|
|
69
|
+
|
|
70
|
+
#ifdef DEBUG_SHARED_PTR
|
|
71
|
+
|
|
72
|
+
#define ATTACH_ABSTRACT_AST_OPERATIONS(klass) \
|
|
73
|
+
virtual klass* copy(sass::string, size_t) const = 0; \
|
|
74
|
+
virtual klass* clone(sass::string, size_t) const = 0; \
|
|
75
|
+
|
|
76
|
+
#define ATTACH_VIRTUAL_AST_OPERATIONS(klass) \
|
|
77
|
+
klass(const klass* ptr); \
|
|
78
|
+
virtual klass* copy(sass::string, size_t) const override = 0; \
|
|
79
|
+
virtual klass* clone(sass::string, size_t) const override = 0; \
|
|
80
|
+
|
|
81
|
+
#define ATTACH_AST_OPERATIONS(klass) \
|
|
82
|
+
klass(const klass* ptr); \
|
|
83
|
+
virtual klass* copy(sass::string, size_t) const override; \
|
|
84
|
+
virtual klass* clone(sass::string, size_t) const override; \
|
|
85
|
+
|
|
86
|
+
#else
|
|
87
|
+
|
|
88
|
+
#define ATTACH_ABSTRACT_AST_OPERATIONS(klass) \
|
|
89
|
+
virtual klass* copy() const = 0; \
|
|
90
|
+
virtual klass* clone() const = 0; \
|
|
91
|
+
|
|
92
|
+
#define ATTACH_VIRTUAL_AST_OPERATIONS(klass) \
|
|
93
|
+
klass(const klass* ptr); \
|
|
94
|
+
virtual klass* copy() const override = 0; \
|
|
95
|
+
virtual klass* clone() const override = 0; \
|
|
96
|
+
|
|
97
|
+
#define ATTACH_AST_OPERATIONS(klass) \
|
|
98
|
+
klass(const klass* ptr); \
|
|
99
|
+
virtual klass* copy() const override; \
|
|
100
|
+
virtual klass* clone() const override; \
|
|
101
|
+
|
|
102
|
+
#endif
|
|
103
|
+
|
|
104
|
+
#define ATTACH_VIRTUAL_CMP_OPERATIONS(klass) \
|
|
105
|
+
virtual bool operator==(const klass& rhs) const = 0; \
|
|
106
|
+
virtual bool operator!=(const klass& rhs) const { return !(*this == rhs); }; \
|
|
107
|
+
|
|
108
|
+
#define ATTACH_CMP_OPERATIONS(klass) \
|
|
109
|
+
virtual bool operator==(const klass& rhs) const; \
|
|
110
|
+
virtual bool operator!=(const klass& rhs) const { return !(*this == rhs); }; \
|
|
111
|
+
|
|
112
|
+
#ifdef DEBUG_SHARED_PTR
|
|
113
|
+
|
|
114
|
+
#define IMPLEMENT_AST_OPERATORS(klass) \
|
|
115
|
+
klass* klass::copy(sass::string file, size_t line) const { \
|
|
116
|
+
klass* cpy = SASS_MEMORY_NEW(klass, this); \
|
|
117
|
+
cpy->trace(file, line); \
|
|
118
|
+
return cpy; \
|
|
119
|
+
} \
|
|
120
|
+
klass* klass::clone(sass::string file, size_t line) const { \
|
|
121
|
+
klass* cpy = copy(file, line); \
|
|
122
|
+
cpy->cloneChildren(); \
|
|
123
|
+
return cpy; \
|
|
124
|
+
} \
|
|
125
|
+
|
|
126
|
+
#else
|
|
127
|
+
|
|
128
|
+
#define IMPLEMENT_AST_OPERATORS(klass) \
|
|
129
|
+
klass* klass::copy() const { \
|
|
130
|
+
return SASS_MEMORY_NEW(klass, this); \
|
|
131
|
+
} \
|
|
132
|
+
klass* klass::clone() const { \
|
|
133
|
+
klass* cpy = copy(); \
|
|
134
|
+
cpy->cloneChildren(); \
|
|
135
|
+
return cpy; \
|
|
136
|
+
} \
|
|
137
|
+
|
|
138
|
+
#endif
|
|
139
|
+
|
|
140
|
+
#endif
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#include "ast.hpp"
|
|
2
|
+
|
|
3
|
+
namespace Sass {
|
|
4
|
+
|
|
5
|
+
#define IMPLEMENT_BASE_CAST(T) \
|
|
6
|
+
template<> \
|
|
7
|
+
T* Cast(AST_Node* ptr) { \
|
|
8
|
+
return dynamic_cast<T*>(ptr); \
|
|
9
|
+
}; \
|
|
10
|
+
\
|
|
11
|
+
template<> \
|
|
12
|
+
const T* Cast(const AST_Node* ptr) { \
|
|
13
|
+
return dynamic_cast<const T*>(ptr); \
|
|
14
|
+
}; \
|
|
15
|
+
|
|
16
|
+
IMPLEMENT_BASE_CAST(AST_Node)
|
|
17
|
+
IMPLEMENT_BASE_CAST(Expression)
|
|
18
|
+
IMPLEMENT_BASE_CAST(Statement)
|
|
19
|
+
IMPLEMENT_BASE_CAST(ParentStatement)
|
|
20
|
+
IMPLEMENT_BASE_CAST(PreValue)
|
|
21
|
+
IMPLEMENT_BASE_CAST(Value)
|
|
22
|
+
IMPLEMENT_BASE_CAST(Color)
|
|
23
|
+
IMPLEMENT_BASE_CAST(List)
|
|
24
|
+
IMPLEMENT_BASE_CAST(String)
|
|
25
|
+
IMPLEMENT_BASE_CAST(String_Constant)
|
|
26
|
+
IMPLEMENT_BASE_CAST(SupportsCondition)
|
|
27
|
+
IMPLEMENT_BASE_CAST(Selector)
|
|
28
|
+
IMPLEMENT_BASE_CAST(SelectorComponent)
|
|
29
|
+
IMPLEMENT_BASE_CAST(SimpleSelector)
|
|
30
|
+
|
|
31
|
+
}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
#ifndef SASS_AST_FWD_DECL_H
|
|
2
|
+
#define SASS_AST_FWD_DECL_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 "memory.hpp"
|
|
8
|
+
#include "sass/functions.h"
|
|
9
|
+
|
|
10
|
+
/////////////////////////////////////////////
|
|
11
|
+
// Forward declarations for the AST visitors.
|
|
12
|
+
/////////////////////////////////////////////
|
|
13
|
+
namespace Sass {
|
|
14
|
+
|
|
15
|
+
class SourceData;
|
|
16
|
+
class SourceFile;
|
|
17
|
+
class SynthFile;
|
|
18
|
+
class ItplFile;
|
|
19
|
+
|
|
20
|
+
class AST_Node;
|
|
21
|
+
|
|
22
|
+
class ParentStatement;
|
|
23
|
+
|
|
24
|
+
class SimpleSelector;
|
|
25
|
+
|
|
26
|
+
class Parent_Reference;
|
|
27
|
+
|
|
28
|
+
class PreValue;
|
|
29
|
+
class Block;
|
|
30
|
+
class Expression;
|
|
31
|
+
class Statement;
|
|
32
|
+
class Value;
|
|
33
|
+
class Declaration;
|
|
34
|
+
class StyleRule;
|
|
35
|
+
class Bubble;
|
|
36
|
+
class Trace;
|
|
37
|
+
|
|
38
|
+
class MediaRule;
|
|
39
|
+
class CssMediaRule;
|
|
40
|
+
class CssMediaQuery;
|
|
41
|
+
|
|
42
|
+
class SupportsRule;
|
|
43
|
+
class AtRule;
|
|
44
|
+
|
|
45
|
+
class Keyframe_Rule;
|
|
46
|
+
class AtRootRule;
|
|
47
|
+
class Assignment;
|
|
48
|
+
|
|
49
|
+
class Import;
|
|
50
|
+
class Import_Stub;
|
|
51
|
+
class WarningRule;
|
|
52
|
+
|
|
53
|
+
class ErrorRule;
|
|
54
|
+
class DebugRule;
|
|
55
|
+
class Comment;
|
|
56
|
+
|
|
57
|
+
class If;
|
|
58
|
+
class ForRule;
|
|
59
|
+
class EachRule;
|
|
60
|
+
class WhileRule;
|
|
61
|
+
class Return;
|
|
62
|
+
class Content;
|
|
63
|
+
class ExtendRule;
|
|
64
|
+
class Definition;
|
|
65
|
+
|
|
66
|
+
class List;
|
|
67
|
+
class Map;
|
|
68
|
+
class Function;
|
|
69
|
+
|
|
70
|
+
class Mixin_Call;
|
|
71
|
+
class Binary_Expression;
|
|
72
|
+
class Unary_Expression;
|
|
73
|
+
class Function_Call;
|
|
74
|
+
class Custom_Warning;
|
|
75
|
+
class Custom_Error;
|
|
76
|
+
|
|
77
|
+
class Variable;
|
|
78
|
+
class Number;
|
|
79
|
+
class Color;
|
|
80
|
+
class Color_RGBA;
|
|
81
|
+
class Color_HSLA;
|
|
82
|
+
class Boolean;
|
|
83
|
+
class String;
|
|
84
|
+
class Null;
|
|
85
|
+
|
|
86
|
+
class String_Schema;
|
|
87
|
+
class String_Constant;
|
|
88
|
+
class String_Quoted;
|
|
89
|
+
|
|
90
|
+
class Media_Query;
|
|
91
|
+
class Media_Query_Expression;
|
|
92
|
+
class SupportsCondition;
|
|
93
|
+
class SupportsOperation;
|
|
94
|
+
class SupportsNegation;
|
|
95
|
+
class SupportsDeclaration;
|
|
96
|
+
class Supports_Interpolation;
|
|
97
|
+
|
|
98
|
+
class At_Root_Query;
|
|
99
|
+
class Parameter;
|
|
100
|
+
class Parameters;
|
|
101
|
+
class Argument;
|
|
102
|
+
class Arguments;
|
|
103
|
+
class Selector;
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class Selector_Schema;
|
|
107
|
+
class PlaceholderSelector;
|
|
108
|
+
class TypeSelector;
|
|
109
|
+
class ClassSelector;
|
|
110
|
+
class IDSelector;
|
|
111
|
+
class AttributeSelector;
|
|
112
|
+
|
|
113
|
+
class PseudoSelector;
|
|
114
|
+
|
|
115
|
+
class SelectorComponent;
|
|
116
|
+
class SelectorCombinator;
|
|
117
|
+
class CompoundSelector;
|
|
118
|
+
class ComplexSelector;
|
|
119
|
+
class SelectorList;
|
|
120
|
+
|
|
121
|
+
// common classes
|
|
122
|
+
class Context;
|
|
123
|
+
class Expand;
|
|
124
|
+
class Eval;
|
|
125
|
+
|
|
126
|
+
class Extension;
|
|
127
|
+
|
|
128
|
+
// declare classes that are instances of memory nodes
|
|
129
|
+
// Note: also add a mapping without underscore
|
|
130
|
+
// ToDo: move to camelCase vars in the future
|
|
131
|
+
#define IMPL_MEM_OBJ(type) \
|
|
132
|
+
typedef SharedImpl<type> type##Obj; \
|
|
133
|
+
typedef SharedImpl<type> type##_Obj; \
|
|
134
|
+
|
|
135
|
+
IMPL_MEM_OBJ(SourceData);
|
|
136
|
+
IMPL_MEM_OBJ(SourceFile);
|
|
137
|
+
IMPL_MEM_OBJ(SynthFile);
|
|
138
|
+
IMPL_MEM_OBJ(ItplFile);
|
|
139
|
+
|
|
140
|
+
IMPL_MEM_OBJ(AST_Node);
|
|
141
|
+
IMPL_MEM_OBJ(Statement);
|
|
142
|
+
IMPL_MEM_OBJ(Block);
|
|
143
|
+
IMPL_MEM_OBJ(StyleRule);
|
|
144
|
+
IMPL_MEM_OBJ(Bubble);
|
|
145
|
+
IMPL_MEM_OBJ(Trace);
|
|
146
|
+
IMPL_MEM_OBJ(MediaRule);
|
|
147
|
+
IMPL_MEM_OBJ(CssMediaRule);
|
|
148
|
+
IMPL_MEM_OBJ(CssMediaQuery);
|
|
149
|
+
IMPL_MEM_OBJ(SupportsRule);
|
|
150
|
+
IMPL_MEM_OBJ(AtRule);
|
|
151
|
+
IMPL_MEM_OBJ(Keyframe_Rule);
|
|
152
|
+
IMPL_MEM_OBJ(AtRootRule);
|
|
153
|
+
IMPL_MEM_OBJ(Declaration);
|
|
154
|
+
IMPL_MEM_OBJ(Assignment);
|
|
155
|
+
IMPL_MEM_OBJ(Import);
|
|
156
|
+
IMPL_MEM_OBJ(Import_Stub);
|
|
157
|
+
IMPL_MEM_OBJ(WarningRule);
|
|
158
|
+
IMPL_MEM_OBJ(ErrorRule);
|
|
159
|
+
IMPL_MEM_OBJ(DebugRule);
|
|
160
|
+
IMPL_MEM_OBJ(Comment);
|
|
161
|
+
IMPL_MEM_OBJ(PreValue);
|
|
162
|
+
IMPL_MEM_OBJ(ParentStatement);
|
|
163
|
+
IMPL_MEM_OBJ(If);
|
|
164
|
+
IMPL_MEM_OBJ(ForRule);
|
|
165
|
+
IMPL_MEM_OBJ(EachRule);
|
|
166
|
+
IMPL_MEM_OBJ(WhileRule);
|
|
167
|
+
IMPL_MEM_OBJ(Return);
|
|
168
|
+
IMPL_MEM_OBJ(Content);
|
|
169
|
+
IMPL_MEM_OBJ(ExtendRule);
|
|
170
|
+
IMPL_MEM_OBJ(Definition);
|
|
171
|
+
IMPL_MEM_OBJ(Mixin_Call);
|
|
172
|
+
IMPL_MEM_OBJ(Value);
|
|
173
|
+
IMPL_MEM_OBJ(Expression);
|
|
174
|
+
IMPL_MEM_OBJ(List);
|
|
175
|
+
IMPL_MEM_OBJ(Map);
|
|
176
|
+
IMPL_MEM_OBJ(Function);
|
|
177
|
+
IMPL_MEM_OBJ(Binary_Expression);
|
|
178
|
+
IMPL_MEM_OBJ(Unary_Expression);
|
|
179
|
+
IMPL_MEM_OBJ(Function_Call);
|
|
180
|
+
IMPL_MEM_OBJ(Custom_Warning);
|
|
181
|
+
IMPL_MEM_OBJ(Custom_Error);
|
|
182
|
+
IMPL_MEM_OBJ(Variable);
|
|
183
|
+
IMPL_MEM_OBJ(Number);
|
|
184
|
+
IMPL_MEM_OBJ(Color);
|
|
185
|
+
IMPL_MEM_OBJ(Color_RGBA);
|
|
186
|
+
IMPL_MEM_OBJ(Color_HSLA);
|
|
187
|
+
IMPL_MEM_OBJ(Boolean);
|
|
188
|
+
IMPL_MEM_OBJ(String_Schema);
|
|
189
|
+
IMPL_MEM_OBJ(String);
|
|
190
|
+
IMPL_MEM_OBJ(String_Constant);
|
|
191
|
+
IMPL_MEM_OBJ(String_Quoted);
|
|
192
|
+
IMPL_MEM_OBJ(Media_Query);
|
|
193
|
+
IMPL_MEM_OBJ(Media_Query_Expression);
|
|
194
|
+
IMPL_MEM_OBJ(SupportsCondition);
|
|
195
|
+
IMPL_MEM_OBJ(SupportsOperation);
|
|
196
|
+
IMPL_MEM_OBJ(SupportsNegation);
|
|
197
|
+
IMPL_MEM_OBJ(SupportsDeclaration);
|
|
198
|
+
IMPL_MEM_OBJ(Supports_Interpolation);
|
|
199
|
+
IMPL_MEM_OBJ(At_Root_Query);
|
|
200
|
+
IMPL_MEM_OBJ(Null);
|
|
201
|
+
IMPL_MEM_OBJ(Parent_Reference);
|
|
202
|
+
IMPL_MEM_OBJ(Parameter);
|
|
203
|
+
IMPL_MEM_OBJ(Parameters);
|
|
204
|
+
IMPL_MEM_OBJ(Argument);
|
|
205
|
+
IMPL_MEM_OBJ(Arguments);
|
|
206
|
+
IMPL_MEM_OBJ(Selector);
|
|
207
|
+
IMPL_MEM_OBJ(Selector_Schema);
|
|
208
|
+
IMPL_MEM_OBJ(SimpleSelector);
|
|
209
|
+
IMPL_MEM_OBJ(PlaceholderSelector);
|
|
210
|
+
IMPL_MEM_OBJ(TypeSelector);
|
|
211
|
+
IMPL_MEM_OBJ(ClassSelector);
|
|
212
|
+
IMPL_MEM_OBJ(IDSelector);
|
|
213
|
+
IMPL_MEM_OBJ(AttributeSelector);
|
|
214
|
+
IMPL_MEM_OBJ(PseudoSelector);
|
|
215
|
+
|
|
216
|
+
IMPL_MEM_OBJ(SelectorComponent);
|
|
217
|
+
IMPL_MEM_OBJ(SelectorCombinator);
|
|
218
|
+
IMPL_MEM_OBJ(CompoundSelector);
|
|
219
|
+
IMPL_MEM_OBJ(ComplexSelector);
|
|
220
|
+
IMPL_MEM_OBJ(SelectorList);
|
|
221
|
+
|
|
222
|
+
// ###########################################################################
|
|
223
|
+
// some often used typedefs
|
|
224
|
+
// ###########################################################################
|
|
225
|
+
|
|
226
|
+
typedef sass::vector<Block*> BlockStack;
|
|
227
|
+
typedef sass::vector<Sass_Callee> CalleeStack;
|
|
228
|
+
typedef sass::vector<AST_Node_Obj> CallStack;
|
|
229
|
+
typedef sass::vector<CssMediaRuleObj> MediaStack;
|
|
230
|
+
typedef sass::vector<SelectorListObj> SelectorStack;
|
|
231
|
+
typedef sass::vector<Sass_Import_Entry> ImporterStack;
|
|
232
|
+
|
|
233
|
+
// only to switch implementations for testing
|
|
234
|
+
#define environment_map std::map
|
|
235
|
+
|
|
236
|
+
// ###########################################################################
|
|
237
|
+
// explicit type conversion functions
|
|
238
|
+
// ###########################################################################
|
|
239
|
+
|
|
240
|
+
template<class T>
|
|
241
|
+
T* Cast(AST_Node* ptr);
|
|
242
|
+
|
|
243
|
+
template<class T>
|
|
244
|
+
const T* Cast(const AST_Node* ptr);
|
|
245
|
+
|
|
246
|
+
// sometimes you know the class you want to cast to is final
|
|
247
|
+
// in this case a simple typeid check is faster and safe to use
|
|
248
|
+
|
|
249
|
+
#define DECLARE_BASE_CAST(T) \
|
|
250
|
+
template<> T* Cast(AST_Node* ptr); \
|
|
251
|
+
template<> const T* Cast(const AST_Node* ptr); \
|
|
252
|
+
|
|
253
|
+
// ###########################################################################
|
|
254
|
+
// implement specialization for final classes
|
|
255
|
+
// ###########################################################################
|
|
256
|
+
|
|
257
|
+
DECLARE_BASE_CAST(AST_Node)
|
|
258
|
+
DECLARE_BASE_CAST(Expression)
|
|
259
|
+
DECLARE_BASE_CAST(Statement)
|
|
260
|
+
DECLARE_BASE_CAST(ParentStatement)
|
|
261
|
+
DECLARE_BASE_CAST(PreValue)
|
|
262
|
+
DECLARE_BASE_CAST(Value)
|
|
263
|
+
DECLARE_BASE_CAST(List)
|
|
264
|
+
DECLARE_BASE_CAST(Color)
|
|
265
|
+
DECLARE_BASE_CAST(String)
|
|
266
|
+
DECLARE_BASE_CAST(String_Constant)
|
|
267
|
+
DECLARE_BASE_CAST(SupportsCondition)
|
|
268
|
+
DECLARE_BASE_CAST(Selector)
|
|
269
|
+
DECLARE_BASE_CAST(SimpleSelector)
|
|
270
|
+
DECLARE_BASE_CAST(SelectorComponent)
|
|
271
|
+
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
#endif
|