sassc 2.0.0 → 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 +4 -4
- data/.gitignore +2 -0
- data/.gitmodules +1 -1
- data/.travis.yml +9 -3
- data/CHANGELOG.md +36 -0
- data/CODE_OF_CONDUCT.md +1 -1
- data/README.md +1 -1
- data/Rakefile +43 -7
- data/ext/depend +4 -0
- data/ext/extconf.rb +92 -0
- data/ext/libsass/VERSION +1 -0
- data/ext/libsass/include/sass/base.h +9 -1
- data/ext/libsass/include/sass/context.h +5 -1
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +755 -2028
- data/ext/libsass/src/ast.hpp +492 -2477
- data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
- data/ext/libsass/src/ast2c.hpp +39 -0
- data/ext/libsass/src/ast_def_macros.hpp +70 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +5 -3
- data/ext/libsass/src/ast_fwd_decl.hpp +107 -296
- data/ext/libsass/src/ast_helpers.hpp +292 -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 +1043 -0
- data/ext/libsass/src/ast_selectors.hpp +522 -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/backtrace.cpp +11 -7
- data/ext/libsass/src/backtrace.hpp +5 -5
- data/ext/libsass/src/base64vlq.cpp +5 -2
- data/ext/libsass/src/base64vlq.hpp +1 -1
- data/ext/libsass/src/bind.cpp +35 -34
- data/ext/libsass/src/bind.hpp +3 -1
- data/ext/libsass/src/c2ast.cpp +64 -0
- data/ext/libsass/src/c2ast.hpp +14 -0
- data/ext/libsass/src/cencode.c +4 -6
- data/ext/libsass/src/check_nesting.cpp +83 -88
- data/ext/libsass/src/check_nesting.hpp +39 -34
- data/ext/libsass/src/color_maps.cpp +168 -164
- data/ext/libsass/src/color_maps.hpp +152 -160
- data/ext/libsass/src/constants.cpp +20 -0
- data/ext/libsass/src/constants.hpp +19 -0
- data/ext/libsass/src/context.cpp +104 -121
- data/ext/libsass/src/context.hpp +43 -55
- data/ext/libsass/src/cssize.cpp +103 -188
- data/ext/libsass/src/cssize.hpp +45 -51
- data/ext/libsass/src/dart_helpers.hpp +199 -0
- data/ext/libsass/src/debugger.hpp +524 -361
- data/ext/libsass/src/emitter.cpp +26 -26
- data/ext/libsass/src/emitter.hpp +20 -18
- data/ext/libsass/src/environment.cpp +41 -27
- data/ext/libsass/src/environment.hpp +33 -22
- data/ext/libsass/src/error_handling.cpp +92 -94
- data/ext/libsass/src/error_handling.hpp +73 -50
- data/ext/libsass/src/eval.cpp +380 -515
- data/ext/libsass/src/eval.hpp +64 -57
- data/ext/libsass/src/eval_selectors.cpp +75 -0
- data/ext/libsass/src/expand.cpp +322 -263
- data/ext/libsass/src/expand.hpp +55 -39
- data/ext/libsass/src/extender.cpp +1188 -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 +134 -88
- data/ext/libsass/src/file.hpp +28 -37
- data/ext/libsass/src/fn_colors.cpp +596 -0
- data/ext/libsass/src/fn_colors.hpp +85 -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 +244 -0
- data/ext/libsass/src/fn_miscs.hpp +40 -0
- data/ext/libsass/src/fn_numbers.cpp +227 -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 +158 -0
- data/ext/libsass/src/fn_utils.hpp +62 -0
- data/ext/libsass/src/inspect.cpp +253 -266
- data/ext/libsass/src/inspect.hpp +72 -74
- data/ext/libsass/src/json.cpp +2 -2
- data/ext/libsass/src/lexer.cpp +25 -84
- data/ext/libsass/src/lexer.hpp +5 -16
- data/ext/libsass/src/listize.cpp +27 -43
- data/ext/libsass/src/listize.hpp +14 -11
- 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/shared_ptr.cpp +33 -0
- data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
- data/ext/libsass/src/operation.hpp +193 -143
- data/ext/libsass/src/operators.cpp +56 -29
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +112 -0
- data/ext/libsass/src/output.cpp +59 -75
- data/ext/libsass/src/output.hpp +15 -22
- data/ext/libsass/src/parser.cpp +662 -818
- data/ext/libsass/src/parser.hpp +96 -100
- data/ext/libsass/src/parser_selectors.cpp +189 -0
- data/ext/libsass/src/permutate.hpp +164 -0
- data/ext/libsass/src/plugins.cpp +12 -8
- data/ext/libsass/src/plugins.hpp +8 -8
- data/ext/libsass/src/position.cpp +10 -26
- data/ext/libsass/src/position.hpp +44 -21
- data/ext/libsass/src/prelexer.cpp +14 -8
- data/ext/libsass/src/prelexer.hpp +9 -9
- data/ext/libsass/src/remove_placeholders.cpp +59 -57
- data/ext/libsass/src/remove_placeholders.hpp +20 -18
- data/ext/libsass/src/sass.cpp +25 -18
- data/ext/libsass/src/sass.hpp +22 -14
- data/ext/libsass/src/sass2scss.cpp +49 -18
- data/ext/libsass/src/sass_context.cpp +104 -132
- data/ext/libsass/src/sass_context.hpp +2 -2
- data/ext/libsass/src/sass_functions.cpp +7 -4
- data/ext/libsass/src/sass_functions.hpp +1 -1
- data/ext/libsass/src/sass_values.cpp +26 -21
- 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 +27 -20
- data/ext/libsass/src/source_map.hpp +14 -11
- data/ext/libsass/src/stylesheet.cpp +22 -0
- data/ext/libsass/src/stylesheet.hpp +57 -0
- data/ext/libsass/src/to_value.cpp +24 -22
- data/ext/libsass/src/to_value.hpp +18 -22
- data/ext/libsass/src/units.cpp +28 -22
- data/ext/libsass/src/units.hpp +9 -8
- data/ext/libsass/src/utf8/checked.h +12 -10
- data/ext/libsass/src/utf8/core.h +3 -0
- data/ext/libsass/src/utf8_string.cpp +12 -10
- data/ext/libsass/src/utf8_string.hpp +7 -6
- data/ext/libsass/src/util.cpp +97 -107
- data/ext/libsass/src/util.hpp +74 -30
- data/ext/libsass/src/util_string.cpp +125 -0
- data/ext/libsass/src/util_string.hpp +73 -0
- data/ext/libsass/src/values.cpp +33 -24
- data/ext/libsass/src/values.hpp +2 -2
- data/lib/sassc.rb +24 -0
- data/lib/sassc/engine.rb +7 -5
- data/lib/sassc/functions_handler.rb +11 -13
- data/lib/sassc/native.rb +10 -9
- data/lib/sassc/native/native_functions_api.rb +0 -5
- data/lib/sassc/script.rb +4 -6
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +32 -12
- data/test/engine_test.rb +32 -2
- data/test/functions_test.rb +38 -1
- data/test/native_test.rb +4 -4
- metadata +95 -109
- data/ext/Rakefile +0 -3
- data/ext/libsass/.editorconfig +0 -15
- data/ext/libsass/.gitattributes +0 -2
- data/ext/libsass/.github/CONTRIBUTING.md +0 -65
- data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
- data/ext/libsass/.gitignore +0 -85
- data/ext/libsass/.travis.yml +0 -64
- data/ext/libsass/COPYING +0 -25
- data/ext/libsass/GNUmakefile.am +0 -88
- data/ext/libsass/INSTALL +0 -1
- data/ext/libsass/LICENSE +0 -25
- data/ext/libsass/Makefile +0 -351
- data/ext/libsass/Makefile.conf +0 -55
- data/ext/libsass/Readme.md +0 -104
- data/ext/libsass/SECURITY.md +0 -10
- data/ext/libsass/appveyor.yml +0 -91
- data/ext/libsass/configure.ac +0 -138
- data/ext/libsass/contrib/libsass.spec +0 -66
- data/ext/libsass/docs/README.md +0 -20
- data/ext/libsass/docs/api-context-example.md +0 -45
- data/ext/libsass/docs/api-context-internal.md +0 -163
- data/ext/libsass/docs/api-context.md +0 -295
- data/ext/libsass/docs/api-doc.md +0 -215
- data/ext/libsass/docs/api-function-example.md +0 -67
- data/ext/libsass/docs/api-function-internal.md +0 -8
- data/ext/libsass/docs/api-function.md +0 -74
- data/ext/libsass/docs/api-importer-example.md +0 -112
- data/ext/libsass/docs/api-importer-internal.md +0 -20
- data/ext/libsass/docs/api-importer.md +0 -86
- data/ext/libsass/docs/api-value-example.md +0 -55
- data/ext/libsass/docs/api-value-internal.md +0 -76
- data/ext/libsass/docs/api-value.md +0 -154
- data/ext/libsass/docs/build-on-darwin.md +0 -27
- data/ext/libsass/docs/build-on-gentoo.md +0 -55
- data/ext/libsass/docs/build-on-windows.md +0 -139
- data/ext/libsass/docs/build-shared-library.md +0 -35
- data/ext/libsass/docs/build-with-autotools.md +0 -78
- data/ext/libsass/docs/build-with-makefiles.md +0 -68
- data/ext/libsass/docs/build-with-mingw.md +0 -107
- data/ext/libsass/docs/build-with-visual-studio.md +0 -90
- data/ext/libsass/docs/build.md +0 -97
- data/ext/libsass/docs/compatibility-plan.md +0 -48
- data/ext/libsass/docs/contributing.md +0 -17
- data/ext/libsass/docs/custom-functions-internal.md +0 -122
- data/ext/libsass/docs/dev-ast-memory.md +0 -223
- data/ext/libsass/docs/implementations.md +0 -56
- data/ext/libsass/docs/plugins.md +0 -47
- data/ext/libsass/docs/setup-environment.md +0 -68
- data/ext/libsass/docs/source-map-internals.md +0 -51
- data/ext/libsass/docs/trace.md +0 -26
- data/ext/libsass/docs/triage.md +0 -17
- data/ext/libsass/docs/unicode.md +0 -39
- data/ext/libsass/extconf.rb +0 -6
- data/ext/libsass/include/sass/version.h.in +0 -12
- data/ext/libsass/m4/.gitkeep +0 -0
- data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +0 -167
- data/ext/libsass/res/resource.rc +0 -35
- data/ext/libsass/script/bootstrap +0 -13
- data/ext/libsass/script/branding +0 -10
- data/ext/libsass/script/ci-build-libsass +0 -134
- data/ext/libsass/script/ci-build-plugin +0 -62
- data/ext/libsass/script/ci-install-compiler +0 -6
- data/ext/libsass/script/ci-install-deps +0 -20
- data/ext/libsass/script/ci-report-coverage +0 -42
- data/ext/libsass/script/spec +0 -5
- data/ext/libsass/script/tap-driver +0 -652
- data/ext/libsass/script/tap-runner +0 -1
- data/ext/libsass/script/test-leaks.pl +0 -103
- data/ext/libsass/src/GNUmakefile.am +0 -54
- data/ext/libsass/src/extend.cpp +0 -2130
- data/ext/libsass/src/extend.hpp +0 -86
- data/ext/libsass/src/functions.cpp +0 -2234
- data/ext/libsass/src/functions.hpp +0 -198
- data/ext/libsass/src/memory/SharedPtr.cpp +0 -114
- data/ext/libsass/src/memory/SharedPtr.hpp +0 -206
- data/ext/libsass/src/node.cpp +0 -319
- data/ext/libsass/src/node.hpp +0 -118
- data/ext/libsass/src/paths.hpp +0 -71
- data/ext/libsass/src/sass_util.cpp +0 -149
- data/ext/libsass/src/sass_util.hpp +0 -256
- data/ext/libsass/src/subset_map.cpp +0 -55
- data/ext/libsass/src/subset_map.hpp +0 -76
- data/ext/libsass/src/support/libsass.pc.in +0 -11
- data/ext/libsass/src/to_c.hpp +0 -39
- data/ext/libsass/test/test_node.cpp +0 -94
- data/ext/libsass/test/test_paths.cpp +0 -28
- data/ext/libsass/test/test_selector_difference.cpp +0 -25
- data/ext/libsass/test/test_specificity.cpp +0 -25
- data/ext/libsass/test/test_subset_map.cpp +0 -472
- data/ext/libsass/test/test_superselector.cpp +0 -69
- data/ext/libsass/test/test_unification.cpp +0 -31
- data/ext/libsass/version.sh +0 -10
- data/ext/libsass/win/libsass.sln +0 -39
- data/ext/libsass/win/libsass.sln.DotSettings +0 -9
- data/ext/libsass/win/libsass.targets +0 -118
- data/ext/libsass/win/libsass.vcxproj +0 -188
- data/ext/libsass/win/libsass.vcxproj.filters +0 -357
- data/lib/sassc/native/lib_c.rb +0 -21
- data/lib/tasks/libsass.rb +0 -33
|
@@ -90,7 +90,7 @@ struct Sass_Context : Sass_Options
|
|
|
90
90
|
char* error_file;
|
|
91
91
|
size_t error_line;
|
|
92
92
|
size_t error_column;
|
|
93
|
-
|
|
93
|
+
char* error_src;
|
|
94
94
|
|
|
95
95
|
// report imported files
|
|
96
96
|
char** included_files;
|
|
@@ -126,4 +126,4 @@ struct Sass_Compiler {
|
|
|
126
126
|
Sass::Block_Obj root;
|
|
127
127
|
};
|
|
128
128
|
|
|
129
|
-
#endif
|
|
129
|
+
#endif
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
// sass.hpp must go before all system headers to get the
|
|
2
|
+
// __EXTENSIONS__ fix on Solaris.
|
|
1
3
|
#include "sass.hpp"
|
|
4
|
+
|
|
2
5
|
#include <cstring>
|
|
3
6
|
#include "util.hpp"
|
|
4
7
|
#include "context.hpp"
|
|
@@ -98,7 +101,7 @@ extern "C" {
|
|
|
98
101
|
}
|
|
99
102
|
|
|
100
103
|
// Creator for a single import entry returned by the custom importer inside the list
|
|
101
|
-
// We take ownership of the memory for source and srcmap (freed when context is
|
|
104
|
+
// We take ownership of the memory for source and srcmap (freed when context is destroyed)
|
|
102
105
|
Sass_Import_Entry ADDCALL sass_make_import(const char* imp_path, const char* abs_path, char* source, char* srcmap)
|
|
103
106
|
{
|
|
104
107
|
Sass_Import* v = (Sass_Import*) calloc(1, sizeof(Sass_Import));
|
|
@@ -167,21 +170,21 @@ extern "C" {
|
|
|
167
170
|
|
|
168
171
|
// Getters and Setters for environments (lexical, local and global)
|
|
169
172
|
union Sass_Value* ADDCALL sass_env_get_lexical (Sass_Env_Frame env, const char* name) {
|
|
170
|
-
|
|
173
|
+
Expression* ex = Cast<Expression>((*env->frame)[name]);
|
|
171
174
|
return ex != NULL ? ast_node_to_sass_value(ex) : NULL;
|
|
172
175
|
}
|
|
173
176
|
void ADDCALL sass_env_set_lexical (Sass_Env_Frame env, const char* name, union Sass_Value* val) {
|
|
174
177
|
(*env->frame)[name] = sass_value_to_ast_node(val);
|
|
175
178
|
}
|
|
176
179
|
union Sass_Value* ADDCALL sass_env_get_local (Sass_Env_Frame env, const char* name) {
|
|
177
|
-
|
|
180
|
+
Expression* ex = Cast<Expression>(env->frame->get_local(name));
|
|
178
181
|
return ex != NULL ? ast_node_to_sass_value(ex) : NULL;
|
|
179
182
|
}
|
|
180
183
|
void ADDCALL sass_env_set_local (Sass_Env_Frame env, const char* name, union Sass_Value* val) {
|
|
181
184
|
env->frame->set_local(name, sass_value_to_ast_node(val));
|
|
182
185
|
}
|
|
183
186
|
union Sass_Value* ADDCALL sass_env_get_global (Sass_Env_Frame env, const char* name) {
|
|
184
|
-
|
|
187
|
+
Expression* ex = Cast<Expression>(env->frame->get_global(name));
|
|
185
188
|
return ex != NULL ? ast_node_to_sass_value(ex) : NULL;
|
|
186
189
|
}
|
|
187
190
|
void ADDCALL sass_env_set_global (Sass_Env_Frame env, const char* name, union Sass_Value* val) {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
// sass.hpp must go before all system headers to get the
|
|
2
|
+
// __EXTENSIONS__ fix on Solaris.
|
|
1
3
|
#include "sass.hpp"
|
|
4
|
+
|
|
2
5
|
#include <cstdlib>
|
|
3
6
|
#include <cstring>
|
|
4
7
|
#include "util.hpp"
|
|
5
8
|
#include "eval.hpp"
|
|
6
|
-
#include "values.hpp"
|
|
7
9
|
#include "operators.hpp"
|
|
8
10
|
#include "sass/values.h"
|
|
9
11
|
#include "sass_values.hpp"
|
|
@@ -281,21 +283,21 @@ extern "C" {
|
|
|
281
283
|
|
|
282
284
|
union Sass_Value* ADDCALL sass_value_stringify (const union Sass_Value* v, bool compressed, int precision)
|
|
283
285
|
{
|
|
284
|
-
|
|
286
|
+
ValueObj val = sass_value_to_ast_node(v);
|
|
285
287
|
Sass_Inspect_Options options(compressed ? COMPRESSED : NESTED, precision);
|
|
286
|
-
|
|
288
|
+
sass::string str(val->to_string(options));
|
|
287
289
|
return sass_make_qstring(str.c_str());
|
|
288
290
|
}
|
|
289
291
|
|
|
290
292
|
union Sass_Value* ADDCALL sass_value_op (enum Sass_OP op, const union Sass_Value* a, const union Sass_Value* b)
|
|
291
293
|
{
|
|
292
294
|
|
|
293
|
-
Sass::
|
|
295
|
+
Sass::ValueObj rv;
|
|
294
296
|
|
|
295
297
|
try {
|
|
296
298
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
+
ValueObj lhs = sass_value_to_ast_node(a);
|
|
300
|
+
ValueObj rhs = sass_value_to_ast_node(b);
|
|
299
301
|
struct Sass_Inspect_Options options(NESTED, 5);
|
|
300
302
|
|
|
301
303
|
// see if it's a relational expression
|
|
@@ -312,44 +314,47 @@ extern "C" {
|
|
|
312
314
|
}
|
|
313
315
|
|
|
314
316
|
if (sass_value_is_number(a) && sass_value_is_number(b)) {
|
|
315
|
-
|
|
316
|
-
|
|
317
|
+
const Number* l_n = Cast<Number>(lhs);
|
|
318
|
+
const Number* r_n = Cast<Number>(rhs);
|
|
317
319
|
rv = Operators::op_numbers(op, *l_n, *r_n, options, l_n->pstate());
|
|
318
320
|
}
|
|
319
321
|
else if (sass_value_is_number(a) && sass_value_is_color(a)) {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
+
const Number* l_n = Cast<Number>(lhs);
|
|
323
|
+
// Direct HSLA operations are not supported
|
|
324
|
+
// All color maths will be deprecated anyway
|
|
325
|
+
Color_RGBA_Obj r_c = Cast<Color>(rhs)->toRGBA();
|
|
322
326
|
rv = Operators::op_number_color(op, *l_n, *r_c, options, l_n->pstate());
|
|
323
327
|
}
|
|
324
328
|
else if (sass_value_is_color(a) && sass_value_is_number(b)) {
|
|
325
|
-
|
|
326
|
-
|
|
329
|
+
// Direct HSLA operations are not supported
|
|
330
|
+
// All color maths will be deprecated anyway
|
|
331
|
+
Color_RGBA_Obj l_c = Cast<Color>(lhs)->toRGBA();
|
|
332
|
+
const Number* r_n = Cast<Number>(rhs);
|
|
327
333
|
rv = Operators::op_color_number(op, *l_c, *r_n, options, l_c->pstate());
|
|
328
334
|
}
|
|
329
335
|
else if (sass_value_is_color(a) && sass_value_is_color(b)) {
|
|
330
|
-
|
|
331
|
-
|
|
336
|
+
// Direct HSLA operations are not supported
|
|
337
|
+
// All color maths will be deprecated anyway
|
|
338
|
+
Color_RGBA_Obj l_c = Cast<Color>(lhs)->toRGBA();
|
|
339
|
+
Color_RGBA_Obj r_c = Cast<Color>(rhs)->toRGBA();
|
|
332
340
|
rv = Operators::op_colors(op, *l_c, *r_c, options, l_c->pstate());
|
|
333
341
|
}
|
|
334
342
|
else /* convert other stuff to string and apply operation */ {
|
|
335
|
-
|
|
336
|
-
Value_Ptr r_v = Cast<Value>(rhs);
|
|
337
|
-
rv = Operators::op_strings(op, *l_v, *r_v, options, l_v->pstate());
|
|
343
|
+
rv = Operators::op_strings(op, *lhs, *rhs, options, lhs->pstate());
|
|
338
344
|
}
|
|
339
345
|
|
|
340
|
-
// ToDo: maybe we should
|
|
346
|
+
// ToDo: maybe we should return null value?
|
|
341
347
|
if (!rv) return sass_make_error("invalid return value");
|
|
342
348
|
|
|
343
349
|
// convert result back to ast node
|
|
344
|
-
return ast_node_to_sass_value(rv);
|
|
345
|
-
|
|
350
|
+
return ast_node_to_sass_value(rv.ptr());
|
|
346
351
|
}
|
|
347
352
|
|
|
348
353
|
// simply pass the error message back to the caller for now
|
|
349
354
|
catch (Exception::InvalidSass& e) { return sass_make_error(e.what()); }
|
|
350
355
|
catch (std::bad_alloc&) { return sass_make_error("memory exhausted"); }
|
|
351
356
|
catch (std::exception& e) { return sass_make_error(e.what()); }
|
|
352
|
-
catch (
|
|
357
|
+
catch (sass::string& e) { return sass_make_error(e.c_str()); }
|
|
353
358
|
catch (const char* e) { return sass_make_error(e); }
|
|
354
359
|
catch (...) { return sass_make_error("unknown"); }
|
|
355
360
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#ifndef SASS_SETTINGS_H
|
|
2
|
+
#define SASS_SETTINGS_H
|
|
3
|
+
|
|
4
|
+
// Global compile time settings should go here
|
|
5
|
+
|
|
6
|
+
// When enabled we use our custom memory pool allocator
|
|
7
|
+
// With intense workloads this can double the performance
|
|
8
|
+
// Max memory usage mostly only grows by a slight amount
|
|
9
|
+
// #define SASS_CUSTOM_ALLOCATOR
|
|
10
|
+
|
|
11
|
+
// How many buckets should we have for the free-list
|
|
12
|
+
// Determines when allocations go directly to malloc/free
|
|
13
|
+
// For maximum size of managed items multiply by alignment
|
|
14
|
+
#define SassAllocatorBuckets 512
|
|
15
|
+
|
|
16
|
+
// The size of the memory pool arenas in bytes.
|
|
17
|
+
#define SassAllocatorArenaSize (1024 * 256)
|
|
18
|
+
|
|
19
|
+
#endif
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#include <stdio.h>
|
|
2
|
+
#include <string.h>
|
|
3
|
+
#include "source.hpp"
|
|
4
|
+
#include "utf8/checked.h"
|
|
5
|
+
#include "position.hpp"
|
|
6
|
+
|
|
7
|
+
namespace Sass {
|
|
8
|
+
|
|
9
|
+
SourceData::SourceData()
|
|
10
|
+
: SharedObj()
|
|
11
|
+
{
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
SourceFile::SourceFile(
|
|
15
|
+
const char* path,
|
|
16
|
+
const char* data,
|
|
17
|
+
size_t srcid) :
|
|
18
|
+
SourceData(),
|
|
19
|
+
path(sass_copy_c_string(path)),
|
|
20
|
+
data(sass_copy_c_string(data)),
|
|
21
|
+
length(0),
|
|
22
|
+
srcid(srcid)
|
|
23
|
+
{
|
|
24
|
+
length = strlen(data);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
SourceFile::~SourceFile() {
|
|
28
|
+
sass_free_memory(path);
|
|
29
|
+
sass_free_memory(data);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const char* SourceFile::end() const
|
|
33
|
+
{
|
|
34
|
+
return data + length;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const char* SourceFile::begin() const
|
|
38
|
+
{
|
|
39
|
+
return data;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const char* SourceFile::getRawData() const
|
|
43
|
+
{
|
|
44
|
+
return data;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
SourceSpan SourceFile::getSourceSpan()
|
|
48
|
+
{
|
|
49
|
+
return SourceSpan(this);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
ItplFile::ItplFile(const char* data, const SourceSpan& pstate) :
|
|
53
|
+
SourceFile(pstate.getPath(),
|
|
54
|
+
data, pstate.getSrcId()),
|
|
55
|
+
pstate(pstate)
|
|
56
|
+
{}
|
|
57
|
+
|
|
58
|
+
const char* ItplFile::getRawData() const
|
|
59
|
+
{
|
|
60
|
+
return pstate.getRawData();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
SourceSpan ItplFile::getSourceSpan()
|
|
64
|
+
{
|
|
65
|
+
return SourceSpan(pstate);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#ifndef SASS_SOURCE_H
|
|
2
|
+
#define SASS_SOURCE_H
|
|
3
|
+
|
|
4
|
+
#include "sass.hpp"
|
|
5
|
+
#include "memory.hpp"
|
|
6
|
+
#include "position.hpp"
|
|
7
|
+
#include "source_data.hpp"
|
|
8
|
+
|
|
9
|
+
namespace Sass {
|
|
10
|
+
|
|
11
|
+
class SourceFile :
|
|
12
|
+
public SourceData {
|
|
13
|
+
protected:
|
|
14
|
+
char* path;
|
|
15
|
+
char* data;
|
|
16
|
+
size_t length;
|
|
17
|
+
size_t srcid;
|
|
18
|
+
public:
|
|
19
|
+
|
|
20
|
+
SourceFile(
|
|
21
|
+
const char* path,
|
|
22
|
+
const char* data,
|
|
23
|
+
size_t srcid);
|
|
24
|
+
|
|
25
|
+
~SourceFile();
|
|
26
|
+
|
|
27
|
+
const char* end() const override final;
|
|
28
|
+
const char* begin() const override final;
|
|
29
|
+
virtual const char* getRawData() const override;
|
|
30
|
+
virtual SourceSpan getSourceSpan() override;
|
|
31
|
+
|
|
32
|
+
size_t size() const override final {
|
|
33
|
+
return length;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
virtual const char* getPath() const override {
|
|
37
|
+
return path;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
virtual size_t getSrcId() const override {
|
|
41
|
+
return srcid;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
class SynthFile :
|
|
47
|
+
public SourceData {
|
|
48
|
+
protected:
|
|
49
|
+
const char* path;
|
|
50
|
+
public:
|
|
51
|
+
|
|
52
|
+
SynthFile(
|
|
53
|
+
const char* path) :
|
|
54
|
+
path(path)
|
|
55
|
+
{}
|
|
56
|
+
|
|
57
|
+
~SynthFile() {}
|
|
58
|
+
|
|
59
|
+
const char* end() const override final { return nullptr; }
|
|
60
|
+
const char* begin() const override final { return nullptr; };
|
|
61
|
+
virtual const char* getRawData() const override { return nullptr; };
|
|
62
|
+
virtual SourceSpan getSourceSpan() override { return SourceSpan(path); };
|
|
63
|
+
|
|
64
|
+
size_t size() const override final {
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
virtual const char* getPath() const override {
|
|
69
|
+
return path;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
virtual size_t getSrcId() const override {
|
|
73
|
+
return std::string::npos;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class ItplFile :
|
|
80
|
+
public SourceFile {
|
|
81
|
+
private:
|
|
82
|
+
SourceSpan pstate;
|
|
83
|
+
public:
|
|
84
|
+
|
|
85
|
+
ItplFile(const char* data,
|
|
86
|
+
const SourceSpan& pstate);
|
|
87
|
+
|
|
88
|
+
// Offset getPosition() const override final;
|
|
89
|
+
const char* getRawData() const override final;
|
|
90
|
+
SourceSpan getSourceSpan() override final;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
#endif
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#ifndef SASS_SOURCE_DATA_H
|
|
2
|
+
#define SASS_SOURCE_DATA_H
|
|
3
|
+
|
|
4
|
+
#include "sass.hpp"
|
|
5
|
+
#include "memory.hpp"
|
|
6
|
+
|
|
7
|
+
namespace Sass {
|
|
8
|
+
|
|
9
|
+
class SourceSpan;
|
|
10
|
+
|
|
11
|
+
class SourceData :
|
|
12
|
+
public SharedObj {
|
|
13
|
+
public:
|
|
14
|
+
SourceData();
|
|
15
|
+
virtual size_t size() const = 0;
|
|
16
|
+
virtual size_t getSrcId() const = 0;
|
|
17
|
+
virtual const char* end() const = 0;
|
|
18
|
+
virtual const char* begin() const = 0;
|
|
19
|
+
virtual const char* getPath() const = 0;
|
|
20
|
+
// virtual Offset getPosition() const = 0;
|
|
21
|
+
virtual const char* getRawData() const = 0;
|
|
22
|
+
virtual SourceSpan getSourceSpan() = 0;
|
|
23
|
+
|
|
24
|
+
sass::string to_string() const override {
|
|
25
|
+
return sass::string{ begin(), end() };
|
|
26
|
+
}
|
|
27
|
+
~SourceData() {}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#endif
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
// sass.hpp must go before all system headers to get the
|
|
2
|
+
// __EXTENSIONS__ fix on Solaris.
|
|
1
3
|
#include "sass.hpp"
|
|
4
|
+
|
|
2
5
|
#include <string>
|
|
3
6
|
#include <sstream>
|
|
4
7
|
#include <iostream>
|
|
@@ -12,13 +15,13 @@
|
|
|
12
15
|
|
|
13
16
|
namespace Sass {
|
|
14
17
|
SourceMap::SourceMap() : current_position(0, 0, 0), file("stdin") { }
|
|
15
|
-
SourceMap::SourceMap(const
|
|
18
|
+
SourceMap::SourceMap(const sass::string& file) : current_position(0, 0, 0), file(file) { }
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
sass::string SourceMap::render_srcmap(Context &ctx) {
|
|
18
21
|
|
|
19
22
|
const bool include_sources = ctx.c_options.source_map_contents;
|
|
20
|
-
const
|
|
21
|
-
const
|
|
23
|
+
const sass::vector<sass::string> links = ctx.srcmap_links;
|
|
24
|
+
const sass::vector<Resource>& sources(ctx.resources);
|
|
22
25
|
|
|
23
26
|
JsonNode* json_srcmap = json_mkobject();
|
|
24
27
|
|
|
@@ -36,7 +39,7 @@ namespace Sass {
|
|
|
36
39
|
|
|
37
40
|
JsonNode *json_sources = json_mkarray();
|
|
38
41
|
for (size_t i = 0; i < source_index.size(); ++i) {
|
|
39
|
-
|
|
42
|
+
sass::string source(links[source_index[i]]);
|
|
40
43
|
if (ctx.c_options.source_map_file_urls) {
|
|
41
44
|
source = File::rel2abs(source);
|
|
42
45
|
// check for windows abs path
|
|
@@ -69,19 +72,19 @@ namespace Sass {
|
|
|
69
72
|
// no problem as we do not alter any identifiers
|
|
70
73
|
json_append_member(json_srcmap, "names", json_names);
|
|
71
74
|
|
|
72
|
-
|
|
75
|
+
sass::string mappings = serialize_mappings();
|
|
73
76
|
JsonNode *json_mappings = json_mkstring(mappings.c_str());
|
|
74
77
|
json_append_member(json_srcmap, "mappings", json_mappings);
|
|
75
78
|
|
|
76
79
|
char *str = json_stringify(json_srcmap, "\t");
|
|
77
|
-
|
|
80
|
+
sass::string result = sass::string(str);
|
|
78
81
|
free(str);
|
|
79
82
|
json_delete(json_srcmap);
|
|
80
83
|
return result;
|
|
81
84
|
}
|
|
82
85
|
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
sass::string SourceMap::serialize_mappings() {
|
|
87
|
+
sass::string result = "";
|
|
85
88
|
|
|
86
89
|
size_t previous_generated_line = 0;
|
|
87
90
|
size_t previous_generated_column = 0;
|
|
@@ -98,7 +101,7 @@ namespace Sass {
|
|
|
98
101
|
if (generated_line != previous_generated_line) {
|
|
99
102
|
previous_generated_column = 0;
|
|
100
103
|
if (generated_line > previous_generated_line) {
|
|
101
|
-
result +=
|
|
104
|
+
result += sass::string(generated_line - previous_generated_line, ';');
|
|
102
105
|
previous_generated_line = generated_line;
|
|
103
106
|
}
|
|
104
107
|
}
|
|
@@ -170,25 +173,29 @@ namespace Sass {
|
|
|
170
173
|
current_position += offset;
|
|
171
174
|
}
|
|
172
175
|
|
|
173
|
-
void SourceMap::add_open_mapping(const
|
|
176
|
+
void SourceMap::add_open_mapping(const AST_Node* node)
|
|
174
177
|
{
|
|
175
|
-
|
|
178
|
+
const SourceSpan& span(node->pstate());
|
|
179
|
+
Position from(span.getSrcId(), span.position);
|
|
180
|
+
mappings.push_back(Mapping(from, current_position));
|
|
176
181
|
}
|
|
177
182
|
|
|
178
|
-
void SourceMap::add_close_mapping(const
|
|
183
|
+
void SourceMap::add_close_mapping(const AST_Node* node)
|
|
179
184
|
{
|
|
180
|
-
|
|
185
|
+
const SourceSpan& span(node->pstate());
|
|
186
|
+
Position to(span.getSrcId(), span.position + span.offset);
|
|
187
|
+
mappings.push_back(Mapping(to, current_position));
|
|
181
188
|
}
|
|
182
189
|
|
|
183
|
-
|
|
190
|
+
SourceSpan SourceMap::remap(const SourceSpan& pstate) {
|
|
184
191
|
for (size_t i = 0; i < mappings.size(); ++i) {
|
|
185
192
|
if (
|
|
186
|
-
mappings[i].generated_position.file == pstate.
|
|
187
|
-
mappings[i].generated_position.line == pstate.line &&
|
|
188
|
-
mappings[i].generated_position.column == pstate.column
|
|
189
|
-
) return
|
|
193
|
+
mappings[i].generated_position.file == pstate.getSrcId() &&
|
|
194
|
+
mappings[i].generated_position.line == pstate.position.line &&
|
|
195
|
+
mappings[i].generated_position.column == pstate.position.column
|
|
196
|
+
) return SourceSpan(pstate.source, mappings[i].original_position, pstate.offset);
|
|
190
197
|
}
|
|
191
|
-
return
|
|
198
|
+
return SourceSpan(pstate.source, Position(-1, -1, -1), Offset(0, 0));
|
|
192
199
|
|
|
193
200
|
}
|
|
194
201
|
|