commit x64 compilation from lulu cause the other branch dont seems to compile properly at home
This commit is contained in:
79
include/engine/script/script_unit.cpp
Normal file
79
include/engine/script/script_unit.cpp
Normal file
@ -0,0 +1,79 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "script/script_unit.h"
|
||||
#include "script/script_object.h"
|
||||
#include "script/script_variant.h"
|
||||
#include "log/log.h"
|
||||
|
||||
using namespace GS::Script;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
bool Unit::SetupFunctionCall(const char *func, const Object *func_object)
|
||||
{
|
||||
if (!vm || !self || !vm->SetupFunctionCall(func, func_object, self))
|
||||
return false;
|
||||
return vm->SetFunctionCallContext(Variant(iface_object, iface_type));
|
||||
}
|
||||
bool Unit::PushUserObjectFunctionCallArgument(void *p, uint type, bool managed)
|
||||
{ return vm->PushArgument(Variant(p, type)); }
|
||||
bool Unit::PushFunctionCallArgument(const Variant &arg)
|
||||
{ return vm->PushArgument(arg); }
|
||||
bool Unit::DoFunctionCall(Variant *return_value)
|
||||
{ return vm->DoFunctionCall(return_value); }
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
bool Unit::Open()
|
||||
{
|
||||
if (!vm)
|
||||
return false;
|
||||
if (self)
|
||||
return true;
|
||||
|
||||
if (script_file.IsEmpty() || script_class.IsEmpty())
|
||||
return true;
|
||||
|
||||
// Instantiate class.
|
||||
if (!vm->CompileFile(script_file) || !vm->SetupFunctionCall(script_class))
|
||||
return false;
|
||||
|
||||
Variant rv;
|
||||
if (!vm->DoFunctionCall(&rv) || (rv.type != Variant::Type_ScriptObject))
|
||||
{
|
||||
vm->Kill(String::Format("Function call to '%s' failed.", script_class.c_str()));
|
||||
return false;
|
||||
}
|
||||
self = rv.object;
|
||||
rv.object = NULL; // Detach object from the variant so that it does not get deleted.
|
||||
|
||||
// Send parameters to the instance.
|
||||
ListForeachPtr(GS::Variant *, v, parm_list)
|
||||
vm->Set(v->id, Variant(*v), self);
|
||||
|
||||
return true;
|
||||
}
|
||||
void Unit::Close()
|
||||
{
|
||||
// Note: Do not delete the parameter list from here.
|
||||
_safe_delete(self);
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
Unit::Unit(IVM *_vm) : vm(_vm)
|
||||
{
|
||||
iface_object = NULL;
|
||||
iface_type = (uint)~0;
|
||||
self = NULL;
|
||||
}
|
||||
Unit::~Unit()
|
||||
{
|
||||
ListDeleteAllPtr(GS::Variant *, parm_list)
|
||||
Close();
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user