Merge pull request #452 from ngladitz/lua-char-typemap
lua: push characters as unformatted 1-character strings
This commit is contained in:
commit
f1be7ad3ee
6 changed files with 37 additions and 4 deletions
15
Examples/test-suite/chartest.i
Normal file
15
Examples/test-suite/chartest.i
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
%module chartest
|
||||||
|
|
||||||
|
%inline %{
|
||||||
|
char printable_global_char = 'a';
|
||||||
|
char unprintable_global_char = 0x7F;
|
||||||
|
|
||||||
|
char GetPrintableChar() {
|
||||||
|
return 'a';
|
||||||
|
}
|
||||||
|
|
||||||
|
char GetUnprintableChar() {
|
||||||
|
return 0x7F;
|
||||||
|
}
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
@ -138,6 +138,7 @@ CPP_TEST_CASES += \
|
||||||
casts \
|
casts \
|
||||||
char_binary \
|
char_binary \
|
||||||
char_strings \
|
char_strings \
|
||||||
|
chartest \
|
||||||
class_forward \
|
class_forward \
|
||||||
class_ignore \
|
class_ignore \
|
||||||
class_scope_weird \
|
class_scope_weird \
|
||||||
|
|
|
||||||
14
Examples/test-suite/lua/chartest_runme.lua
Normal file
14
Examples/test-suite/lua/chartest_runme.lua
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
require("import") -- the import fn
|
||||||
|
import("chartest") -- import code
|
||||||
|
|
||||||
|
function char_assert(char, code)
|
||||||
|
assert(type(char) == 'string')
|
||||||
|
assert(char:len() == 1)
|
||||||
|
assert(char:byte() == code)
|
||||||
|
end
|
||||||
|
|
||||||
|
char_assert(chartest.GetPrintableChar(), 0x61)
|
||||||
|
char_assert(chartest.GetUnprintableChar(), 0x7F)
|
||||||
|
|
||||||
|
char_assert(chartest.printable_global_char, 0x61)
|
||||||
|
char_assert(chartest.unprintable_global_char, 0x7F)
|
||||||
|
|
@ -185,7 +185,7 @@ use %include <std_except.i> instead
|
||||||
|
|
||||||
// char is changed to a string
|
// char is changed to a string
|
||||||
%typemap(throws) char
|
%typemap(throws) char
|
||||||
%{lua_pushfstring(L,"%c",$1);SWIG_fail;%}
|
%{lua_pushlstring(L,&$1,1);SWIG_fail;%}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Throwing object is a serious problem:
|
Throwing object is a serious problem:
|
||||||
|
|
|
||||||
|
|
@ -1841,7 +1841,10 @@ SWIG_Lua_InstallConstants(lua_State *L, swig_lua_const_info constants[]) {
|
||||||
break;
|
break;
|
||||||
case SWIG_LUA_CHAR:
|
case SWIG_LUA_CHAR:
|
||||||
lua_pushstring(L,constants[i].name);
|
lua_pushstring(L,constants[i].name);
|
||||||
lua_pushfstring(L,"%c",(char)constants[i].lvalue);
|
{
|
||||||
|
char c = constants[i].lvalue;
|
||||||
|
lua_pushlstring(L,&c,1);
|
||||||
|
}
|
||||||
lua_rawset(L,-3);
|
lua_rawset(L,-3);
|
||||||
break;
|
break;
|
||||||
case SWIG_LUA_STRING:
|
case SWIG_LUA_STRING:
|
||||||
|
|
|
||||||
|
|
@ -122,14 +122,14 @@ SWIGINTERN int SWIG_lua_isnilstring(lua_State *L, int idx) {
|
||||||
%{$1 = (lua_tostring(L, $input))[0];%}
|
%{$1 = (lua_tostring(L, $input))[0];%}
|
||||||
|
|
||||||
%typemap(out) char
|
%typemap(out) char
|
||||||
%{ lua_pushfstring(L,"%c",$1); SWIG_arg++;%}
|
%{ lua_pushlstring(L, &$1, 1); SWIG_arg++;%}
|
||||||
|
|
||||||
// by const ref
|
// by const ref
|
||||||
%typemap(in,checkfn="SWIG_lua_isnilstring",fragment="SWIG_lua_isnilstring") const char& (char temp)
|
%typemap(in,checkfn="SWIG_lua_isnilstring",fragment="SWIG_lua_isnilstring") const char& (char temp)
|
||||||
%{temp = (lua_tostring(L, $input))[0]; $1=&temp;%}
|
%{temp = (lua_tostring(L, $input))[0]; $1=&temp;%}
|
||||||
|
|
||||||
%typemap(out) const char&
|
%typemap(out) const char&
|
||||||
%{ lua_pushfstring(L,"%c",*$1); SWIG_arg++;%}
|
%{ lua_pushlstring(L, $1, 1); SWIG_arg++;%}
|
||||||
|
|
||||||
// pointers and references
|
// pointers and references
|
||||||
// under SWIG rules, it is ok, to have a pass in a lua nil,
|
// under SWIG rules, it is ok, to have a pass in a lua nil,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue