Jump to content

  • Log In with Google      Sign In   
  • Create Account


- - - - -

Problems with 'const'


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 _MrC_   Members   -  Reputation: 127

Like
0Likes
Like

Posted 19 August 2004 - 12:57 AM

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;
}



Sponsor:

#2 Andreas Jonsson   Moderators   -  Reputation: 3265

Like
0Likes
Like

Posted 19 August 2004 - 02:04 AM

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

#3 Andreas Jonsson   Moderators   -  Reputation: 3265

Like
0Likes
Like

Posted 19 August 2004 - 10:40 AM

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?
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

#4 _MrC_   Members   -  Reputation: 127

Like
0Likes
Like

Posted 19 August 2004 - 10:01 PM

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.

#5 Andreas Jonsson   Moderators   -  Reputation: 3265

Like
0Likes
Like

Posted 20 August 2004 - 02:20 AM

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

#6 Andreas Jonsson   Moderators   -  Reputation: 3265

Like
0Likes
Like

Posted 20 August 2004 - 09:52 AM

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




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS