/** @file V8Util.cpp @brief @author James @version 1.0 @date 2017_11_29 */ #include "V8Util.h" namespace laya { void V8Util::SET_PROTOTYPE_METHOD(v8::Local recv, const char* name, v8::FunctionCallback callback) { v8::Isolate* isolate = v8::Isolate::GetCurrent(); v8::HandleScope handle_scope(isolate); v8::Local s = v8::Signature::New(isolate, recv); v8::Local t = v8::FunctionTemplate::New(isolate, callback, v8::Local(), s); v8::Local fn_name = v8::String::NewFromUtf8(isolate, name, v8::NewStringType::kInternalized).ToLocalChecked(); t->SetClassName(fn_name); recv->PrototypeTemplate()->Set(fn_name, t); } bool V8Util::extractJSAB(v8::Local jsval, char*& data, int& len) { v8::Local ab; if (jsval->IsArrayBufferView()) { v8::Local abv = v8::Local::Cast(jsval); len = abv->ByteLength(); ab = abv->Buffer(); v8::ArrayBuffer::Contents contents = ab->GetContents(); data = (char*)contents.Data() + abv->ByteOffset(); } else if (jsval->IsArrayBuffer()) { ab = v8::Local::Cast(jsval); v8::ArrayBuffer::Contents contents = ab->GetContents(); len = contents.ByteLength(); data = (char*)contents.Data(); } else { data = NULL; len = 0; return false; } return true; } } //------------------------------------------------------------------------------ //-----------------------------END FILE--------------------------------