MCPcopy Create free account
hub / github.com/GNOME/gjs / create_setter_invoker

Function create_setter_invoker

gi/object.cpp:1386–1425  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1384}
1385
1386GJS_JSAPI_RETURN_CONVENTION
1387static JSNative create_setter_invoker(JSContext* cx, GParamSpec* pspec,
1388 const GI::FunctionInfo& setter,
1389 const GI::ArgInfo& value_arg,
1390 const GI::TypeInfo& type,
1391 JS::MutableHandleValue wrapper_out) {
1392 JS::RootedObject wrapper{cx};
1393
1394 GITransfer transfer = value_arg.ownership_transfer();
1395 JSNative js_setter = get_setter_for_type(type, transfer);
1396
1397 Gjs::GErrorResult<> init_result{Ok{}};
1398 if (js_setter) {
1399 wrapper = new_object_with_stashed_pointer<ObjectPropertyPspecCaller>(
1400 cx, pspec);
1401 if (!wrapper)
1402 return nullptr;
1403 auto* caller =
1404 JS::ObjectGetStashedPointer<ObjectPropertyPspecCaller>(cx, wrapper);
1405 init_result = caller->init(setter);
1406 } else {
1407 wrapper = new_object_with_stashed_pointer<ObjectPropertyInfoCaller>(
1408 cx, setter);
1409 if (!wrapper)
1410 return nullptr;
1411 js_setter = &ObjectBase::prop_setter_func;
1412 auto* caller =
1413 JS::ObjectGetStashedPointer<ObjectPropertyInfoCaller>(cx, wrapper);
1414 init_result = caller->init();
1415 }
1416
1417 if (init_result.isErr()) {
1418 gjs_throw(cx, "Impossible to create invoker for %s: %s", setter.name(),
1419 init_result.inspectErr()->message);
1420 return nullptr;
1421 }
1422
1423 wrapper_out.setObject(*wrapper);
1424 return js_setter;
1425}
1426
1427GJS_JSAPI_RETURN_CONVENTION
1428static JSNative get_setter_for_property(

Callers 1

get_setter_for_propertyFunction · 0.85

Calls 6

get_setter_for_typeFunction · 0.85
gjs_throwFunction · 0.85
ownership_transferMethod · 0.80
inspectErrMethod · 0.80
initMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected