1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
// SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
// SPDX-FileCopyrightText: 2008 litl, LLC
#ifndef GI_UNION_H_
#define GI_UNION_H_
#include <config.h>
#include <girepository.h>
#include <glib-object.h>
#include <js/TypeDecls.h>
#include "gi/cwrapper.h"
#include "gi/wrapperutils.h"
#include "gjs/macros.h"
#include "util/log.h"
namespace JS {
class CallArgs;
}
struct JSClass;
struct JSClassOps;
class UnionPrototype;
class UnionInstance;
class UnionBase
: public GIWrapperBase<UnionBase, UnionPrototype, UnionInstance> {
friend class CWrapperPointerOps<UnionBase>;
friend class GIWrapperBase<UnionBase, UnionPrototype, UnionInstance>;
protected:
explicit UnionBase(UnionPrototype* proto = nullptr)
: GIWrapperBase(proto) {}
static constexpr GjsDebugTopic DEBUG_TOPIC = GJS_DEBUG_GBOXED;
static constexpr const char* DEBUG_TAG = "union";
static const JSClassOps class_ops;
static const JSClass klass;
};
class UnionPrototype : public GIWrapperPrototype<UnionBase, UnionPrototype,
UnionInstance, GIUnionInfo> {
friend class GIWrapperPrototype<UnionBase, UnionPrototype, UnionInstance,
GIUnionInfo>;
friend class GIWrapperBase<UnionBase, UnionPrototype, UnionInstance>;
static constexpr InfoType::Tag info_type_tag = InfoType::Union;
explicit UnionPrototype(GIUnionInfo* info, GType gtype);
~UnionPrototype(void);
GJS_JSAPI_RETURN_CONVENTION
bool resolve_impl(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
bool* resolved);
// Overrides GIWrapperPrototype::constructor_nargs().
[[nodiscard]] unsigned constructor_nargs(void) const { return 0; }
public:
GJS_JSAPI_RETURN_CONVENTION
static bool define_class(JSContext* cx, JS::HandleObject in_object,
GIUnionInfo* info);
};
class UnionInstance
: public GIWrapperInstance<UnionBase, UnionPrototype, UnionInstance> {
friend class GIWrapperInstance<UnionBase, UnionPrototype, UnionInstance>;
friend class GIWrapperBase<UnionBase, UnionPrototype, UnionInstance>;
explicit UnionInstance(UnionPrototype* prototype, JS::HandleObject obj);
~UnionInstance(void);
GJS_JSAPI_RETURN_CONVENTION
bool constructor_impl(JSContext* cx, JS::HandleObject obj,
const JS::CallArgs& args);
public:
GJS_JSAPI_RETURN_CONVENTION
static JSObject* new_for_c_union(JSContext* cx, GIUnionInfo* info,
void* gboxed);
/*
* UnionInstance::copy_union:
*
* Allocate a new union pointer using g_boxed_copy(), from a raw union
* pointer.
*/
void copy_union(void* ptr) { m_ptr = g_boxed_copy(gtype(), ptr); }
GJS_JSAPI_RETURN_CONVENTION
static void* copy_ptr(JSContext* cx, GType gtype, void* ptr);
};
#endif // GI_UNION_H_
|