FormalsUtil.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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. #pragma once
  6. template <class Fn, bool mapRest>
  7. void MapFormalsImpl(ParseNodeFnc *pnodeFunc, Fn fn)
  8. {
  9. for (ParseNode *pnode = pnodeFunc->pnodeParams; pnode != nullptr; pnode = pnode->GetFormalNext())
  10. {
  11. fn(pnode);
  12. }
  13. if (mapRest && pnodeFunc->pnodeRest != nullptr)
  14. {
  15. fn(pnodeFunc->pnodeRest);
  16. }
  17. }
  18. template <class Fn>
  19. void MapFormalsWithoutRest(ParseNodeFnc *pnodeFunc, Fn fn)
  20. {
  21. return MapFormalsImpl<Fn, false>(pnodeFunc, fn);
  22. }
  23. template <class Fn>
  24. void MapFormals(ParseNodeFnc *pnodeFunc, Fn fn)
  25. {
  26. return MapFormalsImpl<Fn, true>(pnodeFunc, fn);
  27. }
  28. template <class Fn>
  29. void MapFormalsFromPattern(ParseNodeFnc *pnodeFunc, Fn fn)
  30. {
  31. for (ParseNode *pnode = pnodeFunc->pnodeParams; pnode != nullptr; pnode = pnode->GetFormalNext())
  32. {
  33. if (pnode->nop == knopParamPattern)
  34. {
  35. Parser::MapBindIdentifier(pnode->AsParseNodeParamPattern()->pnode1, fn);
  36. }
  37. }
  38. }