// _gen/frontend/types.asdl.h is generated by asdl_main.py

#ifndef TYPES_ASDL
#define TYPES_ASDL

#include <cstdint>

#include "mycpp/runtime.h"
namespace types_asdl {

// use struct instead of namespace so 'using' works consistently
#define ASDL_NAMES struct


enum class bool_arg_type_e {
  Undefined = 1,
  Path = 2,
  Int = 3,
  Str = 4,
  Other = 5,
};
typedef bool_arg_type_e bool_arg_type_t;

enum class redir_arg_type_e {
  Path = 1,
  Desc = 2,
};
typedef redir_arg_type_e redir_arg_type_t;

ASDL_NAMES opt_group_i {
  enum no_name {
  StrictAll = 1,
  YshUpgrade = 2,
  YshAll = 3,
  ARRAY_SIZE = 4,
  };
};

typedef int opt_group_t;

enum class lex_mode_e {
  Undefined = 1,
  Comment = 2,
  ShCommand = 3,
  ShCommandFakeBrack = 4,
  Backtick = 5,
  DBracket = 6,
  SQ_Raw = 7,
  DQ = 8,
  SQ_C = 9,
  J8_Str = 10,
  Arith = 11,
  ExtGlob = 12,
  VSub_1 = 13,
  VSub_2 = 14,
  VSub_ArgUnquoted = 15,
  VSub_ArgDQ = 16,
  VSub_Zsh = 17,
  BashRegex = 18,
  BashRegexFakeInner = 19,
  FuncParens = 20,
  PrintfOuter = 21,
  PrintfPercent = 22,
  Expr = 23,
};
typedef lex_mode_e lex_mode_t;

enum class word_mode_e {
  ShCommand = 1,
  ShCommandBrack = 2,
  DBracket = 3,
  BashRegex = 4,
};
typedef word_mode_e word_mode_t;

enum class cmd_mode_e {
  Shell = 1,
  Func = 2,
  Proc = 3,
};
typedef cmd_mode_e cmd_mode_t;


}  // namespace types_asdl

#endif  // TYPES_ASDL
