• 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 )
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 )