Fixed RUBY::create_command() so that we never define an instance method
by calling rb_define_protected_method(), even if the corresponding C++ member function is declared protected. The "protected" access modifier has different interpretations in C++ and Ruby, and this was causing the using_protected runtime test for Ruby to break. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5516 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
b4a8805a9f
commit
1d86fe950b
1 changed files with 17 additions and 1 deletions
|
|
@ -568,6 +568,16 @@ public:
|
||||||
*
|
*
|
||||||
* Creates a new command from a C function.
|
* Creates a new command from a C function.
|
||||||
* iname = Name of function in scripting language
|
* iname = Name of function in scripting language
|
||||||
|
*
|
||||||
|
* A note about what "protected" and "private" mean in Ruby:
|
||||||
|
*
|
||||||
|
* A private method is accessible only within the class or its subclasses,
|
||||||
|
* and it is callable only in "function form", with 'self' (implicit or
|
||||||
|
* explicit) as a receiver.
|
||||||
|
*
|
||||||
|
* A protected method is callable only from within its class, but unlike
|
||||||
|
* a private method, it can be called with a receiver other than self, such
|
||||||
|
* as another instance of the same class.
|
||||||
* --------------------------------------------------------------------- */
|
* --------------------------------------------------------------------- */
|
||||||
|
|
||||||
void create_command(Node *n, const String_or_char *iname) {
|
void create_command(Node *n, const String_or_char *iname) {
|
||||||
|
|
@ -589,14 +599,20 @@ public:
|
||||||
|
|
||||||
switch (current) {
|
switch (current) {
|
||||||
case MEMBER_FUNC:
|
case MEMBER_FUNC:
|
||||||
if (multipleInheritance) {
|
if (multipleInheritance) {
|
||||||
|
/*
|
||||||
const char* rb_define_method = !is_protected(n) ?
|
const char* rb_define_method = !is_protected(n) ?
|
||||||
"rb_define_method" : "rb_define_protected_method";
|
"rb_define_method" : "rb_define_protected_method";
|
||||||
|
*/
|
||||||
|
const char* rb_define_method = "rb_define_method";
|
||||||
Printv(klass->init, tab4, rb_define_method,"(", klass->mImpl, ", \"",
|
Printv(klass->init, tab4, rb_define_method,"(", klass->mImpl, ", \"",
|
||||||
iname, "\", ", wname, ", -1);\n", NIL);
|
iname, "\", ", wname, ", -1);\n", NIL);
|
||||||
} else {
|
} else {
|
||||||
|
/*
|
||||||
const char* rb_define_method = !is_protected(n) ?
|
const char* rb_define_method = !is_protected(n) ?
|
||||||
"rb_define_method" : "rb_define_protected_method";
|
"rb_define_method" : "rb_define_protected_method";
|
||||||
|
*/
|
||||||
|
const char* rb_define_method = "rb_define_method";
|
||||||
Printv(klass->init, tab4, rb_define_method, "(", klass->vname, ", \"",
|
Printv(klass->init, tab4, rb_define_method, "(", klass->vname, ", \"",
|
||||||
iname, "\", ", wname, ", -1);\n", NIL);
|
iname, "\", ", wname, ", -1);\n", NIL);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue