Jump to content
  • Advertisement
Sign in to follow this  

Problems with 'const'

This topic is 5171 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);
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
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);


// 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.


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
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!