@@ -27,6 +27,12 @@ struct Obj {
2727 int cv_geti () const volatile { return i; }
2828
2929 int plus () { return ++i; }
30+ int plusby (int d) {
31+ i += d;
32+ return i;
33+ }
34+
35+ void reset () { i = 0 ; }
3036
3137 int overloaded_f () { return i + 1000 ; }
3238 int overloaded_f () const { return i + 2000 ; }
@@ -346,6 +352,46 @@ TEST(register_member, member_functions) {
346352 EXPECT_EQ (l.gettop (), 0 );
347353}
348354
355+ TEST (register_member, member_functions_by_wrong_syntax_call) {
356+ luaw l;
357+
358+ l.register_member (" i" , &Obj::i);
359+ l.register_member (" plus" , &Obj::plus);
360+ l.register_member (" plusby" , &Obj::plusby);
361+ l.register_member (" reset" , &Obj::reset);
362+
363+ Obj o;
364+ l.set (" o" , &o);
365+
366+ int ret_code = l.dostring (" o.plus()" );
367+ EXPECT_NE (ret_code, LUA_OK);
368+ l.log_error_out ();
369+ EXPECT_EQ (o.i , 1 );
370+
371+ bool failed;
372+ int reti = l.eval_int (" return o.plus()" , -1 , false , &failed);
373+ EXPECT_EQ (reti, -1 );
374+ EXPECT_TRUE (failed);
375+
376+ ret_code = l.dostring (" o:plus()" );
377+ EXPECT_EQ (ret_code, LUA_OK);
378+ EXPECT_EQ (o.i , 2 );
379+
380+ ret_code = l.dostring (" o:reset()" );
381+ EXPECT_EQ (ret_code, LUA_OK);
382+ EXPECT_EQ (o.i , 0 );
383+
384+ ret_code = l.dostring (" o.plusby(3)" );
385+ EXPECT_NE (ret_code, LUA_OK);
386+ l.log_error_out ();
387+ EXPECT_EQ (o.i , 0 );
388+
389+ EXPECT_EQ (l.eval_int (" return o.plusby(o, 5)" ), 5 );
390+ EXPECT_EQ (l.eval_int (" return o:plusby(5)" ), 10 );
391+
392+ EXPECT_EQ (l.gettop (), 0 );
393+ }
394+
349395TEST (register_member, result_status_of_get) {
350396 luaw l;
351397 l.set (" o" , Obj{});
0 commit comments