Jump to content
  • Advertisement
Sign in to follow this  
Friggle

C'tor call problem using ScriptBuilder

This topic is 3413 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 seem to have found some bug/problem in the order of variable initialization when using ScriptBuilder (#include directive). Below is an example: File 'Position.as' contains the following.
uint16 COORDINATE_DEFAULT = 15000;

class Position
{
    // Default constructor
    Position()
    {
        mX = uint16(15000);
        mY = uint16(COORDINATE_DEFAULT);
    }
    
    // The position variables
    uint16 mX;
    uint16 mY;
}


File 'CtorTest.as' contains the following:
#include "Position.as"

Position globalPos;

void main()
{
    Position localPos;
    
    Trace("Global pos = " + globalPos.mX + ", " + globalPos.mY + "\n");
    Trace("Local pos = " + localPos.mX + ", " + localPos.mY + "\n");
}


Running the script 'CtorTest.as' I get the following text reported by (my) Trace function: ---------------------------------------- Global pos = 15000, 0 Local pos = 15000, 15000 ---------------------------------------- To me this indicates that the variable 'COORDINATE_DEFAULT' was not already initialized during the constructor call for the global object 'globalPos'. However, when constructing the local object 'localPos' everything is fine. This problem only occurs when the variable COORDINATE_DEFAULT is located in the included file. If it is declared in the main file everything works fine for the global and for the local object. I experienced the problem on AngelScript version 2.16.1 (May 9th, 2009) Any thoughts on this? Thanks and regards [Edited by - Friggle on May 21, 2009 3:20:03 PM]

Share this post


Link to post
Share on other sites
Advertisement
This is not a bug in the CScriptBuilder. It is an unforeseen situation in the script compiler.

The script compiler initializes the global variables in the order they are declared, except if a variable references another variable declared after it. This way it normally doesn't matter in which order the variables are declared. The problem is that the class constructors are compiled after the global variables, so the compiler doesn't know which global variables the constructor references.

I have however made a minor change in the compiler just now to make sure the variables of primitive types are always initialized before any variable of non-primitive type. This way you're always guaranteed to get the correct value when referencing global variables from within script constructors, unless you're accessing another non-primitive variable, in which case you may get a null-pointer exception if the variables aren't initialized in the correct order.

Download revision 413 to pick up the improvements.

Share this post


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

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!