1// Copyright 2019 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_OBJECTS_FUNCTION_SYNTAX_KIND_H_
6#define V8_OBJECTS_FUNCTION_SYNTAX_KIND_H_
7
8#include "src/utils/utils.h"
9
10namespace v8 {
11namespace internal {
12
13enum class FunctionSyntaxKind : uint8_t {
14  kAnonymousExpression,
15  kNamedExpression,
16  kDeclaration,
17  kAccessorOrMethod,
18  kWrapped,
19
20  kLastFunctionSyntaxKind = kWrapped,
21};
22
23inline const char* FunctionSyntaxKind2String(FunctionSyntaxKind kind) {
24  switch (kind) {
25    case FunctionSyntaxKind::kAnonymousExpression:
26      return "AnonymousExpression";
27    case FunctionSyntaxKind::kNamedExpression:
28      return "NamedExpression";
29    case FunctionSyntaxKind::kDeclaration:
30      return "Declaration";
31    case FunctionSyntaxKind::kAccessorOrMethod:
32      return "AccessorOrMethod";
33    case FunctionSyntaxKind::kWrapped:
34      return "Wrapped";
35  }
36  UNREACHABLE();
37}
38
39inline std::ostream& operator<<(std::ostream& os, FunctionSyntaxKind kind) {
40  return os << FunctionSyntaxKind2String(kind);
41}
42
43}  // namespace internal
44}  // namespace v8
45
46#endif  // V8_OBJECTS_FUNCTION_SYNTAX_KIND_H_
47