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

Function create_getter_invoker

gi/object.cpp:1210–1248  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1208}
1209
1210GJS_JSAPI_RETURN_CONVENTION
1211static JSNative create_getter_invoker(JSContext* cx, GParamSpec* pspec,
1212 const GI::FunctionInfo& getter,
1213 const GI::TypeInfo& type,
1214 JS::MutableHandleValue wrapper_out) {
1215 JS::RootedObject wrapper{cx};
1216
1217 GITransfer transfer = getter.caller_owns();
1218 JSNative js_getter = get_getter_for_type(type, transfer);
1219
1220 Gjs::GErrorResult<> init_result{Ok{}};
1221 if (js_getter) {
1222 wrapper = new_object_with_stashed_pointer<ObjectPropertyPspecCaller>(
1223 cx, pspec);
1224 if (!wrapper)
1225 return nullptr;
1226 auto* caller =
1227 JS::ObjectGetStashedPointer<ObjectPropertyPspecCaller>(cx, wrapper);
1228 init_result = caller->init(getter);
1229 } else {
1230 wrapper = new_object_with_stashed_pointer<ObjectPropertyInfoCaller>(
1231 cx, getter);
1232 if (!wrapper)
1233 return nullptr;
1234 js_getter = &ObjectBase::prop_getter_func;
1235 auto* caller =
1236 JS::ObjectGetStashedPointer<ObjectPropertyInfoCaller>(cx, wrapper);
1237 init_result = caller->init();
1238 }
1239
1240 if (init_result.isErr()) {
1241 gjs_throw(cx, "Impossible to create invoker for %s: %s", getter.name(),
1242 init_result.inspectErr()->message);
1243 return nullptr;
1244 }
1245
1246 wrapper_out.setObject(*wrapper);
1247 return js_getter;
1248}
1249
1250// We cannot use g_base_info_equal because the GITypeInfo of properties is
1251// not marked as a pointer in GIR files, while it is marked as a pointer in the

Callers 1

get_getter_for_propertyFunction · 0.85

Calls 6

get_getter_for_typeFunction · 0.85
gjs_throwFunction · 0.85
caller_ownsMethod · 0.80
inspectErrMethod · 0.80
initMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected