Skip to content

Commit 4acb927

Browse files
committed
fix: remove hidden class chain
Signed-off-by: Hosung Kim [email protected]
1 parent 770c397 commit 4acb927

File tree

7 files changed

+29
-9
lines changed

7 files changed

+29
-9
lines changed

include/lwnode/lwnode-version.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@
1818

1919
#define LWNODE_VERSION_MAJOR 1
2020
#define LWNODE_VERSION_MINOR 0
21-
#define LWNODE_VERSION_PATCH 3
22-
#define LWNODE_VERSION_TAG "v1.0.3"
21+
#define LWNODE_VERSION_PATCH 4
22+
#define LWNODE_VERSION_TAG "v1.0.4"

src/api/es-helper.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,7 @@ ErrorObjectRef* ExceptionHelper::createErrorObject(ContextRef* context,
984984
ErrorObjectRef::Code code,
985985
StringRef* errorMessage) -> ValueRef* {
986986
auto errorObject = ErrorObjectRef::create(state, code, errorMessage);
987+
errorObject->removeFromHiddenClassChain();
987988
ExceptionHelper::addStackPropertyCallback(state, errorObject);
988989
return errorObject;
989990
},

src/api/isolate.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ Escargot::ValueRef* Isolate::pending_exception() {
9393
void Isolate::set_pending_exception(Escargot::ValueRef* exception_obj) {
9494
LWNODE_CALL_TRACE_ID(TRYCATCH);
9595
LWNODE_CHECK_NOT_NULL(exception_obj);
96+
if (exception_obj->isObject()) {
97+
exception_obj->asObject()->removeFromHiddenClassChain();
98+
}
9699
pending_exception_ = exception_obj;
97100
}
98101

src/api/stack-trace.cc

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ class PrepareStackTraceScope {
3838
IsolateWrap* isolate_;
3939
};
4040

41+
StackTrace::StackTrace(ExecutionStateRef* state, ObjectRef* error)
42+
: state_(state), error_(error) {
43+
error_->removeFromHiddenClassChain();
44+
}
45+
4146
bool StackTrace::getStackTraceLimit(ExecutionStateRef* state,
4247
double& stackTraceLimit) {
4348
auto errorObject = state->context()->globalObject()->get(
@@ -159,7 +164,9 @@ ValueRef* StackTrace::captureStackTraceCallback(ExecutionStateRef* state,
159164
// FIXME: it seems there are some cases where we need to freeze the
160165
// stack string here. Investigate further
161166
StackTrace stackTrace(state, exceptionObject);
162-
stackTrace.addStackProperty(ArrayObjectRef::create(state, stackTraceVector));
167+
auto arrayObject = ArrayObjectRef::create(state, stackTraceVector);
168+
arrayObject->removeFromHiddenClassChain();
169+
stackTrace.addStackProperty(arrayObject);
163170

164171
return ValueRef::createUndefined();
165172
}
@@ -182,7 +189,9 @@ ValueRef* StackTrace::createCaptureStackTrace(
182189
true,
183190
false);
184191

185-
return FunctionObjectRef::create(state, info);
192+
auto captureStackTrace = FunctionObjectRef::create(state, info);
193+
captureStackTrace->removeFromHiddenClassChain();
194+
return captureStackTrace;
186195
}
187196

188197
ValueRef* StackTrace::createPrepareStackTrace(
@@ -194,7 +203,9 @@ ValueRef* StackTrace::createPrepareStackTrace(
194203
true,
195204
false);
196205

197-
return FunctionObjectRef::create(state, info);
206+
auto prepareStackTrace = FunctionObjectRef::create(state, info);
207+
prepareStackTrace->removeFromHiddenClassChain();
208+
return prepareStackTrace;
198209
}
199210

200211
ValueRef* StackTrace::prepareStackTraceCallback(ExecutionStateRef* state,
@@ -277,7 +288,9 @@ ArrayObjectRef* StackTrace::genCallSites(
277288
callSite->instantiate(state_->context(), stackTraceData[i]));
278289
}
279290

280-
return ArrayObjectRef::create(state_, stackTraceVector);
291+
auto stackTrace = ArrayObjectRef::create(state_, stackTraceVector);
292+
stackTrace->removeFromHiddenClassChain();
293+
return stackTrace;
281294
}
282295

283296
CallSite::CallSite(ContextRef* context) : context_(context) {
@@ -410,7 +423,7 @@ void CallSite::setCallSitePrototype(
410423
[](ExecutionStateRef* state,
411424
const std::string* name,
412425
Escargot::FunctionObjectRef::NativeFunctionPointer fn) -> ValueRef* {
413-
return FunctionObjectRef::create(
426+
auto callSite = FunctionObjectRef::create(
414427
state,
415428
FunctionObjectRef::NativeFunctionInfo(
416429
AtomicStringRef::create(
@@ -419,6 +432,8 @@ void CallSite::setCallSitePrototype(
419432
0,
420433
true,
421434
false));
435+
callSite->removeFromHiddenClassChain();
436+
return callSite;
422437
},
423438
&name,
424439
fn);

src/api/stack-trace.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ class StackTrace {
5555
ValueRef* stackValue_ = nullptr;
5656
};
5757

58-
StackTrace(ExecutionStateRef* state, ObjectRef* error)
59-
: state_(state), error_(error) {}
58+
StackTrace(ExecutionStateRef* state, ObjectRef* error);
6059

6160
static bool checkFilter(ValueRef* filter,
6261
const Evaluator::StackTraceData& traceData);

src/lwnode/lwnode.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ static ValueRef* getGCMemoryStats(ExecutionStateRef* state,
172172
bool isConstructCall) {
173173
auto context = state->context();
174174
auto object = ObjectRefHelper::create(context);
175+
object->removeFromHiddenClassChain();
175176

176177
// GC_heapsize - GC_unmapped_bytes
177178
ObjectRefHelper::setProperty(context,

src/lwnode/nd-mod-message-port.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ static ObjectRef* InstantiateMessageEvent(ExecutionStateRef* state,
7979

8080
// Create a new MessageEvent
8181
auto option = ObjectRef::create(state);
82+
option->removeFromHiddenClassChain();
8283

8384
struct MessageEventExtraData : public gc_cleanup {
8485
std::shared_ptr<MessageEventSync::HandleData> handle;

0 commit comments

Comments
 (0)