git.delta.rocks / jrsonnet / refs/commits / 8a16e5a437f6

difftreelog

refactor(stdlib) use IntoUntyped for builtins

vnovounqYaroslav Bolyukin2026-04-25parent: #60607d2.patch.diff
in: master

4 files changed

modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
12pub use encoding::*;12pub use encoding::*;
13pub use hash::*;13pub use hash::*;
14use jrsonnet_evaluator::{14use jrsonnet_evaluator::{
15 ContextBuilder, IStr, ObjValue, ObjValueBuilder, Thunk, Val,
16 error::Result,15 error::Result,
17 function::{CallLocation, FuncVal},16 function::{builtin_id, CallLocation, FuncVal},
18 tla::TlaArg,17 tla::TlaArg,
19 trace::PathResolver,18 trace::PathResolver,
19 typed::SerializeTypedObj as _,
20 val::NumValue,20 val::NumValue,
21 ContextBuilder, IStr, ObjValue, ObjValueBuilder, Thunk, Val,
21};22};
22use jrsonnet_gcmodule::{Acyclic, Cc, Trace};23use jrsonnet_gcmodule::{Acyclic, Cc, Trace};
23use jrsonnet_ir::Source;24use jrsonnet_ir::Source;
25use jrsonnet_macros::{IntoUntyped, Typed};
24pub use manifest::*;26pub use manifest::*;
25pub use math::*;27pub use math::*;
26pub use misc::*;28pub use misc::*;
53mod strings;55mod strings;
54mod types;56mod types;
57
58#[derive(Typed, IntoUntyped, Default)]
59#[allow(non_snake_case)]
60struct Builtins {
61 #[typed(method)]
62 id: builtin_id,
63 // Types
64 #[typed(method, rename = "type")]
65 r#type: builtin_type,
66 #[typed(method)]
67 isString: builtin_is_string,
68 #[typed(method)]
69 isNumber: builtin_is_number,
70 #[typed(method)]
71 isBoolean: builtin_is_boolean,
72 #[typed(method)]
73 isObject: builtin_is_object,
74 #[typed(method)]
75 isArray: builtin_is_array,
76 #[typed(method)]
77 isFunction: builtin_is_function,
78 #[typed(method)]
79 isNull: builtin_is_null,
80 // Arrays
81 #[typed(method)]
82 makeArray: builtin_make_array,
83 #[typed(method)]
84 repeat: builtin_repeat,
85 #[typed(method)]
86 slice: builtin_slice,
87 #[typed(method)]
88 map: builtin_map,
89 #[typed(method)]
90 mapWithIndex: builtin_map_with_index,
91 #[typed(method)]
92 mapWithKey: builtin_map_with_key,
93 #[typed(method)]
94 flatMap: builtin_flatmap,
95 #[typed(method)]
96 filter: builtin_filter,
97 #[typed(method)]
98 foldl: builtin_foldl,
99 #[typed(method)]
100 foldr: builtin_foldr,
101 #[typed(method)]
102 range: builtin_range,
103 #[typed(method)]
104 join: builtin_join,
105 #[typed(method)]
106 lines: builtin_lines,
107 #[typed(method)]
108 resolvePath: builtin_resolve_path,
109 #[typed(method)]
110 deepJoin: builtin_deep_join,
111 #[typed(method)]
112 reverse: builtin_reverse,
113 #[typed(method)]
114 any: builtin_any,
115 #[typed(method)]
116 all: builtin_all,
117 #[typed(method)]
118 member: builtin_member,
119 #[typed(method)]
120 find: builtin_find,
121 #[typed(method)]
122 contains: builtin_contains,
123 #[typed(method)]
124 count: builtin_count,
125 #[typed(method)]
126 avg: builtin_avg,
127 #[typed(method)]
128 removeAt: builtin_remove_at,
129 #[typed(method)]
130 remove: builtin_remove,
131 #[typed(method)]
132 flattenArrays: builtin_flatten_arrays,
133 #[typed(method)]
134 flattenDeepArray: builtin_flatten_deep_array,
135 #[typed(method)]
136 prune: builtin_prune,
137 #[typed(method)]
138 filterMap: builtin_filter_map,
139 // Math
140 #[typed(method)]
141 abs: builtin_abs,
142 #[typed(method)]
143 sign: builtin_sign,
144 #[typed(method)]
145 max: builtin_max,
146 #[typed(method)]
147 min: builtin_min,
148 #[typed(method)]
149 clamp: builtin_clamp,
150 #[typed(method)]
151 sum: builtin_sum,
152 #[typed(method)]
153 modulo: builtin_modulo,
154 #[typed(method)]
155 floor: builtin_floor,
156 #[typed(method)]
157 ceil: builtin_ceil,
158 #[typed(method)]
159 log: builtin_log,
160 #[typed(method)]
161 log2: builtin_log2,
162 #[typed(method)]
163 log10: builtin_log10,
164 #[typed(method)]
165 pow: builtin_pow,
166 #[typed(method)]
167 sqrt: builtin_sqrt,
168 #[typed(method)]
169 sin: builtin_sin,
170 #[typed(method)]
171 cos: builtin_cos,
172 #[typed(method)]
173 tan: builtin_tan,
174 #[typed(method)]
175 asin: builtin_asin,
176 #[typed(method)]
177 acos: builtin_acos,
178 #[typed(method)]
179 atan: builtin_atan,
180 #[typed(method)]
181 atan2: builtin_atan2,
182 #[typed(method)]
183 exp: builtin_exp,
184 #[typed(method)]
185 mantissa: builtin_mantissa,
186 #[typed(method)]
187 exponent: builtin_exponent,
188 #[typed(method)]
189 round: builtin_round,
190 #[typed(method)]
191 isEven: builtin_is_even,
192 #[typed(method)]
193 isOdd: builtin_is_odd,
194 #[typed(method)]
195 isInteger: builtin_is_integer,
196 #[typed(method)]
197 isDecimal: builtin_is_decimal,
198 #[typed(method)]
199 deg2rad: builtin_deg2rad,
200 #[typed(method)]
201 rad2deg: builtin_rad2deg,
202 #[typed(method)]
203 hypot: builtin_hypot,
204 // Operator
205 #[typed(rename = "mod", method)]
206 r#mod: builtin_mod,
207 #[typed(method)]
208 primitiveEquals: builtin_primitive_equals,
209 #[typed(method)]
210 equals: builtin_equals,
211 #[typed(method)]
212 xor: builtin_xor,
213 #[typed(method)]
214 xnor: builtin_xnor,
215 #[typed(method)]
216 format: builtin_format,
217 // Sort
218 #[typed(method)]
219 sort: builtin_sort,
220 #[typed(method)]
221 uniq: builtin_uniq,
222 #[typed(method)]
223 set: builtin_set,
224 #[typed(method)]
225 minArray: builtin_min_array,
226 #[typed(method)]
227 maxArray: builtin_max_array,
228 // Hash
229 #[typed(method)]
230 md5: builtin_md5,
231 #[typed(method)]
232 sha1: builtin_sha1,
233 #[typed(method)]
234 sha256: builtin_sha256,
235 #[typed(method)]
236 sha512: builtin_sha512,
237 #[typed(method)]
238 sha3: builtin_sha3,
239 // Encoding
240 #[typed(method)]
241 encodeUTF8: builtin_encode_utf8,
242 #[typed(method)]
243 decodeUTF8: builtin_decode_utf8,
244 #[typed(method)]
245 base64: builtin_base64,
246 #[typed(method)]
247 base64Decode: builtin_base64_decode,
248 #[typed(method)]
249 base64DecodeBytes: builtin_base64_decode_bytes,
250 // Objects
251 #[typed(method)]
252 objectFieldsEx: builtin_object_fields_ex,
253 #[typed(method)]
254 objectFields: builtin_object_fields,
255 #[typed(method)]
256 objectFieldsAll: builtin_object_fields_all,
257 #[typed(method)]
258 objectValues: builtin_object_values,
259 #[typed(method)]
260 objectValuesAll: builtin_object_values_all,
261 #[typed(method)]
262 objectKeysValues: builtin_object_keys_values,
263 #[typed(method)]
264 objectKeysValuesAll: builtin_object_keys_values_all,
265 #[typed(method)]
266 objectHasEx: builtin_object_has_ex,
267 #[typed(method)]
268 objectHas: builtin_object_has,
269 #[typed(method)]
270 objectHasAll: builtin_object_has_all,
271 #[typed(method)]
272 objectRemoveKey: builtin_object_remove_key,
273 // Manifest
274 #[typed(method)]
275 escapeStringJson: builtin_escape_string_json,
276 #[typed(method)]
277 escapeStringPython: builtin_escape_string_python,
278 #[typed(method)]
279 escapeStringXML: builtin_escape_string_xml,
280 #[typed(method)]
281 manifestJsonEx: builtin_manifest_json_ex,
282 #[typed(method)]
283 manifestJson: builtin_manifest_json,
284 #[typed(method)]
285 manifestJsonMinified: builtin_manifest_json_minified,
286 #[typed(method)]
287 manifestYamlDoc: builtin_manifest_yaml_doc,
288 #[typed(method)]
289 manifestYamlStream: builtin_manifest_yaml_stream,
290 #[typed(method)]
291 manifestTomlEx: builtin_manifest_toml_ex,
292 #[typed(method)]
293 manifestToml: builtin_manifest_toml,
294 #[typed(method)]
295 toString: builtin_to_string,
296 #[typed(method)]
297 manifestPython: builtin_manifest_python,
298 #[typed(method)]
299 manifestPythonVars: builtin_manifest_python_vars,
300 #[typed(method)]
301 manifestXmlJsonml: builtin_manifest_xml_jsonml,
302 #[typed(method)]
303 manifestIni: builtin_manifest_ini,
304 // Parse
305 #[typed(method)]
306 parseJson: builtin_parse_json,
307 #[typed(method)]
308 parseYaml: builtin_parse_yaml,
309 // Strings
310 #[typed(method)]
311 codepoint: builtin_codepoint,
312 #[typed(method)]
313 substr: builtin_substr,
314 #[typed(method)]
315 char: builtin_char,
316 #[typed(method)]
317 strReplace: builtin_str_replace,
318 #[typed(method)]
319 escapeStringBash: builtin_escape_string_bash,
320 #[typed(method)]
321 escapeStringDollars: builtin_escape_string_dollars,
322 #[typed(method)]
323 isEmpty: builtin_is_empty,
324 #[typed(method)]
325 equalsIgnoreCase: builtin_equals_ignore_case,
326 #[typed(method)]
327 splitLimit: builtin_splitlimit,
328 #[typed(method)]
329 splitLimitR: builtin_splitlimitr,
330 #[typed(method)]
331 split: builtin_split,
332 #[typed(method)]
333 asciiUpper: builtin_ascii_upper,
334 #[typed(method)]
335 asciiLower: builtin_ascii_lower,
336 #[typed(method)]
337 findSubstr: builtin_find_substr,
338 #[typed(method)]
339 parseInt: builtin_parse_int,
340 #[cfg(feature = "exp-bigint")]
341 #[typed(method)]
342 bigint: builtin_bigint,
343 #[typed(method)]
344 parseOctal: builtin_parse_octal,
345 #[typed(method)]
346 parseHex: builtin_parse_hex,
347 #[typed(method)]
348 stringChars: builtin_string_chars,
349 #[typed(method)]
350 lstripChars: builtin_lstrip_chars,
351 #[typed(method)]
352 rstripChars: builtin_rstrip_chars,
353 #[typed(method)]
354 stripChars: builtin_strip_chars,
355 #[typed(method)]
356 trim: builtin_trim,
357 // Misc
358 #[typed(method)]
359 length: builtin_length,
360 #[typed(method)]
361 get: builtin_get,
362 #[typed(method)]
363 startsWith: builtin_starts_with,
364 #[typed(method)]
365 endsWith: builtin_ends_with,
366 #[typed(method)]
367 assertEqual: builtin_assert_equal,
368 #[typed(method)]
369 mergePatch: builtin_merge_patch,
370 // Sets
371 #[typed(method)]
372 setMember: builtin_set_member,
373 #[typed(method)]
374 setInter: builtin_set_inter,
375 #[typed(method)]
376 setDiff: builtin_set_diff,
377 #[typed(method)]
378 setUnion: builtin_set_union,
379 // Regex
380 #[cfg(feature = "exp-regex")]
381 #[typed(method)]
382 regexQuoteMeta: builtin_regex_quote_meta,
383 // Compat
384 #[typed(method)]
385 __compare: builtin___compare,
386 #[typed(method)]
387 __compare_array: builtin___compare_array,
388 #[typed(method)]
389 __array_less: builtin___array_less,
390 #[typed(method)]
391 __array_greater: builtin___array_greater,
392 #[typed(method)]
393 __array_less_or_equal: builtin___array_less_or_equal,
394 #[typed(method)]
395 __array_greater_or_equal: builtin___array_greater_or_equal,
396}
55397
56#[allow(clippy::too_many_lines)]398#[allow(clippy::too_many_lines)]
57pub fn stdlib_uncached(settings: Cc<RefCell<Settings>>) -> ObjValue {399pub fn stdlib_uncached(settings: Cc<RefCell<Settings>>) -> ObjValue {
58 let mut builder = ObjValueBuilder::new();400 let mut builder = ObjValueBuilder::new();
59401
60 // FIXME: Use PHF
61 for (name, builtin) in [
62 // Types
63 ("type", builtin_type::INST),
64 ("isString", builtin_is_string::INST),
65 ("isNumber", builtin_is_number::INST),
66 ("isBoolean", builtin_is_boolean::INST),
67 ("isObject", builtin_is_object::INST),
68 ("isArray", builtin_is_array::INST),
69 ("isFunction", builtin_is_function::INST),
70 ("isNull", builtin_is_null::INST),
71 // Arrays
72 ("makeArray", builtin_make_array::INST),
73 ("repeat", builtin_repeat::INST),
74 ("slice", builtin_slice::INST),
75 ("map", builtin_map::INST),
76 ("mapWithIndex", builtin_map_with_index::INST),
77 ("mapWithKey", builtin_map_with_key::INST),
78 ("flatMap", builtin_flatmap::INST),
79 ("filter", builtin_filter::INST),
80 ("foldl", builtin_foldl::INST),
81 ("foldr", builtin_foldr::INST),
82 ("range", builtin_range::INST),
83 ("join", builtin_join::INST),
84 ("lines", builtin_lines::INST),
85 ("resolvePath", builtin_resolve_path::INST),
86 ("deepJoin", builtin_deep_join::INST),
87 ("reverse", builtin_reverse::INST),
88 ("any", builtin_any::INST),
89 ("all", builtin_all::INST),
90 ("member", builtin_member::INST),
91 ("find", builtin_find::INST),
92 ("contains", builtin_contains::INST),
93 ("count", builtin_count::INST),
94 ("avg", builtin_avg::INST),
95 ("removeAt", builtin_remove_at::INST),
96 ("remove", builtin_remove::INST),
97 ("flattenArrays", builtin_flatten_arrays::INST),
98 ("flattenDeepArray", builtin_flatten_deep_array::INST),
99 ("prune", builtin_prune::INST),
100 ("filterMap", builtin_filter_map::INST),
101 // Math
102 ("abs", builtin_abs::INST),
103 ("sign", builtin_sign::INST),
104 ("max", builtin_max::INST),
105 ("min", builtin_min::INST),
106 ("clamp", builtin_clamp::INST),
107 ("sum", builtin_sum::INST),
108 ("modulo", builtin_modulo::INST),
109 ("floor", builtin_floor::INST),
110 ("ceil", builtin_ceil::INST),
111 ("log", builtin_log::INST),
112 ("log2", builtin_log2::INST),
113 ("log10", builtin_log10::INST),
114 ("pow", builtin_pow::INST),
115 ("sqrt", builtin_sqrt::INST),
116 ("sin", builtin_sin::INST),
117 ("cos", builtin_cos::INST),
118 ("tan", builtin_tan::INST),
119 ("asin", builtin_asin::INST),
120 ("acos", builtin_acos::INST),
121 ("atan", builtin_atan::INST),
122 ("atan2", builtin_atan2::INST),
123 ("exp", builtin_exp::INST),
124 ("mantissa", builtin_mantissa::INST),
125 ("exponent", builtin_exponent::INST),
126 ("round", builtin_round::INST),
127 ("isEven", builtin_is_even::INST),
128 ("isOdd", builtin_is_odd::INST),
129 ("isInteger", builtin_is_integer::INST),
130 ("isDecimal", builtin_is_decimal::INST),
131 ("deg2rad", builtin_deg2rad::INST),
132 ("rad2deg", builtin_rad2deg::INST),
133 ("hypot", builtin_hypot::INST),
134 // Operator
135 ("mod", builtin_mod::INST),
136 ("primitiveEquals", builtin_primitive_equals::INST),
137 ("equals", builtin_equals::INST),
138 ("xor", builtin_xor::INST),
139 ("xnor", builtin_xnor::INST),
140 ("format", builtin_format::INST),
141 // Sort
142 ("sort", builtin_sort::INST),
143 ("uniq", builtin_uniq::INST),
144 ("set", builtin_set::INST),
145 ("minArray", builtin_min_array::INST),
146 ("maxArray", builtin_max_array::INST),
147 // Hash
148 ("md5", builtin_md5::INST),
149 ("sha1", builtin_sha1::INST),
150 ("sha256", builtin_sha256::INST),
151 ("sha512", builtin_sha512::INST),
152 ("sha3", builtin_sha3::INST),
153 // Encoding
154 ("encodeUTF8", builtin_encode_utf8::INST),
155 ("decodeUTF8", builtin_decode_utf8::INST),
156 ("base64", builtin_base64::INST),
157 ("base64Decode", builtin_base64_decode::INST),
158 ("base64DecodeBytes", builtin_base64_decode_bytes::INST),
159 // Objects
160 ("objectFieldsEx", builtin_object_fields_ex::INST),
161 ("objectFields", builtin_object_fields::INST),
162 ("objectFieldsAll", builtin_object_fields_all::INST),
163 ("objectValues", builtin_object_values::INST),
164 ("objectValuesAll", builtin_object_values_all::INST),
165 ("objectKeysValues", builtin_object_keys_values::INST),
166 ("objectKeysValuesAll", builtin_object_keys_values_all::INST),
167 ("objectHasEx", builtin_object_has_ex::INST),
168 ("objectHas", builtin_object_has::INST),
169 ("objectHasAll", builtin_object_has_all::INST),
170 ("objectRemoveKey", builtin_object_remove_key::INST),
171 // Manifest
172 ("escapeStringJson", builtin_escape_string_json::INST),
173 ("escapeStringPython", builtin_escape_string_python::INST),
174 ("escapeStringXML", builtin_escape_string_xml::INST),
175 ("manifestJsonEx", builtin_manifest_json_ex::INST),
176 ("manifestJson", builtin_manifest_json::INST),
177 ("manifestJsonMinified", builtin_manifest_json_minified::INST),
178 ("manifestYamlDoc", builtin_manifest_yaml_doc::INST),
179 ("manifestYamlStream", builtin_manifest_yaml_stream::INST),
180 ("manifestTomlEx", builtin_manifest_toml_ex::INST),
181 ("manifestToml", builtin_manifest_toml::INST),
182 ("toString", builtin_to_string::INST),
183 ("manifestPython", builtin_manifest_python::INST),
184 ("manifestPythonVars", builtin_manifest_python_vars::INST),
185 ("manifestXmlJsonml", builtin_manifest_xml_jsonml::INST),
186 ("manifestIni", builtin_manifest_ini::INST),
187 // Parse
188 ("parseJson", builtin_parse_json::INST),
189 ("parseYaml", builtin_parse_yaml::INST),
190 // Strings
191 ("codepoint", builtin_codepoint::INST),
192 ("substr", builtin_substr::INST),
193 ("char", builtin_char::INST),
194 ("strReplace", builtin_str_replace::INST),
195 ("escapeStringBash", builtin_escape_string_bash::INST),
196 ("escapeStringDollars", builtin_escape_string_dollars::INST),
197 ("isEmpty", builtin_is_empty::INST),
198 ("equalsIgnoreCase", builtin_equals_ignore_case::INST),
199 ("splitLimit", builtin_splitlimit::INST),
200 ("splitLimitR", builtin_splitlimitr::INST),
201 ("split", builtin_split::INST),
202 ("asciiUpper", builtin_ascii_upper::INST),
203 ("asciiLower", builtin_ascii_lower::INST),
204 ("findSubstr", builtin_find_substr::INST),
205 ("parseInt", builtin_parse_int::INST),
206 #[cfg(feature = "exp-bigint")]
207 ("bigint", builtin_bigint::INST),
208 ("parseOctal", builtin_parse_octal::INST),
209 ("parseHex", builtin_parse_hex::INST),
210 ("stringChars", builtin_string_chars::INST),
211 ("lstripChars", builtin_lstrip_chars::INST),
212 ("rstripChars", builtin_rstrip_chars::INST),
213 ("stripChars", builtin_strip_chars::INST),
214 ("trim", builtin_trim::INST),
215 // Misc
216 ("length", builtin_length::INST),
217 ("get", builtin_get::INST),
218 ("startsWith", builtin_starts_with::INST),
219 ("endsWith", builtin_ends_with::INST),
220 ("assertEqual", builtin_assert_equal::INST),
221 ("mergePatch", builtin_merge_patch::INST),
222 // Sets
223 ("setMember", builtin_set_member::INST),
224 ("setInter", builtin_set_inter::INST),
225 ("setDiff", builtin_set_diff::INST),
226 ("setUnion", builtin_set_union::INST),
227 // Regex
228 #[cfg(feature = "exp-regex")]402 let builtins = Builtins::default();
229 ("regexQuoteMeta", builtin_regex_quote_meta::INST),
230 // Compat
231 ("__compare", builtin___compare::INST),
232 ("__compare_array", builtin___compare_array::INST),
233 ("__array_less", builtin___array_less::INST),
234 ("__array_greater", builtin___array_greater::INST),
235 ("__array_less_or_equal", builtin___array_less_or_equal::INST),
236 (
237 "__array_greater_or_equal",
238 builtin___array_greater_or_equal::INST,
239 ),
240 ]
241 .iter()
242 .copied()
243 {
244 builder.method(name, builtin);403 builtins.serialize(&mut builder).expect("no conflicts");
245 }
246404
247 builder.method(405 builder.method(
248 "extVar",406 "extVar",
257 },415 },
258 );416 );
259 builder.method("trace", builtin_trace { settings });417 builder.method("trace", builtin_trace { settings });
260 builder.method("id", FuncVal::Id);
261418
262 builder.field("pi").hide().value(Val::Num(419 builder.field("pi").hide().value(Val::Num(
263 NumValue::new(f64::consts::PI).expect("pi is finite"),420 NumValue::new(f64::consts::PI).expect("pi is finite"),
modifiedtests/tests/builtin.rsdiffbeforeafterboth
--- a/tests/tests/builtin.rs
+++ b/tests/tests/builtin.rs
@@ -32,10 +32,7 @@
 struct NativeAddContextInitializer;
 impl ContextInitializer for NativeAddContextInitializer {
 	fn populate(&self, _for_file: Source, builder: &mut ContextBuilder) {
-		builder.bind(
-			"nativeAdd",
-			Thunk::evaluated(Val::function(native_add::INST)),
-		);
+		builder.bind("nativeAdd", Thunk::evaluated(Val::function(native_add {})));
 	}
 
 	fn as_any(&self) -> &dyn std::any::Any {
@@ -80,7 +77,7 @@
 struct CurryAddContextInitializer;
 impl ContextInitializer for CurryAddContextInitializer {
 	fn populate(&self, _for_file: Source, builder: &mut ContextBuilder) {
-		builder.bind("curryAdd", Thunk::evaluated(Val::function(curry_add::INST)));
+		builder.bind("curryAdd", Thunk::evaluated(Val::function(curry_add {})));
 	}
 
 	fn as_any(&self) -> &dyn std::any::Any {
modifiedtests/tests/common.rsdiffbeforeafterboth
--- a/tests/tests/common.rs
+++ b/tests/tests/common.rs
@@ -70,8 +70,8 @@
 impl ContextInitializerT for ContextInitializer {
 	fn populate(&self, _for_file: Source, builder: &mut ContextBuilder) {
 		let mut bobj = ObjValueBuilder::new();
-		bobj.method("assertThrow", assert_throw::INST);
-		bobj.method("paramNames", param_names::INST);
+		bobj.method("assertThrow", assert_throw {});
+		bobj.method("paramNames", param_names {});
 
 		builder.bind("test", Thunk::evaluated(Val::Obj(bobj.build())));
 	}
modifiedtests/tests/std_native.rsdiffbeforeafterboth
--- a/tests/tests/std_native.rs
+++ b/tests/tests/std_native.rs
@@ -10,7 +10,7 @@
 fn std_native() {
 	let mut state = State::builder();
 	let std = ContextInitializer::new(PathResolver::Absolute);
-	std.add_native("example", example_native::INST);
+	std.add_native("example", example_native {});
 	state.context_initializer(std);
 	let state = state.build();