haskelisp 0.1.0.4 → 0.1.0.5
raw patch · 3 files changed
+202/−2 lines, 3 files
Files
- cbits/emacs-module.h +197/−0
- cbits/stab.c +1/−1
- haskelisp.cabal +4/−1
+ cbits/emacs-module.h view
@@ -0,0 +1,197 @@+/* emacs-module.h - GNU Emacs module API.++Copyright (C) 2015-2016 Free Software Foundation, Inc.++This file is part of GNU Emacs.++GNU Emacs is free software: you can redistribute it and/or modify+it under the terms of the GNU General Public License as published by+the Free Software Foundation, either version 3 of the License, or (at+your option) any later version.++GNU Emacs is distributed in the hope that it will be useful,+but WITHOUT ANY WARRANTY; without even the implied warranty of+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+GNU General Public License for more details.++You should have received a copy of the GNU General Public License+along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */++#ifndef EMACS_MODULE_H+#define EMACS_MODULE_H++#include <stdint.h>+#include <stddef.h>+#include <stdbool.h>++#if defined __cplusplus && __cplusplus >= 201103L+# define EMACS_NOEXCEPT noexcept+#else+# define EMACS_NOEXCEPT+#endif++#ifdef __cplusplus+extern "C" {+#endif++/* Current environment. */+typedef struct emacs_env_25 emacs_env;++/* Opaque pointer representing an Emacs Lisp value.+ BEWARE: Do not assume NULL is a valid value! */+typedef struct emacs_value_tag *emacs_value;++enum { emacs_variadic_function = -2 };++/* Struct passed to a module init function (emacs_module_init). */+struct emacs_runtime+{+ /* Structure size (for version checking). */+ ptrdiff_t size;++ /* Private data; users should not touch this. */+ struct emacs_runtime_private *private_members;++ /* Return an environment pointer. */+ emacs_env *(*get_environment) (struct emacs_runtime *ert);+};+++/* Possible Emacs function call outcomes. */+enum emacs_funcall_exit+{+ /* Function has returned normally. */+ emacs_funcall_exit_return = 0,++ /* Function has signaled an error using `signal'. */+ emacs_funcall_exit_signal = 1,++ /* Function has exit using `throw'. */+ emacs_funcall_exit_throw = 2,+};++struct emacs_env_25+{+ /* Structure size (for version checking). */+ ptrdiff_t size;++ /* Private data; users should not touch this. */+ struct emacs_env_private *private_members;++ /* Memory management. */++ emacs_value (*make_global_ref) (emacs_env *env,+ emacs_value any_reference);++ void (*free_global_ref) (emacs_env *env,+ emacs_value global_reference);++ /* Non-local exit handling. */++ enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env);++ void (*non_local_exit_clear) (emacs_env *env);++ enum emacs_funcall_exit (*non_local_exit_get)+ (emacs_env *env,+ emacs_value *non_local_exit_symbol_out,+ emacs_value *non_local_exit_data_out);++ void (*non_local_exit_signal) (emacs_env *env,+ emacs_value non_local_exit_symbol,+ emacs_value non_local_exit_data);++ void (*non_local_exit_throw) (emacs_env *env,+ emacs_value tag,+ emacs_value value);++ /* Function registration. */++ emacs_value (*make_function) (emacs_env *env,+ ptrdiff_t min_arity,+ ptrdiff_t max_arity,+ emacs_value (*function) (emacs_env *env,+ ptrdiff_t nargs,+ emacs_value args[],+ void *)+ EMACS_NOEXCEPT,+ const char *documentation,+ void *data);++ emacs_value (*funcall) (emacs_env *env,+ emacs_value function,+ ptrdiff_t nargs,+ emacs_value args[]);++ emacs_value (*intern) (emacs_env *env,+ const char *symbol_name);++ /* Type conversion. */++ emacs_value (*type_of) (emacs_env *env,+ emacs_value value);++ bool (*is_not_nil) (emacs_env *env, emacs_value value);++ bool (*eq) (emacs_env *env, emacs_value a, emacs_value b);++ intmax_t (*extract_integer) (emacs_env *env, emacs_value value);++ emacs_value (*make_integer) (emacs_env *env, intmax_t value);++ double (*extract_float) (emacs_env *env, emacs_value value);++ emacs_value (*make_float) (emacs_env *env, double value);++ /* Copy the content of the Lisp string VALUE to BUFFER as an utf8+ null-terminated string.++ SIZE must point to the total size of the buffer. If BUFFER is+ NULL or if SIZE is not big enough, write the required buffer size+ to SIZE and return false.++ Note that SIZE must include the last null byte (e.g. "abc" needs+ a buffer of size 4).++ Return true if the string was successfully copied. */++ bool (*copy_string_contents) (emacs_env *env,+ emacs_value value,+ char *buffer,+ ptrdiff_t *size_inout);++ /* Create a Lisp string from a utf8 encoded string. */+ emacs_value (*make_string) (emacs_env *env,+ const char *contents, ptrdiff_t length);++ /* Embedded pointer type. */+ emacs_value (*make_user_ptr) (emacs_env *env,+ void (*fin) (void *) EMACS_NOEXCEPT,+ void *ptr);++ void *(*get_user_ptr) (emacs_env *env, emacs_value uptr);+ void (*set_user_ptr) (emacs_env *env, emacs_value uptr, void *ptr);++ void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr))+ (void *) EMACS_NOEXCEPT;+ void (*set_user_finalizer) (emacs_env *env,+ emacs_value uptr,+ void (*fin) (void *) EMACS_NOEXCEPT);++ /* Vector functions. */+ emacs_value (*vec_get) (emacs_env *env, emacs_value vec, ptrdiff_t i);++ void (*vec_set) (emacs_env *env, emacs_value vec, ptrdiff_t i,+ emacs_value val);++ ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vec);+};++/* Every module should define a function as follows. */+extern int emacs_module_init (struct emacs_runtime *ert);++#ifdef __cplusplus+}+#endif++#endif /* EMACS_MODULE_H */
cbits/stab.c view
@@ -1,6 +1,6 @@ #include <HsFFI.h> #include <string.h>-#include "./emacs-module.h"+#include <emacs-module.h> /* extern void __stginit_Lib(void); */ /* Declare mandatory GPL symbol. */
haskelisp.cabal view
@@ -1,5 +1,5 @@ name: haskelisp-version: 0.1.0.4+version: 0.1.0.5 cabal-version: >=1.10 build-type: Simple license: GPL-3@@ -14,6 +14,8 @@ author: Takenari Shinohara extra-source-files: README.md+ cbits/*.c+ cbits/*.h source-repository head type: git@@ -37,5 +39,6 @@ c-sources: cbits/stab.c default-language: Haskell2010+ include-dirs: cbits/ hs-source-dirs: src