// See the file "COPYING" in the main distribution directory for copyright.

#pragma once

namespace zeek::detail
	{

// These are in a separate file to break circular dependences
enum StmtTag
	{
	STMT_ANY = -1,
	STMT_ALARM, // Does no longer exist but kept to create enums consistent.
	STMT_PRINT,
	STMT_EVENT,
	STMT_EXPR,
	STMT_IF,
	STMT_WHEN,
	STMT_SWITCH,
	STMT_FOR,
	STMT_NEXT,
	STMT_BREAK,
	STMT_RETURN,
	STMT_ADD,
	STMT_DELETE,
	STMT_LIST,
	STMT_EVENT_BODY_LIST,
	STMT_INIT,
	STMT_FALLTHROUGH,
	STMT_WHILE,
	STMT_CATCH_RETURN, // for reduced InlineExpr's
	STMT_CHECK_ANY_LEN, // internal reduced statement
	STMT_CPP, // compiled C++
	STMT_ZAM, // a ZAM function body
	STMT_ZAM_RESUMPTION, // resumes ZAM execution for "when" statements
	STMT_NULL
#define NUM_STMTS (int(STMT_NULL) + 1)
	};

enum StmtFlowType
	{
	FLOW_NEXT, // continue on to next statement
	FLOW_LOOP, // go to top of loop
	FLOW_BREAK, // break out of loop
	FLOW_RETURN, // return from function
	FLOW_FALLTHROUGH // fall through to next switch case
	};

extern const char* stmt_name(StmtTag t);

	} // namespace zeek::detail
