Skip to content

Commit 0741034

Browse files
committed
refactor: Rename call_native to call_function for clearer API
The method name call_function better describes calling JIT-compiled functions with an explicit signature. Updated all tests and documentation.
1 parent 2de2177 commit 0741034

4 files changed

Lines changed: 46 additions & 46 deletions

File tree

book/12-embedding-sdk.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ match result {
415415

416416
### Native Calling with Signatures
417417

418-
For JIT-compiled functions, use `call_native` with an explicit signature for optimal performance. This bypasses the `DynamicValue` ABI and calls functions with native types directly.
418+
For JIT-compiled functions, use `call_function` with an explicit signature for optimal performance. This bypasses the `DynamicValue` ABI and calls functions with native types directly.
419419

420420
```rust
421421
use zyntax_embed::{ZyntaxRuntime, NativeType, NativeSignature};
@@ -424,12 +424,12 @@ use zyntax_embed::{ZyntaxRuntime, NativeType, NativeSignature};
424424
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
425425

426426
// Call with native types
427-
let result = runtime.call_native("add", &[10.into(), 32.into()], &sig)?;
427+
let result = runtime.call_function("add", &[10.into(), 32.into()], &sig)?;
428428
assert_eq!(result.as_i32().unwrap(), 42);
429429

430430
// Or parse signature from a string
431431
let sig = NativeSignature::parse("(i32, i32) -> i32").unwrap();
432-
let result = runtime.call_native("multiply", &[6.into(), 7.into()], &sig)?;
432+
let result = runtime.call_function("multiply", &[6.into(), 7.into()], &sig)?;
433433
```
434434

435435
#### Supported Native Types
@@ -455,7 +455,7 @@ The `NativeSignature::parse` method accepts strings in the format:
455455

456456
#### When to Use Native Calling
457457

458-
Use `call_native` when:
458+
Use `call_function` when:
459459

460460
- You know the exact function signature at compile time
461461
- You need maximum performance for hot paths

crates/zyntax_embed/src/runtime.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -607,10 +607,10 @@ impl ZyntaxRuntime {
607607
}
608608
}
609609

610-
/// Call a JIT-compiled function with native calling convention
610+
/// Call a JIT-compiled function with the specified signature
611611
///
612612
/// This method dynamically constructs the function call based on the provided
613-
/// signature, converting ZyntaxValue arguments to native types.
613+
/// signature, converting ZyntaxValue arguments to the appropriate types.
614614
///
615615
/// # Arguments
616616
/// * `name` - The function name
@@ -624,10 +624,10 @@ impl ZyntaxRuntime {
624624
///
625625
/// // fn add(a: i32, b: i32) -> i32
626626
/// let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
627-
/// let result = runtime.call_native("add", &[10.into(), 32.into()], &sig)?;
627+
/// let result = runtime.call_function("add", &[10.into(), 32.into()], &sig)?;
628628
/// assert_eq!(result, ZyntaxValue::Int(42));
629629
/// ```
630-
pub fn call_native(
630+
pub fn call_function(
631631
&self,
632632
name: &str,
633633
args: &[ZyntaxValue],

crates/zyntax_embed/tests/cross_module_tests.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ fn add(a: i32, b: i32) i32 {
4343

4444
// Use native calling for JIT-compiled functions with signature
4545
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
46-
let result = runtime.call_native("add", &[10.into(), 32.into()], &sig)
46+
let result = runtime.call_function("add", &[10.into(), 32.into()], &sig)
4747
.expect("Failed to call add");
4848
assert_eq!(result.as_i32().unwrap(), 42);
4949
}
@@ -110,11 +110,11 @@ fn sub(a: i32, b: i32) i32 {
110110

111111
// But both functions should be callable using native calling
112112
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
113-
let add_result = runtime.call_native("add", &[10.into(), 5.into()], &sig)
113+
let add_result = runtime.call_function("add", &[10.into(), 5.into()], &sig)
114114
.expect("Failed to call add");
115115
assert_eq!(add_result.as_i32().unwrap(), 15);
116116

117-
let sub_result = runtime.call_native("sub", &[10.into(), 5.into()], &sig)
117+
let sub_result = runtime.call_function("sub", &[10.into(), 5.into()], &sig)
118118
.expect("Failed to call sub");
119119
assert_eq!(sub_result.as_i32().unwrap(), 5);
120120
}
@@ -210,7 +210,7 @@ fn double_add(a: i32, b: i32) i32 {
210210

211211
// Call the function that uses the extern
212212
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
213-
let result = runtime.call_native("double_add", &[5.into(), 3.into()], &sig)
213+
let result = runtime.call_function("double_add", &[5.into(), 3.into()], &sig)
214214
.expect("Failed to call double_add");
215215
assert_eq!(result.as_i32().unwrap(), 16); // (5+3) + (5+3) = 16
216216
}

crates/zyntax_embed/tests/embed_tests.rs

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -917,7 +917,7 @@ fn add(a: i32, b: i32) i32 {
917917
}
918918

919919
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
920-
let result = runtime.call_native("add", &[10.into(), 32.into()], &sig);
920+
let result = runtime.call_function("add", &[10.into(), 32.into()], &sig);
921921

922922
match result {
923923
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
@@ -944,7 +944,7 @@ fn multiply(a: i32, b: i32) i32 {
944944
}
945945

946946
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
947-
let result = runtime.call_native("multiply", &[7.into(), 6.into()], &sig);
947+
let result = runtime.call_function("multiply", &[7.into(), 6.into()], &sig);
948948

949949
match result {
950950
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
@@ -971,7 +971,7 @@ fn subtract(a: i32, b: i32) i32 {
971971
}
972972

973973
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
974-
let result = runtime.call_native("subtract", &[100.into(), 58.into()], &sig);
974+
let result = runtime.call_function("subtract", &[100.into(), 58.into()], &sig);
975975

976976
match result {
977977
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
@@ -998,7 +998,7 @@ fn square(x: i32) i32 {
998998
}
999999

10001000
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
1001-
let result = runtime.call_native("square", &[7.into()], &sig);
1001+
let result = runtime.call_function("square", &[7.into()], &sig);
10021002

10031003
match result {
10041004
Ok(val) => assert_eq!(val.as_i32().unwrap(), 49),
@@ -1025,7 +1025,7 @@ fn sum3(a: i32, b: i32, c: i32) i32 {
10251025
}
10261026

10271027
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32, NativeType::I32], NativeType::I32);
1028-
let result = runtime.call_native("sum3", &[10.into(), 20.into(), 12.into()], &sig);
1028+
let result = runtime.call_function("sum3", &[10.into(), 20.into(), 12.into()], &sig);
10291029

10301030
match result {
10311031
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
@@ -1055,7 +1055,7 @@ fn sum4(a: i32, b: i32, c: i32, d: i32) i32 {
10551055
&[NativeType::I32, NativeType::I32, NativeType::I32, NativeType::I32],
10561056
NativeType::I32
10571057
);
1058-
let result = runtime.call_native("sum4", &[10.into(), 10.into(), 10.into(), 12.into()], &sig);
1058+
let result = runtime.call_function("sum4", &[10.into(), 10.into(), 10.into(), 12.into()], &sig);
10591059

10601060
match result {
10611061
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
@@ -1083,7 +1083,7 @@ fn add(a: i32, b: i32) i32 {
10831083

10841084
// Try calling with wrong number of arguments
10851085
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
1086-
let result = runtime.call_native("add", &[10.into()], &sig); // Missing one arg
1086+
let result = runtime.call_function("add", &[10.into()], &sig); // Missing one arg
10871087

10881088
assert!(result.is_err(), "Should fail with wrong arg count");
10891089
}
@@ -1096,7 +1096,7 @@ fn add(a: i32, b: i32) i32 {
10961096
};
10971097

10981098
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
1099-
let result = runtime.call_native("nonexistent_function", &[10.into()], &sig);
1099+
let result = runtime.call_function("nonexistent_function", &[10.into()], &sig);
11001100

11011101
assert!(result.is_err(), "Should fail for nonexistent function");
11021102
}
@@ -1146,7 +1146,7 @@ fn compute(x: i32) i32 {
11461146
}
11471147

11481148
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
1149-
let result = runtime.call_native("compute", &[10.into()], &sig);
1149+
let result = runtime.call_function("compute", &[10.into()], &sig);
11501150

11511151
match result {
11521152
Ok(val) => assert_eq!(val.as_i32().unwrap(), 27), // 10*2 + 10 - 3 = 27
@@ -1178,14 +1178,14 @@ fn abs(x: i32) i32 {
11781178
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
11791179

11801180
// Test positive
1181-
let result = runtime.call_native("abs", &[42.into()], &sig);
1181+
let result = runtime.call_function("abs", &[42.into()], &sig);
11821182
match result {
11831183
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
11841184
Err(e) => eprintln!("Native call failed: {}", e),
11851185
}
11861186

11871187
// Test negative
1188-
let result = runtime.call_native("abs", &[(-42i32).into()], &sig);
1188+
let result = runtime.call_function("abs", &[(-42i32).into()], &sig);
11891189
match result {
11901190
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
11911191
Err(e) => eprintln!("Native call failed: {}", e),
@@ -1217,7 +1217,7 @@ fn sum_to(n: i32) i32 {
12171217
}
12181218

12191219
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
1220-
let result = runtime.call_native("sum_to", &[10.into()], &sig);
1220+
let result = runtime.call_function("sum_to", &[10.into()], &sig);
12211221

12221222
match result {
12231223
Ok(val) => assert_eq!(val.as_i32().unwrap(), 55), // 1+2+...+10 = 55
@@ -1248,13 +1248,13 @@ fn max(a: i32, b: i32) i32 {
12481248

12491249
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
12501250

1251-
let result = runtime.call_native("max", &[10.into(), 20.into()], &sig);
1251+
let result = runtime.call_function("max", &[10.into(), 20.into()], &sig);
12521252
match result {
12531253
Ok(val) => assert_eq!(val.as_i32().unwrap(), 20),
12541254
Err(e) => eprintln!("Native call failed: {}", e),
12551255
}
12561256

1257-
let result = runtime.call_native("max", &[30.into(), 15.into()], &sig);
1257+
let result = runtime.call_function("max", &[30.into(), 15.into()], &sig);
12581258
match result {
12591259
Ok(val) => assert_eq!(val.as_i32().unwrap(), 30),
12601260
Err(e) => eprintln!("Native call failed: {}", e),
@@ -1293,21 +1293,21 @@ fn add_one(x: i32) i32 {
12931293
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
12941294

12951295
// Test double
1296-
let result = runtime.call_native("double", &[21.into()], &sig);
1296+
let result = runtime.call_function("double", &[21.into()], &sig);
12971297
match result {
12981298
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
12991299
Err(e) => eprintln!("double failed: {}", e),
13001300
}
13011301

13021302
// Test triple
1303-
let result = runtime.call_native("triple", &[14.into()], &sig);
1303+
let result = runtime.call_function("triple", &[14.into()], &sig);
13041304
match result {
13051305
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
13061306
Err(e) => eprintln!("triple failed: {}", e),
13071307
}
13081308

13091309
// Test add_one
1310-
let result = runtime.call_native("add_one", &[41.into()], &sig);
1310+
let result = runtime.call_function("add_one", &[41.into()], &sig);
13111311
match result {
13121312
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
13131313
Err(e) => eprintln!("add_one failed: {}", e),
@@ -1334,13 +1334,13 @@ fn negate(x: i32) i32 {
13341334

13351335
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
13361336

1337-
let result = runtime.call_native("negate", &[42.into()], &sig);
1337+
let result = runtime.call_function("negate", &[42.into()], &sig);
13381338
match result {
13391339
Ok(val) => assert_eq!(val.as_i32().unwrap(), -42),
13401340
Err(e) => eprintln!("Native call failed: {}", e),
13411341
}
13421342

1343-
let result = runtime.call_native("negate", &[(-42i32).into()], &sig);
1343+
let result = runtime.call_function("negate", &[(-42i32).into()], &sig);
13441344
match result {
13451345
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
13461346
Err(e) => eprintln!("Native call failed: {}", e),
@@ -1366,7 +1366,7 @@ fn answer() i32 {
13661366
}
13671367

13681368
let sig = NativeSignature::new(&[], NativeType::I32);
1369-
let result = runtime.call_native("answer", &[], &sig);
1369+
let result = runtime.call_function("answer", &[], &sig);
13701370

13711371
match result {
13721372
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
@@ -1561,7 +1561,7 @@ fn use_helper(x: i32) i32 {
15611561

15621562
// Call the function that uses extern
15631563
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
1564-
let result = runtime.call_native("use_helper", &[20.into()], &sig);
1564+
let result = runtime.call_function("use_helper", &[20.into()], &sig);
15651565

15661566
match result {
15671567
Ok(val) => assert_eq!(val.as_i32().unwrap(), 41), // 20*2 + 1 = 41
@@ -1612,7 +1612,7 @@ fn compute(a: i32, b: i32, c: i32) i32 {
16121612
&[NativeType::I32, NativeType::I32, NativeType::I32],
16131613
NativeType::I32
16141614
);
1615-
let result = runtime.call_native("compute", &[100.into(), 58.into(), 0.into()], &sig);
1615+
let result = runtime.call_function("compute", &[100.into(), 58.into(), 0.into()], &sig);
16161616

16171617
match result {
16181618
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42), // (100-58) + 0 = 42
@@ -1713,7 +1713,7 @@ fn use_host(x: i32) i32 {
17131713
}
17141714

17151715
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
1716-
let result = runtime.call_native("use_host", &[21.into()], &sig);
1716+
let result = runtime.call_function("use_host", &[21.into()], &sig);
17171717

17181718
match result {
17191719
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42), // 21 * 2 = 42
@@ -1746,7 +1746,7 @@ fn use_host_add(a: i32, b: i32) i32 {
17461746
}
17471747

17481748
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
1749-
let result = runtime.call_native("use_host_add", &[10.into(), 32.into()], &sig);
1749+
let result = runtime.call_function("use_host_add", &[10.into(), 32.into()], &sig);
17501750

17511751
match result {
17521752
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
@@ -1779,7 +1779,7 @@ fn get_magic() i32 {
17791779
}
17801780

17811781
let sig = NativeSignature::new(&[], NativeType::I32);
1782-
let result = runtime.call_native("get_magic", &[], &sig);
1782+
let result = runtime.call_function("get_magic", &[], &sig);
17831783

17841784
match result {
17851785
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
@@ -1815,7 +1815,7 @@ fn call_sum3(a: i32, b: i32, c: i32) i32 {
18151815
&[NativeType::I32, NativeType::I32, NativeType::I32],
18161816
NativeType::I32
18171817
);
1818-
let result = runtime.call_native("call_sum3", &[10.into(), 20.into(), 12.into()], &sig);
1818+
let result = runtime.call_function("call_sum3", &[10.into(), 20.into(), 12.into()], &sig);
18191819

18201820
match result {
18211821
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
@@ -1849,7 +1849,7 @@ fn compute(x: i32) i32 {
18491849
}
18501850

18511851
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
1852-
let result = runtime.call_native("compute", &[20.into()], &sig);
1852+
let result = runtime.call_function("compute", &[20.into()], &sig);
18531853

18541854
match result {
18551855
Ok(val) => assert_eq!(val.as_i32().unwrap(), 41), // 20*2 + 1 = 41
@@ -1885,7 +1885,7 @@ fn compute(x: i32, y: i32) i32 {
18851885
}
18861886

18871887
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
1888-
let result = runtime.call_native("compute", &[20.into(), 2.into()], &sig);
1888+
let result = runtime.call_function("compute", &[20.into(), 2.into()], &sig);
18891889

18901890
match result {
18911891
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42), // (20*2) + 2 = 42
@@ -1920,14 +1920,14 @@ fn get_factorial(n: i32) i32 {
19201920
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
19211921

19221922
// 5! = 120
1923-
let result = runtime.call_native("get_factorial", &[5.into()], &sig);
1923+
let result = runtime.call_function("get_factorial", &[5.into()], &sig);
19241924
match result {
19251925
Ok(val) => assert_eq!(val.as_i32().unwrap(), 120),
19261926
Err(e) => eprintln!("Host call failed (may be expected): {}", e),
19271927
}
19281928

19291929
// 6! = 720
1930-
let result = runtime.call_native("get_factorial", &[6.into()], &sig);
1930+
let result = runtime.call_function("get_factorial", &[6.into()], &sig);
19311931
match result {
19321932
Ok(val) => assert_eq!(val.as_i32().unwrap(), 720),
19331933
Err(e) => eprintln!("Host call failed (may be expected): {}", e),
@@ -1966,7 +1966,7 @@ fn sum_n_times(value: i32, n: i32) i32 {
19661966
}
19671967

19681968
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
1969-
let result = runtime.call_native("sum_n_times", &[7.into(), 6.into()], &sig);
1969+
let result = runtime.call_function("sum_n_times", &[7.into(), 6.into()], &sig);
19701970

19711971
match result {
19721972
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42), // 7 * 6 = 42
@@ -2004,7 +2004,7 @@ fn mixed_compute(x: i32) i32 {
20042004
}
20052005

20062006
let sig = NativeSignature::new(&[NativeType::I32], NativeType::I32);
2007-
let result = runtime.call_native("mixed_compute", &[7.into()], &sig);
2007+
let result = runtime.call_function("mixed_compute", &[7.into()], &sig);
20082008

20092009
match result {
20102010
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42), // (7*3) * 2 = 42
@@ -2045,14 +2045,14 @@ fn conditional_host(x: i32, use_double: i32) i32 {
20452045
let sig = NativeSignature::new(&[NativeType::I32, NativeType::I32], NativeType::I32);
20462046

20472047
// use_double = true -> 21 * 2 = 42
2048-
let result = runtime.call_native("conditional_host", &[21.into(), 1.into()], &sig);
2048+
let result = runtime.call_function("conditional_host", &[21.into(), 1.into()], &sig);
20492049
match result {
20502050
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
20512051
Err(e) => eprintln!("Host call failed: {}", e),
20522052
}
20532053

20542054
// use_double = false -> 41 + 1 = 42
2055-
let result = runtime.call_native("conditional_host", &[41.into(), 0.into()], &sig);
2055+
let result = runtime.call_function("conditional_host", &[41.into(), 0.into()], &sig);
20562056
match result {
20572057
Ok(val) => assert_eq!(val.as_i32().unwrap(), 42),
20582058
Err(e) => eprintln!("Host call failed: {}", e),

0 commit comments

Comments
 (0)