faster_support 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.color_coded +46 -3
- data/.ycm_extra_conf.py +3 -0
- data/Guardfile +2 -2
- data/Rakefile +11 -2
- data/compile_commands.json +15 -20
- data/ext/faster_support/extconf.rb +2 -1
- data/ext/faster_support/faster_support.c +55 -3
- data/ext/faster_support/faster_support.h +9 -13
- data/ext/faster_support/object/blank/blank.h +23 -0
- data/ext/faster_support/object/blank/extconf.rb +6 -0
- data/ext/faster_support/object/blank/object_blank.c +93 -0
- data/ext/faster_support/{string_blank.c → object/blank/string_blank.c} +23 -3
- data/faster_support.gemspec +1 -1
- data/lib/faster_support/core_ext/object.rb +3 -0
- data/lib/faster_support/core_ext.rb +3 -0
- data/lib/faster_support/version.rb +1 -1
- data/lib/faster_support.rb +22 -0
- data/lib/tasks/tooling.rake +1 -1
- data/lib/tasks/tooling.rb +170 -8
- metadata +9 -5
- data/ext/faster_support/array_blank.c +0 -35
- data/ext/faster_support/object_blank.c +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76e9f5ca8de3d42e98a0e73df78445c2b3a4cb8c
|
4
|
+
data.tar.gz: ee4fc83ad572d7d6e6f174de52c1588cb6017678
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4db8352ef893e4a19dba66570cc21d933a42422613f341178dab02d09883c954708aa6d245d841776e3a01921439364e9e0b281ac91f8d24e7eadaf4aaed1af1
|
7
|
+
data.tar.gz: 3cc6517f426912997f1490b593d2b85726d3ba5a9bbaf2da0cb7a6c15af4a08928710ac91e2ee5c862180781e9039494e3d4596da5ae804442abd536d68f8a57
|
data/.color_coded
CHANGED
@@ -1,11 +1,54 @@
|
|
1
1
|
-x
|
2
2
|
c
|
3
3
|
-std=c99
|
4
|
-
-I
|
4
|
+
-I/Users/morgan/projects/coach/faster_support/ext/.
|
5
5
|
-I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/x86_64-darwin16
|
6
6
|
-I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/ruby/backward
|
7
7
|
-I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0
|
8
|
-
-I
|
8
|
+
-I/Users/morgan/projects/coach/faster_support/ext/faster_support
|
9
|
+
-I/usr/local/opt/libyaml/include
|
10
|
+
-I/usr/local/opt/readline/include
|
11
|
+
-I/usr/local/opt/libksba/include
|
12
|
+
-I/usr/local/opt/openssl/include
|
13
|
+
-I/usr/local/opt/libyaml/include
|
14
|
+
-I/usr/local/opt/readline/include
|
15
|
+
-I/usr/local/opt/libksba/include
|
16
|
+
-I/usr/local/opt/openssl/include
|
17
|
+
-D_XOPEN_SOURCE
|
18
|
+
-D_DARWIN_C_SOURCE
|
19
|
+
-D_DARWIN_UNLIMITED_SELECT
|
20
|
+
-D_REENTRANT
|
21
|
+
-fno-common
|
22
|
+
-O3
|
23
|
+
-fno-fast-math
|
24
|
+
-ggdb3
|
25
|
+
-Wall
|
26
|
+
-Wextra
|
27
|
+
-Wno-unused-parameter
|
28
|
+
-Wno-parentheses
|
29
|
+
-Wno-long-long
|
30
|
+
-Wno-missing-field-initializers
|
31
|
+
-Wno-tautological-compare
|
32
|
+
-Wno-parentheses-equality
|
33
|
+
-Wno-constant-logical-operand
|
34
|
+
-Wno-self-assign
|
35
|
+
-Wunused-variable
|
36
|
+
-Wimplicit-int
|
37
|
+
-Wpointer-arith
|
38
|
+
-Wwrite-strings
|
39
|
+
-Wdeclaration-after-statement
|
40
|
+
-Wshorten-64-to-32
|
41
|
+
-Wimplicit-function-declaration
|
42
|
+
-Wdivision-by-zero
|
43
|
+
-Wdeprecated-declarations
|
44
|
+
-Wextra-tokens
|
45
|
+
-fno-common
|
46
|
+
-pipe
|
47
|
+
-I/Users/morgan/projects/coach/faster_support/ext/.
|
48
|
+
-I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/x86_64-darwin16/.
|
49
|
+
-I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/ruby/backward/.
|
50
|
+
-I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/.
|
51
|
+
-I/Users/morgan/projects/coach/faster_support/ext/faster_support/object/blank/.
|
9
52
|
-I/usr/local/opt/libyaml/include
|
10
53
|
-I/usr/local/opt/readline/include
|
11
54
|
-I/usr/local/opt/libksba/include
|
@@ -57,5 +100,5 @@ c
|
|
57
100
|
-isystem
|
58
101
|
/Library/Frameworks
|
59
102
|
-isystem
|
60
|
-
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/
|
103
|
+
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.0.0/include
|
61
104
|
-fspell-checking
|
data/.ycm_extra_conf.py
CHANGED
@@ -41,6 +41,9 @@ flags = [
|
|
41
41
|
'-I/Users/morgan/projects/coach/faster_support/ext/faster_support/.',
|
42
42
|
'-I/Users/morgan/projects/coach/faster_support/tmp/x86_64-darwin16/stage/lib/faster_support/.',
|
43
43
|
'-I/Users/morgan/projects/coach/faster_support/tmp/x86_64-darwin16/faster_support/2.4.0/.',
|
44
|
+
'-I/Users/morgan/projects/coach/faster_support/ext/faster_support/object/blank/.',
|
45
|
+
'-I/Users/morgan/projects/coach/faster_support/tmp/x86_64-darwin16/stage/lib/faster_support/object/blank/.',
|
46
|
+
'-I/Users/morgan/projects/coach/faster_support/tmp/x86_64-darwin16/faster_support/2.4.0/object/blank/.',
|
44
47
|
'-I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/.',
|
45
48
|
'-I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/x86_64-darwin16/.',
|
46
49
|
'-Wall',
|
data/Guardfile
CHANGED
@@ -19,7 +19,7 @@
|
|
19
19
|
|
20
20
|
group :build_and_test, halt_on_fail: true do
|
21
21
|
guard 'rake', task: 'prespec' do
|
22
|
-
watch(%r{^ext/(.+)\.(c|h|rb)$})
|
22
|
+
watch(%r{^ext/faster_support/(.+)\.(c|h|rb)$})
|
23
23
|
end
|
24
24
|
|
25
25
|
guard :rspec, cmd: 'bundle exec rspec' do
|
@@ -34,7 +34,7 @@ group :build_and_test, halt_on_fail: true do
|
|
34
34
|
watch(rspec.spec_support) { rspec.spec_dir }
|
35
35
|
watch(rspec.spec_files)
|
36
36
|
|
37
|
-
watch(%r{^ext/(.+)\.(c|h|rb)$}) { rspec.spec_dir }
|
37
|
+
watch(%r{^ext/faster_support/(.+)\.(c|h|rb)$}) { rspec.spec_dir }
|
38
38
|
|
39
39
|
# Ruby files
|
40
40
|
ruby = dsl.ruby
|
data/Rakefile
CHANGED
@@ -13,12 +13,21 @@ task build: [:compile, :tooling]
|
|
13
13
|
|
14
14
|
task prespec: [:clobber, :compile, :tooling]
|
15
15
|
|
16
|
-
|
16
|
+
require 'tasks/tooling'
|
17
17
|
|
18
18
|
Rake::ExtensionTask.new('faster_support') do |ext|
|
19
19
|
ext.lib_dir = 'lib/faster_support'
|
20
20
|
ext.source_pattern = '*.{c,cpp,m,mm}'
|
21
|
-
Tooling.
|
21
|
+
Tooling.add_task(ext: ext)
|
22
22
|
end
|
23
23
|
|
24
|
+
Rake::ExtensionTask.new('object/blank') do |ext|
|
25
|
+
ext.ext_dir = 'ext/faster_support/object/blank'
|
26
|
+
ext.lib_dir = 'lib/faster_support/core_ext'
|
27
|
+
ext.source_pattern = '*.{c,cpp,m,mm}'
|
28
|
+
Tooling.add_task(ext: ext)
|
29
|
+
end
|
30
|
+
|
31
|
+
Tooling.define(:tooling)
|
32
|
+
|
24
33
|
task default: [:clobber, :compile, :tooling, :spec]
|
data/compile_commands.json
CHANGED
@@ -1,22 +1,17 @@
|
|
1
1
|
[
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
{
|
18
|
-
"command": "cc -c -I. -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/x86_64-darwin16 -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/ruby/backward -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0 -I../../../../ext/faster_support -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -fno-common -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe -o string_blank.o ../../../../ext/faster_support/string_blank.c",
|
19
|
-
"directory": "/Users/morgan/projects/coach/faster_support/tmp/x86_64-darwin16/faster_support/2.4.0",
|
20
|
-
"file": "/Users/morgan/projects/coach/faster_support/ext/faster_support/string_blank.c"
|
21
|
-
}
|
2
|
+
{
|
3
|
+
"command": "cc -c -I. -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/x86_64-darwin16 -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/ruby/backward -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0 -I../../../../ext/faster_support -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -fno-common -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe -o faster_support.o ../../../../ext/faster_support/faster_support.c",
|
4
|
+
"directory": "/Users/morgan/projects/coach/faster_support/tmp/x86_64-darwin16/faster_support/2.4.0",
|
5
|
+
"file": "/Users/morgan/projects/coach/faster_support/ext/faster_support/faster_support.c"
|
6
|
+
},
|
7
|
+
{
|
8
|
+
"command": "cc -c -I. -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/x86_64-darwin16 -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/ruby/backward -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0 -I../../../../../ext/faster_support/object/blank -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -I/Users/morgan/projects/coach/faster_support/ext/faster_support -fno-common -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe -o object_blank.o ../../../../../ext/faster_support/object/blank/object_blank.c",
|
9
|
+
"directory": "/Users/morgan/projects/coach/faster_support/tmp/x86_64-darwin16/object/blank/2.4.0",
|
10
|
+
"file": "/Users/morgan/projects/coach/faster_support/ext/faster_support/object/blank/object_blank.c"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"command": "cc -c -I. -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/x86_64-darwin16 -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0/ruby/backward -I/Users/morgan/.rvm/rubies/ruby-2.4.0/include/ruby-2.4.0 -I../../../../../ext/faster_support/object/blank -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -I/Users/morgan/projects/coach/faster_support/ext/faster_support -fno-common -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe -o string_blank.o ../../../../../ext/faster_support/object/blank/string_blank.c",
|
14
|
+
"directory": "/Users/morgan/projects/coach/faster_support/tmp/x86_64-darwin16/object/blank/2.4.0",
|
15
|
+
"file": "/Users/morgan/projects/coach/faster_support/ext/faster_support/object/blank/string_blank.c"
|
16
|
+
}
|
22
17
|
]
|
@@ -1,8 +1,60 @@
|
|
1
|
+
/* FasterSupport main implementation */
|
2
|
+
|
1
3
|
#include "faster_support.h"
|
2
4
|
|
5
|
+
VALUE rb_mFasterSupport, rb_sFasterSupport;
|
6
|
+
|
7
|
+
static ID sym_mri, sym_as, id_blank_impl, id_to_sym;
|
8
|
+
|
9
|
+
static VALUE get_impl(void)
|
10
|
+
{
|
11
|
+
VALUE val, sym;
|
12
|
+
|
13
|
+
val = rb_funcall(rb_mFasterSupport, id_blank_impl, 0);
|
14
|
+
|
15
|
+
if (NIL_P(val)) {
|
16
|
+
printf("Got `nil`, returning sym_as\n");
|
17
|
+
sym = sym_as;
|
18
|
+
}
|
19
|
+
else {
|
20
|
+
sym = rb_funcall(val, id_to_sym, 0);
|
21
|
+
}
|
22
|
+
|
23
|
+
return sym;
|
24
|
+
}
|
25
|
+
|
26
|
+
FasterSupport_blank_impl FasterSupport_get_blank_impl()
|
27
|
+
{
|
28
|
+
VALUE impl = get_impl();
|
29
|
+
|
30
|
+
if (impl == sym_mri) {
|
31
|
+
return Impl_MRI;
|
32
|
+
}
|
33
|
+
|
34
|
+
if (impl == sym_as) {
|
35
|
+
return Impl_ActiveSupport;
|
36
|
+
}
|
37
|
+
|
38
|
+
return Impl_UNKNOWN;
|
39
|
+
}
|
40
|
+
|
41
|
+
inline int FasterSupport_uses_mri()
|
42
|
+
{
|
43
|
+
return (FasterSupport_get_blank_impl() == Impl_MRI);
|
44
|
+
}
|
45
|
+
|
46
|
+
inline int FasterSupport_uses_as()
|
47
|
+
{
|
48
|
+
return (FasterSupport_get_blank_impl() == Impl_ActiveSupport);
|
49
|
+
}
|
50
|
+
|
3
51
|
void Init_faster_support(void)
|
4
52
|
{
|
5
|
-
|
6
|
-
|
7
|
-
|
53
|
+
sym_mri = ID2SYM(rb_intern("mri"));
|
54
|
+
sym_as = ID2SYM(rb_intern("active_support"));
|
55
|
+
id_blank_impl = rb_intern("blank_implementation");
|
56
|
+
id_to_sym = rb_intern("to_sym");
|
57
|
+
|
58
|
+
rb_mFasterSupport = rb_define_module("FasterSupport");
|
59
|
+
rb_sFasterSupport = rb_singleton_class(rb_mFasterSupport);
|
8
60
|
}
|
@@ -2,22 +2,18 @@
|
|
2
2
|
#define FASTER_SUPPORT_H 1
|
3
3
|
|
4
4
|
#include "ruby.h"
|
5
|
-
#include "ruby/encoding.h"
|
6
|
-
#include "ruby/re.h"
|
7
|
-
#include "ruby/version.h"
|
8
5
|
|
9
|
-
|
6
|
+
extern VALUE rb_mFasterSupport;
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
typedef enum {
|
9
|
+
Impl_MRI,
|
10
|
+
Impl_ActiveSupport,
|
11
|
+
Impl_UNKNOWN,
|
12
|
+
} FasterSupport_blank_impl;
|
16
13
|
|
17
|
-
|
14
|
+
FasterSupport_blank_impl FasterSupport_get_blank_impl();
|
18
15
|
|
19
|
-
|
20
|
-
|
21
|
-
void Init_obj_blank(void);
|
16
|
+
inline int FasterSupport_uses_mri();
|
17
|
+
inline int FasterSupport_uses_as();
|
22
18
|
|
23
19
|
#endif /* FASTER_SUPPORT_H */
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#ifndef FASTER_SUPPORT_OBJECT_BLANK_H
|
2
|
+
#define FASTER_SUPPORT_OBJECT_BLANK_H 1
|
3
|
+
|
4
|
+
#include "ruby.h"
|
5
|
+
#include "ruby/encoding.h"
|
6
|
+
#include "ruby/re.h"
|
7
|
+
#include "ruby/version.h"
|
8
|
+
|
9
|
+
#define STR_ENC_GET(str) rb_enc_from_index(ENCODING_GET(str))
|
10
|
+
|
11
|
+
#ifndef RUBY_API_VERSION_CODE
|
12
|
+
#define RUBY_BEFORE_2_2 1
|
13
|
+
#else
|
14
|
+
#define RUBY_BEFORE_2_2 (RUBY_API_VERSION_CODE < 20200)
|
15
|
+
#endif /* ifndef RUBY_API_VERSION_CODE */
|
16
|
+
|
17
|
+
#define RB_NEGATE(VAL) (VAL == Qtrue ? Qfalse : Qtrue)
|
18
|
+
|
19
|
+
void Init_str_blank(void);
|
20
|
+
void Init_ary_blank(void);
|
21
|
+
void Init_obj_blank(void);
|
22
|
+
|
23
|
+
#endif /* FASTER_SUPPORT_OBJECT_BLANK_H */
|
@@ -0,0 +1,93 @@
|
|
1
|
+
/* Object#blank? implementation */
|
2
|
+
|
3
|
+
#include "blank.h"
|
4
|
+
|
5
|
+
static ID id_empty;
|
6
|
+
|
7
|
+
static VALUE rb_obj_blank(VALUE obj)
|
8
|
+
{
|
9
|
+
VALUE empty;
|
10
|
+
|
11
|
+
if (rb_respond_to(obj, id_empty)) {
|
12
|
+
empty = rb_funcall(obj, id_empty, 0);
|
13
|
+
if (empty == Qnil || empty == Qfalse) {
|
14
|
+
return Qfalse;
|
15
|
+
}
|
16
|
+
|
17
|
+
return Qtrue;
|
18
|
+
}
|
19
|
+
|
20
|
+
empty = (obj == Qnil || obj == Qfalse) ? Qtrue : Qfalse;
|
21
|
+
|
22
|
+
return empty;
|
23
|
+
}
|
24
|
+
|
25
|
+
static VALUE rb_obj_present(VALUE obj)
|
26
|
+
{
|
27
|
+
return RB_NEGATE(rb_obj_blank(obj));
|
28
|
+
}
|
29
|
+
|
30
|
+
static VALUE return_false()
|
31
|
+
{
|
32
|
+
return Qfalse;
|
33
|
+
}
|
34
|
+
|
35
|
+
static VALUE return_true()
|
36
|
+
{
|
37
|
+
return Qtrue;
|
38
|
+
}
|
39
|
+
|
40
|
+
static VALUE rb_ary_blank(VALUE ary)
|
41
|
+
{
|
42
|
+
if (RARRAY_LEN(ary) == 0) {
|
43
|
+
return Qtrue;
|
44
|
+
}
|
45
|
+
|
46
|
+
return Qfalse;
|
47
|
+
}
|
48
|
+
|
49
|
+
static VALUE rb_ary_present(VALUE ary)
|
50
|
+
{
|
51
|
+
return RB_NEGATE(rb_ary_blank(ary));
|
52
|
+
}
|
53
|
+
|
54
|
+
static VALUE rb_hash_blank(VALUE self)
|
55
|
+
{
|
56
|
+
return RHASH_EMPTY_P(self) ? Qtrue : Qfalse;
|
57
|
+
}
|
58
|
+
|
59
|
+
static VALUE rb_hash_present(VALUE self)
|
60
|
+
{
|
61
|
+
return RB_NEGATE(rb_hash_blank(self));
|
62
|
+
}
|
63
|
+
|
64
|
+
void Init_blank(void)
|
65
|
+
{
|
66
|
+
id_empty = rb_intern("empty?");
|
67
|
+
|
68
|
+
rb_define_method(rb_cObject, "blank?", rb_obj_blank, 0);
|
69
|
+
rb_define_method(rb_cObject, "present?", rb_obj_present, 0);
|
70
|
+
|
71
|
+
rb_define_method(rb_cNilClass, "blank?", return_true, 0);
|
72
|
+
rb_define_method(rb_cNilClass, "present?", return_false, 0);
|
73
|
+
|
74
|
+
rb_define_method(rb_cFalseClass, "blank?", return_true, 0);
|
75
|
+
rb_define_method(rb_cFalseClass, "present?", return_false, 0);
|
76
|
+
|
77
|
+
rb_define_method(rb_cArray, "blank?", rb_ary_blank, 0);
|
78
|
+
rb_define_method(rb_cArray, "present?", rb_ary_present, 0);
|
79
|
+
|
80
|
+
rb_define_method(rb_cHash, "blank?", rb_hash_blank, 0);
|
81
|
+
rb_define_method(rb_cHash, "present?", rb_hash_present, 0);
|
82
|
+
|
83
|
+
rb_define_method(rb_cTrueClass, "blank?", return_false, 0);
|
84
|
+
rb_define_method(rb_cTrueClass, "present?", return_true, 0);
|
85
|
+
|
86
|
+
Init_str_blank();
|
87
|
+
|
88
|
+
rb_define_method(rb_cNumeric, "blank?", return_false, 0);
|
89
|
+
rb_define_method(rb_cNumeric, "present?", return_true, 0);
|
90
|
+
|
91
|
+
rb_define_method(rb_cTime, "blank?", return_false, 0);
|
92
|
+
rb_define_method(rb_cTime, "present?", return_true, 0);
|
93
|
+
}
|
@@ -1,9 +1,12 @@
|
|
1
1
|
/* Faster implementation of String#blank? */
|
2
2
|
|
3
|
+
#include "blank.h"
|
3
4
|
#include "faster_support.h"
|
4
5
|
#include <stdio.h>
|
5
6
|
|
6
|
-
|
7
|
+
extern VALUE rb_mFasterSupport;
|
8
|
+
|
9
|
+
static VALUE rb_str_as_blank(VALUE str)
|
7
10
|
{
|
8
11
|
rb_encoding *enc;
|
9
12
|
char *s, *e;
|
@@ -62,7 +65,7 @@ static VALUE rb_str_blank(VALUE str)
|
|
62
65
|
return Qtrue;
|
63
66
|
}
|
64
67
|
|
65
|
-
static VALUE
|
68
|
+
static VALUE rb_str_mri_blank(VALUE str)
|
66
69
|
{
|
67
70
|
rb_encoding *enc;
|
68
71
|
char *s, *e;
|
@@ -84,6 +87,22 @@ static VALUE rb_str_blank_mri(VALUE str)
|
|
84
87
|
return Qtrue;
|
85
88
|
}
|
86
89
|
|
90
|
+
static VALUE rb_str_blank(VALUE str)
|
91
|
+
{
|
92
|
+
FasterSupport_blank_impl impl = FasterSupport_get_blank_impl();
|
93
|
+
|
94
|
+
switch (impl) {
|
95
|
+
case Impl_MRI:
|
96
|
+
return rb_str_mri_blank(str);
|
97
|
+
case Impl_ActiveSupport:
|
98
|
+
return rb_str_as_blank(str);
|
99
|
+
default:
|
100
|
+
break;
|
101
|
+
}
|
102
|
+
|
103
|
+
return rb_str_as_blank(str);
|
104
|
+
}
|
105
|
+
|
87
106
|
static VALUE rb_str_present(VALUE str)
|
88
107
|
{
|
89
108
|
return RB_NEGATE(rb_str_blank(str));
|
@@ -91,7 +110,8 @@ static VALUE rb_str_present(VALUE str)
|
|
91
110
|
|
92
111
|
void Init_str_blank(void)
|
93
112
|
{
|
113
|
+
rb_define_method(rb_cString, "as_blank?", rb_str_as_blank, 0);
|
94
114
|
rb_define_method(rb_cString, "blank?", rb_str_blank, 0);
|
95
|
-
rb_define_method(rb_cString, "mri_blank?",
|
115
|
+
rb_define_method(rb_cString, "mri_blank?", rb_str_mri_blank, 0);
|
96
116
|
rb_define_method(rb_cString, "present?", rb_str_present, 0);
|
97
117
|
}
|
data/faster_support.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.bindir = 'exe'
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ['lib']
|
24
|
-
spec.extensions = ['ext
|
24
|
+
spec.extensions = Dir['ext/**/*/extconf.rb']
|
25
25
|
|
26
26
|
spec.add_development_dependency 'bundler', '~> 1.13'
|
27
27
|
spec.add_development_dependency 'rake', '~> 10.0'
|
data/lib/faster_support.rb
CHANGED
@@ -2,6 +2,28 @@
|
|
2
2
|
|
3
3
|
require 'faster_support/version'
|
4
4
|
require 'faster_support/faster_support'
|
5
|
+
require 'faster_support/core_ext'
|
5
6
|
|
6
7
|
module FasterSupport
|
8
|
+
class << self
|
9
|
+
def blank_implementation
|
10
|
+
@blank_implementation ||= :active_support
|
11
|
+
end
|
12
|
+
|
13
|
+
def blank_implementation=(impl)
|
14
|
+
@blank_implementation =
|
15
|
+
case impl.to_sym
|
16
|
+
when :mri, :ruby then :mri
|
17
|
+
when :as, :active_support, :rails then :active_support
|
18
|
+
else
|
19
|
+
raise ArgumentError, "Unknown implementation: #{impl}. " \
|
20
|
+
'Please use :active_support or :mri.'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
alias blank_impl blank_implementation
|
25
|
+
alias blank_impl= blank_implementation=
|
26
|
+
end
|
27
|
+
|
28
|
+
@blank_implementation = :active_support
|
7
29
|
end
|
data/lib/tasks/tooling.rake
CHANGED
@@ -19,7 +19,7 @@ namespace :tooling do
|
|
19
19
|
commands = [Tooling::PRE_COMPILE_FLAGS,
|
20
20
|
commands.uniq,
|
21
21
|
Tooling::POST_COMPILE_FLAGS]
|
22
|
-
|
22
|
+
puts 'Generating .color_coded...'
|
23
23
|
File.open('.color_coded', 'w') { |io| io.puts commands }
|
24
24
|
puts 'Done'
|
25
25
|
end
|
data/lib/tasks/tooling.rb
CHANGED
@@ -3,29 +3,191 @@ require 'forwardable'
|
|
3
3
|
require 'pathname'
|
4
4
|
require 'json'
|
5
5
|
|
6
|
+
require 'rake'
|
7
|
+
require 'rake/tasklib'
|
8
|
+
|
6
9
|
module Tooling
|
7
10
|
class << self
|
11
|
+
include ::Rake::DSL
|
12
|
+
|
13
|
+
def cc_jsons
|
14
|
+
@cc_jsons ||= []
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_cc_json(text)
|
18
|
+
cc_jsons << JSON.parse(text)
|
19
|
+
end
|
20
|
+
|
21
|
+
def cc_json(as: :hash)
|
22
|
+
result = []
|
23
|
+
cc_jsons.each { |json| result += json }
|
24
|
+
return result if :hash == as
|
25
|
+
|
26
|
+
JSON.pretty_generate(result)
|
27
|
+
end
|
28
|
+
|
29
|
+
def color_coded_commands
|
30
|
+
@color_coded_commands ||= [Tooling::PRE_COMPILE_FLAGS,
|
31
|
+
inner_cc_commands,
|
32
|
+
Tooling::POST_COMPILE_FLAGS].uniq
|
33
|
+
end
|
34
|
+
|
35
|
+
def add_task(*args, ext:, **opts)
|
36
|
+
Tooling::Task.new(ext, *args, **opts)
|
37
|
+
end
|
38
|
+
|
39
|
+
def tasks
|
40
|
+
@tasks ||= []
|
41
|
+
end
|
42
|
+
|
43
|
+
def define(name = :tooling)
|
44
|
+
desc 'Prerequisites for compile_commands.json'
|
45
|
+
task "#{name}:pre_compile_commands" => pre_compile_commands
|
46
|
+
|
47
|
+
define_ccjson(name)
|
48
|
+
# define_color_coded
|
49
|
+
|
50
|
+
# CLEAN.include('.color_coded')
|
51
|
+
CLEAN.include('compile_commands.json')
|
52
|
+
|
53
|
+
desc 'Default vim tooling task'
|
54
|
+
task "#{name}:default" => ['compile_commands.json']
|
55
|
+
|
56
|
+
desc 'Generate vim tooling'
|
57
|
+
task name => [:compile, "#{name}:default"]
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def define_ccjson(name)
|
63
|
+
file 'compile_commands.json' => "#{name}:pre_compile_commands" do
|
64
|
+
puts "Generating compile_commands.json at #{Rake.original_dir}"
|
65
|
+
Dir.chdir(Rake.original_dir) do
|
66
|
+
File.open('compile_commands.json', 'w') do |io|
|
67
|
+
io.write cc_json(as: :json)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
puts 'Done'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def define_color_coded
|
75
|
+
file '.color_coded' => 'compile_commands.json' do
|
76
|
+
puts 'Generating .color_coded...'
|
77
|
+
File.open('.color_coded', 'w') { |io| io.puts color_coded_commands }
|
78
|
+
puts 'Done'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def pre_compile_commands
|
83
|
+
@pre_compile_commands ||= tasks.map(&:cc_json_task_name)
|
84
|
+
end
|
85
|
+
|
86
|
+
def inner_cc_commands # rubocop:disable Metrics/AbcSize,MethodLength
|
87
|
+
@inner_cc_commands ||=
|
88
|
+
begin
|
89
|
+
commands = []
|
90
|
+
raw = File.read(File.join(Rake.original_dir, 'compile_commands.json'))
|
91
|
+
JSON.parse(raw).each do |cmd_def|
|
92
|
+
commands << cmd_def['command'].split(' ')[2..-4].map do |string|
|
93
|
+
string.strip
|
94
|
+
.sub('../../../..', Rake.original_dir.to_s)
|
95
|
+
.sub('/../', '/')
|
96
|
+
.sub(/-I\.\z/, "-I#{Rake.original_dir}/ext/.")
|
97
|
+
end
|
98
|
+
end
|
99
|
+
commands.uniq
|
100
|
+
rescue Errno::ENOENT
|
101
|
+
puts "File not found: #{raw}"
|
102
|
+
exit 2
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class Task < ::Rake::TaskLib
|
108
|
+
include ::Rake::DSL
|
8
109
|
extend Forwardable
|
9
|
-
attr_writer :exttask
|
10
110
|
|
11
|
-
|
12
|
-
|
111
|
+
attr_accessor :ext_task
|
112
|
+
|
113
|
+
def initialize(ext_task, *args, **opts)
|
114
|
+
@ext_task = ext_task
|
115
|
+
@_name = args.shift || ext_task.name
|
116
|
+
@namespace = opts.fetch(:namespace, :tooling)
|
117
|
+
@namespaced = opts.fetch(:namespaced, !@namespace.nil?)
|
118
|
+
yield self if block_given?
|
119
|
+
|
120
|
+
Tooling.tasks << self
|
121
|
+
|
122
|
+
define(args)
|
13
123
|
end
|
14
124
|
|
15
|
-
|
16
|
-
|
125
|
+
def name
|
126
|
+
@_name ||= extname.dup
|
127
|
+
end
|
128
|
+
|
129
|
+
def_delegators :ext_task, :tmp_dir, :platform
|
130
|
+
def_delegator :ext_task, :name, :extname
|
17
131
|
|
18
132
|
def platform_tmp_dir
|
19
|
-
Pathname.new(File.join(
|
133
|
+
Pathname.new(File.join(ext_task.tmp_dir, ext_task.platform, ext_task.name))
|
20
134
|
end
|
21
135
|
|
22
136
|
def build_dir
|
23
137
|
platform_tmp_dir.join(RUBY_VERSION.to_s)
|
24
138
|
end
|
139
|
+
|
140
|
+
def cc_json_task_name
|
141
|
+
task_name :pre_compile_commands
|
142
|
+
end
|
143
|
+
|
144
|
+
protected
|
145
|
+
|
146
|
+
def namespaced?
|
147
|
+
@namespaced
|
148
|
+
end
|
149
|
+
|
150
|
+
def define(args)
|
151
|
+
desc "Required setup for compile_commands.json for #{name}"
|
152
|
+
task cc_json_task_name, *args do
|
153
|
+
add_cc_json
|
154
|
+
end
|
155
|
+
|
156
|
+
task 'tooling:pre_compile_commands' => cc_json_task_name
|
157
|
+
end
|
158
|
+
|
159
|
+
private
|
160
|
+
|
161
|
+
def run_file_tasks(_args)
|
162
|
+
add_cc_json
|
163
|
+
end
|
164
|
+
|
165
|
+
def cc_json
|
166
|
+
@cc_json ||=
|
167
|
+
begin
|
168
|
+
file = File.join(build_dir, 'compile_commands.json')
|
169
|
+
JSON.parse(File.read(file))
|
170
|
+
rescue Errno::ENOENT => e
|
171
|
+
puts nil, '=' * 70
|
172
|
+
puts "File not found: #{File.expand_path(file)} (#{e})"
|
173
|
+
puts '=' * 70
|
174
|
+
exit 1
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def add_cc_json
|
179
|
+
# puts "Adding compile_commands.json for #{name}"
|
180
|
+
Tooling.cc_jsons << cc_json
|
181
|
+
end
|
182
|
+
|
183
|
+
def task_name(task)
|
184
|
+
"#{name}:#{task}" unless namespaced?
|
185
|
+
"#{@namespace}:#{name}:#{task}"
|
186
|
+
end
|
25
187
|
end
|
26
188
|
|
27
189
|
XCODE_TOOLCHAIN_PATH = '/Applications/Xcode.app/Contents/Developer' \
|
28
|
-
'/Toolchains/XcodeDefault.xctoolchain'
|
190
|
+
'/Toolchains/XcodeDefault.xctoolchain'
|
29
191
|
PRE_COMPILE_FLAGS = %w(-x c -std=c99).freeze
|
30
192
|
|
31
193
|
POST_COMPILE_FLAGS = %W(
|
@@ -42,7 +204,7 @@ module Tooling
|
|
42
204
|
-isystem
|
43
205
|
/Library/Frameworks
|
44
206
|
-isystem
|
45
|
-
#{XCODE_TOOLCHAIN_PATH}/usr/lib/clang/
|
207
|
+
#{XCODE_TOOLCHAIN_PATH}/usr/lib/clang/8.0.0/include
|
46
208
|
-fspell-checking
|
47
209
|
).freeze
|
48
210
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faster_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- J. Morgan Lieberthal
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -72,6 +72,7 @@ email:
|
|
72
72
|
executables: []
|
73
73
|
extensions:
|
74
74
|
- ext/faster_support/extconf.rb
|
75
|
+
- ext/faster_support/object/blank/extconf.rb
|
75
76
|
extra_rdoc_files: []
|
76
77
|
files:
|
77
78
|
- ".clang-format"
|
@@ -91,14 +92,17 @@ files:
|
|
91
92
|
- bin/console
|
92
93
|
- bin/setup
|
93
94
|
- compile_commands.json
|
94
|
-
- ext/faster_support/array_blank.c
|
95
95
|
- ext/faster_support/extconf.rb
|
96
96
|
- ext/faster_support/faster_support.c
|
97
97
|
- ext/faster_support/faster_support.h
|
98
|
-
- ext/faster_support/
|
99
|
-
- ext/faster_support/
|
98
|
+
- ext/faster_support/object/blank/blank.h
|
99
|
+
- ext/faster_support/object/blank/extconf.rb
|
100
|
+
- ext/faster_support/object/blank/object_blank.c
|
101
|
+
- ext/faster_support/object/blank/string_blank.c
|
100
102
|
- faster_support.gemspec
|
101
103
|
- lib/faster_support.rb
|
104
|
+
- lib/faster_support/core_ext.rb
|
105
|
+
- lib/faster_support/core_ext/object.rb
|
102
106
|
- lib/faster_support/version.rb
|
103
107
|
- lib/tasks/tooling.rake
|
104
108
|
- lib/tasks/tooling.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
/* Array#blank? implementation */
|
2
|
-
|
3
|
-
#include "faster_support.h"
|
4
|
-
|
5
|
-
static VALUE rb_ary_blank(VALUE ary)
|
6
|
-
{
|
7
|
-
if (RARRAY_LEN(ary) == 0) {
|
8
|
-
return Qtrue;
|
9
|
-
}
|
10
|
-
|
11
|
-
return Qfalse;
|
12
|
-
}
|
13
|
-
|
14
|
-
static VALUE rb_ary_present(VALUE ary)
|
15
|
-
{
|
16
|
-
return RB_NEGATE(rb_ary_blank(ary));
|
17
|
-
}
|
18
|
-
|
19
|
-
static VALUE rb_hash_blank(VALUE self)
|
20
|
-
{
|
21
|
-
return RHASH_EMPTY_P(self) ? Qtrue : Qfalse;
|
22
|
-
}
|
23
|
-
|
24
|
-
static VALUE rb_hash_present(VALUE self)
|
25
|
-
{
|
26
|
-
return RB_NEGATE(rb_hash_blank(self));
|
27
|
-
}
|
28
|
-
|
29
|
-
void Init_ary_blank(void)
|
30
|
-
{
|
31
|
-
rb_define_method(rb_cArray, "blank?", rb_ary_blank, 0);
|
32
|
-
rb_define_method(rb_cArray, "present?", rb_ary_present, 0);
|
33
|
-
rb_define_method(rb_cHash, "blank?", rb_hash_blank, 0);
|
34
|
-
rb_define_method(rb_cHash, "present?", rb_hash_present, 0);
|
35
|
-
}
|
@@ -1,65 +0,0 @@
|
|
1
|
-
/* Object#blank? implementation */
|
2
|
-
|
3
|
-
#include "faster_support.h"
|
4
|
-
|
5
|
-
static ID id_empty;
|
6
|
-
|
7
|
-
static VALUE rb_obj_blank(VALUE obj)
|
8
|
-
{
|
9
|
-
VALUE empty;
|
10
|
-
|
11
|
-
if (rb_respond_to(obj, id_empty)) {
|
12
|
-
empty = rb_funcall(obj, id_empty, 0);
|
13
|
-
if (empty == Qnil || empty == Qfalse) {
|
14
|
-
return Qfalse;
|
15
|
-
}
|
16
|
-
|
17
|
-
return Qtrue;
|
18
|
-
}
|
19
|
-
|
20
|
-
empty = (obj == Qnil || obj == Qfalse) ? Qtrue : Qfalse;
|
21
|
-
|
22
|
-
return empty;
|
23
|
-
}
|
24
|
-
|
25
|
-
static VALUE rb_obj_present(VALUE obj)
|
26
|
-
{
|
27
|
-
return RB_NEGATE(rb_obj_blank(obj));
|
28
|
-
}
|
29
|
-
|
30
|
-
static VALUE rb_nil_blank(VALUE self)
|
31
|
-
{
|
32
|
-
return Qtrue;
|
33
|
-
}
|
34
|
-
|
35
|
-
static VALUE rb_nil_present(VALUE self)
|
36
|
-
{
|
37
|
-
return Qfalse;
|
38
|
-
}
|
39
|
-
|
40
|
-
static VALUE rb_true_blank(VALUE self)
|
41
|
-
{
|
42
|
-
return Qfalse;
|
43
|
-
}
|
44
|
-
|
45
|
-
static VALUE rb_true_present(VALUE self)
|
46
|
-
{
|
47
|
-
return Qtrue;
|
48
|
-
}
|
49
|
-
|
50
|
-
void Init_obj_blank(void)
|
51
|
-
{
|
52
|
-
id_empty = rb_intern("empty?");
|
53
|
-
rb_define_method(rb_cObject, "blank?", rb_obj_blank, 0);
|
54
|
-
rb_define_method(rb_cObject, "present?", rb_obj_present, 0);
|
55
|
-
rb_define_method(rb_cNilClass, "blank?", rb_nil_blank, 0);
|
56
|
-
rb_define_method(rb_cNilClass, "present?", rb_nil_present, 0);
|
57
|
-
rb_define_method(rb_cFalseClass, "blank?", rb_nil_blank, 0);
|
58
|
-
rb_define_method(rb_cFalseClass, "present?", rb_nil_present, 0);
|
59
|
-
rb_define_method(rb_cTrueClass, "blank?", rb_true_blank, 0);
|
60
|
-
rb_define_method(rb_cTrueClass, "present?", rb_true_present, 0);
|
61
|
-
rb_define_method(rb_cNumeric, "blank?", rb_true_blank, 0);
|
62
|
-
rb_define_method(rb_cNumeric, "present?", rb_true_present, 0);
|
63
|
-
rb_define_method(rb_cTime, "blank?", rb_true_blank, 0);
|
64
|
-
rb_define_method(rb_cTime, "present?", rb_true_present, 0);
|
65
|
-
}
|