Sign in to follow this  
Followers 0
chewbakka

Script object reference in C++

6 posts in this topic

Hi,

 

I'm writing a debugger for my project using AngelScript 2.27.1. I've registered a callback and able to extract the variables. I have a nice display showing the variables. For references I'd like to write if it is null or not.

for ( int varIx = 0; varIx < context->GetVarCount( level ); varIx++ )
  watch->Show( context->GetVarName( varIx, level )
             , context->GetVarTypeId( varIx, level )
             , context->GetAddressOfVar( varIx, level ) );

This way I enumerate the variables. In Show, I get the object type:

asIObjectType* objType = ScriptEngine::Instance().GetAsEngine()->GetObjectTypeById( typeId );

And then I have a TODO now smile.png

if ( objType->GetFlags() & asOBJ_REF )
{
  const asIScriptObject* object = (const asIScriptObject*)address;
  bool isValidRef = true; // TODO
  
  item->setText( 2, isValidRef ? "valid ref" : "null ref" );
}

I can cast the address of the property to an asIScriptObject, but I can't still determine if it is null reference or not. I've checked if the address pointer is maybe null, but it is not null even for null ref objects.

 

Is there a way to check if it is a null ref or not?

 

Thank you.

Edited by brumi
0

Share this post


Link to post
Share on other sites

GetAddressOfVar() will return the address of the value in the variable. If the variable is a primitive type then the address will point to the value of the primitive, if the variable is a handle then the address will point to the handle, if the variable is local object (even if it is a ref type) then the address will point to the object.

 

You can use the typeId to know if the variable is a handle or not by checking for the bit asTYPEID_OBJHANDLE. If it is not a handle, then the variable will not be null.

 

I suggest you take a look at the CDebugger add-on in the SDK, particularly the ToString() and PrintValue() methods. It shows how to interpret the information you get about the variables.

 

Regards,

Andreas

1

Share this post


Link to post
Share on other sites

I wasn't aware of the Debugger addon. Thank you, checked it, and now I have a nice game editor with a full angelscript IDE. :) Like this:

 

[attachment=17951:editor.jpg]

0

Share this post


Link to post
Share on other sites

Wow nice work! that looks amazingly useful. I'll have to look into that, maybe not a full blown GUI like that, but at least a Debug() function that could automatically output all the local variables to log file as best it can sure would beat hacking in output to console statements for each var I want to look at.

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0