sassc 2.1.0.pre2 → 2.1.0.pre3
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/CHANGELOG.md +3 -0
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/ext/extconf.rb +2 -3
- data/ext/libsass/VERSION +1 -1
- data/ext/libsass/include/sass/base.h +6 -0
- data/ext/libsass/src/ast.cpp +2 -2
- data/ext/libsass/src/ast.hpp +1 -1
- data/ext/libsass/src/expand.cpp +2 -2
- data/ext/libsass/src/file.cpp +19 -14
- data/ext/libsass/src/inspect.cpp +1 -1
- data/ext/libsass/src/memory/SharedPtr.hpp +97 -1
- data/ext/libsass/src/parser.cpp +1 -1
- data/ext/libsass/src/util.cpp +2 -2
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +1 -1
- data/test/native_test.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c292d43734810782d28442d9ce558bd6d15f8c1726f9f9cf7ab734e60154616a
|
4
|
+
data.tar.gz: 10fdd3957c9e01b3e4eff3c7485af87a1acfdba6fd704cca71e1473dd115941e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42faa474b08b2f1a561097698ea879dc3760bb4d0554d33e2f4f2250ca2f72f13c41e8d1c130905258846e64eba6d6e6f17d3fac747e216adcff9dc13be0c394
|
7
|
+
data.tar.gz: 0aa4d3f26dfe102fcff5863a352ef60527467ccff6590338db20bf3c653dc1059bc7bfb28b4b90222341d412da94924a75f878cb373f21dfdc5d4b1abb034317
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
- **2.1.0.pre3**
|
2
|
+
- [extconf.rb: Always write VERSION if we have .git](https://github.com/sass/sassc-ruby/pull/131)
|
3
|
+
- [Update libsass to 3.6.1](https://github.com/sass/sassc-ruby/pull/130)
|
1
4
|
- **2.1.0.pre2**
|
2
5
|
- [Reduce Ruby warnings](https://github.com/sass/sassc-ruby/pull/124)
|
3
6
|
- [prefer equal? to determine object identity](https://github.com/sass/sassc-ruby/pull/122)
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -43,7 +43,7 @@ task 'gem:native' do
|
|
43
43
|
"RUBY_CC_VERSION=2.6.0 CLEAN=1"
|
44
44
|
end
|
45
45
|
|
46
|
-
CLEAN.include 'tmp', 'pkg', 'lib/sassc/libsass.so', 'ext/libsass/VERSION',
|
46
|
+
CLEAN.include 'tmp', 'pkg', 'lib/sassc/libsass.{so,bundle}', 'ext/libsass/VERSION',
|
47
47
|
'ext/*.{o,so,bundle}', 'ext/Makefile'
|
48
48
|
|
49
49
|
desc "Run all tests"
|
data/ext/extconf.rb
CHANGED
@@ -38,13 +38,12 @@ $CFLAGS.gsub!(/[\s+](-ansi|-std=[^\s]+)/, '')
|
|
38
38
|
dir_config 'libsass'
|
39
39
|
|
40
40
|
libsass_version = Dir.chdir(libsass_dir) do
|
41
|
-
if File.exist?('
|
42
|
-
File.read('VERSION').chomp
|
43
|
-
elsif File.exist?('.git')
|
41
|
+
if File.exist?('.git')
|
44
42
|
ver = %x[git describe --abbrev=4 --dirty --always --tags].chomp
|
45
43
|
File.write('VERSION', ver)
|
46
44
|
ver
|
47
45
|
end
|
46
|
+
File.read('VERSION').chomp if File.exist?('VERSION')
|
48
47
|
end
|
49
48
|
|
50
49
|
if libsass_version
|
data/ext/libsass/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.6.
|
1
|
+
3.6.1
|
@@ -17,6 +17,12 @@
|
|
17
17
|
#endif
|
18
18
|
#endif
|
19
19
|
|
20
|
+
// Work around lack of `noexcept` keyword support in VS2013
|
21
|
+
#if defined(_MSC_VER) && (_MSC_VER <= 1800) && !defined(_ALLOW_KEYWORD_MACROS)
|
22
|
+
#define _ALLOW_KEYWORD_MACROS 1
|
23
|
+
#define noexcept throw( )
|
24
|
+
#endif
|
25
|
+
|
20
26
|
#include <stddef.h>
|
21
27
|
#include <stdbool.h>
|
22
28
|
|
data/ext/libsass/src/ast.cpp
CHANGED
@@ -184,7 +184,7 @@ namespace Sass {
|
|
184
184
|
/////////////////////////////////////////////////////////////////////////
|
185
185
|
|
186
186
|
Bubble::Bubble(ParserState pstate, Statement_Obj n, Statement_Obj g, size_t t)
|
187
|
-
: Statement(pstate, Statement::BUBBLE, t), node_(n), group_end_(g ==
|
187
|
+
: Statement(pstate, Statement::BUBBLE, t), node_(n), group_end_(g == nullptr)
|
188
188
|
{ }
|
189
189
|
Bubble::Bubble(const Bubble* ptr)
|
190
190
|
: Statement(ptr),
|
@@ -834,7 +834,7 @@ namespace Sass {
|
|
834
834
|
}
|
835
835
|
|
836
836
|
bool At_Root_Block::exclude_node(Statement_Obj s) {
|
837
|
-
if (expression() ==
|
837
|
+
if (expression() == nullptr)
|
838
838
|
{
|
839
839
|
return s->statement_type() == Statement::RULESET;
|
840
840
|
}
|
data/ext/libsass/src/ast.hpp
CHANGED
@@ -312,7 +312,7 @@ namespace Sass {
|
|
312
312
|
bool empty() const { return list_.empty(); }
|
313
313
|
bool has(Expression_Obj k) const { return elements_.count(k) == 1; }
|
314
314
|
Expression_Obj at(Expression_Obj k) const;
|
315
|
-
bool has_duplicate_key() const { return duplicate_key_ !=
|
315
|
+
bool has_duplicate_key() const { return duplicate_key_ != nullptr; }
|
316
316
|
Expression_Obj get_duplicate_key() const { return duplicate_key_; }
|
317
317
|
const ExpressionMap elements() { return elements_; }
|
318
318
|
Hashed& operator<<(std::pair<Expression_Obj, Expression_Obj> p)
|
data/ext/libsass/src/expand.cpp
CHANGED
@@ -104,7 +104,7 @@ namespace Sass {
|
|
104
104
|
bool has_parent_selector = false;
|
105
105
|
for (size_t i = 0, L = selector_stack.size(); i < L && !has_parent_selector; i++) {
|
106
106
|
Selector_List_Obj ll = selector_stack.at(i);
|
107
|
-
has_parent_selector = ll !=
|
107
|
+
has_parent_selector = ll != nullptr && ll->length() > 0;
|
108
108
|
}
|
109
109
|
|
110
110
|
Selector_List_Obj sel = r->selector();
|
@@ -614,7 +614,7 @@ namespace Sass {
|
|
614
614
|
|
615
615
|
|
616
616
|
Selector_List_Obj contextualized = Cast<Selector_List>(s->perform(&eval));
|
617
|
-
if (contextualized ==
|
617
|
+
if (contextualized == nullptr) return;
|
618
618
|
for (auto complex_sel : contextualized->elements()) {
|
619
619
|
Complex_Selector_Obj c = complex_sel;
|
620
620
|
if (!c->head() || c->tail()) {
|
data/ext/libsass/src/file.cpp
CHANGED
@@ -13,9 +13,8 @@
|
|
13
13
|
#else
|
14
14
|
# include <unistd.h>
|
15
15
|
#endif
|
16
|
-
#include <iostream>
|
17
|
-
#include <fstream>
|
18
16
|
#include <cctype>
|
17
|
+
#include <cstdio>
|
19
18
|
#include <vector>
|
20
19
|
#include <algorithm>
|
21
20
|
#include <sys/stat.h>
|
@@ -462,21 +461,27 @@ namespace Sass {
|
|
462
461
|
// just convert from unsigned char*
|
463
462
|
char* contents = (char*) pBuffer;
|
464
463
|
#else
|
464
|
+
// Read the file using `<cstdio>` instead of `<fstream>` for better portability.
|
465
|
+
// The `<fstream>` header initializes `<locale>` and this buggy in GCC4/5 with static linking.
|
466
|
+
// See:
|
467
|
+
// https://www.spinics.net/lists/gcchelp/msg46851.html
|
468
|
+
// https://github.com/sass/sassc-ruby/issues/128
|
465
469
|
struct stat st;
|
466
470
|
if (stat(path.c_str(), &st) == -1 || S_ISDIR(st.st_mode)) return 0;
|
467
|
-
std::
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
file.seekg(0, std::ios::beg);
|
475
|
-
file.read(contents, size);
|
476
|
-
contents[size+0] = '\0';
|
477
|
-
contents[size+1] = '\0';
|
478
|
-
file.close();
|
471
|
+
FILE* fd = std::fopen(path.c_str(), "rb");
|
472
|
+
if (fd == nullptr) return nullptr;
|
473
|
+
const std::size_t size = st.st_size;
|
474
|
+
char* contents = static_cast<char*>(malloc(st.st_size + 2 * sizeof(char)));
|
475
|
+
if (std::fread(static_cast<void*>(contents), 1, size, fd) != size) {
|
476
|
+
free(contents);
|
477
|
+
return nullptr;
|
479
478
|
}
|
479
|
+
if (std::fclose(fd) != 0) {
|
480
|
+
free(contents);
|
481
|
+
return nullptr;
|
482
|
+
}
|
483
|
+
contents[size] = '\0';
|
484
|
+
contents[size + 1] = '\0';
|
480
485
|
#endif
|
481
486
|
std::string extension;
|
482
487
|
if (path.length() > 5) {
|
data/ext/libsass/src/inspect.cpp
CHANGED
@@ -1060,7 +1060,7 @@ namespace Sass {
|
|
1060
1060
|
|
1061
1061
|
for (size_t i = 0, L = g->length(); i < L; ++i) {
|
1062
1062
|
if (!in_wrapped && i == 0) append_indentation();
|
1063
|
-
if ((*g)[i] ==
|
1063
|
+
if ((*g)[i] == nullptr) continue;
|
1064
1064
|
schedule_mapping(g->at(i)->last());
|
1065
1065
|
// add_open_mapping((*g)[i]->last());
|
1066
1066
|
(*g)[i]->perform(this);
|
@@ -3,8 +3,10 @@
|
|
3
3
|
|
4
4
|
#include "sass/base.h"
|
5
5
|
|
6
|
+
#include <cstddef>
|
6
7
|
#include <iostream>
|
7
8
|
#include <string>
|
9
|
+
#include <type_traits>
|
8
10
|
#include <vector>
|
9
11
|
|
10
12
|
namespace Sass {
|
@@ -185,6 +187,100 @@ namespace Sass {
|
|
185
187
|
T* detach() { return static_cast<T*>(SharedPtr::detach()); }
|
186
188
|
};
|
187
189
|
|
188
|
-
|
190
|
+
// Comparison operators, based on:
|
191
|
+
// https://en.cppreference.com/w/cpp/memory/unique_ptr/operator_cmp
|
192
|
+
|
193
|
+
template<class T1, class T2>
|
194
|
+
bool operator==(const SharedImpl<T1>& x, const SharedImpl<T2>& y) {
|
195
|
+
return x.ptr() == y.ptr();
|
196
|
+
}
|
197
|
+
|
198
|
+
template<class T1, class T2>
|
199
|
+
bool operator!=(const SharedImpl<T1>& x, const SharedImpl<T2>& y) {
|
200
|
+
return x.ptr() != y.ptr();
|
201
|
+
}
|
202
|
+
|
203
|
+
template<class T1, class T2>
|
204
|
+
bool operator<(const SharedImpl<T1>& x, const SharedImpl<T2>& y) {
|
205
|
+
using CT = typename std::common_type<T1*, T2*>::type;
|
206
|
+
return std::less<CT>()(x.get(), y.get());
|
207
|
+
}
|
208
|
+
|
209
|
+
template<class T1, class T2>
|
210
|
+
bool operator<=(const SharedImpl<T1>& x, const SharedImpl<T2>& y) {
|
211
|
+
return !(y < x);
|
212
|
+
}
|
213
|
+
|
214
|
+
template<class T1, class T2>
|
215
|
+
bool operator>(const SharedImpl<T1>& x, const SharedImpl<T2>& y) {
|
216
|
+
return y < x;
|
217
|
+
}
|
218
|
+
|
219
|
+
template<class T1, class T2>
|
220
|
+
bool operator>=(const SharedImpl<T1>& x, const SharedImpl<T2>& y) {
|
221
|
+
return !(x < y);
|
222
|
+
}
|
223
|
+
|
224
|
+
template <class T>
|
225
|
+
bool operator==(const SharedImpl<T>& x, std::nullptr_t) noexcept {
|
226
|
+
return x.isNull();
|
227
|
+
}
|
228
|
+
|
229
|
+
template <class T>
|
230
|
+
bool operator==(std::nullptr_t, const SharedImpl<T>& x) noexcept {
|
231
|
+
return x.isNull();
|
232
|
+
}
|
233
|
+
|
234
|
+
template <class T>
|
235
|
+
bool operator!=(const SharedImpl<T>& x, std::nullptr_t) noexcept {
|
236
|
+
return !x.isNull();
|
237
|
+
}
|
238
|
+
|
239
|
+
template <class T>
|
240
|
+
bool operator!=(std::nullptr_t, const SharedImpl<T>& x) noexcept {
|
241
|
+
return !x.isNull();
|
242
|
+
}
|
243
|
+
|
244
|
+
template <class T>
|
245
|
+
bool operator<(const SharedImpl<T>& x, std::nullptr_t) {
|
246
|
+
return std::less<T*>()(x.get(), nullptr);
|
247
|
+
}
|
248
|
+
|
249
|
+
template <class T>
|
250
|
+
bool operator<(std::nullptr_t, const SharedImpl<T>& y) {
|
251
|
+
return std::less<T*>()(nullptr, y.get());
|
252
|
+
}
|
253
|
+
|
254
|
+
template <class T>
|
255
|
+
bool operator<=(const SharedImpl<T>& x, std::nullptr_t) {
|
256
|
+
return !(nullptr < x);
|
257
|
+
}
|
258
|
+
|
259
|
+
template <class T>
|
260
|
+
bool operator<=(std::nullptr_t, const SharedImpl<T>& y) {
|
261
|
+
return !(y < nullptr);
|
262
|
+
}
|
263
|
+
|
264
|
+
template <class T>
|
265
|
+
bool operator>(const SharedImpl<T>& x, std::nullptr_t) {
|
266
|
+
return nullptr < x;
|
267
|
+
}
|
268
|
+
|
269
|
+
template <class T>
|
270
|
+
bool operator>(std::nullptr_t, const SharedImpl<T>& y) {
|
271
|
+
return y < nullptr;
|
272
|
+
}
|
273
|
+
|
274
|
+
template <class T>
|
275
|
+
bool operator>=(const SharedImpl<T>& x, std::nullptr_t) {
|
276
|
+
return !(x < nullptr);
|
277
|
+
}
|
278
|
+
|
279
|
+
template <class T>
|
280
|
+
bool operator>=(std::nullptr_t, const SharedImpl<T>& y) {
|
281
|
+
return !(nullptr < y);
|
282
|
+
}
|
283
|
+
|
284
|
+
} // namespace Sass
|
189
285
|
|
190
286
|
#endif
|
data/ext/libsass/src/parser.cpp
CHANGED
@@ -2488,7 +2488,7 @@ namespace Sass {
|
|
2488
2488
|
Supports_Condition_Obj Parser::parse_supports_condition_in_parens(bool parens_required)
|
2489
2489
|
{
|
2490
2490
|
Supports_Condition_Obj interp = parse_supports_interpolation();
|
2491
|
-
if (interp !=
|
2491
|
+
if (interp != nullptr) return interp;
|
2492
2492
|
|
2493
2493
|
if (!lex < exactly <'('> >()) {
|
2494
2494
|
if (parens_required) {
|
data/ext/libsass/src/util.cpp
CHANGED
@@ -627,9 +627,9 @@ namespace Sass {
|
|
627
627
|
|
628
628
|
bool isPrintable(Media_Block* m, Sass_Output_Style style)
|
629
629
|
{
|
630
|
-
if (m ==
|
630
|
+
if (m == nullptr) return false;
|
631
631
|
Block_Obj b = m->block();
|
632
|
-
if (b ==
|
632
|
+
if (b == nullptr) return false;
|
633
633
|
for (size_t i = 0, L = b->length(); i < L; ++i) {
|
634
634
|
Statement_Obj stm = b->at(i);
|
635
635
|
if (Cast<Directive>(stm)) return true;
|
data/lib/sassc/version.rb
CHANGED
data/sassc.gemspec
CHANGED
@@ -48,7 +48,7 @@ Gem::Specification.new do |spec|
|
|
48
48
|
end
|
49
49
|
|
50
50
|
# Write a VERSION file for non-binary gems (for `SassC::Native.version`).
|
51
|
-
if
|
51
|
+
if File.exist?(File.join(libsass_dir, '.git'))
|
52
52
|
libsass_version = Dir.chdir(libsass_dir) do
|
53
53
|
%x[git describe --abbrev=4 --dirty --always --tags].chomp
|
54
54
|
end
|
data/test/native_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sassc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.0.
|
4
|
+
version: 2.1.0.pre3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Boland
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|