Jump to content

  • Log In with Google      Sign In   
  • Create Account

- - - - -

scriptbuilder and includes no matching signatures


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
3 replies to this topic

#1 sylexer   Members   -  Reputation: 112

Like
0Likes
Like

Posted 17 May 2012 - 07:06 AM

Hi,

I'm trying to implement the angelscript engine but i ran into a problem when i try to include other files in my angelscript source files.
I'm building the scripts with the scriptbuilder addon.
When i try to build the module i get the following error.

(3, 1) : INFO : Compiling void main()
(7, 5) : ERR : No matching signatures to 'testinclude()'

I have implemented my own include callback and verified that all the scripts get loaded and the callback is triggered.

//include handler, this function is called once for loading test.asc
int includeScript(const char *include, const char *from, CScriptBuilder *builder, void *userParam)
{
	const char *contents = MBEngine::ResourceManager::loadTextFileConst(include);
	if ( NULL != contents )
	{
		int ret = builder->AddSectionFromMemory(contents);

		assert(ret >= 0);
		return 0;
	}
	return -1;
}


	scriptEngine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
	int ret;
	ret = scriptEngine->SetMessageCallback(asFUNCTION(MessageCallback), 0, asCALL_CDECL);
	assert( ret >= 0 );

	RegisterStdString(scriptEngine);
	RegisterScriptArray(scriptEngine, true);
	RegisterScriptMath(scriptEngine);
	RegisterScriptDictionary(scriptEngine);
	ret = scriptEngine->RegisterGlobalFunction("void print(const string &in)", asFUNCTION(print), asCALL_CDECL);
	assert( ret >= 0 );
  
   CScriptBuilder scriptBuilder;
  
	//set the include loader
	scriptBuilder.SetIncludeCallback( includeScript, NULL);
  
	ret = scriptBuilder.StartNewModule(scriptEngine, "Main");
	assert( ret >= 0 );
  
	//load main script
	const char *mainScript = ResourceManager::loadTextFileConst("main.asc");
	ret = scriptBuilder.AddSectionFromMemory( mainScript );
	assert( ret >= 0 );
  
	//compile the script this where the compiler error is triggered
	ret = scriptBuilder.BuildModule();
	assert( ret >= 0 );

my 2 angelscript test files
main.asc

#include "test.asc"

void main()
{
	print("I'm now in main()\n");

	testinclude();
}

test.asc


void testinclude()
{
print("included function()\n");
}

I used the sample "include" as a reference
Who can help me, what i'm i missing here.

Sponsor:

#2 sylexer   Members   -  Reputation: 112

Like
0Likes
Like

Posted 17 May 2012 - 07:15 AM

just when i posted the question is see my problem.


int CScriptBuilder::AddSectionFromMemory(const char *scriptCode, const char *sectionName)

AddSectionFromMemory takes 2 arguments.
I forgot the 2nd one to pass the included script name.
So the first one gets added and the second one gets ignored because of the same (null/empty) section name.

Thanks.

#3 Andreas Jonsson   Moderators   -  Reputation: 3444

Like
0Likes
Like

Posted 17 May 2012 - 10:45 AM

You're right. As both the main script and the included script was given the same name, i.e. "", the CScriptBuilder thought the included script was already there and skipped it.

I think I'll change the default behaviour when not giving an explicit name for the section so that instead of assuming "" it will build a unique name (probably a sequence). Hopefully it will avoid the kind of problem you experienced.

Regards,
Andreas
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 sylexer   Members   -  Reputation: 112

Like
0Likes
Like

Posted 18 May 2012 - 09:34 AM

Thanks Andreas,

That would be a good choice/change.
Or I just needed to check the API more throughly.

Greets
Michael




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