jsonnet 0.5.3 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +1 -1
- data/ext/jsonnet/callbacks.c +17 -1
- data/ext/jsonnet/extconf.rb +19 -2
- data/ext/jsonnet/helpers.c +26 -0
- data/ext/jsonnet/ruby_jsonnet.h +1 -0
- data/lib/jsonnet/version.rb +1 -1
- data/test/test_vm.rb +20 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4340172a08a949087e54c213842fe9a3ee445ec9149bc39f8dc56371d2199f6
|
4
|
+
data.tar.gz: 1e068cb049eda5218e0a49984bd581e22147f3d98f4db11a2d0fb082490e5001
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d532a2079abd6d4612f0f14bed63ed245302478251dedff199f02572a5e7f5400c07c76f9bf649da67607ad1c904cc49089a3c481614a90d36163427dd91e01
|
7
|
+
data.tar.gz: d2d41cca8cab085b6fe38fda48886706bb2f8876ff1f4e557e9310fd955b11f5784001f11c93c3bb509bfb6df542fced240733cd64478e3bf69c5ae21cbf094d
|
data/.github/workflows/ruby.yml
CHANGED
data/ext/jsonnet/callbacks.c
CHANGED
@@ -104,9 +104,15 @@ rubyjsonnet_jump_tag(const char *exc_mesg)
|
|
104
104
|
return 0;
|
105
105
|
}
|
106
106
|
|
107
|
+
#ifdef HAVE_JSONNET_IMPORT_CALLBACK_0_19
|
108
|
+
static int
|
109
|
+
import_callback_entrypoint(void *ctx, const char *base, const char *rel, char **found_here,
|
110
|
+
char **buf, size_t *buflen)
|
111
|
+
#else
|
107
112
|
static char *
|
108
113
|
import_callback_entrypoint(void *ctx, const char *base, const char *rel, char **found_here,
|
109
114
|
int *success)
|
115
|
+
#endif
|
110
116
|
{
|
111
117
|
struct jsonnet_vm_wrap *const vm = (struct jsonnet_vm_wrap *)ctx;
|
112
118
|
int state;
|
@@ -123,14 +129,24 @@ import_callback_entrypoint(void *ctx, const char *base, const char *rel, char **
|
|
123
129
|
|
124
130
|
if (state) {
|
125
131
|
VALUE msg = rescue_callback(state, "cannot import %s from %s", rel, base);
|
132
|
+
#ifdef HAVE_JSONNET_IMPORT_CALLBACK_0_19
|
133
|
+
*buf = rubyjsonnet_str_to_ptr(vm->vm, msg, buflen);
|
134
|
+
return 1;
|
135
|
+
#else
|
126
136
|
*success = 0;
|
127
137
|
return rubyjsonnet_str_to_cstr(vm->vm, msg);
|
138
|
+
#endif
|
128
139
|
}
|
129
140
|
|
130
141
|
result = rb_Array(result);
|
131
|
-
*success = 1;
|
132
142
|
*found_here = rubyjsonnet_str_to_cstr(vm->vm, rb_ary_entry(result, 1));
|
143
|
+
#ifdef HAVE_JSONNET_IMPORT_CALLBACK_0_19
|
144
|
+
*buf = rubyjsonnet_str_to_ptr(vm->vm, rb_ary_entry(result, 0), buflen);
|
145
|
+
return 0;
|
146
|
+
#else
|
147
|
+
*success = 1;
|
133
148
|
return rubyjsonnet_str_to_cstr(vm->vm, rb_ary_entry(result, 0));
|
149
|
+
#endif
|
134
150
|
}
|
135
151
|
|
136
152
|
/*
|
data/ext/jsonnet/extconf.rb
CHANGED
@@ -13,8 +13,8 @@ unless using_system_libraries?
|
|
13
13
|
require 'mini_portile2'
|
14
14
|
message "Using mini_portile version #{MiniPortile::VERSION}\n"
|
15
15
|
|
16
|
-
recipe = MiniPortile.new('jsonnet', 'v0.
|
17
|
-
recipe.files = ['https://github.com/google/jsonnet/archive/v0.
|
16
|
+
recipe = MiniPortile.new('jsonnet', 'v0.20.0')
|
17
|
+
recipe.files = ['https://github.com/google/jsonnet/archive/v0.20.0.tar.gz']
|
18
18
|
class << recipe
|
19
19
|
CORE_OBJS = %w[
|
20
20
|
desugarer.o formatter.o lexer.o libjsonnet.o parser.o pass.o static_analysis.o string_utils.o vm.o
|
@@ -89,4 +89,21 @@ end
|
|
89
89
|
abort 'libjsonnet.h not found' unless have_header('libjsonnet.h')
|
90
90
|
abort 'libjsonnet not found' unless have_library('jsonnet')
|
91
91
|
have_header('libjsonnet_fmt.h')
|
92
|
+
|
93
|
+
import_callback_0_19 = checking_for checking_message('JsonnetImportCallback >= v0.19.0') do
|
94
|
+
try_compile(<<SRC, '-Werror=incompatible-pointer-types')
|
95
|
+
#include <libjsonnet.h>
|
96
|
+
|
97
|
+
int f(void *ctx, const char *base, const char *rel, char **found_here, char **buf, size_t *buflen);
|
98
|
+
|
99
|
+
int main() {
|
100
|
+
jsonnet_import_callback(NULL, f, NULL);
|
101
|
+
return 0;
|
102
|
+
}
|
103
|
+
SRC
|
104
|
+
end
|
105
|
+
if import_callback_0_19
|
106
|
+
$defs.push('-DHAVE_JSONNET_IMPORT_CALLBACK_0_19')
|
107
|
+
end
|
108
|
+
|
92
109
|
create_makefile('jsonnet/jsonnet_wrap')
|
data/ext/jsonnet/helpers.c
CHANGED
@@ -34,6 +34,13 @@ rubyjsonnet_assert_asciicompat(VALUE str)
|
|
34
34
|
|
35
35
|
/**
|
36
36
|
* Allocates a C string whose content is equal to \c str with jsonnet_realloc.
|
37
|
+
*
|
38
|
+
* Note that this function does not allow NUL characters in the string.
|
39
|
+
* You should use rubyjsonnet_str_to_ptr() if you want to handle NUL characters.
|
40
|
+
*
|
41
|
+
* @param[in] vm a Jsonnet VM
|
42
|
+
* @param[in] str a String-like object
|
43
|
+
* @return the allocated C string
|
37
44
|
*/
|
38
45
|
char *
|
39
46
|
rubyjsonnet_str_to_cstr(struct JsonnetVm *vm, VALUE str)
|
@@ -44,6 +51,25 @@ rubyjsonnet_str_to_cstr(struct JsonnetVm *vm, VALUE str)
|
|
44
51
|
return buf;
|
45
52
|
}
|
46
53
|
|
54
|
+
/**
|
55
|
+
* Allocates a byte sequence whose content is equal to \c str with jsonnet_realloc.
|
56
|
+
*
|
57
|
+
* @param[in] vm a Jsonnet VM
|
58
|
+
* @param[in] str a String-like object
|
59
|
+
* @param[out] buflen the length of the allocated buffer
|
60
|
+
* @return the allocated buffer
|
61
|
+
*/
|
62
|
+
char *
|
63
|
+
rubyjsonnet_str_to_ptr(struct JsonnetVm *vm, VALUE str, size_t *buflen)
|
64
|
+
{
|
65
|
+
StringValue(str);
|
66
|
+
size_t len = RSTRING_LEN(str);
|
67
|
+
char *buf = jsonnet_realloc(vm, NULL, len);
|
68
|
+
memcpy(buf, RSTRING_PTR(str), len);
|
69
|
+
*buflen = len;
|
70
|
+
return buf;
|
71
|
+
}
|
72
|
+
|
47
73
|
/**
|
48
74
|
* @return a human readable string which contains the class name of the
|
49
75
|
* exception and its message. It might be nil on failure
|
data/ext/jsonnet/ruby_jsonnet.h
CHANGED
@@ -33,6 +33,7 @@ struct JsonnetJsonValue *rubyjsonnet_obj_to_json(struct JsonnetVm *vm, VALUE obj
|
|
33
33
|
|
34
34
|
rb_encoding *rubyjsonnet_assert_asciicompat(VALUE str);
|
35
35
|
char *rubyjsonnet_str_to_cstr(struct JsonnetVm *vm, VALUE str);
|
36
|
+
char *rubyjsonnet_str_to_ptr(struct JsonnetVm *vm, VALUE str, size_t *buflen);
|
36
37
|
VALUE rubyjsonnet_format_exception(VALUE exc);
|
37
38
|
int rubyjsonnet_jump_tag(const char *exc_mesg);
|
38
39
|
|
data/lib/jsonnet/version.rb
CHANGED
data/test/test_vm.rb
CHANGED
@@ -287,6 +287,26 @@ class TestVM < Test::Unit::TestCase
|
|
287
287
|
assert_equal expected, JSON.parse(result)
|
288
288
|
end
|
289
289
|
|
290
|
+
test "Jsonnet::VM#import_callback allows NUL char in Jsonnet v0.19 or later" do
|
291
|
+
return unless Jsonnet.libversion >= "v0.19"
|
292
|
+
|
293
|
+
example_str = "\x0\x1".force_encoding(Encoding::BINARY)
|
294
|
+
|
295
|
+
vm = Jsonnet::VM.new
|
296
|
+
vm.import_callback = ->(base, rel) {
|
297
|
+
case [base, rel]
|
298
|
+
when ['/path/to/base/', 'foo.bin']
|
299
|
+
return "\x0\x1".force_encoding(Encoding::BINARY), '/path/to/base/foo.bin'
|
300
|
+
else
|
301
|
+
raise Errno::ENOENT, "#{rel} at #{base}"
|
302
|
+
end
|
303
|
+
}
|
304
|
+
result = vm.evaluate(<<-EOS, filename: "/path/to/base/example.jsonnet")
|
305
|
+
importbin "foo.bin"
|
306
|
+
EOS
|
307
|
+
assert_equal [0, 1], JSON.parse(result)
|
308
|
+
end
|
309
|
+
|
290
310
|
test "Jsonnet::VM#evaluate returns an error if customized import callback raises an exception" do
|
291
311
|
vm = Jsonnet::VM.new
|
292
312
|
called = false
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonnet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuki Yugui Sonoda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-09-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mini_portile2
|
@@ -130,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
requirements: []
|
133
|
-
rubygems_version: 3.
|
133
|
+
rubygems_version: 3.4.1
|
134
134
|
signing_key:
|
135
135
|
specification_version: 4
|
136
136
|
summary: Jsonnet library
|