summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md29
-rw-r--r--src/tests/hs_parse_args_tests.c4
-rw-r--r--src/tests/hs_parse_overloaded_tests.c6
3 files changed, 23 insertions, 16 deletions
diff --git a/README.md b/README.md
index ad32264..ca4256e 100644
--- a/README.md
+++ b/README.md
@@ -61,8 +61,8 @@ These constants are used when honeysuckle needs to know a type to
expect.
- `HS_BOOL` - booleans
-- `HS_INT` - lua_Integer (aka long int)
-- `HS_NUM` - lua_Number (aka double)
+- `HS_INT` - lua_Integer (DO NOT use int, long int, or other types!)
+- `HS_NUM` - lua_Number (DO NOT use float, double, or other types!)
- `HS_STR` - strings
- `HS_TBL` - tables
- `HS_FUNC` - any function
@@ -75,6 +75,9 @@ expect.
`hs_type_to_string()` takes as argument a single type constant and
returns a const string representing the type.
+For the numeric types (`HS_INT` and `HS_NUM`, using variables other
+than `lua_Integer` and `lua_Number` may result in undefined behavior.
+
### Argument parsing
[(Back to top)](#table-of-contents)
@@ -109,7 +112,7 @@ int some_lua_binding(lua_State *L)
void* user;
hs_parse_args(L,
// explicit initializer for struct
- { HS_BOOL, ptr.bool = &b },
+ { HS_BOOL, .ptr.bool = &b },
// macro initialization (recommended)
hs_int(i),
hs_tbl(tbl_index),
@@ -131,6 +134,11 @@ in the macro `hs_overload()`. This function returns an integer
containing the zero-indexed index of the overload option that was
actually used.
+Please note that because of Lua's type system, overloads that differ
+only in an integer/number pair, function/c function pair, or
+userdata/light userdata pair in the same position may not work as
+expected.
+
If none of the argument lists match the provided arguments, this
function throws an error.
@@ -140,8 +148,8 @@ store arguments.
```c
int overloaded_lua_binding(lua_State *L)
{
- long int i;
- double n;
+ lua_Integer i;
+ lua_Number n;
char *str;
int choice = hs_parse_overloaded(L,
hs_overload( hs_int(i) ),
@@ -168,7 +176,7 @@ struct hs_tbl_entry`s. These can either be constructed by hand, or
via function-like macros identified by lowercase versions of the
typenames shown above (e.g. `hs_str_int` would create a string key
with integer value). Most of the type constants expect their
-associated type (e.g. `HS_INT` expects a `long int`, `HS_CFUNC` expects `
+associated type (e.g. `HS_INT` expects a `lua_Integer`, `HS_CFUNC` expects `
lua_CFunction`, etc.) but `HS_FUNC`, `HS_USER`, and `HS_TBL` expect
an integer stack index. You cannot use `HS_NIL` or `HS_ANY` with
this function.
@@ -181,15 +189,14 @@ int *ptr; // some pointer
hs_create_table(L,
// manual struct initialization
- { HS_STR, key.string="intVal", HS_INT, value.integer=4 },
+ { HS_STR, .key.string="intVal", HS_INT, .value.integer=4 },
// macro initialization (recommended)
hs_str_num("numVal", 6.0f),
hs_int_tbl(12, hs_create_table(L,
hs_str_cfunc("subTableCFunc", some_lua_binding),
hs_int_bool(15, true),
- ),
- "lightUserdataVal", HS_LIGHT, (void *)ptr,
- HS_END);
+ )
+);
```
### Table processing
@@ -226,7 +233,7 @@ void open_logfile(const char *logfile, void *settings) {
struct settings {
bool debug;
- long int verbosity;
+ lua_Integer verbosity;
float epsilon;
};
diff --git a/src/tests/hs_parse_args_tests.c b/src/tests/hs_parse_args_tests.c
index 300a519..83178f3 100644
--- a/src/tests/hs_parse_args_tests.c
+++ b/src/tests/hs_parse_args_tests.c
@@ -549,8 +549,8 @@ TEST(parse_readme_example)
lua_pushstring(L, "c: c: c:");
void *userdata = lua_newuserdata(L, sizeof(char));
- bool b; long int i; int table_index;
- double f; char *str; void *user;
+ bool b; lua_Integer i; int table_index;
+ lua_Number f; char *str; void *user;
hs_parse_args
(L, hs_bool(b), hs_int(i), hs_tbl(table_index),
hs_num(f), hs_str(str), hs_user(user));
diff --git a/src/tests/hs_parse_overloaded_tests.c b/src/tests/hs_parse_overloaded_tests.c
index 784807a..3c327cb 100644
--- a/src/tests/hs_parse_overloaded_tests.c
+++ b/src/tests/hs_parse_overloaded_tests.c
@@ -10,7 +10,7 @@ static int testfunc(lua_State *L) { return 0; }
*/
#define PARSE_OVERLOADED \
- bool b; long int i; int ti, fi, ni; double f; \
+ bool b; lua_Integer i; int ti, fi, ni; lua_Number f; \
char *str; lua_CFunction fn; void *user, *light; \
int choice = hs_parse_overloaded \
(L, \
@@ -124,7 +124,7 @@ TEST(parse_2_3_overload_0)
{
lua_pushinteger(L, 69);
lua_pushstring(L, "foo");
- long int i; char *str; void *data;
+ lua_Integer i; char *str; void *data;
int choice = hs_parse_overloaded
(L,
hs_overload(hs_int(i), hs_str(str)),
@@ -141,7 +141,7 @@ TEST(parse_2_3_overload_1)
lua_pushinteger(L, 69);
lua_pushstring(L, "foo");
void *userdata = lua_newuserdata(L, sizeof(char));
- long int i; char *str; void *data;
+ lua_Integer i; char *str; void *data;
int choice = hs_parse_overloaded
(L,
hs_overload(hs_int(i), hs_str(str)),