void DisposeOpenCLObject (Persistent<Value> value, void* release) { if (release && value->IsObject()) { Local<Object> object = value->ToObject(); if (object->InternalFieldCount()) { void *ptr = object->GetPointerFromInternalField(0); int32_t (CALL *clRelease) (void* smth); *(void**) &clRelease = release; clRelease(ptr); // Returned value is omitted. Check when debugging. } } value.Dispose(); value.Clear(); }
bool ScriptSystem::RemoveFromComponentMap(dtEntity::ComponentType ct, dtEntity::EntityId eid) { ComponentMap::iterator it = mComponentMap.find(std::make_pair(ct, eid)); if(it == mComponentMap.end()) { return false; } HandleScope scope; Persistent<Object> obj = it->second; assert(!obj.IsEmpty() && obj->IsObject()); // invalidate component wrapper obj->SetInternalField(0, External::New(0)); obj.Dispose(); mComponentMap.erase(it); V8::AdjustAmountOfExternalAllocatedMemory(-(int)sizeof(dtEntity::Component)); return true; }
static Persistent<Object> getPlugin(shared_ptr<PluginContext> script) { Context::Scope context_scope(script->getContext()); HandleScope handleScope; Handle<Object> global = script->getContext()->Global(); if (global->Has(String::New("plugin")) == false) { throw IllegalArgumentException("Expected the script to have exports."); } Handle<Value> pluginValue = global->Get(String::New("plugin")); Persistent<Object> plugin = Persistent<Object>::New(Handle<Object>::Cast(pluginValue)); if (plugin.IsEmpty() || plugin->IsObject() == false) { throw IllegalArgumentException("Expected plugin to be a valid object."); } return plugin; }