// Copyright (c) 2023 Yuki Kimoto
// MIT License
#ifndef SPVM_TOKE_H
#define SPVM_TOKE_H
#include "spvm_typedecl.h"
enum {
SPVM_TOKE_C_VAR_EXPANSION_STATE_NOT_STARTED,
SPVM_TOKE_C_VAR_EXPANSION_STATE_FIRST_STRING_CONCAT,
SPVM_TOKE_C_VAR_EXPANSION_STATE_VAR,
SPVM_TOKE_C_VAR_EXPANSION_STATE_SECOND_STRING_CONCAT,
SPVM_TOKE_C_VAR_EXPANSION_STATE_BEGIN_NEXT_STRING_LITERAL,
};
int SPVM_yylex(SPVM_YYSTYPE* yylvalp, SPVM_COMPILER* compiler);
int32_t SPVM_TOKE_load_class_file(SPVM_COMPILER* compiler);
SPVM_OP* SPVM_TOKE_new_op(SPVM_COMPILER* compiler, int32_t type);
SPVM_OP* SPVM_TOKE_new_op_with_column(SPVM_COMPILER* compiler, int32_t type, int32_t column);
int32_t SPVM_TOKE_is_white_space(SPVM_COMPILER* compiler, char ch);
int32_t SPVM_TOKE_is_octal_number(SPVM_COMPILER* compiler, char ch);
int32_t SPVM_TOKE_is_hex_number(SPVM_COMPILER* compiler, char ch);
char SPVM_TOKE_parse_hex_escape(SPVM_COMPILER* compiler, char** char_ptr_ptr);
char SPVM_TOKE_parse_octal_escape(SPVM_COMPILER* compiler, char** char_ptr_ptr);
int32_t SPVM_TOKE_is_valid_utf8_code_point(int32_t code_point);
int32_t SPVM_TOKE_is_unicode_scalar_value(int32_t code_point);
int32_t SPVM_TOKE_convert_unicode_codepoint_to_utf8_character(int32_t uc, uint8_t* dst);
int32_t SPVM_TOKE_parse_line_terminator(SPVM_COMPILER* compiler, char** ch_ptr_ptr);
int32_t SPVM_TOKE_is_line_terminator(SPVM_COMPILER* compiler, char* ch);
void SPVM_TOKE_increment_current_line(SPVM_COMPILER* compiler);
int32_t SPVM_TOKE_isalpha_ascii(SPVM_COMPILER* compiler, int32_t ch);
int32_t SPVM_TOKE_isalnum_ascii(SPVM_COMPILER* compiler, int32_t ch);
int32_t SPVM_TOKE_isdigit_ascii(SPVM_COMPILER* compiler, int32_t ch);
int32_t SPVM_TOKE_islower_ascii(SPVM_COMPILER* compiler, int32_t ch);
int32_t SPVM_TOKE_isspace_ascii(SPVM_COMPILER* compiler, int32_t ch);
int32_t SPVM_TOKE_isprint_ascii(SPVM_COMPILER* compiler, int32_t ch);
#endif