MCPcopy Create free account
hub / github.com/LibreSprite/LibreSprite / returnValue

Function returnValue

src/script/v8/engine.cpp:332–387  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

330};
331
332static v8::Local<v8::Value> returnValue(v8::Isolate* isolate, const Value& value) {
333 switch (value.type) {
334 case Value::Type::UNDEFINED:
335 return v8::Local<v8::Value>();
336
337 case Value::Type::INT:
338 return v8::Int32::New(isolate, value);
339
340 case Value::Type::DOUBLE:
341 return v8::Number::New(isolate, value);
342
343 case Value::Type::STRING:
344 return ToLocal(v8::String::NewFromUtf8(isolate, value));
345
346 case Value::Type::OBJECT:
347 if (auto object = static_cast<ScriptObject*>(value)) {
348 return static_cast<V8ScriptObject*>(object->getInternalScriptObject())->makeLocal();
349 }
350 return {};
351
352 case Value::Type::BUFFER: {
353 auto& buffer = value.buffer();
354 if (buffer.canSteal()) {
355#if V8_MAJOR_VERSION > 7
356 auto store = v8::ArrayBuffer::NewBackingStore(
357 buffer.steal(),
358 buffer.size(),
359 +[](void* data, size_t length, void* deleter_data){
360 delete[] static_cast<uint8_t*>(data);
361 },
362 nullptr
363 );
364 auto arrayBuffer = v8::ArrayBuffer::New(isolate, std::move(store));
365 return v8::Uint8Array::New(arrayBuffer, 0, buffer.size());
366#else
367 auto arrayBuffer = v8::ArrayBuffer::New(isolate, buffer.steal(), buffer.size());
368#endif
369 return v8::Uint8Array::New(arrayBuffer, 0, buffer.size());
370
371 } else {
372 auto arrayBuffer = v8::ArrayBuffer::New(isolate, buffer.size());
373#if V8_MAJOR_VERSION > 7
374 std::memcpy(arrayBuffer->GetBackingStore()->Data(), buffer.data(), buffer.size());
375#else
376 std::memcpy(arrayBuffer->GetContents().Data(), buffer.data(), buffer.size());
377#endif
378 return v8::Uint8Array::New(arrayBuffer, 0, buffer.size());
379 }
380 }
381
382 default:
383 printf("Unknown return type: %d\n", int(value.type));
384 break;
385 }
386 return {};
387}
388
389static InternalScriptObject::Regular<V8ScriptObject> v8SO("V8ScriptObject");

Callers 2

raiseEventMethod · 0.70
callFuncMethod · 0.70

Calls 8

ToLocalFunction · 0.85
bufferMethod · 0.80
canStealMethod · 0.80
stealMethod · 0.80
makeLocalMethod · 0.45
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected