Paste will expire never.
- class CBytecodeStream : public asIBinaryStream
- {
- public:
- CBytecodeStream() {wpointer = 0;rpointer = 0;}
- void Write(const void *ptr, asUINT size)
- {
- if( size == 0 )
- return;
- buffer.resize(buffer.size() + size);
- memcpy(&buffer[wpointer], ptr, size);
- wpointer += size;
- }
- void Read(void *ptr, asUINT size)
- {
- memcpy(ptr, &buffer[rpointer], size);
- rpointer += size;
- }
- int rpointer;
- int wpointer;
- std::vector<asBYTE> buffer;
- } script_stream;
- int des_count = 0, const_count = 0;
- struct TestClass
- {
- TestClass(){
- std::cout << "const_count: " << ++const_count << "\n";
- }
- TestClass( const TestClass &from ){
- std::cout << "const_copy_count: " << ++const_count << "\n";
- }
- ~TestClass(){
- std::cout << "des_count: " << ++des_count << "\n";
- }
- };
- static void ConstructTestClass(TestClass *thisPointer)
- {
- new(thisPointer) TestClass();
- }
- static void CopyConstructTestClass(const TestClass &other, TestClass *thisPointer)
- {
- new(thisPointer) TestClass(other);
- }
- static void DestructTestClass(TestClass *thisPointer)
- {
- thisPointer->~TestClass();
- }
- void FuckEEEEaaaa()
- {
- asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
- engine->RegisterObjectType("TestLink", sizeof(TestClass), asOBJ_VALUE | asOBJ_APP_CLASS_CDK);
- engine->RegisterObjectBehaviour("TestLink", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructTestClass), asCALL_CDECL_OBJLAST);
- engine->RegisterObjectBehaviour("TestLink", asBEHAVE_CONSTRUCT, "void f(const TestLink &in)", asFUNCTION(CopyConstructTestClass), asCALL_CDECL_OBJLAST);
- engine->RegisterObjectBehaviour("TestLink", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(DestructTestClass), asCALL_CDECL_OBJLAST);
- asIScriptModule *mod = engine->GetModule("mod", asGM_ALWAYS_CREATE);
- mod->AddScriptSection("test",
- "class Object3 \n"
- "{ \n"
- " Object3( TestLink str ) \n"
- " { \n"
- " Object3 @null_object = null; \n"
- " null_object.Do(); \n"
- " } \n"
- " void Do() {} \n"
- "} \n"
- "void Main() \n"
- "{ \n"
- " Object3 @oo = Object3( TestLink() ); \n"
- "} \n" );
- mod->Build();
- script_stream.wpointer = 0;
- mod->SaveByteCode( &script_stream );
- script_stream.rpointer = 0;
- mod->LoadByteCode( &script_stream );
- asIScriptContext *ctx = engine->CreateContext();
- ctx->Prepare( mod->GetFunctionByDecl( "void Main()" ) );
- ctx->Execute();
- ctx->Release();
- }