Jump to content

  • Log In with Google      Sign In   
  • Create Account


thd.MM

Member Since 06 May 2011
Offline Last Active Oct 04 2013 01:07 PM
-----

Topics I've Started

Crash on linux (gcc 4.3?)

26 August 2013 - 02:20 AM

Hey,

After switching to Angelscript 2.27.1 I get this crash on linux. But it happens only if I compile on my machine with gcc 4.3.

On gcc 4.7 it works fine.

 

The crash happens right after calling a second function, first script whatsoever.

Any idea what this is?

The array is empty and the index is 1 in this case.

KAGdedi: ../../source/as_array.h:158: T& asCArray<T>::operator[](size_t) [with T = asCScriptFunction*]: Assertion `index < length' failed.

Program received signal SIGABRT, Aborted.
0xf7fdb425 in __kernel_vsyscall ()
(gdb) bt
#0  0xf7fdb425 in __kernel_vsyscall ()
#1  0xf7d101df in raise () from /lib/i386-linux-gnu/libc.so.6
#2  0xf7d13825 in abort () from /lib/i386-linux-gnu/libc.so.6
#3  0xf7d09085 in ?? () from /lib/i386-linux-gnu/libc.so.6
#4  0xf7d09137 in __assert_fail () from /lib/i386-linux-gnu/libc.so.6
#5  0xf737929d in asCArray<asCScriptFunction*>::operator[](unsigned int) () from Base/../libJuxta_dedi.so
#6  0xf73ce434 in CallSystemFunction(int, asCContext*, void*) () from Base/../libJuxta_dedi.so
#7  0xf7372b34 in asCContext::ExecuteNext() () from Base/../libJuxta_dedi.so
#8  0xf737044a in asCContext::Execute() () from Base/../libJuxta_dedi.so
#9  0xf70b131e in asScript::ExecuteWithDebug (this=0x8225530, ctx=0x81ec0e8) at ../Scripting/asScript.cpp:385
#10 0xf70b1eeb in asScript::executeFunctionByName (this=0x8225530, name=...) at ../Scripting/asScript.cpp:506
#11 0xf70b60a2 in asScriptManager::runScriptFromFile (this=0x80d0e54, fileName=..., entryFunction=..., fileMatch=false) at ../Scripting/asScriptManager.cpp:766
#12 0xf70ac39d in CScript::RunScriptFromFile (this=0x80d0e50, fileName=..., entryFunction=..., fileMatch=<optimized out>) at ../Scripting/Script.cpp:89
#13 0xf6f2b943 in CGame::Run (this=0x8175bd8, argc=1, argv=0xffffd214) at ../Game/GameDLL.cpp:475
#14 0xf6f1620f in GameDLLInit (ie=..., argc=1, argv=0xffffd214) at ../Game/GameDLL.cpp:94
#15 0x0804c078 in CApplication::LoadGameDLL (this=0x80cc088, filename=0x80cc2f4 "Base/../libJuxta_dedi.so", argc=1, argv=0xffffd214) at ../App/main.cpp:346
#16 0x0804e8c5 in CApplication::Run (this=0x80cc088, argc=1, argv=0xffffd214) at ../App/main.cpp:228
#17 0x0804c3ed in main (argc=1, argv=0xffffd214) at ../App/main.cpp:623
(gdb) 

Angelscript to C++ translator

20 August 2013 - 02:56 AM

I'm sporting the idea of having a Angelscript to C++ automatic translator. I know it's not an easy task and not everything can be translated, however I have an idea how to do it. Is anyone interested working on this with me as a paid job?


Crash on exit (binding wrong?)

19 August 2013 - 02:53 AM

Hey, I'm experiencing a crash in free() on exit. I'm lost, so maybe you can tell me if I did something wrong in the bindings?

 

struct Tile
{
    b2Fixture* edgeN, *edgeS, *edgeW, *edgeE;
    u16 blobid1, blobid2;
    u16 backblobid1, backblobid2;
    TileType type;
	u16 flags;
    u8 support;
    u8 dirt;
    u8 light;
    u8 noise;
    u8 damage;

	Tile();
	Tile( const TileType t );
	Tile( Tile& t );

	Tile& operator=(const Tile& t) 
	{ 
		type = t.type;
		support = t.support;
		dirt = t.dirt;
		light = t.light;
		flags = t.flags;
		noise = t.noise;
		damage = t.damage;
		return *this;
	}	

	bool operator==(const Tile& rhs)
	{
		return (type == rhs.type);	  // legacy
	}	
	bool operator==(const Tile& rhs) const
	{
		return (type == rhs.type);	  // legacy
	}	

	enum TileFlags {
		SPARE_0 = 0x01,
		BACKGROUND = 0x02,
		SOLID = 0x04,
		LADDER = 0x08,
		LIGHT_PASSES = 0x10,
		WATER_PASSES = 0x20,
		FLAMMABLE = 0x40,
		PLATFORM = 0x80,
		LIGHT_SOURCE = 0x100,
		MIRROR = 0x200,
		FLIP = 0x400,
		ROTATE = 0x800,
		SPARE_1 = 0x1000,
		SPARE_2 = 0x2000,
		SPARE_3 = 0x4000,
		SPARE_4 = 0x8000
	};
};

The binding:

    r = engine->RegisterObjectType("Tile", sizeof(Tile), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CA); assert(r >= 0);
    // Set Vec2f behaviour.
    // Initialisation and deinitialisation
    r = engine->RegisterObjectBehaviour("Tile", asBEHAVE_CONSTRUCT, "void f()", asFUNCTIONPR(constructorTile,
                                        (void*), void), asCALL_CDECL_OBJLAST); assert(r >= 0);
    r = engine->RegisterObjectBehaviour("Tile", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(deconstructorTile),
                                        asCALL_CDECL_OBJLAST); assert(r >= 0);

	r = engine->RegisterObjectProperty("Tile", "TileType type", asOFFSET(Tile, type)); assert(r >= 0);
	r = engine->RegisterObjectProperty("Tile", "u8 support", asOFFSET(Tile, support)); assert(r >= 0);
	r = engine->RegisterObjectProperty("Tile", "u8 dirt", asOFFSET(Tile, dirt)); assert(r >= 0);
	r = engine->RegisterObjectProperty("Tile", "u8 light", asOFFSET(Tile, light)); assert(r >= 0);
	r = engine->RegisterObjectProperty("Tile", "u16 flags", asOFFSET(Tile, flags)); assert(r >= 0);
	r = engine->RegisterObjectProperty("Tile", "u8 damage", asOFFSET(Tile, damage)); assert(r >= 0);
	r = engine->RegisterObjectProperty("Tile", "u8 noise", asOFFSET(Tile, noise)); assert(r >= 0);
	r = engine->RegisterObjectProperty("Tile", "u16 blobid1", asOFFSET(Tile, blobid1)); assert(r >= 0);
	r = engine->RegisterObjectProperty("Tile", "u16 blobid2", asOFFSET(Tile, blobid2)); assert(r >= 0);
	r = engine->RegisterObjectProperty("Tile", "u16 backblobid1", asOFFSET(Tile, backblobid1)); assert(r >= 0);
	r = engine->RegisterObjectProperty("Tile", "u16 backblobid2", asOFFSET(Tile, backblobid2)); assert(r >= 0);
	r = engine->RegisterObjectMethod("Tile", "Tile& opAssign(const Tile &in)",
		asMETHODPR(Tile, operator=, (const Tile&), Tile&),
		asCALL_THISCALL); assert(r >= 0);

	r = engine->SetDefaultNamespace("Tile"); assert( r >= 0 );
	r = engine->RegisterEnum("TileFlags"); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "SPARE_0", Tile::SPARE_0); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "SOLID", Tile::SOLID); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "BACKGROUND", Tile::BACKGROUND); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "LADDER", Tile::LADDER); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "LIGHT_PASSES", Tile::LIGHT_PASSES); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "WATER_PASSES", Tile::WATER_PASSES); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "FLAMMABLE", Tile::FLAMMABLE); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "PLATFORM", Tile::PLATFORM); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "LIGHT_SOURCE", Tile::LIGHT_SOURCE); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "MIRROR", Tile::MIRROR); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "FLIP", Tile::FLIP); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "ROTATE", Tile::ROTATE); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "SPARE_1", Tile::SPARE_1); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "SPARE_2", Tile::SPARE_2); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "SPARE_3", Tile::SPARE_3); assert( r >= 0 );
	r = engine->RegisterEnumValue("TileFlags", "SPARE_4", Tile::SPARE_4); assert( r >= 0 );
	r = engine->SetDefaultNamespace(""); assert( r >= 0 );

 

And some functions that use it:

    r = engine->RegisterObjectMethod("CMap", "void server_SetTile(Vec2f pos, const Tile &in tile)",
                                     asMETHODPR( CMap, server_SetTile, (Vec2f, const Tile&), void),
                                     asCALL_THISCALL); assert(r >= 0);

    r = engine->RegisterObjectMethod("CMap", "Tile getTile( Vec2f pos ) const",
                                     asMETHODPR( CMap, getTile, (Vec2f) const, Tile),
                                     asCALL_THISCALL); assert(r >= 0);
    r = engine->RegisterObjectMethod("CMap", "Tile getTileFromTileSpace( Vec2f pos ) const",
                                     asMETHODPR( CMap, getTile_Vec2f, (Vec2f) const, Tile),
                                     asCALL_THISCALL); assert(r >= 0);
    r = engine->RegisterObjectMethod("CMap", "Tile getTile( u32 offset ) const",
                                     asMETHODPR( CMap, getTile, (u32) const, Tile),
                                     asCALL_THISCALL); assert(r >= 0);

Recompiling shared classes

04 June 2013 - 02:58 AM

Hey,

I need to recompile a script during runtime which has a shared class or shared function. Angelscript doesn't discard those in DiscardModule(). How do I get rid of them at runtime so I can recompile?


JIT compiler crashes

23 March 2013 - 07:24 PM

I'm having trouble running the JIT compiler -> https://github.com/BlindMindStudios/AngelScript-JIT-Compiler

 

I tried running it with the angelscript version that was last supported by the JIT compiler. I set it up as in the provided example and I finalize pages after script compiles.

 

It gives either a buffer overrun or heap corruption error on the very first script it does. Showing the code is kind of pointless cause its long and convoluted. If anyone is interested in helping me with this I can provide the source code. But I wonder if I am maybe doing something wrong.

 

The crashes happen in random location in the jit files:

like this http://grab.by/kYPw

 

I tried running the JIT with some compatibility stuff like this:

 jit = new asCJITCompiler(JIT_NO_SCRIPT_CALLS | JIT_NO_SUSPEND | JIT_NO_SWITCHES); 

 

but it also crashes in a different place:

http://grab.by/kYPo


PARTNERS