@@ -693,50 +693,14 @@ static const int g_mpnopcbNode[] =
693
693
#include " ptlist.h"
694
694
};
695
695
696
- const Js::RegSlot NoRegister = (Js::RegSlot)-1;
697
- const Js::RegSlot OneByteRegister = (Js::RegSlot_OneByte)-1 ;
698
-
699
- void Parser::InitNode (OpCode nop,ParseNodePtr pnode) {
700
- pnode->nop = nop;
701
- pnode->grfpn = PNodeFlags::fpnNone;
702
- pnode->location = NoRegister;
703
- pnode->emitLabels = false ;
704
- pnode->isUsed = true ;
705
- pnode->notEscapedUse = false ;
706
- pnode->isInList = false ;
707
- pnode->isCallApplyTargetLoad = false ;
708
- pnode->isSpecialName = false ;
709
- }
710
-
711
696
// Create nodes using Arena
712
697
ParseNodePtr
713
698
Parser::StaticCreateBlockNode (ArenaAllocator* alloc, charcount_t ichMin , charcount_t ichLim, int blockId, PnodeBlockType blockType)
714
699
{
715
- ParseNodePtr pnode = StaticCreateNodeT<knopBlock>(alloc, ichMin, ichLim);
716
- InitBlockNode (pnode, blockId, blockType);
717
- return pnode;
718
- }
700
+ ParseNodeBlock* pnode = reinterpret_cast <ParseNodeBlock*>(StaticAllocNode<knopBlock>(alloc));
701
+ pnode->Init (blockId, blockType, ichMin, ichLim);
719
702
720
- void Parser::InitBlockNode (ParseNodePtr pnode, int blockId, PnodeBlockType blockType)
721
- {
722
- Assert (pnode->nop == knopBlock);
723
- pnode->AsParseNodeBlock ()->pnodeScopes = nullptr ;
724
- pnode->AsParseNodeBlock ()->pnodeNext = nullptr ;
725
- pnode->AsParseNodeBlock ()->scope = nullptr ;
726
- pnode->AsParseNodeBlock ()->enclosingBlock = nullptr ;
727
- pnode->AsParseNodeBlock ()->pnodeLexVars = nullptr ;
728
- pnode->AsParseNodeBlock ()->pnodeStmt = nullptr ;
729
- pnode->AsParseNodeBlock ()->pnodeLastValStmt = nullptr ;
730
-
731
- pnode->AsParseNodeBlock ()->callsEval = false ;
732
- pnode->AsParseNodeBlock ()->childCallsEval = false ;
733
- pnode->AsParseNodeBlock ()->blockType = blockType;
734
- pnode->AsParseNodeBlock ()->blockId = blockId;
735
-
736
- if (blockType != PnodeBlockType::Regular)
737
- {
738
- pnode->grfpn |= PNodeFlags::fpnSyntheticNode;
739
- }
703
+ return pnode;
740
704
}
741
705
742
706
// Create Node with limit
@@ -1060,7 +1024,7 @@ ParseNodePtr Parser::StaticCreateBinNode(OpCode nop,
1060
1024
{
1061
1025
DebugOnly (VerifyNodeSize (nopForSize, allocSize));
1062
1026
ParseNodePtr pnode = (ParseNodePtr)alloc->Alloc (allocSize);
1063
- InitNode (nop, pnode );
1027
+ pnode-> Init (nop, 0 /* ichMin */ , 0 /* ichLim */ );
1064
1028
1065
1029
pnode->AsParseNodeBin ()->pnodeNext = nullptr ;
1066
1030
pnode->AsParseNodeBin ()->pnode1 = pnode1;
@@ -1083,6 +1047,12 @@ ParseNodePtr Parser::StaticCreateBinNode(OpCode nop,
1083
1047
}
1084
1048
1085
1049
// Create nodes using parser allocator
1050
+ ParseNodePtr Parser::CreateBlockNode (PnodeBlockType blockType)
1051
+ {
1052
+ ParseNodePtr pnode = CreateNode (knopBlock);
1053
+ pnode->AsParseNodeBlock ()->Init (m_nextBlockId++, blockType, pnode->ichMin , pnode->ichLim );
1054
+ return pnode;
1055
+ }
1086
1056
1087
1057
ParseNodePtr Parser::CreateNode (OpCode nop, charcount_t ichMin)
1088
1058
{
@@ -1102,14 +1072,7 @@ ParseNodePtr Parser::CreateNode(OpCode nop, charcount_t ichMin)
1102
1072
*m_pCurrentAstSize += cb;
1103
1073
}
1104
1074
1105
- InitNode (nop,pnode);
1106
-
1107
- // default - may be changed
1108
- pnode->ichMin = ichMin;
1109
- if (m_pscan!= nullptr ) {
1110
- pnode->ichLim = m_pscan->IchLimTok ();
1111
- }
1112
- else pnode->ichLim =0 ;
1075
+ pnode->Init (nop, ichMin, (m_pscan != nullptr ) ? m_pscan->IchLimTok () : 0 /* ichLim*/ );
1113
1076
1114
1077
return pnode;
1115
1078
}
@@ -1123,7 +1086,7 @@ ParseNodePtr Parser::CreateUniNode(OpCode nop, ParseNodePtr pnode1)
1123
1086
Assert (m_pCurrentAstSize != nullptr );
1124
1087
*m_pCurrentAstSize += kcbPnUni;
1125
1088
1126
- InitNode (nop, pnode );
1089
+ pnode-> Init (nop, 0 /* ichMin */ , 0 /* ichLim */ );
1127
1090
1128
1091
pnode->AsParseNodeUni ()->pnode1 = pnode1;
1129
1092
if (nullptr == pnode1)
@@ -1243,33 +1206,6 @@ ParseNodePtr Parser::CreateBlockNode(charcount_t ichMin,charcount_t ichLim, Pnod
1243
1206
return StaticCreateBlockNode (&m_nodeAllocator, ichMin, ichLim, this ->m_nextBlockId ++, blockType);
1244
1207
}
1245
1208
1246
- ParseNodePtr
1247
- Parser::CreateCallNode (OpCode nop, ParseNodePtr pnode1, ParseNodePtr pnode2,charcount_t ichMin,charcount_t ichLim)
1248
- {
1249
- Assert (!this ->m_deferringAST );
1250
- DebugOnly (VerifyNodeSize (nop, kcbPnCall));
1251
- ParseNodePtr pnode = (ParseNodePtr)m_nodeAllocator.Alloc (kcbPnCall);
1252
-
1253
- Assert (m_pCurrentAstSize != nullptr );
1254
- *m_pCurrentAstSize += kcbPnCall;
1255
-
1256
- InitNode (nop, pnode);
1257
-
1258
- pnode->AsParseNodeCall ()->pnodeTarget = pnode1;
1259
- pnode->AsParseNodeCall ()->pnodeArgs = pnode2;
1260
- pnode->AsParseNodeCall ()->argCount = 0 ;
1261
- pnode->AsParseNodeCall ()->spreadArgCount = 0 ;
1262
- pnode->AsParseNodeCall ()->callOfConstants = false ;
1263
- pnode->AsParseNodeCall ()->isApplyCall = false ;
1264
- pnode->AsParseNodeCall ()->isEvalCall = false ;
1265
- pnode->AsParseNodeCall ()->isSuperCall = false ;
1266
- pnode->AsParseNodeCall ()->hasDestructuring = false ;
1267
- pnode->ichMin = ichMin;
1268
- pnode->ichLim = ichLim;
1269
-
1270
- return pnode;
1271
- }
1272
-
1273
1209
ParseNodePtr Parser::CreateStrNode (IdentPtr pid)
1274
1210
{
1275
1211
Assert (!this ->m_deferringAST );
@@ -1338,16 +1274,9 @@ ParseNodePtr Parser::CreateCallNode(OpCode nop, ParseNodePtr pnode1, ParseNodePt
1338
1274
}
1339
1275
else
1340
1276
{
1341
- if (nullptr == pnode2)
1342
- {
1343
- ichMin = pnode1->ichMin ;
1344
- ichLim = pnode1->ichLim ;
1345
- }
1346
- else
1347
- {
1348
- ichMin = pnode1->ichMin ;
1349
- ichLim = pnode2->ichLim ;
1350
- }
1277
+ ichMin = pnode1->ichMin ;
1278
+ ichLim = pnode2 == nullptr ? pnode1->ichLim : pnode2->ichLim ;
1279
+
1351
1280
if (pnode1->nop == knopDot || pnode1->nop == knopIndex)
1352
1281
{
1353
1282
this ->CheckArguments (pnode1->AsParseNodeBin ()->pnode1 );
@@ -1356,33 +1285,39 @@ ParseNodePtr Parser::CreateCallNode(OpCode nop, ParseNodePtr pnode1, ParseNodePt
1356
1285
return CreateCallNode (nop, pnode1, pnode2, ichMin, ichLim);
1357
1286
}
1358
1287
1288
+ ParseNodePtr Parser::CreateCallNode (OpCode nop, ParseNodePtr pnode1, ParseNodePtr pnode2, charcount_t ichMin, charcount_t ichLim)
1289
+ {
1290
+ Assert (!this ->m_deferringAST );
1291
+
1292
+ // Classes, derived from ParseNodeCall, can be created here as well,
1293
+ // as long as their size matches kcbPnCall (that is, they don't add
1294
+ // any data members of their own).
1295
+ DebugOnly (VerifyNodeSize (nop, kcbPnCall));
1296
+ CompileAssert (kcbPnCall == sizeof (ParseNodeCall));
1297
+
1298
+ ParseNodeCall* pnode = reinterpret_cast <ParseNodeCall*>(m_nodeAllocator.Alloc (kcbPnCall));
1299
+ pnode->Init (nop, pnode1, pnode2, ichMin, ichLim);
1300
+
1301
+ Assert (m_pCurrentAstSize != nullptr );
1302
+ *m_pCurrentAstSize += kcbPnCall;
1303
+
1304
+ return pnode;
1305
+ }
1306
+
1359
1307
ParseNodePtr Parser::CreateSuperCallNode (ParseNodePtr pnode1, ParseNodePtr pnode2)
1360
1308
{
1361
1309
Assert (!this ->m_deferringAST );
1362
1310
Assert (pnode1 && pnode1->isSpecialName && pnode1->AsParseNodeSpecialName ()->isSuper );
1363
1311
1364
1312
DebugOnly (VerifyNodeSize (knopSuperCall, kcbPnSuperCall));
1365
- ParseNodePtr pnode = (ParseNodePtr)m_nodeAllocator.Alloc (kcbPnSuperCall);
1313
+ CompileAssert (kcbPnSuperCall == sizeof (ParseNodeSuperCall));
1314
+
1315
+ ParseNodeSuperCall* pnode = reinterpret_cast <ParseNodeSuperCall*>(m_nodeAllocator.Alloc (kcbPnSuperCall));
1316
+ pnode->Init (knopCall, pnode1, pnode2, pnode1->ichMin , pnode2 == nullptr ? pnode1->ichLim : pnode2->ichLim );
1366
1317
1367
1318
Assert (m_pCurrentAstSize != nullptr );
1368
1319
*m_pCurrentAstSize += kcbPnSuperCall;
1369
1320
1370
- InitNode (knopCall, pnode);
1371
-
1372
- pnode->AsParseNodeCall ()->pnodeTarget = pnode1;
1373
- pnode->AsParseNodeCall ()->pnodeArgs = pnode2;
1374
- pnode->AsParseNodeCall ()->argCount = 0 ;
1375
- pnode->AsParseNodeCall ()->spreadArgCount = 0 ;
1376
- pnode->AsParseNodeCall ()->callOfConstants = false ;
1377
- pnode->AsParseNodeCall ()->isApplyCall = false ;
1378
- pnode->AsParseNodeCall ()->isEvalCall = false ;
1379
- pnode->AsParseNodeCall ()->isSuperCall = true ;
1380
- pnode->AsParseNodeSuperCall ()->pnodeThis = nullptr ;
1381
- pnode->AsParseNodeSuperCall ()->pnodeNewTarget = nullptr ;
1382
-
1383
- pnode->ichMin = pnode1->ichMin ;
1384
- pnode->ichLim = pnode2 == nullptr ? pnode1->ichLim : pnode2->ichLim ;
1385
-
1386
1321
return pnode;
1387
1322
}
1388
1323
@@ -12212,10 +12147,7 @@ ParseNodePtr Parser::CreateNode(OpCode nop, charcount_t ichMin, charcount_t ichL
12212
12147
Assert (m_pCurrentAstSize != NULL );
12213
12148
*m_pCurrentAstSize += cb;
12214
12149
12215
- InitNode (nop,pnode);
12216
-
12217
- pnode->ichMin = ichMin;
12218
- pnode->ichLim = ichLim;
12150
+ pnode->Init (nop, ichMin, ichLim);
12219
12151
12220
12152
return pnode;
12221
12153
}
@@ -12239,13 +12171,9 @@ ParseNodePtr Parser::CreateUniNode(OpCode nop, ParseNodePtr pnode1, charcount_t
12239
12171
Assert (m_pCurrentAstSize != NULL );
12240
12172
*m_pCurrentAstSize += kcbPnUni;
12241
12173
12242
- InitNode (nop, pnode);
12243
-
12174
+ pnode->Init (nop, ichMin, ichLim);
12244
12175
pnode->AsParseNodeUni ()->pnode1 = pnode1;
12245
12176
12246
- pnode->ichMin = ichMin;
12247
- pnode->ichLim = ichLim;
12248
-
12249
12177
return pnode;
12250
12178
}
12251
12179
@@ -12275,16 +12203,13 @@ ParseNodePtr Parser::CreateTriNode(OpCode nop, ParseNodePtr pnode1,
12275
12203
Assert (m_pCurrentAstSize != NULL );
12276
12204
*m_pCurrentAstSize += kcbPnTri;
12277
12205
12278
- InitNode (nop, pnode );
12206
+ pnode-> Init (nop, ichMin, ichLim );
12279
12207
12280
12208
pnode->AsParseNodeTri ()->pnodeNext = NULL ;
12281
12209
pnode->AsParseNodeTri ()->pnode1 = pnode1;
12282
12210
pnode->AsParseNodeTri ()->pnode2 = pnode2;
12283
12211
pnode->AsParseNodeTri ()->pnode3 = pnode3;
12284
12212
12285
- pnode->ichMin = ichMin;
12286
- pnode->ichLim = ichLim;
12287
-
12288
12213
return pnode;
12289
12214
}
12290
12215
0 commit comments