ptlist.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. /*****************************************************************************/
  6. #ifndef PTNODE
  7. #error Define PTNODE before including this file.
  8. #endif
  9. /*****************************************************************************/
  10. //
  11. // Node oper
  12. // , "Node name"
  13. // , pcode
  14. // , parse node kind
  15. // , flags
  16. // , JSON Name
  17. //
  18. PTNODE(knopNone , "<none>" , Nop , None , fnopNone , "" )
  19. /***************************************************************************
  20. Leaf nodes.
  21. ***************************************************************************/
  22. PTNODE(knopName , "name" , Nop , Pid , fnopLeaf , "NameExpr" )
  23. PTNODE(knopSpecialName, "special name" , Nop , SpecialName , fnopLeaf , "SpecialNameExpr" )
  24. PTNODE(knopInt , "int const" , Nop , Int , fnopLeaf|fnopConst , "NumberLit" )
  25. PTNODE(knopImport , "import" , Nop , None , fnopLeaf , "ImportExpr" )
  26. PTNODE(knopFlt , "flt const" , Nop , Flt , fnopLeaf|fnopConst , "NumberLit" )
  27. PTNODE(knopStr , "str const" , Nop , Pid , fnopLeaf|fnopConst , "StringLit" )
  28. PTNODE(knopRegExp , "reg expr" , Nop , Pid , fnopLeaf|fnopConst , "RegExprLit" )
  29. PTNODE(knopNull , "null" , Nop , None , fnopLeaf , "NullLit" )
  30. PTNODE(knopFalse , "false" , Nop , None , fnopLeaf , "FalseLit" )
  31. PTNODE(knopTrue , "true" , Nop , None , fnopLeaf , "TrueLit" )
  32. PTNODE(knopEmpty , "empty" , Nop , None , fnopLeaf , "EmptStmt" )
  33. PTNODE(knopYieldLeaf , "yield leaf" , Nop , None , fnopLeaf , "YieldLeafExpr" )
  34. /***************************************************************************
  35. Unary operators.
  36. ***************************************************************************/
  37. PTNODE(knopNot , "~" , Nop , Uni , fnopUni , "BitNotOper" )
  38. PTNODE(knopNeg , "unary -" , Nop , Uni , fnopUni , "NegOper" )
  39. PTNODE(knopPos , "unary +" , Nop , Uni , fnopUni , "PosOper" )
  40. PTNODE(knopLogNot , "!" , Nop , Uni , fnopUni , "LogNotOper" )
  41. PTNODE(knopEllipsis , "..." , Nop , Uni , fnopUni , "Spread" )
  42. // ___compact range : do not add or remove in this range.
  43. // Gen code of OP_LclIncPost,.. depends on parallel tables with this range
  44. PTNODE(knopIncPost , "++ post" , Nop , Uni , fnopUni|fnopAsg , "PostIncExpr" )
  45. PTNODE(knopDecPost , "-- post" , Nop , Uni , fnopUni|fnopAsg , "PostDecExpr" )
  46. PTNODE(knopIncPre , "++ pre" , Nop , Uni , fnopUni|fnopAsg , "PreIncExpr" )
  47. PTNODE(knopDecPre , "-- pre" , Nop , Uni , fnopUni|fnopAsg , "PreDecExpr" )
  48. //___end range
  49. PTNODE(knopTypeof , "typeof" , Nop , Uni , fnopUni , "TypeOfExpr" )
  50. PTNODE(knopVoid , "void" , Nop , Uni , fnopUni , "VoidExpr" )
  51. PTNODE(knopDelete , "delete" , Nop , Uni , fnopUni , "DeleteStmt" )
  52. PTNODE(knopArray , "arr cnst" , Nop , ArrLit , fnopUni , "ArrayExpr" )
  53. PTNODE(knopObject , "obj cnst" , Nop , Uni , fnopUni , "ObjectExpr" )
  54. PTNODE(knopTempRef , "temp ref" , Nop , Uni , fnopUni , "TempRef" )
  55. PTNODE(knopComputedName,"[name]" , Nop , Uni , fnopUni , "ComputedNameExpr" )
  56. PTNODE(knopYield , "yield" , Nop , Uni , fnopUni|fnopAsg , "YieldExpr" )
  57. PTNODE(knopYieldStar , "yield *" , Nop , Uni , fnopUni|fnopAsg , "YieldStarExpr" )
  58. PTNODE(knopAwait , "await" , Nop , Uni , fnopUni , "AwaitExpr" )
  59. /***************************************************************************
  60. Binary and ternary operators.
  61. ***************************************************************************/
  62. PTNODE(knopAdd , "+" , Add_A , Bin , fnopBin , "AddOper" )
  63. PTNODE(knopSub , "-" , Sub_A , Bin , fnopBin , "SubOper" )
  64. PTNODE(knopMul , "*" , Mul_A , Bin , fnopBin , "MulOper" )
  65. PTNODE(knopDiv , "/" , Div_A , Bin , fnopBin , "DivOper" )
  66. PTNODE(knopExpo , "**" , Expo_A , Bin , fnopBin , "ExpoOper" )
  67. PTNODE(knopMod , "%" , Rem_A , Bin , fnopBin , "ModOper" )
  68. PTNODE(knopOr , "|" , Or_A , Bin , fnopBin , "BitOrOper" )
  69. PTNODE(knopXor , "^" , Xor_A , Bin , fnopBin , "BitXorOper" )
  70. PTNODE(knopAnd , "&" , And_A , Bin , fnopBin , "BitAndOper" )
  71. PTNODE(knopEq , "==" , OP(Eq) , Bin , fnopBin|fnopRel , "EqualOper" )
  72. PTNODE(knopNe , "!=" , OP(Neq) , Bin , fnopBin|fnopRel , "NotEqualOper" )
  73. PTNODE(knopLt , "<" , OP(Lt) , Bin , fnopBin|fnopRel , "LessThanOper" )
  74. PTNODE(knopLe , "<=" , OP(Le) , Bin , fnopBin|fnopRel , "LessThanEqualOper" )
  75. PTNODE(knopGe , ">=" , OP(Ge) , Bin , fnopBin|fnopRel , "GreaterThanEqualOper" )
  76. PTNODE(knopGt , ">" , OP(Gt) , Bin , fnopBin|fnopRel , "GreaterThanOper" )
  77. PTNODE(knopCall , "()" , Nop , Call , fnopBin , "CallExpr" )
  78. PTNODE(knopDot , "." , Nop , Bin , fnopBin , "DotOper" )
  79. PTNODE(knopAsg , "=" , Nop , Bin , fnopBin|fnopAsg , "AssignmentOper" )
  80. PTNODE(knopInstOf , "instanceof" , IsInst , Bin , fnopBin|fnopRel , "InstanceOfExpr" )
  81. PTNODE(knopIn , "in" , IsIn , Bin , fnopBin|fnopRel , "InOper" )
  82. PTNODE(knopEqv , "===" , OP(SrEq) , Bin , fnopBin|fnopRel , "StrictEqualOper" )
  83. PTNODE(knopNEqv , "!==" , OP(SrNeq), Bin , fnopBin|fnopRel , "NotStrictEqualOper" )
  84. PTNODE(knopComma , "," , Nop , Bin , fnopBin , "CommaOper" )
  85. PTNODE(knopLogOr , "||" , Nop , Bin , fnopBin , "LogOrOper" )
  86. PTNODE(knopLogAnd , "&&" , Nop , Bin , fnopBin , "LogAndOper" )
  87. PTNODE(knopLsh , "<<" , Shl_A , Bin , fnopBin , "LeftShiftOper" )
  88. PTNODE(knopRsh , ">>" , Shr_A , Bin , fnopBin , "RightShiftOper" )
  89. PTNODE(knopRs2 , ">>>" , ShrU_A , Bin , fnopBin , "UnsignedRightShiftOper" )
  90. PTNODE(knopNew , "new" , Nop , Call , fnopBin , "NewExpr" )
  91. PTNODE(knopIndex , "[]" , Nop , Bin , fnopBin , "IndexOper" )
  92. PTNODE(knopQmark , "?" , Nop , Tri , fnopBin , "IfExpr" )
  93. // ___compact range : do not add or remove in this range.
  94. // Gen code of OP_LclAsg*,.. depends on parallel tables with this range
  95. PTNODE(knopAsgAdd , "+=" , Add_A , Bin , fnopBin|fnopAsg , "AddAssignExpr" )
  96. PTNODE(knopAsgSub , "-=" , Sub_A , Bin , fnopBin|fnopAsg , "SubAssignExpr" )
  97. PTNODE(knopAsgMul , "*=" , Mul_A , Bin , fnopBin|fnopAsg , "MulAssignExpr" )
  98. PTNODE(knopAsgDiv , "/=" , Div_A , Bin , fnopBin|fnopAsg , "DivAssignExpr" )
  99. PTNODE(knopAsgExpo , "**=" , Expo_A , Bin , fnopBin|fnopAsg , "ExpoAssignExpr" )
  100. PTNODE(knopAsgMod , "%=" , Rem_A , Bin , fnopBin|fnopAsg , "ModAssignExpr" )
  101. PTNODE(knopAsgAnd , "&=" , And_A , Bin , fnopBin|fnopAsg , "BitAndAssignExpr" )
  102. PTNODE(knopAsgXor , "^=" , Xor_A , Bin , fnopBin|fnopAsg , "BitXorAssignExpr" )
  103. PTNODE(knopAsgOr , "|=" , Or_A , Bin , fnopBin|fnopAsg , "BitOrAssignExpr" )
  104. PTNODE(knopAsgLsh , "<<=" , Shl_A , Bin , fnopBin|fnopAsg , "LeftShiftAssignExpr" )
  105. PTNODE(knopAsgRsh , ">>=" , Shr_A , Bin , fnopBin|fnopAsg , "RightShiftAssignExpr" )
  106. PTNODE(knopAsgRs2 , ">>>=" , ShrU_A , Bin , fnopBin|fnopAsg , "UnsignedRightShiftAssignExpr" )
  107. //___end range
  108. PTNODE(knopMember , ":" , Nop , Bin , fnopNotExprStmt|fnopBin, "MemberOper" )
  109. PTNODE(knopMemberShort, "membShort" , Nop , Bin , fnopNotExprStmt|fnopBin, "ShorthandMember" )
  110. PTNODE(knopSetMember , "set" , Nop , Bin , fnopBin , "SetDecl" )
  111. PTNODE(knopGetMember , "get" , Nop , Bin , fnopBin , "GetDecl" )
  112. /***************************************************************************
  113. General nodes.
  114. ***************************************************************************/
  115. PTNODE(knopList , "<list>" , Nop , Bin , fnopBinList|fnopNotExprStmt, "" )
  116. PTNODE(knopVarDecl , "varDcl" , Nop , Var , fnopNotExprStmt , "VarDecl" )
  117. PTNODE(knopConstDecl , "constDcl" , Nop , Var , fnopNotExprStmt , "ConstDecl" )
  118. PTNODE(knopLetDecl , "letDcl" , Nop , Var , fnopNotExprStmt , "LetDecl" )
  119. PTNODE(knopTemp , "temp" , Nop , Var , fnopNone , "Temp" )
  120. PTNODE(knopFncDecl , "fncDcl" , Nop , Fnc , fnopLeaf , "FuncDecl" )
  121. PTNODE(knopClassDecl , "classDecl" , Nop , Class , fnopLeaf , "ClassDecl" )
  122. PTNODE(knopProg , "program" , Nop , Prog , fnopNotExprStmt , "Unit" )
  123. PTNODE(knopModule , "module" , Nop , Module , fnopNotExprStmt , "Module")
  124. PTNODE(knopEndCode , "<endcode>" , Nop , None , fnopNotExprStmt , "" )
  125. PTNODE(knopDebugger , "debugger" , Nop , None , fnopNotExprStmt , "DebuggerStmt" )
  126. PTNODE(knopFor , "for" , Nop , For , fnopNotExprStmt|fnopCleanup|fnopBreak|fnopContinue , "ForStmtm" )
  127. PTNODE(knopIf , "if" , Nop , If , fnopNotExprStmt , "IfStmt" )
  128. PTNODE(knopWhile , "while" , Nop , While , fnopNotExprStmt|fnopCleanup|fnopBreak|fnopContinue , "WhileStmt" )
  129. PTNODE(knopDoWhile , "do-while" , Nop , While , fnopNotExprStmt|fnopCleanup|fnopBreak|fnopContinue , "DoWhileStmt" )
  130. PTNODE(knopForIn , "for in" , Nop , ForIn , fnopNotExprStmt|fnopCleanup|fnopBreak|fnopContinue , "ForInStmt" )
  131. PTNODE(knopForOf , "for of" , Nop , ForOf , fnopNotExprStmt|fnopCleanup|fnopBreak|fnopContinue , "ForOfStmt" )
  132. PTNODE(knopBlock , "{}" , Nop , Block , fnopNotExprStmt , "Block" )
  133. PTNODE(knopStrTemplate, "``" , Nop , StrTemplate , fnopNone , "StringTemplateDecl" )
  134. PTNODE(knopWith , "with" , Nop , With , fnopNotExprStmt , "WithStmt" )
  135. PTNODE(knopBreak , "break" , Nop , Jump , fnopNotExprStmt , "BreakStmt" )
  136. PTNODE(knopContinue , "continue" , Nop , Jump , fnopNotExprStmt , "ContinueStmt" )
  137. PTNODE(knopSwitch , "switch" , Nop , Switch , fnopNotExprStmt|fnopBreak, "SwitchStmt" )
  138. PTNODE(knopCase , "case" , Nop , Case , fnopNotExprStmt , "CaseStmt" )
  139. PTNODE(knopTryCatch , "try-catch" , Nop , TryCatch , fnopNotExprStmt , "TryCatchStmt" )
  140. PTNODE(knopCatch , "catch" , Nop , Catch , fnopNotExprStmt|fnopCleanup, "CatchClause" )
  141. PTNODE(knopReturn , "return" , Nop , Return , fnopNotExprStmt , "ReturnStmt" )
  142. PTNODE(knopTry , "try" , Nop , Try , fnopNotExprStmt|fnopCleanup, "TryStmt" )
  143. PTNODE(knopThrow , "throw" , Nop , Uni , fnopNotExprStmt , "ThrowStmt" )
  144. PTNODE(knopFinally , "finally" , Nop , Finally , fnopNotExprStmt|fnopCleanup, "FinallyStmt" )
  145. PTNODE(knopTryFinally , "try-finally" , Nop , TryFinally , fnopNotExprStmt , "TryFinallyStmt" )
  146. PTNODE(knopObjectPattern, "{} = " , Nop , Uni , fnopUni , "ObjectAssignmentPattern" )
  147. PTNODE(knopObjectPatternMember, "{:} = " , Nop , Bin , fnopBin , "ObjectAssignmentPatternMember" )
  148. PTNODE(knopArrayPattern, "[] = " , Nop , ArrLit , fnopUni , "ArrayAssignmentPattern" )
  149. PTNODE(knopParamPattern, "({[]})" , Nop , ParamPattern, fnopUni , "DestructurePattern" )
  150. PTNODE(knopExportDefault, "export default" , Nop , ExportDefault,fnopNone , "ExportDefault" )
  151. PTNODE(knopSuperReference, "super ref" , Nop , SuperReference, fnopBin , "SuperReference" )
  152. PTNODE(knopSuperCall , "super call" , Nop , SuperCall , fnopBin , "SuperCall" )
  153. #undef PTNODE
  154. #undef OP