Make builtin binding fast again by binding only referenced symbols
Avoid doing the internal binding of top-level symbols in the parser, leaving that work to be done in a post-processing step. For builtins, this lets us do a reference-aware bind step (block_bind_incremental) *after* generating builtins/0. Libraries are a bit trickier since they may be bound multiple times, so instead of thinking through the implications I added (block_bind_self) to resolve all internal symbols immediately.
This commit is contained in:
1 parent
b2b0bd37a1
commit
e843a4fdf9
6 files changed
+54
-9
No files matched your search
+2
-2
@@ -1743,7 +1743,7 @@ static block bind_bytecoded_builtins(block b) {
|
||||
BLOCK(gen_param("start"), gen_param("end")),
|
||||
range));
|
||||
}
|
||||
return block_bind(builtins, b, OP_IS_CALL_PSEUDO);
|
||||
return BLOCK(builtins, b);
|
||||
}
|
||||
|
||||
static const char jq_builtins[] =
|
||||
@@ -1793,7 +1793,7 @@ int builtins_bind(jq_state *jq, block* bb) {
|
||||
builtins = gen_cbinding(function_list, sizeof(function_list)/sizeof(function_list[0]), builtins);
|
||||
builtins = gen_builtin_list(builtins);
|
||||
|
||||
*bb = block_bind(builtins, *bb, OP_IS_CALL_PSEUDO);
|
||||
*bb = block_bind_incremental(builtins, *bb, OP_IS_CALL_PSEUDO);
|
||||
*bb = block_drop_unreferenced(*bb);
|
||||
return nerrors;
|
||||
}
|
||||
Reference in new issue
Block a user