From e1202ab4fe7ebd098224b2b578aa3db1a01a4d41 Mon Sep 17 00:00:00 2001 From: nat Date: Sun, 1 Jun 2025 07:51:03 -0700 Subject: [PATCH] amend bash.h; add example_builtin.c --- bash.h | 47 ++++++++++++++++++++++------------------------- example_builtin.c | 2 +- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/bash.h b/bash.h index f1056d2..8624d36 100644 --- a/bash.h +++ b/bash.h @@ -34,32 +34,29 @@ extern char **make_builtin_argv(WORD_LIST*, int*); PyImport_AppendInittab(#modname, PyInit_##modname); \ Py_Initialize(); \ } \ - int _##bash_name(int argc, char **argv) { \ - int ret = 1; \ - PyObject *mod = NULL, *func = NULL, *result; \ - \ - mod = PyImport_ImportModule(#modname); \ - func = PyObject_GetAttrString(mod, #function); \ - \ - PyObject *py_argv = PyTuple_New(argc - 1); \ - \ - for (int i = 1; i < argc; i++) { \ - PyObject *arg_as_str = PyUnicode_FromString(argv[i]); \ - PyTuple_SetItem(py_argv, i-1, arg_as_str); \ - } \ - \ - result = PyObject_CallObject(func, py_argv); \ - if (!result) { PyErr_Print(); goto finally; } \ - ret = (int) PyFloat_AsDouble(result); \ - \ - finally: \ - Py_XDECREF(result); \ - Py_XDECREF(py_argv); \ - Py_XDECREF(func); \ - Py_XDECREF(mod); \ - return ret; \ + int ret = 1; \ + PyObject *mod = NULL, *func = NULL, *result; \ + \ + mod = PyImport_ImportModule(#modname); \ + func = PyObject_GetAttrString(mod, #function); \ + \ + PyObject *py_argv = PyTuple_New(argc - 1); \ + \ + for (int i = 1; i < argc; i++) { \ + PyObject *arg_as_str = PyUnicode_FromString(argv[i]); \ + PyTuple_SetItem(py_argv, i-1, arg_as_str); \ } \ - return _##bash_name(argc, argv); \ + \ + result = PyObject_CallObject(func, py_argv); \ + if (!result) { PyErr_Print(); goto finally; } \ + ret = (int) PyFloat_AsDouble(result); \ + \ + finally: \ + Py_XDECREF(result); \ + Py_XDECREF(py_argv); \ + Py_XDECREF(func); \ + Py_XDECREF(mod); \ + return ret; \ } \ WRAP_FUNC_WITH_BUILTIN(bash_name); \ DEFINE_BUILTIN(bash_name); diff --git a/example_builtin.c b/example_builtin.c index 68172c1..ae32095 100644 --- a/example_builtin.c +++ b/example_builtin.c @@ -3,4 +3,4 @@ PY_FUNC(foo, foo, _foo); PY_FUNC(bar, foo, _bar); -PY_FUNC(graph, foo, _complicated_function); +PY_FUNC(graph, bar, _complicated_function);