Jump to content

  • Log In with Google      Sign In   
  • Create Account


#ActualJason Goepel

Posted 18 September 2013 - 01:45 PM

I'm not sure if this is a bug or not, but when I call asIScriptFunction::GetDeclaration on a constructor I am getting a return type, contrary to some comments in the code as_scriptfunction.cpp, line 480.

// Don't add the return type for constructors and destructors
if( !(returnType.GetTokenType() == ttVoid && 
      objectType && 
      (name == objectType->name || (name.GetLength() > 0 && name[0] == '~'))) ) 
{
    str = returnType.Format();
    str += " ";
} 

The problem seems to be that "name" is always "_beh_0_", which is certainly not going to equal objectType->name.  This name is set here when registering a behaviour, as_scriptengine.cpp, line 1811:

asCBuilder bld(this, 0);
int r = bld.ParseFunctionDeclaration(objectType, decl, &func, true, &internal.paramAutoHandles, &internal.returnAutoHandle);
if( r < 0 )
    return ConfigError(asINVALID_DECLARATION, "RegisterObjectBehaviour", objectType->name.AddressOf(), decl);
func.name.Format("_beh_%d_", behaviour);

These two sections of code seem inconsistent.  If I had to pick, I would prefer constructors to have their names equal the names of the objects which they construct.


#1Jason Goepel

Posted 17 September 2013 - 03:11 PM

I'm not sure if this is a bug or not, but when I call asIScriptFunction::GetDeclaration on a constructor I am getting a return type, contrary to some comments in the code as_scriptfunction.cpp, line 480.

// Don't add the return type for constructors and destructors
if( !(returnType.GetTokenType() == ttVoid && 
      objectType && 
      (name == objectType->name || (name.GetLength() > 0 && name[0] == '~'))) ) 
{
    str = returnType.Format();
    str += " ";
} 

The problem seems to be that "name" is always "_beh_0_", which is certainly not going to equal objectType->name.  This name is set here when registering a behaviour, as_scriptengine.cpp, line 1811:

asCBuilder bld(this, 0);
int r = bld.ParseFunctionDeclaration(objectType, decl, &func, true, &internal.paramAutoHandles, &internal.returnAutoHandle);
if( r < 0 )
    return ConfigError(asINVALID_DECLARATION, "RegisterObjectBehaviour", objectType->name.AddressOf(), decl);
func.name.Format("_beh_%d_", behaviour);

These two sections of code seem inconsistent.  If I had to pick, I would prefer constructors to have their names equal the names of the objects which they construct.


PARTNERS