forked from facebook/hermes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSingleObject.cpp
More file actions
59 lines (49 loc) · 1.72 KB
/
SingleObject.cpp
File metadata and controls
59 lines (49 loc) · 1.72 KB
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
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include "hermes/VM/SingleObject.h"
#include "hermes/VM/BuildMetadata.h"
namespace hermes {
namespace vm {
void MathBuildMeta(const GCCell *cell, Metadata::Builder &mb) {
mb.addJSObjectOverlapSlots(
JSObject::numOverlapSlots<SingleObject<CellKind::MathKind>>());
ObjectBuildMeta(cell, mb);
}
void JSONBuildMeta(const GCCell *cell, Metadata::Builder &mb) {
mb.addJSObjectOverlapSlots(
JSObject::numOverlapSlots<SingleObject<CellKind::JSONKind>>());
ObjectBuildMeta(cell, mb);
}
#ifdef HERMESVM_SERIALIZE
template <CellKind kind>
SingleObject<kind>::SingleObject(Deserializer &d, const VTable *vt)
: JSObject(d, vt) {}
void MathSerialize(Serializer &s, const GCCell *cell) {
JSObject::serializeObjectImpl(
s, cell, JSObject::numOverlapSlots<SingleObject<CellKind::MathKind>>());
s.endObject(cell);
}
void JSONSerialize(Serializer &s, const GCCell *cell) {
JSObject::serializeObjectImpl(
s, cell, JSObject::numOverlapSlots<SingleObject<CellKind::JSONKind>>());
s.endObject(cell);
}
void JSONDeserialize(Deserializer &d, CellKind kind) {
assert(kind == CellKind::JSONKind && "Expected JSON");
void *mem = d.getRuntime()->alloc(cellSize<JSJSON>());
auto *cell = new (mem) JSJSON(d, &JSJSON::vt.base);
d.endObject(cell);
}
void MathDeserialize(Deserializer &d, CellKind kind) {
assert(kind == CellKind::MathKind && "Expected Math");
void *mem = d.getRuntime()->alloc(cellSize<JSMath>());
auto *cell = new (mem) JSMath(d, &JSMath::vt.base);
d.endObject(cell);
}
#endif
} // namespace vm
} // namespace hermes