12 LUABIND_ANONYMOUS_FIX
int feedback
= 0;
14 struct operator_tester
16 int operator+(int) const
22 float operator-() const
28 float operator()() const
34 float operator()(int a
) const
40 float operator()(int a
)
48 int operator+(int, const operator_tester
&)
54 struct operator_tester2
58 float operator+(const operator_tester
&, const operator_tester2
&)
64 struct operator_tester3
: public operator_tester
{};
66 const operator_tester
* make_const_test()
68 static operator_tester o
;
72 std::ostream
& operator<<(std::ostream
& os
, const operator_tester
&)
74 os
<< "operator_tester"; feedback
= 63; return os
;
77 operator_tester
* clone(const operator_tester
* p
) { return new operator_tester(*p
); }
79 } // anonymous namespace
83 using namespace luabind
;
85 lua_State
* L
= lua_open();
89 int top
= lua_gettop(L
);
93 if (feedback
!= 0) return false;
97 class_
<operator_tester
>("operator_tester")
99 .def(tostring(const_self
))
101 .def(other
<int>() + self
)
104 .def(const_self(int()))
106 // .def("clone", &clone, adopt(return_value)),
108 class_
<operator_tester2
>("operator_tester2")
109 .def(constructor
<>())
110 .def(other
<const operator_tester
&>() + self
),
112 class_
<operator_tester3
, bases
<operator_tester
> >("operator_tester3")
113 .def(constructor
<>()),
115 def("make_const_test", &make_const_test
)
118 if (feedback
!= 0) return false;
120 if (dostring(L
, "test = operator_tester()")) return false;
121 if (dostring(L
, "test2 = operator_tester2()")) return false;
122 if (dostring(L
, "test3 = operator_tester3()")) return false;
124 if (dostring(L
, "test()")) return false;
125 if (feedback
!= 3) return false;
126 if (dostring(L
, "test(5)")) return false;
127 if (feedback
!= 7) return false;
129 dostring(L
, "const_test = make_const_test()");
130 if (dostring(L
, "const_test(5)")) return false;
131 if (feedback
!= 4) return false;
133 if (dostring(L
, "a = -test")) return false;
134 if (feedback
!= 2) return false;
136 if (dostring(L
, "a = test + test2")) return false;
137 if (feedback
!= 6) return false;
139 if (dostring(L
, "a = 2 + test")) return false;
140 if (feedback
!= 5) return false;
142 if (dostring(L
, "a = test + 2")) return false;
143 if (feedback
!= 1) return false;
145 if (dostring(L
, "a = test3 + 6")) return false;
146 if (feedback
!= 1) return false;
148 if (dostring(L
, "a = test3 + test2")) return false;
149 if (feedback
!= 6) return false;
151 if (dostring(L
, "a = tostring(test)")) return false;
152 if (feedback
!= 63) return false;
154 // if (dostring(L, "t = test:clone()")) return false;
158 "function my_class:__add(lhs)\n"
159 " return my_class(self.val + lhs.val)\n"
161 "function my_class:__init(a)\n"
164 "function my_class:__sub(v)\n"
165 " if (type(self) == 'number') then\n"
166 " return my_class(self - v.val)\n"
167 " elseif (type(v) == 'number') then\n"
168 " return my_class(self.val - v)\n"
170 " return my_class(self.val - v.val)\n"
180 if (dostring(L
, prog
)) return false;
181 object var_c
= get_globals(L
)["c"];
182 if (object_cast
<int>(var_c
["val"]) != 10) return false;
184 object var_d
= get_globals(L
)["d"];
185 if (object_cast
<int>(var_d
["val"]) != 2) return false;
187 if (top
!= lua_gettop(L
)) return false;