forked from noah-/d2bs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAutoRoot.cpp
More file actions
35 lines (32 loc) · 937 Bytes
/
AutoRoot.cpp
File metadata and controls
35 lines (32 loc) · 937 Bytes
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
#include "AutoRoot.h"
#include "ScriptEngine.h"
AutoRoot::AutoRoot(JSContext* ncx, jsval nvar) : cx(ncx), var(nvar), count(0) {
Take();
}
AutoRoot::AutoRoot(jsval nvar) : cx(ScriptEngine::GetGlobalContext()), var(nvar), count(0) {
Take();
}
AutoRoot::~AutoRoot() {
if (count < 0) {
fprintf(stderr, "AutoRoot failed: Count is still %i, but the root is being destroyed", count);
DebugBreak();
exit(3);
}
// JS_RemoveRoot(cx, &var);
JS_BeginRequest(cx);
JS_RemoveValueRoot(cx, &var);
JS_EndRequest(cx);
}
void AutoRoot::Take() {
count++;
JS_AddNamedValueRoot(cx, &var, "AutoRoot");
// JS_AddNamedRootRT(ScriptEngine::GetRuntime(), &var, "AutoRoot");
}
void AutoRoot::Release() {
count--;
if (count < 0) {
fprintf(stderr, "Improper AutoRoot usage: Count is less than 0");
DebugBreak();
exit(3);
}
}