#include "pocketpy.h" #include static bool int_add(int argc, py_Ref argv) { PY_CHECK_ARGC(2); PY_CHECK_ARG_TYPE(0, tp_int); PY_CHECK_ARG_TYPE(1, tp_int); py_i64 a = py_toint(py_arg(0)); py_i64 b = py_toint(py_arg(1)); py_newint(py_retval(), a + b); return true; } int main() { // Initialize pocketpy py_initialize(); // Hello world! bool ok = py_exec("print('Hello world!')", "", EXEC_MODE, NULL); if(!ok) goto __ERROR; // Create a list: [1, 2, 3] py_Ref r0 = py_getreg(0); py_newlistn(r0, 3); py_newint(py_list_getitem(r0, 0), 1); py_newint(py_list_getitem(r0, 1), 2); py_newint(py_list_getitem(r0, 2), 3); // Eval the sum of the list py_Ref f_sum = py_getbuiltin(py_name("sum")); py_push(f_sum); py_pushnil(); py_push(r0); ok = py_vectorcall(1, 0); if(!ok) goto __ERROR; printf("Sum of the list: %d\n", (int)py_toint(py_retval())); // 6 // Bind native `int_add` as a global variable py_newnativefunc(r0, int_add); py_setglobal(py_name("add"), r0); // Call `add` in python ok = py_exec("add(3, 7)", "", EVAL_MODE, NULL); if(!ok) goto __ERROR; py_i64 res = py_toint(py_retval()); printf("Sum of 2 variables: %d\n", (int)res); // 10 py_finalize(); return 0; __ERROR: py_printexc(); py_finalize(); return 1; }