@@ -27,6 +27,12 @@ struct Obj {
27
27
int cv_geti () const volatile { return i; }
28
28
29
29
int plus () { return ++i; }
30
+ int plusby (int d) {
31
+ i += d;
32
+ return i;
33
+ }
34
+
35
+ void reset () { i = 0 ; }
30
36
31
37
int overloaded_f () { return i + 1000 ; }
32
38
int overloaded_f () const { return i + 2000 ; }
@@ -346,6 +352,46 @@ TEST(register_member, member_functions) {
346
352
EXPECT_EQ (l.gettop (), 0 );
347
353
}
348
354
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
+
349
395
TEST (register_member, result_status_of_get) {
350
396
luaw l;
351
397
l.set (" o" , Obj{});
0 commit comments