Skip to content

Commit 985b16f

Browse files
committed
address CR comments
1 parent a9c56ea commit 985b16f

File tree

4 files changed

+69
-77
lines changed

4 files changed

+69
-77
lines changed

lib/Runtime/Language/JavascriptConversion.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,12 +228,12 @@ namespace Js {
228228

229229
if (TaggedInt::IsOverflow(intVal))
230230
{
231-
return false;
231+
return nullptr;
232232
}
233233

234234
if (!allowNegOne && intVal == -1)
235235
{
236-
return false;
236+
return nullptr;
237237
}
238238

239239
return TaggedInt::ToVarUnchecked(intVal);

lib/Runtime/Library/JavascriptMap.cpp

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ Var JavascriptMap::NewInstance(RecyclableObject* function, CallInfo callInfo, ..
7272
// REVIEW: This condition seems impossible?
7373
if (mapObject->kind != MapKind::EmptyMap)
7474
{
75+
Assert(UNREACHED);
7576
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_ObjectIsAlreadyInitialized, _u("Map"), _u("Map"));
7677
}
7778

@@ -130,13 +131,12 @@ Var JavascriptMap::EntryClear(RecyclableObject* function, CallInfo callInfo, ...
130131
ARGUMENTS(args, callInfo);
131132
ScriptContext* scriptContext = function->GetScriptContext();
132133

133-
if (!JavascriptMap::Is(args[0]))
134+
JavascriptMap* map = JavascriptOperators::TryFromVar<JavascriptMap>(args[0]);
135+
if (map == nullptr)
134136
{
135137
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Map.prototype.clear"), _u("Map"));
136138
}
137139

138-
JavascriptMap* map = JavascriptMap::FromVar(args[0]);
139-
140140
map->Clear();
141141

142142
return scriptContext->GetLibrary()->GetUndefined();
@@ -149,13 +149,12 @@ Var JavascriptMap::EntryDelete(RecyclableObject* function, CallInfo callInfo, ..
149149
ARGUMENTS(args, callInfo);
150150
ScriptContext* scriptContext = function->GetScriptContext();
151151

152-
if (!JavascriptMap::Is(args[0]))
152+
JavascriptMap* map = JavascriptOperators::TryFromVar<JavascriptMap>(args[0]);
153+
if (map == nullptr)
153154
{
154155
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Map.prototype.delete"), _u("Map"));
155156
}
156157

157-
JavascriptMap* map = JavascriptMap::FromVar(args[0]);
158-
159158
Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined();
160159

161160
bool didDelete = map->Delete(key);
@@ -171,13 +170,12 @@ Var JavascriptMap::EntryForEach(RecyclableObject* function, CallInfo callInfo, .
171170
ScriptContext* scriptContext = function->GetScriptContext();
172171
AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Map.prototype.forEach"));
173172

174-
if (!JavascriptMap::Is(args[0]))
173+
JavascriptMap* map = JavascriptOperators::TryFromVar<JavascriptMap>(args[0]);
174+
if (map == nullptr)
175175
{
176176
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Map.prototype.forEach"), _u("Map"));
177177
}
178178

179-
JavascriptMap* map = JavascriptMap::FromVar(args[0]);
180-
181179
if (args.Info.Count < 2 || !JavascriptConversion::IsCallable(args[1]))
182180
{
183181
JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Map.prototype.forEach"));
@@ -206,13 +204,12 @@ Var JavascriptMap::EntryGet(RecyclableObject* function, CallInfo callInfo, ...)
206204
ARGUMENTS(args, callInfo);
207205
ScriptContext* scriptContext = function->GetScriptContext();
208206

209-
if (!JavascriptMap::Is(args[0]))
207+
JavascriptMap* map = JavascriptOperators::TryFromVar<JavascriptMap>(args[0]);
208+
if (map == nullptr)
210209
{
211210
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Map.prototype.get"), _u("Map"));
212211
}
213212

214-
JavascriptMap* map = JavascriptMap::FromVar(args[0]);
215-
216213
Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined();
217214
Var value = nullptr;
218215

@@ -231,13 +228,12 @@ Var JavascriptMap::EntryHas(RecyclableObject* function, CallInfo callInfo, ...)
231228
ARGUMENTS(args, callInfo);
232229
ScriptContext* scriptContext = function->GetScriptContext();
233230

234-
if (!JavascriptMap::Is(args[0]))
231+
JavascriptMap* map = JavascriptOperators::TryFromVar<JavascriptMap>(args[0]);
232+
if (map == nullptr)
235233
{
236234
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Map.prototype.has"), _u("Map"));
237235
}
238236

239-
JavascriptMap* map = JavascriptMap::FromVar(args[0]);
240-
241237
Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined();
242238

243239
bool hasValue = map->Has(key);
@@ -252,13 +248,12 @@ Var JavascriptMap::EntrySet(RecyclableObject* function, CallInfo callInfo, ...)
252248
ARGUMENTS(args, callInfo);
253249
ScriptContext* scriptContext = function->GetScriptContext();
254250

255-
if (!JavascriptMap::Is(args[0]))
251+
JavascriptMap* map = JavascriptOperators::TryFromVar<JavascriptMap>(args[0]);
252+
if (map == nullptr)
256253
{
257254
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Map.prototype.set"), _u("Map"));
258255
}
259256

260-
JavascriptMap* map = JavascriptMap::FromVar(args[0]);
261-
262257
Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined();
263258
Var value = (args.Info.Count > 2) ? args[2] : scriptContext->GetLibrary()->GetUndefined();
264259

@@ -280,13 +275,12 @@ Var JavascriptMap::EntrySizeGetter(RecyclableObject* function, CallInfo callInfo
280275
ARGUMENTS(args, callInfo);
281276
ScriptContext* scriptContext = function->GetScriptContext();
282277

283-
if (!JavascriptMap::Is(args[0]))
278+
JavascriptMap* map = JavascriptOperators::TryFromVar<JavascriptMap>(args[0]);
279+
if (map == nullptr)
284280
{
285281
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Map.prototype.size"), _u("Map"));
286282
}
287283

288-
JavascriptMap* map = JavascriptMap::FromVar(args[0]);
289-
290284
int size = map->Size();
291285

292286
return JavascriptNumber::ToVar(size, scriptContext);
@@ -299,13 +293,12 @@ Var JavascriptMap::EntryEntries(RecyclableObject* function, CallInfo callInfo, .
299293
ARGUMENTS(args, callInfo);
300294
ScriptContext* scriptContext = function->GetScriptContext();
301295

302-
if (!JavascriptMap::Is(args[0]))
296+
JavascriptMap* map = JavascriptOperators::TryFromVar<JavascriptMap>(args[0]);
297+
if (map == nullptr)
303298
{
304299
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Map.prototype.entries"), _u("Map"));
305300
}
306301

307-
JavascriptMap* map = JavascriptMap::FromVar(args[0]);
308-
309302
return scriptContext->GetLibrary()->CreateMapIterator(map, JavascriptMapIteratorKind::KeyAndValue);
310303
}
311304

@@ -316,13 +309,12 @@ Var JavascriptMap::EntryKeys(RecyclableObject* function, CallInfo callInfo, ...)
316309
ARGUMENTS(args, callInfo);
317310
ScriptContext* scriptContext = function->GetScriptContext();
318311

319-
if (!JavascriptMap::Is(args[0]))
312+
JavascriptMap* map = JavascriptOperators::TryFromVar<JavascriptMap>(args[0]);
313+
if (map == nullptr)
320314
{
321315
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Map.prototype.keys"), _u("Map"));
322316
}
323317

324-
JavascriptMap* map = JavascriptMap::FromVar(args[0]);
325-
326318
return scriptContext->GetLibrary()->CreateMapIterator(map, JavascriptMapIteratorKind::Key);
327319
}
328320

@@ -333,18 +325,18 @@ Var JavascriptMap::EntryValues(RecyclableObject* function, CallInfo callInfo, ..
333325
ARGUMENTS(args, callInfo);
334326
ScriptContext* scriptContext = function->GetScriptContext();
335327

336-
if (!JavascriptMap::Is(args[0]))
328+
JavascriptMap* map = JavascriptOperators::TryFromVar<JavascriptMap>(args[0]);
329+
if (map == nullptr)
337330
{
338331
JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Map.prototype.values"), _u("Map"));
339332
}
340-
341-
JavascriptMap* map = JavascriptMap::FromVar(args[0]);
342333
return scriptContext->GetLibrary()->CreateMapIterator(map, JavascriptMapIteratorKind::Value);
343334
}
344335

345336
void
346337
JavascriptMap::Clear()
347338
{
339+
JS_REENTRANCY_LOCK(jsReentLock, this->GetScriptContext()->GetThreadContext());
348340
list.Clear();
349341
switch (this->kind)
350342
{
@@ -392,6 +384,7 @@ JavascriptMap::DeleteFromSimpleVarMap(Var value)
392384
bool
393385
JavascriptMap::Delete(Var key)
394386
{
387+
JS_REENTRANCY_LOCK(jsReentLock, this->GetScriptContext()->GetThreadContext());
395388
switch (this->kind)
396389
{
397390
case MapKind::EmptyMap:
@@ -410,6 +403,7 @@ JavascriptMap::Delete(Var key)
410403
bool
411404
JavascriptMap::Get(Var key, Var* value)
412405
{
406+
JS_REENTRANCY_LOCK(jsReentLock, this->GetScriptContext()->GetThreadContext());
413407
switch (this->kind)
414408
{
415409
case MapKind::EmptyMap:
@@ -453,13 +447,13 @@ JavascriptMap::Get(Var key, Var* value)
453447
Assume(UNREACHED);
454448
return false;
455449
}
456-
457-
return false;
458450
}
459451

452+
460453
bool
461454
JavascriptMap::Has(Var key)
462455
{
456+
JS_REENTRANCY_LOCK(jsReentLock, this->GetScriptContext()->GetThreadContext());
463457
switch (this->kind)
464458
{
465459
case MapKind::EmptyMap:
@@ -497,7 +491,7 @@ JavascriptMap::PromoteToComplexVarMap()
497491
AssertOrFailFast(this->kind == MapKind::SimpleVarMap);
498492

499493
uint newMapSize = this->u.simpleVarMap->Count() + 1;
500-
ComplexVarDataMap* newMap = RecyclerNew(GetRecycler(), ComplexVarDataMap, GetRecycler(), newMapSize);
494+
ComplexVarDataMap* newMap = RecyclerNew(this->GetRecycler(), ComplexVarDataMap, this->GetRecycler(), newMapSize);
501495

502496
JavascriptMap::MapDataList::Iterator iter = this->list.GetIterator();
503497
// TODO: we can use a more efficient Iterator, since we know there will be no side effects
@@ -516,10 +510,10 @@ JavascriptMap::SetOnEmptyMap(Var key, Var value)
516510
Var simpleVar = JavascriptConversion::TryCanonicalizeAsSimpleVar(key);
517511
if (simpleVar)
518512
{
519-
SimpleVarDataMap* newSimpleMap = RecyclerNew(GetRecycler(), SimpleVarDataMap, GetRecycler());
513+
SimpleVarDataMap* newSimpleMap = RecyclerNew(this->GetRecycler(), SimpleVarDataMap, this->GetRecycler());
520514
MapDataKeyValuePair simplePair(simpleVar, value);
521515

522-
MapDataNode* node = this->list.Append(simplePair, GetScriptContext()->GetRecycler());
516+
MapDataNode* node = this->list.Append(simplePair, this->GetRecycler());
523517

524518
newSimpleMap->Add(simpleVar, node);
525519

@@ -528,12 +522,12 @@ JavascriptMap::SetOnEmptyMap(Var key, Var value)
528522
return;
529523
}
530524

531-
ComplexVarDataMap* newComplexSet = RecyclerNew(GetRecycler(), ComplexVarDataMap, GetRecycler());
525+
ComplexVarDataMap* newComplexSet = RecyclerNew(this->GetRecycler(), ComplexVarDataMap, this->GetRecycler());
532526
MapDataKeyValuePair complexPair(key, value);
533527

534-
MapDataNode* node = this->list.Append(complexPair, GetScriptContext()->GetRecycler());
528+
MapDataNode* node = this->list.Append(complexPair, this->GetRecycler());
535529

536-
newComplexSet->Add(value, node);
530+
newComplexSet->Add(key, node);
537531

538532
this->u.complexVarMap = newComplexSet;
539533
this->kind = MapKind::ComplexVarMap;
@@ -556,7 +550,7 @@ JavascriptMap::TrySetOnSimpleVarMap(Var key, Var value)
556550
}
557551

558552
MapDataKeyValuePair pair(simpleVar, value);
559-
MapDataNode* newNode = this->list.Append(pair, GetScriptContext()->GetRecycler());
553+
MapDataNode* newNode = this->list.Append(pair, this->GetRecycler());
560554
this->u.simpleVarMap->Add(simpleVar, newNode);
561555
return true;
562556
}
@@ -572,13 +566,14 @@ JavascriptMap::SetOnComplexVarMap(Var key, Var value)
572566
}
573567

574568
MapDataKeyValuePair pair(key, value);
575-
MapDataNode* newNode = this->list.Append(pair, GetScriptContext()->GetRecycler());
569+
MapDataNode* newNode = this->list.Append(pair, this->GetRecycler());
576570
this->u.complexVarMap->Add(key, newNode);
577571
}
578572

579573
void
580574
JavascriptMap::Set(Var key, Var value)
581575
{
576+
JS_REENTRANCY_LOCK(jsReentLock, this->GetScriptContext()->GetThreadContext());
582577
switch (this->kind)
583578
{
584579
case MapKind::EmptyMap:
@@ -604,6 +599,7 @@ JavascriptMap::Set(Var key, Var value)
604599

605600
int JavascriptMap::Size()
606601
{
602+
JS_REENTRANCY_LOCK(jsReentLock, this->GetScriptContext()->GetThreadContext());
607603
switch (this->kind)
608604
{
609605
case MapKind::EmptyMap:

0 commit comments

Comments
 (0)