From a4ada0cc069eb725aab3f0b3870add5ecd962e89 Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Fri, 2 Aug 2024 18:28:31 +0800 Subject: [PATCH] Implement (version) (#6) --- src/goldfish.cpp | 3 ++- src/goldfish.hpp | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/goldfish.cpp b/src/goldfish.cpp index a8f25302..45cd20d8 100644 --- a/src/goldfish.cpp +++ b/src/goldfish.cpp @@ -89,7 +89,8 @@ int main(int argc, char **argv) { s7_load(sc, gf_boot.string().c_str()); s7_add_to_load_path(sc, gf_lib.string().c_str()); - // Glues for the Standard Library + // Glues + glue_goldfish(sc); glue_scheme_time(sc); // Command options diff --git a/src/goldfish.hpp b/src/goldfish.hpp index fa66db7f..3123f44d 100644 --- a/src/goldfish.hpp +++ b/src/goldfish.hpp @@ -28,6 +28,22 @@ const std::string goldfish_version = std::to_string(major_version) .append(".") .append(std::to_string(patch_version)); +// Glues for Goldfish +static s7_pointer f_version(s7_scheme *sc, s7_pointer args) { + return s7_make_string(sc, goldfish_version.c_str()); +} + +inline void glue_goldfish(s7_scheme *sc) { + s7_pointer cur_env = s7_curlet(sc); + + const char *s_version = "version"; + const char *d_version = "(version) => string, return the " + "goldfish version"; + s7_define(sc, cur_env, s7_make_symbol(sc, s_version), + s7_make_typed_function(sc, s_version, f_version, 0, 0, false, + d_version, NULL)); +} + // Glues for (scheme time) static s7_pointer f_current_second(s7_scheme *sc, s7_pointer args) { auto now = std::chrono::system_clock::now(); @@ -38,7 +54,7 @@ static s7_pointer f_current_second(s7_scheme *sc, s7_pointer args) { return s7_make_real(sc, res); } -static void glue_scheme_time(s7_scheme *sc) { +inline void glue_scheme_time(s7_scheme *sc) { s7_pointer cur_env = s7_curlet(sc); const char *s_current_second = "g_current-second";