Skip to content

Commit fc79d7d

Browse files
committed
part 36
1 parent b242200 commit fc79d7d

File tree

14 files changed

+126
-289
lines changed

14 files changed

+126
-289
lines changed

test-app/runtime/src/main/cpp/napi/common/native_api_util.h

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33

44
#include "js_native_api.h"
55
#include <dlfcn.h>
6-
#include "Constants.h"
76
#include <sstream>
87

8+
#define NAPI_EXPORT __attribute__((visibility("default")))
9+
910
#ifndef NAPI_PREAMBLE
1011
#define NAPI_PREAMBLE napi_status status;
1112
#endif
@@ -119,12 +120,12 @@ namespace napi_util {
119120

120121
inline napi_value get__proto__(napi_env env, napi_value object) {
121122
napi_value proto;
122-
napi_get_property(env, object, Constants::Get(env)->protoValue(env), &proto);
123+
napi_get_named_property(env, object, "__proto__", &proto);
123124
return proto;
124125
}
125126

126127
inline void set__proto__(napi_env env, napi_value object, napi_value __proto__) {
127-
napi_set_property(env, object, Constants::Get(env)->protoValue(env), __proto__);
128+
napi_set_named_property(env, object, "__proto__", __proto__);
128129
}
129130

130131
inline napi_value getPrototypeOf(napi_env env, napi_value object) {
@@ -135,12 +136,12 @@ namespace napi_util {
135136

136137
inline napi_value get_prototype(napi_env env, napi_value object) {
137138
napi_value prototype;
138-
napi_get_property(env, object, Constants::Get(env)->prototypeValue(env), &prototype);
139+
napi_get_named_property(env, object, "prototype", &prototype);
139140
return prototype;
140141
}
141142

142143
inline void set_prototype(napi_env env, napi_value object, napi_value prototype) {
143-
napi_set_property(env, object, Constants::Get(env)->prototypeValue(env), prototype);
144+
napi_set_named_property(env, object, "prototype", prototype);
144145
}
145146

146147
inline char *get_string_value(napi_env env, napi_value str, size_t size = 0) {
@@ -153,23 +154,6 @@ namespace napi_util {
153154
return buffer;
154155
}
155156

156-
inline napi_status define_property_named(napi_env env, napi_value object, napi_value propertyName,
157-
napi_value value = nullptr, napi_callback getter = nullptr,
158-
napi_callback setter = nullptr, void *data = nullptr) {
159-
napi_property_descriptor desc = {
160-
nullptr, // utf8name
161-
propertyName, // name
162-
nullptr, // method
163-
getter, // getter
164-
setter, // setter
165-
value, // value
166-
napi_default, // attributes
167-
data // data
168-
};
169-
170-
return napi_define_properties(env, object, 1, &desc);
171-
}
172-
173157
inline napi_status define_property(napi_env env, napi_value object, const char *propertyName,
174158
napi_value value = nullptr, napi_callback getter = nullptr,
175159
napi_callback setter = nullptr, void *data = nullptr) {
@@ -233,14 +217,14 @@ namespace napi_util {
233217
napi_value numberCtor;
234218
napi_value global;
235219
napi_get_global(env, &global);
236-
napi_get_property(env, global, Constants::Get(env)->numberValue(env), &numberCtor);
220+
napi_get_named_property(env, global, "Number", &numberCtor);
237221
napi_instanceof(env, value, numberCtor, &result);
238222
return result;
239223
}
240224

241225
inline napi_value valueOf(napi_env env, napi_value value) {
242226
napi_value valueOf, result;
243-
napi_get_property(env, value, Constants::Get(env)->valueOfValue(env), &valueOf);
227+
napi_get_named_property(env, value, "valueOf", &valueOf);
244228
napi_call_function(env, value, valueOf, 0, nullptr, &result);
245229
return result;
246230
}
@@ -250,7 +234,7 @@ namespace napi_util {
250234
napi_value stringCtor;
251235
napi_value global;
252236
napi_get_global(env, &global);
253-
napi_get_property(env, global, Constants::Get(env)->stringValue(env), &stringCtor);
237+
napi_get_named_property(env, global, "String", &stringCtor);
254238
napi_instanceof(env, value, stringCtor, &result);
255239
return result;
256240
}
@@ -260,7 +244,7 @@ namespace napi_util {
260244
napi_value booleanCtor;
261245
napi_value global;
262246
napi_get_global(env, &global);
263-
napi_get_property(env, global, Constants::Get(env)->booleanValue(env), &booleanCtor);
247+
napi_get_named_property(env, global, "Boolean", &booleanCtor);
264248
napi_instanceof(env, value, booleanCtor, &result);
265249
return result;
266250
}
@@ -337,11 +321,11 @@ namespace napi_util {
337321
#else
338322
napi_value global, number, is_int, result;
339323
napi_get_global(env, &global);
340-
napi_get_property(env, global, Constants::Get(env)->numberValue(env), &number);
341-
napi_get_property(env, number, Constants::Get(env)->isIntegerValue(env), &is_int);
324+
napi_get_named_property(env, global, "Number", &number);
325+
napi_get_named_property(env, number, "isInteger", &is_int);
342326
napi_call_function(env, number, is_int, 1, &value, &result);
343327

344-
return !napi_util::get_bool(env, result);
328+
return napi_util::get_bool(env, result) == false;
345329
#endif
346330
}
347331

@@ -449,10 +433,10 @@ namespace napi_util {
449433
napi_value argv[2];
450434

451435
napi_get_global(env, &global);
452-
napi_get_property(env, global, Constants::Get(env)->objectValue(env), &global_object);
453-
napi_get_property(env, global_object, Constants::Get(env)->setPrototypeOfValue(env), &set_proto);
454-
napi_get_property(env, ctor, Constants::Get(env)->prototypeValue(env), &ctor_proto_prop);
455-
napi_get_property(env, super_ctor, Constants::Get(env)->prototypeValue(env), &super_ctor_proto_prop);
436+
napi_get_named_property(env, global, OBJECT, &global_object);
437+
napi_get_named_property(env, global_object, SET_PROTOTYPE_OF, &set_proto);
438+
napi_get_named_property(env, ctor, PROTOTYPE, &ctor_proto_prop);
439+
napi_get_named_property(env, super_ctor, PROTOTYPE, &super_ctor_proto_prop);
456440

457441
bool exception;
458442

test-app/runtime/src/main/cpp/napi/quickjs/jsr.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,8 @@ napi_status js_execute_script(napi_env env,
2727
napi_status js_execute_pending_jobs(napi_env env)
2828
{
2929
return qjs_execute_pending_jobs(env);
30+
}
31+
32+
napi_status js_adjust_external_memory(napi_env env, int64_t changeInBytes, int64_t* externalMemory) {
33+
return napi_ok;
3034
}

test-app/runtime/src/main/cpp/napi/quickjs/jsr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ napi_status js_execute_script(napi_env env,
1919
napi_status js_execute_pending_jobs(napi_env env);
2020

2121
napi_status js_get_engine_ptr(napi_env env, int64_t *engine_ptr);
22+
napi_status js_adjust_external_memory(napi_env env, int64_t changeInBytes, int64_t* externalMemory);
2223

2324
#define JSEnterScope
2425
#define JSEnter

test-app/runtime/src/main/cpp/runtime/Runtime.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,6 @@ void Runtime::Init(JNIEnv *_env, jstring filesPath, jstring nativeLibsDir,
174174
napi_handle_scope handleScope;
175175
napi_open_handle_scope(env, &handleScope);
176176

177-
Constants::Init(env);
178-
179177
env_to_runtime_cache.emplace(env, this);
180178

181179
napi_value global;
@@ -335,7 +333,6 @@ ObjectManager *Runtime::GetObjectManager() const {
335333
}
336334

337335
Runtime::~Runtime() {
338-
Constants::DeInit(this->env);
339336
delete this->m_objectManager;
340337
delete this->m_loopTimer;
341338

@@ -389,7 +386,7 @@ void Runtime::AdjustAmountOfExternalAllocatedMemory() {
389386
int64_t externalMemory = 0;
390387

391388
if (changeInBytes != 0) {
392-
// js_adjust_external_memory(env, changeInBytes, &externalMemory);
389+
js_adjust_external_memory(env, changeInBytes, &externalMemory);
393390
}
394391

395392
DEBUG_WRITE("usedMemory=%" PRId64 " changeInBytes=%" PRId64 " externalMemory=%" PRId64, usedMemory, changeInBytes, externalMemory);
@@ -398,25 +395,23 @@ void Runtime::AdjustAmountOfExternalAllocatedMemory() {
398395
}
399396

400397
bool Runtime::TryCallGC() {
398+
napi_value global;
399+
napi_get_global(env, &global);
401400
if (!m_gcFunc) {
402401
napi_value gc;
403-
napi_value global;
404-
napi_get_global(env, &global);
405402
napi_get_named_property(env, global, "gc", &gc);
406-
m_gcFunc = napi_util::make_ref(env, gc);
403+
if (napi_util::is_null_or_undefined(env, gc)) return true;
404+
napi_create_reference(env, gc, 1, &m_gcFunc);
407405
}
408406
napi_value result;
409-
napi_call_function(env, nullptr, napi_util::get_ref_value(env, m_gcFunc), 0, nullptr, &result);
410-
napi_value ex;
411-
napi_get_and_clear_last_exception(env, &ex);
407+
napi_call_function(env, global, napi_util::get_ref_value(env, m_gcFunc), 0, nullptr, &result);
412408
return true;
413409
}
414410

415411
void Runtime::RunModule(JNIEnv *_jEnv, jobject obj, jstring scriptFile) {
416412
JEnv jEnv(_jEnv);
417413
string filePath = ArgConverter::jstringToString(scriptFile);
418414
JSEnter
419-
420415
m_module.Load(env, filePath);
421416
JSLeave
422417
}
Lines changed: 8 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -1,140 +1,11 @@
1-
#include "Constants.h"
2-
3-
#define PROP_KEY_EXTEND "extend"
4-
#define PROP_KEY_NULLOBJECT "null"
5-
#define PROP_KEY_NULL_NODE_NAME "nullNode"
6-
#define PROP_KEY_VALUEOF "valueOf"
7-
#define PROP_KEY_CLASS "class"
8-
#define PRIVATE_TYPE_NAME "#typename"
9-
#define CLASS_IMPLEMENTATION_OBJECT "t::ClassImplementationObject"
10-
#define PROP_KEY_SUPER "super"
11-
#define PROP_KEY_SUPERVALUE "supervalue"
12-
#define PRIVATE_JSINFO "#js_info"
13-
#define PRIVATE_CALLSUPER "#supercall"
14-
#define PRIVATE_IS_NAPI "#is_napi"
15-
#define PROP_KEY_TOSTRING "toString"
16-
#define PROP_KEY_IS_PROTOTYPE_IMPLEMENTATION_OBJECT "__isPrototypeImplementationObject"
17-
#define PROP_KEY_PROTOTYPE "prototype"
18-
#define PROP_KEY_CONSTRUCTOR "constructor"
19-
20-
#define DEFINE_PROP(env, propStr, fieldName) \
21-
do { \
22-
napi_value localVal = nullptr; \
23-
napi_create_string_utf8(env, propStr, NAPI_AUTO_LENGTH, &localVal); \
24-
napi_create_reference(env, localVal, 1, &fieldName); \
25-
} while(0)
26-
27-
#define PROP_GETTER(propName) \
28-
napi_value Constants::propName##Value(napi_env env) { \
29-
napi_value val = nullptr; \
30-
napi_get_reference_value(env, propName##ValueRef, &val); \
31-
return val; \
32-
}
33-
34-
std::unordered_map<napi_env, Constants*> Constants::s_constantsMap;
35-
std::string Constants::APP_ROOT_FOLDER_PATH;
36-
std::string Constants::V8_STARTUP_FLAGS;
1+
/*
2+
* Constants.cpp
3+
*
4+
* Created on: Nov 6, 2015
5+
* Author: gatanasov
6+
*/
377

38-
Constants::Constants()
39-
: extendValueRef(nullptr),
40-
nullObjectValueRef(nullptr),
41-
nullNodeNameValueRef(nullptr),
42-
valueOfValueRef(nullptr),
43-
clsValueRef(nullptr),
44-
privateTypeNameValueRef(nullptr),
45-
classImplementationObjectValueRef(nullptr),
46-
superValueRef(nullptr),
47-
superValueValueRef(nullptr),
48-
privateJsInfoValueRef(nullptr),
49-
privateCallSuperValueRef(nullptr),
50-
privateIsNapiValueRef(nullptr),
51-
toStringValueRef(nullptr),
52-
isPrototypeImplementationObjectValueRef(nullptr),
53-
prototypeValueRef(nullptr),
54-
constructorValueRef(nullptr),
55-
nameValueRef(nullptr),
56-
objectValueRef(nullptr),
57-
numberValueRef(nullptr),
58-
isIntegerValueRef(nullptr),
59-
setPrototypeOfValueRef(nullptr),
60-
stringValueRef(nullptr),
61-
booleanValueRef(nullptr),
62-
protoValueRef(nullptr),
63-
valueValueRef(nullptr) {}
64-
65-
napi_status Constants::Init(napi_env env) {
66-
if (s_constantsMap.find(env) == s_constantsMap.end()) {
67-
auto* instance = new Constants();
68-
69-
DEFINE_PROP(env, PROP_KEY_EXTEND, instance->extendValueRef);
70-
DEFINE_PROP(env, PROP_KEY_NULLOBJECT, instance->nullObjectValueRef);
71-
DEFINE_PROP(env, PROP_KEY_NULL_NODE_NAME, instance->nullNodeNameValueRef);
72-
DEFINE_PROP(env, PROP_KEY_VALUEOF, instance->valueOfValueRef);
73-
DEFINE_PROP(env, PROP_KEY_CLASS, instance->clsValueRef);
74-
DEFINE_PROP(env, PRIVATE_TYPE_NAME, instance->privateTypeNameValueRef);
75-
DEFINE_PROP(env, CLASS_IMPLEMENTATION_OBJECT, instance->classImplementationObjectValueRef);
76-
DEFINE_PROP(env, PROP_KEY_SUPER, instance->superValueRef);
77-
DEFINE_PROP(env, PROP_KEY_SUPERVALUE, instance->superValueValueRef);
78-
DEFINE_PROP(env, PRIVATE_JSINFO, instance->privateJsInfoValueRef);
79-
DEFINE_PROP(env, PRIVATE_CALLSUPER, instance->privateCallSuperValueRef);
80-
DEFINE_PROP(env, PRIVATE_IS_NAPI, instance->privateIsNapiValueRef);
81-
DEFINE_PROP(env, PROP_KEY_TOSTRING, instance->toStringValueRef);
82-
DEFINE_PROP(env, PROP_KEY_IS_PROTOTYPE_IMPLEMENTATION_OBJECT, instance->isPrototypeImplementationObjectValueRef);
83-
DEFINE_PROP(env, PROP_KEY_PROTOTYPE, instance->prototypeValueRef);
84-
DEFINE_PROP(env, PROP_KEY_CONSTRUCTOR, instance->constructorValueRef);
85-
DEFINE_PROP(env, "name", instance->nameValueRef);
86-
DEFINE_PROP(env, "Object", instance->objectValueRef);
87-
DEFINE_PROP(env, "Number", instance->numberValueRef);
88-
DEFINE_PROP(env, "isInteger", instance->isIntegerValueRef);
89-
DEFINE_PROP(env, "setPrototypeOf", instance->setPrototypeOfValueRef);
90-
DEFINE_PROP(env, "String", instance->stringValueRef);
91-
DEFINE_PROP(env, "Boolean", instance->booleanValueRef);
92-
DEFINE_PROP(env, "__proto__", instance->protoValueRef);
93-
DEFINE_PROP(env, "value", instance->valueValueRef);
94-
95-
s_constantsMap[env] = instance;
96-
}
97-
return napi_ok;
98-
}
99-
100-
PROP_GETTER(extend)
101-
PROP_GETTER(nullObject)
102-
PROP_GETTER(nullNodeName)
103-
PROP_GETTER(valueOf)
104-
PROP_GETTER(cls)
105-
PROP_GETTER(privateTypeName)
106-
PROP_GETTER(classImplementationObject)
107-
PROP_GETTER(super)
108-
PROP_GETTER(superValue)
109-
PROP_GETTER(privateJsInfo)
110-
PROP_GETTER(privateCallSuper)
111-
PROP_GETTER(privateIsNapi)
112-
PROP_GETTER(toString)
113-
PROP_GETTER(isPrototypeImplementationObject)
114-
PROP_GETTER(prototype)
115-
PROP_GETTER(constructor)
116-
PROP_GETTER(name)
117-
PROP_GETTER(object)
118-
PROP_GETTER(number)
119-
PROP_GETTER(isInteger)
120-
PROP_GETTER(setPrototypeOf)
121-
PROP_GETTER(string)
122-
PROP_GETTER(boolean)
123-
PROP_GETTER(proto)
124-
PROP_GETTER(value)
8+
#include "Constants.h"
1259

126-
Constants* Constants::Get(napi_env env) {
127-
auto it = s_constantsMap.find(env);
128-
if (it != s_constantsMap.end()) {
129-
return it->second;
130-
}
131-
return nullptr;
132-
}
10+
std::string Constants::APP_ROOT_FOLDER_PATH = "";
13311

134-
void Constants::DeInit(napi_env env) {
135-
auto it = s_constantsMap.find(env);
136-
if (it != s_constantsMap.end()) {
137-
delete it->second;
138-
s_constantsMap.erase(it);
139-
}
140-
}

0 commit comments

Comments
 (0)