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 } // anonymous namespace
81 using namespace luabind
;
83 lua_State
* L
= lua_open();
87 int top
= lua_gettop(L
);
91 if (feedback
!= 0) return false;
95 class_
<operator_tester
>("operator_tester")
97 .def(tostring(const_self
))
99 .def(other
<int>() + self
)
102 .def(const_self(int()))
105 class_
<operator_tester2
>("operator_tester2")
106 .def(constructor
<>())
107 .def(other
<const operator_tester
&>() + self
),
109 class_
<operator_tester3
, bases
<operator_tester
> >("operator_tester3")
110 .def(constructor
<>()),
112 def("make_const_test", &make_const_test
)
115 if (feedback
!= 0) return false;
117 if (dostring(L
, "test = operator_tester()")) return false;
118 if (dostring(L
, "test2 = operator_tester2()")) return false;
119 if (dostring(L
, "test3 = operator_tester3()")) return false;
121 if (dostring(L
, "test()")) return false;
122 if (feedback
!= 3) return false;
123 if (dostring(L
, "test(5)")) return false;
124 if (feedback
!= 7) return false;
126 dostring(L
, "const_test = make_const_test()");
127 if (dostring(L
, "const_test(5)")) return false;
128 if (feedback
!= 4) return false;
130 if (dostring(L
, "a = -test")) return false;
131 if (feedback
!= 2) return false;
133 if (dostring(L
, "a = test + test2")) return false;
134 if (feedback
!= 6) return false;
136 if (dostring(L
, "a = 2 + test")) return false;
137 if (feedback
!= 5) return false;
139 if (dostring(L
, "a = test + 2")) return false;
140 if (feedback
!= 1) return false;
142 if (dostring(L
, "a = test3 + 6")) return false;
143 if (feedback
!= 1) return false;
145 if (dostring(L
, "a = test3 + test2")) return false;
146 if (feedback
!= 6) return false;
148 if (dostring(L
, "a = tostring(test)")) return false;
149 if (feedback
!= 63) return false;
153 "function my_class:__add(lhs)\n"
154 " return my_class(self.val + lhs.val)\n"
156 "function my_class:__init(a)\n"
159 "function my_class:__sub(v)\n"
160 " if (type(self) == 'number') then\n"
161 " return my_class(self - v.val)\n"
162 " elseif (type(v) == 'number') then\n"
163 " return my_class(self.val - v)\n"
165 " return my_class(self.val - v.val)\n"
175 if (dostring(L
, prog
)) return false;
176 object var_c
= get_globals(L
)["c"];
177 if (object_cast
<int>(var_c
["val"]) != 10) return false;
179 object var_d
= get_globals(L
)["d"];
180 if (object_cast
<int>(var_d
["val"]) != 2) return false;
182 if (top
!= lua_gettop(L
)) return false;