1 #include <boost/tokenizer.hpp>
8 LUABIND_ANONYMOUS_FIX
int feedback
= 0;
14 // std::cout << "~base\n";
18 virtual const char* f()
24 struct baseWrap
: base
27 luabind::object self_
;
28 baseWrap(const luabind::object
& self
): self_(self
) {}
30 static const char* fS(base
* obj
)
32 return obj
->base::f();
35 virtual const char* f()
37 return luabind::call_member
<const char*>(self_
, "f");
54 no_copy(const no_copy
&) {}
57 void set_feedback(int n
)
60 } // anonymous namespace
63 bool test_lua_classes()
65 using namespace luabind
;
68 lua_State
* L
= lua_open();
71 int top
= lua_gettop(L
);
75 class_
<no_copy
>("no copy")
79 class_
<base
, baseWrap
>("base")
81 .def("f", &baseWrap::fS
)
85 class_
<simple_class
>("simple_class")
87 .def("f", &simple_class::f
)
91 function(L
, "set_feedback", &set_feedback
);
93 dostring(L
, "class 'derived' (base)\n"
94 "function derived:__init() super() end\n"
95 "function derived:f() return 'derived -> ' .. base.f(self) end\n");
97 dostring(L
, "function create_derived() return derived() end");
99 base
* ptr
= call_function
<base
*>(L
, "create_derived");
101 if (std::string("derived -> base") != ptr
->f()) return false;
103 dostring(L
, "class 'simple_derative' (simple_class)");
104 dostring(L
, "function simple_derative:__init() super() end\n");
105 dostring(L
, "a = simple_derative()");
106 dostring(L
, "a:f()");
107 if (feedback
!= 3) return false;
109 dostring(L
, "class 'simple_lua_class'\n");
110 dostring(L
, "function simple_lua_class:__init()\n"
112 "self.test_var = 1\n"
114 "function simple_lua_class:f()\n"
117 dostring(L
, "a = simple_lua_class()");
118 dostring(L
, "a:f()");
119 if (feedback
!= 3) return false;
120 object g
= get_globals(L
)["g"];
121 if (object_cast
<int>(g
) != 5) return false;
123 if (top
!= lua_gettop(L
)) return false;
125 dostring(L
, "a = derived()");
130 if (feedback
!= -1) return false;
134 lua_State
* L
= lua_open();
140 function(L
, "set_feedback", &set_feedback
);
142 dostring(L
, "class 'simple'");
143 dostring(L
, "function simple:__init() set_feedback(321) end");
144 dostring(L
, "function simple:__finalize() set_feedback(123) end");
146 dostring(L
, "a = simple()");
148 if (feedback
!= 321) return false;
151 if (feedback
!= 123) return false;