public void lex_init() { if (inited) { return; } keywords = PtrBuffer.Create(); assign_token_to_binary_token[(int)TOKEN_ADD_ASSIGN] = TOKEN_ADD; assign_token_to_binary_token[(int)TOKEN_SUB_ASSIGN] = TOKEN_SUB; assign_token_to_binary_token[(int)TOKEN_OR_ASSIGN] = TOKEN_OR; assign_token_to_binary_token[(int)TOKEN_AND_ASSIGN] = TOKEN_AND; assign_token_to_binary_token[(int)TOKEN_XOR_ASSIGN] = TOKEN_XOR; assign_token_to_binary_token[(int)TOKEN_LSHIFT_ASSIGN] = TOKEN_LSHIFT; assign_token_to_binary_token[(int)TOKEN_RSHIFT_ASSIGN] = TOKEN_RSHIFT; assign_token_to_binary_token[(int)TOKEN_MUL_ASSIGN] = TOKEN_MUL; assign_token_to_binary_token[(int)TOKEN_DIV_ASSIGN] = TOKEN_DIV; assign_token_to_binary_token[(int)TOKEN_MOD_ASSIGN] = TOKEN_MOD; init_tokens(); init_keywords(); char_to_digit['0'] = 0; char_to_digit['1'] = 1; char_to_digit['2'] = 2; char_to_digit['3'] = 3; char_to_digit['4'] = 4; char_to_digit['5'] = 5; char_to_digit['6'] = 6; char_to_digit['7'] = 7; char_to_digit['8'] = 8; char_to_digit['9'] = 9; char_to_digit['a'] = 10; char_to_digit['b'] = 11; char_to_digit['c'] = 12; char_to_digit['d'] = 13; char_to_digit['e'] = 14; char_to_digit['f'] = 15; char_to_digit['A'] = 10; char_to_digit['B'] = 11; char_to_digit['C'] = 12; char_to_digit['D'] = 13; char_to_digit['E'] = 14; char_to_digit['F'] = 15; escape_to_char['n'] = '\n'; escape_to_char['r'] = '\r'; escape_to_char['t'] = '\t'; escape_to_char['v'] = '\v'; escape_to_char['b'] = '\b'; escape_to_char['a'] = '\a'; escape_to_char['0'] = '\0'; escape_to_char['\\'] = '\\'; escape_to_char['\''] = '\''; escape_to_char['\"'] = '\"'; }
Typespec *parse_type_tuple() { SrcPos pos = token.pos; PtrBuffer *fields = PtrBuffer.Create(); while (!is_token(TOKEN_RBRACE)) { Typespec *field = parse_type(); fields->Add(field); if (!match_token(TOKEN_COMMA)) { break; } } expect_token(TOKEN_RBRACE); return(new_typespec_tuple(pos, (Typespec **)fields->_begin, fields->count)); }