Jump to content

  • Log In with Google      Sign In   
  • Create Account

FREE SOFTWARE GIVEAWAY

We have 4 x Pro Licences (valued at $59 each) for 2d modular animation software Spriter to give away in this Thursday's GDNet Direct email newsletter.


Read more in this forum topic or make sure you're signed up (from the right-hand sidebar on the homepage) and read Thursday's newsletter to get in the running!


dkrusu

Member Since 09 Dec 2012
Offline Last Active Yesterday, 12:05 PM

Topics I've Started

Bug in type-casting

13 December 2014 - 12:03 AM

I've encountered a bug when using implicit ref casting. All of my widget objects inherit from a Base class that then has a implicit cast for each widget type. The findWidget() method returns a reference to a Base object and then is casted to the Label object. If I try to assign the reference to a class property it can't resolve the method call for setText(). Creating a local variable works just fine.

class CobaltTheme
{
    private const Widgets::Label @mClock;

    CobaltTheme()
    {
        @mClock = Window.findWidget("Home.Clock");    

        onTimerCallback @timerCallback = onTimerCallback(this._clockTimer);
        createTimer(1, timerCallback);
    }

    bool _clockTimer()
    {
        //  ERR  : No matching signatures to 'Label::setText(string) const'
        mClock.setText(timeToString("%I:%M%P"));

        // Works fine:
        Widgets::Label @Clock = Window.findWidget("Home.Clock");
        Clock.setText(timeToString("%I:%M%P"));
        return true;
    }
}
// The Base to Label reference cast
r = engine->RegisterObjectBehaviour("Base", asBEHAVE_IMPLICIT_REF_CAST, "Label@ f()", asFUNCTION(Base::castToLabel), asCALL_CDECL_OBJLAST); assert( r >= 0 );
    
r = engine->RegisterObjectMethod("Window", "Widgets::Base@ findWidget(const string &in)", asMETHOD(Window, findWidget), asCALL_THISCALL); assert( r >= 0 );

Thanks


Initializing array in function call

16 January 2014 - 12:01 PM

Any chance of allowing a initialization list to be used in a function call?

void test(array<string> &in); // Function definition

test({"string1", "string2"});

Or something like:

test(array<string>{"string1", "string2"});

- dave


GetDefaultNamespace()

05 January 2013 - 10:50 PM

Could you add a method to get the current default namespace?

 

const char *asCScriptEngine::GetDefaultNamespace() const
{
    return defaultNamespace->name.AddressOf();
}

 

Thanks,

Dave Krusu


Segfault

01 January 2013 - 11:26 PM

I'm getting a segfault when registering a object with a method that returns a handle to it's self. The following code reproduces the crash:

 

#include <angelscript.h>
#include <stdio.h>

class IManaged {
    public:
        virtual void addRef() = 0;
        virtual void Release() = 0;
};

class Test : public IManaged {
    public:
        void addRef() {

        }

        void Release() {

        }

        Test &Foo() {
            return *this;
        }
};

Test *pTest;

int main() {
    asIScriptEngine *pEngine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
    asIScriptModule *Mod     = pEngine->GetModule(0, asGM_ALWAYS_CREATE);

    pTest = new Test();

    pEngine->RegisterObjectType("Test", 0, asOBJ_REF);
    pEngine->RegisterObjectBehaviour("Test", asBEHAVE_ADDREF, "void f()", asMETHOD(Test, addRef), asCALL_THISCALL);
    pEngine->RegisterObjectBehaviour("Test", asBEHAVE_RELEASE, "void f()", asMETHOD(Test, Release), asCALL_THISCALL);
    pEngine->RegisterObjectMethod("Test", "Test &Foo()", asMETHOD(Test, Foo), asCALL_THISCALL);
    pEngine->RegisterGlobalProperty("Test @pTest", pTest);

    const char *Script = "void main() { pTest.Foo(); }";

    Mod->AddScriptSection("script", Script);
    Mod->Build();

    asIScriptContext *Ctx = pEngine->CreateContext();
    asIScriptFunction *Func = Mod->GetFunctionByDecl("void main()");

    Ctx->Prepare(Func);
    Ctx->Execute();

    return 0;
}

 

here is the backtrace:

 

#0  0x0000000000412682 in asCScriptEngine::CallObjectMethod (this=0x737010,
    obj=0x4c5e30 <vtable for Test+16>, i=0x7400f0, s=0x740150)
    at ../../source/as_scriptengine.cpp:3382
#1  0x0000000000412574 in asCScriptEngine::CallObjectMethod (this=0x737010,
    obj=0x4c5e30 <vtable for Test+16>, func=31)
    at ../../source/as_scriptengine.cpp:3354
#2  0x0000000000490b73 in asCContext::ExecuteNext (this=0x740ae0)
    at ../../source/as_context.cpp:3739
#3  0x00000000004896af in asCContext::Execute (this=0x740ae0)
    at ../../source/as_context.cpp:1155
#4  0x00000000004026c7 in main () at test.cpp:48

 

 

This happends on both 32 and 64-bit builds with GCC 4.7.2 (Linux)

 

Thanks,

Dave

 


No type id for enum values?

26 December 2012 - 10:56 AM

I'm writing a function that takes a var arg type and then identifies the type to print either the value or information about the object. Everything seems to have an Id except enum values, however they always seem to get an id of 14. Can enum values be given a typeId like the rest? Or am I missing something that allows me to identify enum values?

 

Thanks,

Dave Krusu


PARTNERS