sassc 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +5 -0
- data/ext/libsass/VERSION +1 -1
- data/ext/libsass/include/sass/context.h +3 -0
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +117 -117
- data/ext/libsass/src/ast.hpp +160 -162
- data/ext/libsass/src/ast_def_macros.hpp +10 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +2 -2
- data/ext/libsass/src/ast_fwd_decl.hpp +61 -52
- data/ext/libsass/src/ast_helpers.hpp +5 -5
- data/ext/libsass/src/ast_sel_cmp.cpp +18 -18
- data/ext/libsass/src/ast_sel_super.cpp +52 -52
- data/ext/libsass/src/ast_sel_unify.cpp +16 -16
- data/ext/libsass/src/ast_sel_weave.cpp +62 -62
- data/ext/libsass/src/ast_selectors.cpp +87 -77
- data/ext/libsass/src/ast_selectors.hpp +72 -62
- data/ext/libsass/src/ast_supports.cpp +35 -35
- data/ext/libsass/src/ast_supports.hpp +29 -29
- data/ext/libsass/src/ast_values.cpp +58 -58
- data/ext/libsass/src/ast_values.hpp +75 -75
- data/ext/libsass/src/backtrace.cpp +9 -9
- data/ext/libsass/src/backtrace.hpp +5 -5
- data/ext/libsass/src/base64vlq.cpp +2 -2
- data/ext/libsass/src/base64vlq.hpp +1 -1
- data/ext/libsass/src/bind.cpp +17 -17
- data/ext/libsass/src/bind.hpp +1 -1
- data/ext/libsass/src/c2ast.cpp +3 -3
- data/ext/libsass/src/c2ast.hpp +1 -1
- data/ext/libsass/src/check_nesting.cpp +36 -36
- data/ext/libsass/src/check_nesting.hpp +2 -2
- data/ext/libsass/src/color_maps.cpp +5 -5
- data/ext/libsass/src/color_maps.hpp +1 -1
- data/ext/libsass/src/context.cpp +63 -60
- data/ext/libsass/src/context.hpp +33 -33
- data/ext/libsass/src/cssize.cpp +30 -29
- data/ext/libsass/src/cssize.hpp +13 -13
- data/ext/libsass/src/dart_helpers.hpp +5 -5
- data/ext/libsass/src/debugger.hpp +127 -128
- data/ext/libsass/src/emitter.cpp +12 -12
- data/ext/libsass/src/emitter.hpp +10 -10
- data/ext/libsass/src/environment.cpp +27 -27
- data/ext/libsass/src/environment.hpp +24 -24
- data/ext/libsass/src/error_handling.cpp +42 -42
- data/ext/libsass/src/error_handling.hpp +38 -50
- data/ext/libsass/src/eval.cpp +138 -132
- data/ext/libsass/src/eval.hpp +17 -17
- data/ext/libsass/src/eval_selectors.cpp +3 -3
- data/ext/libsass/src/expand.cpp +70 -64
- data/ext/libsass/src/expand.hpp +12 -12
- data/ext/libsass/src/extender.cpp +55 -53
- data/ext/libsass/src/extender.hpp +14 -14
- data/ext/libsass/src/file.cpp +66 -58
- data/ext/libsass/src/file.hpp +23 -25
- data/ext/libsass/src/fn_colors.cpp +9 -9
- data/ext/libsass/src/fn_lists.cpp +18 -18
- data/ext/libsass/src/fn_maps.cpp +3 -3
- data/ext/libsass/src/fn_miscs.cpp +15 -15
- data/ext/libsass/src/fn_numbers.cpp +7 -7
- data/ext/libsass/src/fn_selectors.cpp +8 -8
- data/ext/libsass/src/fn_strings.cpp +34 -22
- data/ext/libsass/src/fn_utils.cpp +29 -26
- data/ext/libsass/src/fn_utils.hpp +10 -10
- data/ext/libsass/src/inspect.cpp +35 -34
- data/ext/libsass/src/inspect.hpp +21 -21
- data/ext/libsass/src/lexer.cpp +3 -1
- data/ext/libsass/src/listize.cpp +2 -2
- data/ext/libsass/src/mapping.hpp +1 -0
- data/ext/libsass/src/memory.hpp +12 -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/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
- data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +18 -6
- data/ext/libsass/src/operation.hpp +44 -44
- data/ext/libsass/src/operators.cpp +18 -18
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +18 -18
- data/ext/libsass/src/output.cpp +16 -16
- data/ext/libsass/src/output.hpp +5 -5
- data/ext/libsass/src/parser.cpp +327 -345
- data/ext/libsass/src/parser.hpp +77 -87
- data/ext/libsass/src/parser_selectors.cpp +6 -6
- data/ext/libsass/src/permutate.hpp +39 -15
- data/ext/libsass/src/plugins.cpp +7 -7
- data/ext/libsass/src/plugins.hpp +8 -8
- data/ext/libsass/src/position.cpp +7 -26
- data/ext/libsass/src/position.hpp +44 -21
- data/ext/libsass/src/remove_placeholders.cpp +4 -4
- data/ext/libsass/src/remove_placeholders.hpp +3 -3
- data/ext/libsass/src/sass.cpp +16 -15
- data/ext/libsass/src/sass.hpp +9 -5
- data/ext/libsass/src/sass_context.cpp +52 -34
- data/ext/libsass/src/sass_values.cpp +8 -10
- 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 +22 -18
- data/ext/libsass/src/source_map.hpp +12 -9
- data/ext/libsass/src/units.cpp +19 -19
- data/ext/libsass/src/units.hpp +8 -8
- data/ext/libsass/src/utf8_string.cpp +9 -10
- data/ext/libsass/src/utf8_string.hpp +7 -6
- data/ext/libsass/src/util.cpp +38 -38
- data/ext/libsass/src/util.hpp +18 -18
- data/ext/libsass/src/util_string.cpp +13 -13
- data/ext/libsass/src/util_string.hpp +9 -8
- data/ext/libsass/src/values.cpp +12 -12
- data/lib/sassc/native.rb +3 -5
- data/lib/sassc/version.rb +1 -1
- data/test/native_test.rb +4 -4
- metadata +14 -5
- data/lib/sassc/native/lib_c.rb +0 -21
@@ -2,7 +2,7 @@
|
|
2
2
|
#include <iostream>
|
3
3
|
#include <typeinfo>
|
4
4
|
|
5
|
-
#include "
|
5
|
+
#include "shared_ptr.hpp"
|
6
6
|
#include "../ast_fwd_decl.hpp"
|
7
7
|
|
8
8
|
#ifdef DEBUG_SHARED_PTR
|
@@ -26,7 +26,7 @@ namespace Sass {
|
|
26
26
|
}
|
27
27
|
}
|
28
28
|
}
|
29
|
-
|
29
|
+
sass::vector<SharedObj*> SharedObj::all;
|
30
30
|
#endif
|
31
31
|
|
32
32
|
bool SharedObj::taint = false;
|
@@ -3,6 +3,8 @@
|
|
3
3
|
|
4
4
|
#include "sass/base.h"
|
5
5
|
|
6
|
+
#include "../sass.hpp"
|
7
|
+
#include "allocator.hpp"
|
6
8
|
#include <cstddef>
|
7
9
|
#include <iostream>
|
8
10
|
#include <string>
|
@@ -15,6 +17,7 @@
|
|
15
17
|
|
16
18
|
namespace Sass {
|
17
19
|
|
20
|
+
// Forward declaration
|
18
21
|
class SharedPtr;
|
19
22
|
|
20
23
|
///////////////////////////////////////////////////////////////////////////////
|
@@ -76,12 +79,12 @@ namespace Sass {
|
|
76
79
|
|
77
80
|
#ifdef DEBUG_SHARED_PTR
|
78
81
|
static void dumpMemLeaks();
|
79
|
-
SharedObj* trace(
|
82
|
+
SharedObj* trace(sass::string file, size_t line) {
|
80
83
|
this->file = file;
|
81
84
|
this->line = line;
|
82
85
|
return this;
|
83
86
|
}
|
84
|
-
|
87
|
+
sass::string getDbgFile() { return file; }
|
85
88
|
size_t getDbgLine() { return line; }
|
86
89
|
void setDbg(bool dbg) { this->dbg = dbg; }
|
87
90
|
size_t getRefCount() const { return refcount; }
|
@@ -89,7 +92,16 @@ namespace Sass {
|
|
89
92
|
|
90
93
|
static void setTaint(bool val) { taint = val; }
|
91
94
|
|
92
|
-
|
95
|
+
#ifdef SASS_CUSTOM_ALLOCATOR
|
96
|
+
inline void* operator new(size_t nbytes) {
|
97
|
+
return allocateMem(nbytes);
|
98
|
+
}
|
99
|
+
inline void operator delete(void* ptr) {
|
100
|
+
return deallocateMem(ptr);
|
101
|
+
}
|
102
|
+
#endif
|
103
|
+
|
104
|
+
virtual sass::string to_string() const = 0;
|
93
105
|
protected:
|
94
106
|
friend class SharedPtr;
|
95
107
|
friend class Memory_Manager;
|
@@ -97,10 +109,10 @@ namespace Sass {
|
|
97
109
|
bool detached;
|
98
110
|
static bool taint;
|
99
111
|
#ifdef DEBUG_SHARED_PTR
|
100
|
-
|
112
|
+
sass::string file;
|
101
113
|
size_t line;
|
102
114
|
bool dbg = false;
|
103
|
-
static
|
115
|
+
static sass::vector<SharedObj*> all;
|
104
116
|
#endif
|
105
117
|
};
|
106
118
|
|
@@ -205,7 +217,7 @@ namespace Sass {
|
|
205
217
|
SharedPtr::operator=(static_cast<const SharedImpl<T>&>(rhs)));
|
206
218
|
}
|
207
219
|
|
208
|
-
operator
|
220
|
+
operator sass::string() const {
|
209
221
|
if (node) return node->to_string();
|
210
222
|
return "null";
|
211
223
|
}
|
@@ -19,13 +19,13 @@ namespace Sass {
|
|
19
19
|
#define ATTACH_ABSTRACT_CRTP_PERFORM_METHODS()\
|
20
20
|
virtual void perform(Operation<void>* op) = 0; \
|
21
21
|
virtual Value* perform(Operation<Value*>* op) = 0; \
|
22
|
-
virtual
|
22
|
+
virtual sass::string perform(Operation<sass::string>* op) = 0; \
|
23
23
|
virtual AST_Node* perform(Operation<AST_Node*>* op) = 0; \
|
24
24
|
virtual Selector* perform(Operation<Selector*>* op) = 0; \
|
25
25
|
virtual Statement* perform(Operation<Statement*>* op) = 0; \
|
26
26
|
virtual Expression* perform(Operation<Expression*>* op) = 0; \
|
27
27
|
virtual union Sass_Value* perform(Operation<union Sass_Value*>* op) = 0; \
|
28
|
-
virtual
|
28
|
+
virtual SupportsCondition* perform(Operation<SupportsCondition*>* op) = 0; \
|
29
29
|
|
30
30
|
// you must add operators to every class
|
31
31
|
// ensures `this` of actual instance type
|
@@ -34,13 +34,13 @@ namespace Sass {
|
|
34
34
|
#define ATTACH_CRTP_PERFORM_METHODS()\
|
35
35
|
virtual void perform(Operation<void>* op) override { return (*op)(this); } \
|
36
36
|
virtual Value* perform(Operation<Value*>* op) override { return (*op)(this); } \
|
37
|
-
virtual
|
37
|
+
virtual sass::string perform(Operation<sass::string>* op) override { return (*op)(this); } \
|
38
38
|
virtual AST_Node* perform(Operation<AST_Node*>* op) override { return (*op)(this); } \
|
39
39
|
virtual Selector* perform(Operation<Selector*>* op) override { return (*op)(this); } \
|
40
40
|
virtual Statement* perform(Operation<Statement*>* op) override { return (*op)(this); } \
|
41
41
|
virtual Expression* perform(Operation<Expression*>* op) override { return (*op)(this); } \
|
42
42
|
virtual union Sass_Value* perform(Operation<union Sass_Value*>* op) override { return (*op)(this); } \
|
43
|
-
virtual
|
43
|
+
virtual SupportsCondition* perform(Operation<SupportsCondition*>* op) override { return (*op)(this); } \
|
44
44
|
|
45
45
|
template<typename T>
|
46
46
|
class Operation {
|
@@ -48,28 +48,28 @@ namespace Sass {
|
|
48
48
|
virtual T operator()(AST_Node* x) = 0;
|
49
49
|
// statements
|
50
50
|
virtual T operator()(Block* x) = 0;
|
51
|
-
virtual T operator()(
|
51
|
+
virtual T operator()(StyleRule* x) = 0;
|
52
52
|
virtual T operator()(Bubble* x) = 0;
|
53
53
|
virtual T operator()(Trace* x) = 0;
|
54
|
-
virtual T operator()(
|
54
|
+
virtual T operator()(SupportsRule* x) = 0;
|
55
55
|
virtual T operator()(MediaRule* x) = 0;
|
56
56
|
virtual T operator()(CssMediaRule* x) = 0;
|
57
57
|
virtual T operator()(CssMediaQuery* x) = 0;
|
58
|
-
virtual T operator()(
|
59
|
-
virtual T operator()(
|
58
|
+
virtual T operator()(AtRootRule* x) = 0;
|
59
|
+
virtual T operator()(AtRule* x) = 0;
|
60
60
|
virtual T operator()(Keyframe_Rule* x) = 0;
|
61
61
|
virtual T operator()(Declaration* x) = 0;
|
62
62
|
virtual T operator()(Assignment* x) = 0;
|
63
63
|
virtual T operator()(Import* x) = 0;
|
64
64
|
virtual T operator()(Import_Stub* x) = 0;
|
65
|
-
virtual T operator()(
|
66
|
-
virtual T operator()(
|
67
|
-
virtual T operator()(
|
65
|
+
virtual T operator()(WarningRule* x) = 0;
|
66
|
+
virtual T operator()(ErrorRule* x) = 0;
|
67
|
+
virtual T operator()(DebugRule* x) = 0;
|
68
68
|
virtual T operator()(Comment* x) = 0;
|
69
69
|
virtual T operator()(If* x) = 0;
|
70
|
-
virtual T operator()(
|
71
|
-
virtual T operator()(
|
72
|
-
virtual T operator()(
|
70
|
+
virtual T operator()(ForRule* x) = 0;
|
71
|
+
virtual T operator()(EachRule* x) = 0;
|
72
|
+
virtual T operator()(WhileRule* x) = 0;
|
73
73
|
virtual T operator()(Return* x) = 0;
|
74
74
|
virtual T operator()(Content* x) = 0;
|
75
75
|
virtual T operator()(ExtendRule* x) = 0;
|
@@ -94,10 +94,10 @@ namespace Sass {
|
|
94
94
|
virtual T operator()(String_Schema* x) = 0;
|
95
95
|
virtual T operator()(String_Quoted* x) = 0;
|
96
96
|
virtual T operator()(String_Constant* x) = 0;
|
97
|
-
virtual T operator()(
|
98
|
-
virtual T operator()(
|
99
|
-
virtual T operator()(
|
100
|
-
virtual T operator()(
|
97
|
+
virtual T operator()(SupportsCondition* x) = 0;
|
98
|
+
virtual T operator()(SupportsOperation* x) = 0;
|
99
|
+
virtual T operator()(SupportsNegation* x) = 0;
|
100
|
+
virtual T operator()(SupportsDeclaration* x) = 0;
|
101
101
|
virtual T operator()(Supports_Interpolation* x) = 0;
|
102
102
|
virtual T operator()(Media_Query* x) = 0;
|
103
103
|
virtual T operator()(Media_Query_Expression* x) = 0;
|
@@ -110,12 +110,12 @@ namespace Sass {
|
|
110
110
|
virtual T operator()(Arguments* x) = 0;
|
111
111
|
// selectors
|
112
112
|
virtual T operator()(Selector_Schema* x) = 0;
|
113
|
-
virtual T operator()(
|
114
|
-
virtual T operator()(
|
115
|
-
virtual T operator()(
|
116
|
-
virtual T operator()(
|
117
|
-
virtual T operator()(
|
118
|
-
virtual T operator()(
|
113
|
+
virtual T operator()(PlaceholderSelector* x) = 0;
|
114
|
+
virtual T operator()(TypeSelector* x) = 0;
|
115
|
+
virtual T operator()(ClassSelector* x) = 0;
|
116
|
+
virtual T operator()(IDSelector* x) = 0;
|
117
|
+
virtual T operator()(AttributeSelector* x) = 0;
|
118
|
+
virtual T operator()(PseudoSelector* x) = 0;
|
119
119
|
virtual T operator()(SelectorComponent* x) = 0;
|
120
120
|
virtual T operator()(SelectorCombinator* x) = 0;
|
121
121
|
virtual T operator()(CompoundSelector* x) = 0;
|
@@ -134,28 +134,28 @@ namespace Sass {
|
|
134
134
|
T operator()(AST_Node* x) { return static_cast<D*>(this)->fallback(x); }
|
135
135
|
// statements
|
136
136
|
T operator()(Block* x) { return static_cast<D*>(this)->fallback(x); }
|
137
|
-
T operator()(
|
137
|
+
T operator()(StyleRule* x) { return static_cast<D*>(this)->fallback(x); }
|
138
138
|
T operator()(Bubble* x) { return static_cast<D*>(this)->fallback(x); }
|
139
139
|
T operator()(Trace* x) { return static_cast<D*>(this)->fallback(x); }
|
140
|
-
T operator()(
|
140
|
+
T operator()(SupportsRule* x) { return static_cast<D*>(this)->fallback(x); }
|
141
141
|
T operator()(MediaRule* x) { return static_cast<D*>(this)->fallback(x); }
|
142
142
|
T operator()(CssMediaRule* x) { return static_cast<D*>(this)->fallback(x); }
|
143
143
|
T operator()(CssMediaQuery* x) { return static_cast<D*>(this)->fallback(x); }
|
144
|
-
T operator()(
|
145
|
-
T operator()(
|
144
|
+
T operator()(AtRootRule* x) { return static_cast<D*>(this)->fallback(x); }
|
145
|
+
T operator()(AtRule* x) { return static_cast<D*>(this)->fallback(x); }
|
146
146
|
T operator()(Keyframe_Rule* x) { return static_cast<D*>(this)->fallback(x); }
|
147
147
|
T operator()(Declaration* x) { return static_cast<D*>(this)->fallback(x); }
|
148
148
|
T operator()(Assignment* x) { return static_cast<D*>(this)->fallback(x); }
|
149
149
|
T operator()(Import* x) { return static_cast<D*>(this)->fallback(x); }
|
150
150
|
T operator()(Import_Stub* x) { return static_cast<D*>(this)->fallback(x); }
|
151
|
-
T operator()(
|
152
|
-
T operator()(
|
153
|
-
T operator()(
|
151
|
+
T operator()(WarningRule* x) { return static_cast<D*>(this)->fallback(x); }
|
152
|
+
T operator()(ErrorRule* x) { return static_cast<D*>(this)->fallback(x); }
|
153
|
+
T operator()(DebugRule* x) { return static_cast<D*>(this)->fallback(x); }
|
154
154
|
T operator()(Comment* x) { return static_cast<D*>(this)->fallback(x); }
|
155
155
|
T operator()(If* x) { return static_cast<D*>(this)->fallback(x); }
|
156
|
-
T operator()(
|
157
|
-
T operator()(
|
158
|
-
T operator()(
|
156
|
+
T operator()(ForRule* x) { return static_cast<D*>(this)->fallback(x); }
|
157
|
+
T operator()(EachRule* x) { return static_cast<D*>(this)->fallback(x); }
|
158
|
+
T operator()(WhileRule* x) { return static_cast<D*>(this)->fallback(x); }
|
159
159
|
T operator()(Return* x) { return static_cast<D*>(this)->fallback(x); }
|
160
160
|
T operator()(Content* x) { return static_cast<D*>(this)->fallback(x); }
|
161
161
|
T operator()(ExtendRule* x) { return static_cast<D*>(this)->fallback(x); }
|
@@ -180,10 +180,10 @@ namespace Sass {
|
|
180
180
|
T operator()(String_Schema* x) { return static_cast<D*>(this)->fallback(x); }
|
181
181
|
T operator()(String_Constant* x) { return static_cast<D*>(this)->fallback(x); }
|
182
182
|
T operator()(String_Quoted* x) { return static_cast<D*>(this)->fallback(x); }
|
183
|
-
T operator()(
|
184
|
-
T operator()(
|
185
|
-
T operator()(
|
186
|
-
T operator()(
|
183
|
+
T operator()(SupportsCondition* x) { return static_cast<D*>(this)->fallback(x); }
|
184
|
+
T operator()(SupportsOperation* x) { return static_cast<D*>(this)->fallback(x); }
|
185
|
+
T operator()(SupportsNegation* x) { return static_cast<D*>(this)->fallback(x); }
|
186
|
+
T operator()(SupportsDeclaration* x) { return static_cast<D*>(this)->fallback(x); }
|
187
187
|
T operator()(Supports_Interpolation* x) { return static_cast<D*>(this)->fallback(x); }
|
188
188
|
T operator()(Media_Query* x) { return static_cast<D*>(this)->fallback(x); }
|
189
189
|
T operator()(Media_Query_Expression* x) { return static_cast<D*>(this)->fallback(x); }
|
@@ -196,12 +196,12 @@ namespace Sass {
|
|
196
196
|
T operator()(Arguments* x) { return static_cast<D*>(this)->fallback(x); }
|
197
197
|
// selectors
|
198
198
|
T operator()(Selector_Schema* x) { return static_cast<D*>(this)->fallback(x); }
|
199
|
-
T operator()(
|
200
|
-
T operator()(
|
201
|
-
T operator()(
|
202
|
-
T operator()(
|
203
|
-
T operator()(
|
204
|
-
T operator()(
|
199
|
+
T operator()(PlaceholderSelector* x) { return static_cast<D*>(this)->fallback(x); }
|
200
|
+
T operator()(TypeSelector* x) { return static_cast<D*>(this)->fallback(x); }
|
201
|
+
T operator()(ClassSelector* x) { return static_cast<D*>(this)->fallback(x); }
|
202
|
+
T operator()(IDSelector* x) { return static_cast<D*>(this)->fallback(x); }
|
203
|
+
T operator()(AttributeSelector* x) { return static_cast<D*>(this)->fallback(x); }
|
204
|
+
T operator()(PseudoSelector* x) { return static_cast<D*>(this)->fallback(x); }
|
205
205
|
T operator()(SelectorComponent* x) { return static_cast<D*>(this)->fallback(x); }
|
206
206
|
T operator()(SelectorCombinator* x) { return static_cast<D*>(this)->fallback(x); }
|
207
207
|
T operator()(CompoundSelector* x) { return static_cast<D*>(this)->fallback(x); }
|
@@ -31,7 +31,7 @@ namespace Sass {
|
|
31
31
|
};
|
32
32
|
|
33
33
|
/* static function, has no pstate or traces */
|
34
|
-
bool eq(
|
34
|
+
bool eq(ExpressionObj lhs, ExpressionObj rhs)
|
35
35
|
{
|
36
36
|
// operation is undefined if one is not a number
|
37
37
|
if (!lhs || !rhs) throw Exception::UndefinedOperation(lhs, rhs, Sass_OP::EQ);
|
@@ -40,7 +40,7 @@ namespace Sass {
|
|
40
40
|
}
|
41
41
|
|
42
42
|
/* static function, throws OperationError, has no pstate or traces */
|
43
|
-
bool cmp(
|
43
|
+
bool cmp(ExpressionObj lhs, ExpressionObj rhs, const Sass_OP op)
|
44
44
|
{
|
45
45
|
// can only compare numbers!?
|
46
46
|
Number_Obj l = Cast<Number>(lhs);
|
@@ -52,14 +52,14 @@ namespace Sass {
|
|
52
52
|
}
|
53
53
|
|
54
54
|
/* static functions, throws OperationError, has no pstate or traces */
|
55
|
-
bool lt(
|
56
|
-
bool neq(
|
57
|
-
bool gt(
|
58
|
-
bool lte(
|
59
|
-
bool gte(
|
55
|
+
bool lt(ExpressionObj lhs, ExpressionObj rhs) { return cmp(lhs, rhs, Sass_OP::LT); }
|
56
|
+
bool neq(ExpressionObj lhs, ExpressionObj rhs) { return eq(lhs, rhs) == false; }
|
57
|
+
bool gt(ExpressionObj lhs, ExpressionObj rhs) { return !cmp(lhs, rhs, Sass_OP::GT) && neq(lhs, rhs); }
|
58
|
+
bool lte(ExpressionObj lhs, ExpressionObj rhs) { return cmp(lhs, rhs, Sass_OP::LTE) || eq(lhs, rhs); }
|
59
|
+
bool gte(ExpressionObj lhs, ExpressionObj rhs) { return !cmp(lhs, rhs, Sass_OP::GTE) || eq(lhs, rhs); }
|
60
60
|
|
61
61
|
/* colour math deprecation warning */
|
62
|
-
void op_color_deprecation(enum Sass_OP op,
|
62
|
+
void op_color_deprecation(enum Sass_OP op, sass::string lsh, sass::string rhs, const SourceSpan& pstate)
|
63
63
|
{
|
64
64
|
deprecated(
|
65
65
|
"The operation `" + lsh + " " + sass_op_to_name(op) + " " + rhs +
|
@@ -70,20 +70,20 @@ namespace Sass {
|
|
70
70
|
}
|
71
71
|
|
72
72
|
/* static function, throws OperationError, has no traces but optional pstate for returned value */
|
73
|
-
Value* op_strings(Sass::Operand operand, Value& lhs, Value& rhs, struct Sass_Inspect_Options opt, const
|
73
|
+
Value* op_strings(Sass::Operand operand, Value& lhs, Value& rhs, struct Sass_Inspect_Options opt, const SourceSpan& pstate, bool delayed)
|
74
74
|
{
|
75
75
|
enum Sass_OP op = operand.operand;
|
76
76
|
|
77
77
|
String_Quoted* lqstr = Cast<String_Quoted>(&lhs);
|
78
78
|
String_Quoted* rqstr = Cast<String_Quoted>(&rhs);
|
79
79
|
|
80
|
-
|
81
|
-
|
80
|
+
sass::string lstr(lqstr ? lqstr->value() : lhs.to_string(opt));
|
81
|
+
sass::string rstr(rqstr ? rqstr->value() : rhs.to_string(opt));
|
82
82
|
|
83
83
|
if (Cast<Null>(&lhs)) throw Exception::InvalidNullOperation(&lhs, &rhs, op);
|
84
84
|
if (Cast<Null>(&rhs)) throw Exception::InvalidNullOperation(&lhs, &rhs, op);
|
85
85
|
|
86
|
-
|
86
|
+
sass::string sep;
|
87
87
|
switch (op) {
|
88
88
|
case Sass_OP::ADD: sep = ""; break;
|
89
89
|
case Sass_OP::SUB: sep = "-"; break;
|
@@ -121,7 +121,7 @@ namespace Sass {
|
|
121
121
|
|
122
122
|
/* ToDo: allow to operate also with hsla colors */
|
123
123
|
/* static function, throws OperationError, has no traces but optional pstate for returned value */
|
124
|
-
Value* op_colors(enum Sass_OP op, const Color_RGBA& lhs, const Color_RGBA& rhs, struct Sass_Inspect_Options opt, const
|
124
|
+
Value* op_colors(enum Sass_OP op, const Color_RGBA& lhs, const Color_RGBA& rhs, struct Sass_Inspect_Options opt, const SourceSpan& pstate, bool delayed)
|
125
125
|
{
|
126
126
|
|
127
127
|
if (lhs.a() != rhs.a()) {
|
@@ -142,7 +142,7 @@ namespace Sass {
|
|
142
142
|
}
|
143
143
|
|
144
144
|
/* static function, throws OperationError, has no traces but optional pstate for returned value */
|
145
|
-
Value* op_numbers(enum Sass_OP op, const Number& lhs, const Number& rhs, struct Sass_Inspect_Options opt, const
|
145
|
+
Value* op_numbers(enum Sass_OP op, const Number& lhs, const Number& rhs, struct Sass_Inspect_Options opt, const SourceSpan& pstate, bool delayed)
|
146
146
|
{
|
147
147
|
double lval = lhs.value();
|
148
148
|
double rval = rhs.value();
|
@@ -152,7 +152,7 @@ namespace Sass {
|
|
152
152
|
}
|
153
153
|
|
154
154
|
if (op == Sass_OP::DIV && rval == 0) {
|
155
|
-
|
155
|
+
sass::string result(lval ? "Infinity" : "NaN");
|
156
156
|
return SASS_MEMORY_NEW(String_Quoted, pstate, result);
|
157
157
|
}
|
158
158
|
|
@@ -212,7 +212,7 @@ namespace Sass {
|
|
212
212
|
}
|
213
213
|
|
214
214
|
/* static function, throws OperationError, has no traces but optional pstate for returned value */
|
215
|
-
Value* op_number_color(enum Sass_OP op, const Number& lhs, const Color_RGBA& rhs, struct Sass_Inspect_Options opt, const
|
215
|
+
Value* op_number_color(enum Sass_OP op, const Number& lhs, const Color_RGBA& rhs, struct Sass_Inspect_Options opt, const SourceSpan& pstate, bool delayed)
|
216
216
|
{
|
217
217
|
double lval = lhs.value();
|
218
218
|
|
@@ -229,7 +229,7 @@ namespace Sass {
|
|
229
229
|
}
|
230
230
|
case Sass_OP::SUB:
|
231
231
|
case Sass_OP::DIV: {
|
232
|
-
|
232
|
+
sass::string color(rhs.to_string(opt));
|
233
233
|
op_color_deprecation(op, lhs.to_string(), color, pstate);
|
234
234
|
return SASS_MEMORY_NEW(String_Quoted,
|
235
235
|
pstate,
|
@@ -243,7 +243,7 @@ namespace Sass {
|
|
243
243
|
}
|
244
244
|
|
245
245
|
/* static function, throws OperationError, has no traces but optional pstate for returned value */
|
246
|
-
Value* op_color_number(enum Sass_OP op, const Color_RGBA& lhs, const Number& rhs, struct Sass_Inspect_Options opt, const
|
246
|
+
Value* op_color_number(enum Sass_OP op, const Color_RGBA& lhs, const Number& rhs, struct Sass_Inspect_Options opt, const SourceSpan& pstate, bool delayed)
|
247
247
|
{
|
248
248
|
double rval = rhs.value();
|
249
249
|
|
@@ -9,19 +9,19 @@ namespace Sass {
|
|
9
9
|
namespace Operators {
|
10
10
|
|
11
11
|
// equality operator using AST Node operator==
|
12
|
-
bool eq(
|
13
|
-
bool neq(
|
12
|
+
bool eq(ExpressionObj, ExpressionObj);
|
13
|
+
bool neq(ExpressionObj, ExpressionObj);
|
14
14
|
// specific operators based on cmp and eq
|
15
|
-
bool lt(
|
16
|
-
bool gt(
|
17
|
-
bool lte(
|
18
|
-
bool gte(
|
15
|
+
bool lt(ExpressionObj, ExpressionObj);
|
16
|
+
bool gt(ExpressionObj, ExpressionObj);
|
17
|
+
bool lte(ExpressionObj, ExpressionObj);
|
18
|
+
bool gte(ExpressionObj, ExpressionObj);
|
19
19
|
// arithmetic for all the combinations that matter
|
20
|
-
Value* op_strings(Sass::Operand, Value&, Value&, struct Sass_Inspect_Options opt, const
|
21
|
-
Value* op_colors(enum Sass_OP, const Color_RGBA&, const Color_RGBA&, struct Sass_Inspect_Options opt, const
|
22
|
-
Value* op_numbers(enum Sass_OP, const Number&, const Number&, struct Sass_Inspect_Options opt, const
|
23
|
-
Value* op_number_color(enum Sass_OP, const Number&, const Color_RGBA&, struct Sass_Inspect_Options opt, const
|
24
|
-
Value* op_color_number(enum Sass_OP, const Color_RGBA&, const Number&, struct Sass_Inspect_Options opt, const
|
20
|
+
Value* op_strings(Sass::Operand, Value&, Value&, struct Sass_Inspect_Options opt, const SourceSpan& pstate, bool delayed = false);
|
21
|
+
Value* op_colors(enum Sass_OP, const Color_RGBA&, const Color_RGBA&, struct Sass_Inspect_Options opt, const SourceSpan& pstate, bool delayed = false);
|
22
|
+
Value* op_numbers(enum Sass_OP, const Number&, const Number&, struct Sass_Inspect_Options opt, const SourceSpan& pstate, bool delayed = false);
|
23
|
+
Value* op_number_color(enum Sass_OP, const Number&, const Color_RGBA&, struct Sass_Inspect_Options opt, const SourceSpan& pstate, bool delayed = false);
|
24
|
+
Value* op_color_number(enum Sass_OP, const Color_RGBA&, const Number&, struct Sass_Inspect_Options opt, const SourceSpan& pstate, bool delayed = false);
|
25
25
|
|
26
26
|
};
|
27
27
|
|
@@ -5,7 +5,7 @@ namespace Sass {
|
|
5
5
|
|
6
6
|
// ##########################################################################
|
7
7
|
// Very simple and limited container for insert ordered hash map.
|
8
|
-
// Piggy-back implementation on std::unordered_map and
|
8
|
+
// Piggy-back implementation on std::unordered_map and sass::vector
|
9
9
|
// ##########################################################################
|
10
10
|
template<
|
11
11
|
class Key,
|
@@ -26,8 +26,8 @@ namespace Sass {
|
|
26
26
|
map_type _map;
|
27
27
|
|
28
28
|
// Keep insertion order
|
29
|
-
|
30
|
-
|
29
|
+
sass::vector<Key> _keys;
|
30
|
+
sass::vector<T> _values;
|
31
31
|
|
32
32
|
const KeyEqual _keyEqual;
|
33
33
|
|
@@ -81,8 +81,8 @@ namespace Sass {
|
|
81
81
|
return false;
|
82
82
|
}
|
83
83
|
|
84
|
-
const
|
85
|
-
const
|
84
|
+
const sass::vector<Key>& keys() const { return _keys; }
|
85
|
+
const sass::vector<T>& values() const { return _values; }
|
86
86
|
|
87
87
|
const T& get(const Key& key) {
|
88
88
|
if (hasKey(key)) {
|
@@ -91,19 +91,19 @@ namespace Sass {
|
|
91
91
|
throw std::runtime_error("Key does not exist");
|
92
92
|
}
|
93
93
|
|
94
|
-
using iterator = typename
|
95
|
-
using const_iterator = typename
|
96
|
-
using reverse_iterator = typename
|
97
|
-
using const_reverse_iterator = typename
|
98
|
-
|
99
|
-
typename
|
100
|
-
typename
|
101
|
-
typename
|
102
|
-
typename
|
103
|
-
typename
|
104
|
-
typename
|
105
|
-
typename
|
106
|
-
typename
|
94
|
+
using iterator = typename sass::vector<Key>::iterator;
|
95
|
+
using const_iterator = typename sass::vector<Key>::const_iterator;
|
96
|
+
using reverse_iterator = typename sass::vector<Key>::reverse_iterator;
|
97
|
+
using const_reverse_iterator = typename sass::vector<Key>::const_reverse_iterator;
|
98
|
+
|
99
|
+
typename sass::vector<Key>::iterator end() { return _keys.end(); }
|
100
|
+
typename sass::vector<Key>::iterator begin() { return _keys.begin(); }
|
101
|
+
typename sass::vector<Key>::reverse_iterator rend() { return _keys.rend(); }
|
102
|
+
typename sass::vector<Key>::reverse_iterator rbegin() { return _keys.rbegin(); }
|
103
|
+
typename sass::vector<Key>::const_iterator end() const { return _keys.end(); }
|
104
|
+
typename sass::vector<Key>::const_iterator begin() const { return _keys.begin(); }
|
105
|
+
typename sass::vector<Key>::const_reverse_iterator rend() const { return _keys.rend(); }
|
106
|
+
typename sass::vector<Key>::const_reverse_iterator rbegin() const { return _keys.rbegin(); }
|
107
107
|
|
108
108
|
};
|
109
109
|
|