Problems with 'const'

Started by
4 comments, last by WitchLord 19 years, 8 months ago
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;
}

Advertisement
That's probably a bug in AngelScript. I'll look into it ASAP.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

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-onlyTestConstProperty (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?

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

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.
Yes, that could be it since it would use a different code path. I'll do some more tests.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

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?

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

This topic is closed to new replies.

Advertisement