This repository was archived by the owner on Oct 15, 2020. It is now read-only.
File tree Expand file tree Collapse file tree 6 files changed +62
-46
lines changed Expand file tree Collapse file tree 6 files changed +62
-46
lines changed Original file line number Diff line number Diff line change @@ -1147,11 +1147,6 @@ namespace v8
1147
1147
bool IdleNotification (int idle_time_in_ms);
1148
1148
void LowMemoryNotification ();
1149
1149
int ContextDisposedNotification ();
1150
-
1151
- // Chakra implementation
1152
- bool InternalAddMessageListener (MessageCallback that);
1153
- void InternalRemoveMessageListeners (MessageCallback that);
1154
- void InternalInvokeMessageListeners (Handle<Message> message, Handle<Value> error);
1155
1150
};
1156
1151
1157
1152
class EXPORT JitCodeEvent
Original file line number Diff line number Diff line change 21
21
#include " v8.h"
22
22
#include " jsrtutils.h"
23
23
#include < assert.h>
24
+ #include < vector>
25
+ #include < algorithm>
24
26
25
27
namespace jsrt
26
28
{
@@ -367,4 +369,37 @@ namespace jsrt
367
369
}
368
370
return false ;
369
371
}
372
+
373
+ bool IsolateShim::AddMessageListener (void * that)
374
+ {
375
+ try
376
+ {
377
+ messageListeners.push_back (that);
378
+ return true ;
379
+ }
380
+ catch (...)
381
+ {
382
+ return false ;
383
+ }
384
+ }
385
+
386
+ void IsolateShim::RemoveMessageListeners (void * that)
387
+ {
388
+ auto i = std::remove (messageListeners.begin (), messageListeners.end (), that);
389
+ messageListeners.erase (i, messageListeners.end ());
390
+ }
391
+
392
+ void IsolateShim::SetData (uint32_t slot, void * data)
393
+ {
394
+ if (slot >= _countof (this ->embeddedData ))
395
+ {
396
+ CHAKRA_UNIMPLEMENTED_ (" Invalid embedded data index" );
397
+ }
398
+ embeddedData[slot] = data;
399
+ }
400
+
401
+ void * IsolateShim::GetData (uint32_t slot)
402
+ {
403
+ return slot < _countof (this ->embeddedData ) ? embeddedData[slot] : nullptr ;
404
+ }
370
405
};
Original file line number Diff line number Diff line change @@ -81,6 +81,21 @@ namespace jsrt
81
81
void DisableExecution ();
82
82
bool IsExeuctionDisabled ();
83
83
void EnableExecution ();
84
+
85
+
86
+ bool AddMessageListener (void * that);
87
+ void RemoveMessageListeners (void * that);
88
+ template <typename Fn>
89
+ void ForEachMessageListener (Fn fn)
90
+ {
91
+ for (auto i = messageListeners.begin (); i != messageListeners.end (); i++)
92
+ {
93
+ fn (*i);
94
+ }
95
+ }
96
+
97
+ void SetData (unsigned int slot, void * data);
98
+ void * GetData (unsigned int slot);
84
99
private:
85
100
// Construction/Destruction should go thru New/Dispose
86
101
IsolateShim (JsRuntimeHandle runtime);
@@ -106,7 +121,10 @@ namespace jsrt
106
121
107
122
std::unordered_map<JsContextRef, ContextShim *> contextShimMap;
108
123
std::unordered_map<JsValueRef, ContextShim *> jsValueRefToContextShimMap;
124
+ std::vector<void *> messageListeners;
109
125
126
+ // Node only has 4 slots (internals::Internals::kNumIsolateDataSlots = 4)
127
+ void * embeddedData[4 ];
110
128
111
129
// CHAKRA-TODO: support multiple shims
112
130
static IsolateShim * s_isolateList;
Original file line number Diff line number Diff line change 21
21
#include " v8.h"
22
22
#include " v8-profiler.h"
23
23
#include " jsrtutils.h"
24
- #include < vector>
25
- #include < algorithm>
26
24
27
25
namespace v8
28
26
{
@@ -67,19 +65,14 @@ namespace v8
67
65
return 0 ;
68
66
}
69
67
70
- static void * s_dummyData[4 ];
71
-
72
68
void Isolate::SetData (uint32_t slot, void * data)
73
69
{
74
- if (slot < _countof (s_dummyData))
75
- {
76
- s_dummyData[slot] = data;
77
- }
70
+ return jsrt::IsolateShim::FromIsolate (this )->SetData (slot, data);
78
71
}
79
72
80
73
void * Isolate::GetData (uint32_t slot)
81
74
{
82
- return slot < _countof (s_dummyData)? s_dummyData[ slot] : nullptr ;
75
+ return jsrt::IsolateShim::FromIsolate ( this )-> GetData ( slot) ;
83
76
}
84
77
85
78
uint32_t Isolate::GetNumberOfDataSlots ()
@@ -164,35 +157,6 @@ namespace v8
164
157
return 0 ;
165
158
}
166
159
167
- static std::vector<MessageCallback> s_messageListeners;
168
-
169
- bool Isolate::InternalAddMessageListener (MessageCallback that)
170
- {
171
- try
172
- {
173
- s_messageListeners.push_back (that);
174
- return true ;
175
- }
176
- catch (...)
177
- {
178
- return false ;
179
- }
180
- }
181
-
182
- void Isolate::InternalRemoveMessageListeners (MessageCallback that)
183
- {
184
- auto i = std::remove (s_messageListeners.begin (), s_messageListeners.end (), that);
185
- s_messageListeners.erase (i, s_messageListeners.end ());
186
- }
187
-
188
- void Isolate::InternalInvokeMessageListeners (Handle<Message> message, Handle<Value> error)
189
- {
190
- for (auto i = s_messageListeners.begin (); i != s_messageListeners.end (); i++)
191
- {
192
- (*i)(message, error);
193
- }
194
- }
195
-
196
160
void Isolate::GetHeapStatistics (HeapStatistics *heap_statistics)
197
161
{
198
162
size_t memoryUsage;
Original file line number Diff line number Diff line change @@ -184,7 +184,10 @@ namespace v8
184
184
// we'll report the external exception message.
185
185
if (prev != nullptr && prev->verbose )
186
186
{
187
- Isolate::GetCurrent ()->InternalInvokeMessageListeners (Message (), Exception ());
187
+ jsrt::IsolateShim::GetCurrent ()->ForEachMessageListener ([this ](void * messageListener)
188
+ {
189
+ ((v8::MessageCallback)messageListener)(Message (), Exception ());
190
+ });
188
191
}
189
192
else
190
193
{
Original file line number Diff line number Diff line change @@ -153,13 +153,14 @@ namespace v8
153
153
154
154
bool V8::AddMessageListener (MessageCallback that, Handle<Value> data)
155
155
{
156
- return Isolate::GetCurrent ()->InternalAddMessageListener (that);
156
+ // Ignore data parameter. Node doesn't use it.
157
+ return jsrt::IsolateShim::GetCurrent ()->AddMessageListener (that);
157
158
}
158
159
159
160
160
161
void V8::RemoveMessageListeners (MessageCallback that)
161
162
{
162
- Isolate:: GetCurrent ()->InternalRemoveMessageListeners (that);
163
+ jsrt::IsolateShim:: GetCurrent ()->RemoveMessageListeners (that);
163
164
}
164
165
165
166
void V8::SetJitCodeEventHandler (JitCodeEventOptions options, JitCodeEventHandler event_handler)
You can’t perform that action at this time.
0 commit comments