• Advertisement
Sign in to follow this  

Script object reference in C++

This topic is 1585 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post


Link to post
Share on other sites
Advertisement

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

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]

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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement