#ifndef MJS_TOK_H_
#define MJS_TOK_H_
#include "mjs_internal.h"
#if defined(__cplusplus)
extern "C" {
#endif
struct tok {
int tok;
int len;
const char *ptr;
};
struct pstate {
const char *file_name;
const char *buf;
const char *pos;
int line_no;
int last_emitted_line_no;
struct mbuf offset_lineno_map;
int prev_tok;
struct tok tok;
struct mjs *mjs;
int start_bcode_idx;
int cur_idx;
int depth;
};
enum {
TOK_EOF,
TOK_INVALID,
TOK_COLON,
TOK_SEMICOLON,
TOK_COMMA,
TOK_ASSIGN,
TOK_OPEN_CURLY,
TOK_CLOSE_CURLY,
TOK_OPEN_PAREN,
TOK_CLOSE_PAREN,
TOK_OPEN_BRACKET,
TOK_CLOSE_BRACKET,
TOK_MUL,
TOK_PLUS,
TOK_MINUS,
TOK_DIV,
TOK_REM,
TOK_AND,
TOK_OR,
TOK_XOR,
TOK_DOT,
TOK_QUESTION,
TOK_NOT,
TOK_TILDA,
TOK_LT,
TOK_GT,
TOK_LSHIFT,
TOK_RSHIFT,
TOK_MINUS_MINUS,
TOK_PLUS_PLUS,
TOK_PLUS_ASSIGN,
TOK_MINUS_ASSIGN,
TOK_MUL_ASSIGN,
TOK_DIV_ASSIGN,
TOK_AND_ASSIGN,
TOK_OR_ASSIGN,
TOK_REM_ASSIGN,
TOK_XOR_ASSIGN,
TOK_EQ,
TOK_NE,
TOK_LE,
TOK_GE,
TOK_LOGICAL_AND,
TOK_LOGICAL_OR,
TOK_EQ_EQ,
TOK_NE_NE,
TOK_LSHIFT_ASSIGN,
TOK_RSHIFT_ASSIGN,
TOK_URSHIFT,
TOK_URSHIFT_ASSIGN,
TOK_UNARY_PLUS,
TOK_UNARY_MINUS,
TOK_POSTFIX_PLUS,
TOK_POSTFIX_MINUS,
TOK_NUM = 200,
TOK_STR,
TOK_IDENT,
TOK_KEYWORD_BREAK,
TOK_KEYWORD_CASE,
TOK_KEYWORD_CATCH,
TOK_KEYWORD_CONTINUE,
TOK_KEYWORD_DEBUGGER,
TOK_KEYWORD_DEFAULT,
TOK_KEYWORD_DELETE,
TOK_KEYWORD_DO,
TOK_KEYWORD_ELSE,
TOK_KEYWORD_FALSE,
TOK_KEYWORD_FINALLY,
TOK_KEYWORD_FOR,
TOK_KEYWORD_FUNCTION,
TOK_KEYWORD_IF,
TOK_KEYWORD_IN,
TOK_KEYWORD_INSTANCEOF,
TOK_KEYWORD_NEW,
TOK_KEYWORD_NULL,
TOK_KEYWORD_RETURN,
TOK_KEYWORD_SWITCH,
TOK_KEYWORD_THIS,
TOK_KEYWORD_THROW,
TOK_KEYWORD_TRUE,
TOK_KEYWORD_TRY,
TOK_KEYWORD_TYPEOF,
TOK_KEYWORD_VAR,
TOK_KEYWORD_VOID,
TOK_KEYWORD_WHILE,
TOK_KEYWORD_WITH,
TOK_KEYWORD_LET,
TOK_KEYWORD_UNDEFINED,
TOK_MAX
};
MJS_PRIVATE void pinit(const char *file_name, const char *buf, struct pstate *);
MJS_PRIVATE int pnext(struct pstate *);
MJS_PRIVATE int mjs_is_ident(int c);
MJS_PRIVATE int mjs_is_digit(int c);
#if defined(__cplusplus)
}
#endif
#endif