summaryrefslogtreecommitdiffstats
path: root/builtin.c
diff options
context:
space:
mode:
authorNicolas Williams <nico@cryptonector.com>2013-11-30 02:05:42 -0600
committerNicolas Williams <nico@cryptonector.com>2013-12-04 18:21:41 -0600
commiteb165459aae82f0b5d25bc6e5132db501fa9e148 (patch)
tree5fa93e60072978bc3fa318bb9229e2a81fc5d877 /builtin.c
parent04bc2ef7cf0b02f434c99239d80f59bbf275a1d2 (diff)
Add callback interface for errors
Printing to stderr is not the right answer for a library.
Diffstat (limited to 'builtin.c')
-rw-r--r--builtin.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/builtin.c b/builtin.c
index e90dd2cf..3c3ac5bd 100644
--- a/builtin.c
+++ b/builtin.c
@@ -677,9 +677,9 @@ static const char* const jq_builtins[] = {
};
-int builtins_bind_one(block* bb, const char* code) {
+static int builtins_bind_one(jq_state *jq, block* bb, const char* code) {
struct locfile src;
- locfile_init(&src, code, strlen(code));
+ locfile_init(&src, jq, code, strlen(code));
block funcs;
int nerrors = jq_parse_library(&src, &funcs);
if (nerrors == 0) {
@@ -689,14 +689,14 @@ int builtins_bind_one(block* bb, const char* code) {
return nerrors;
}
-int slurp_lib(block* bb) {
+static int slurp_lib(jq_state *jq, block* bb) {
int nerrors = 0;
char* home = getenv("HOME");
if (home) { // silently ignore no $HOME
jv filename = jv_string_append_str(jv_string(home), "/.jq");
jv data = jv_load_file(jv_string_value(filename), 1);
if (jv_is_valid(data)) {
- nerrors = builtins_bind_one(bb, jv_string_value(data) );
+ nerrors = builtins_bind_one(jq, bb, jv_string_value(data) );
}
jv_free(filename);
jv_free(data);
@@ -704,14 +704,14 @@ int slurp_lib(block* bb) {
return nerrors;
}
-int builtins_bind(block* bb) {
- int nerrors = slurp_lib(bb);
+int builtins_bind(jq_state *jq, block* bb) {
+ int nerrors = slurp_lib(jq, bb);
if (nerrors) {
block_free(*bb);
return nerrors;
}
for (int i=(int)(sizeof(jq_builtins)/sizeof(jq_builtins[0]))-1; i>=0; i--) {
- nerrors = builtins_bind_one(bb, jq_builtins[i]);
+ nerrors = builtins_bind_one(jq, bb, jq_builtins[i]);
assert(!nerrors);
}
*bb = bind_bytecoded_builtins(*bb);