Sign in to follow this  

Problems with 'const'

This topic is 4863 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

I am having problems with making a registered object obey constness. In the following example, when compiling the script it reports the float assignment as an error due to g_float being const but it doesn't complain about the assignment of g_object. Any suggestions to what I am doing wrong? Cheers. Host App
engine->RegisterGlobalProperty("const TestObject g_object", &g_object);
engine->RegisterGlobalProperty("const float g_float", &g_float);
Script
TestObject	myObject;
float		myFloat;

void Init()
{
	g_object = myObject;
	g_float = myFloat;
}

Share this post


Link to post
Share on other sites
I made the following test and it worked as expected:


//
// Tests constant properties to see if they can be overwritten
//
// Test author: Andreas Jonsson
//

#include "angelscript.h"
#include <stdio.h>
#include <stddef.h>
#include <string.h>

#define TESTNAME "TestConstProperty"


class COutStream : public asIOutputStream
{
public:
void AS_CALL Write(const char *text) { printf(text); }
};


static const char *script =
"Obj myObj; \n"
"float myFloat; \n"
" \n"
"void Init() \n"
"{ \n"
" g_Obj = myObj; \n"
" g_Float = myFloat; \n"
"} \n";

bool TestConstProperty()
{
bool fail = false;

asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);

engine->RegisterObjectType("Obj", sizeof(int), asOBJ_PRIMITIVE);
engine->RegisterObjectProperty("Obj", "int val", 0);

int constantProperty = 0;
engine->RegisterGlobalProperty("const Obj g_Obj", &constantProperty);

float constantFloat = 0;
engine->RegisterGlobalProperty("const float g_Float", &constantFloat);

COutStream out;
engine->AddScriptSection(0, TESTNAME, script, strlen(script));
engine->Build(0, &out);

engine->Release();


// Success
return fail;
}




The output was:


TestConstProperty (6, 9) : Error : Reference is read-only
TestConstProperty (7, 11) : Error : Reference is read-only


Note this was made with 1.9.0 WIP 2, which is not yet released. However, I haven't made any changes that I know of in the way constants are treated or the way properties are registered.

Can you verify the problem once more for me?

Share this post


Link to post
Share on other sites
Thanks for looking into it.

I have investigated the problem further and it only seems to ignore the 'const'ness if you declare you own asBEHAVE_ASSIGNMENT function on the object.

I have also tried it on the bstr and that doesn't seem to work either.

I am using 1.9.0 WIP 1.

Hope that helps.

Cheers.

Share this post


Link to post
Share on other sites
You were right. When registering the asBEHAVE_ASSIGNMENT function the compiler doesn't check if the variable is const or not.

I'll have this fixed for the next release.

I would like to credit you for finding the bug, but I don't know your name. Would you mind telling me?

Share this post


Link to post
Share on other sites

This topic is 4863 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.

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