5 #ifndef V8_ASMJS_ASM_SCANNER_H_ 6 #define V8_ASMJS_ASM_SCANNER_H_ 10 #include <unordered_map> 12 #include "src/asmjs/asm-names.h" 13 #include "src/base/logging.h" 14 #include "src/globals.h" 19 class Utf16CharacterStream;
32 typedef int32_t token_t;
37 token_t
Token()
const {
return token_; }
39 size_t Position()
const {
return position_; }
47 const std::string& GetIdentifierString()
const {
50 return identifier_string_;
54 bool IsPrecededByNewline()
const {
57 return preceded_by_newline_;
63 std::string
Name(token_t token)
const;
68 void Seek(
size_t pos);
72 void EnterLocalScope() { in_local_scope_ =
true; }
73 void EnterGlobalScope() { in_local_scope_ =
false; }
78 bool IsLocal()
const {
return IsLocal(
Token()); }
79 bool IsGlobal()
const {
return IsGlobal(
Token()); }
80 static bool IsLocal(token_t token) {
return token <= kLocalsStart; }
81 static bool IsGlobal(token_t token) {
return token >= kGlobalsStart; }
84 static size_t LocalIndex(token_t token) {
85 DCHECK(IsLocal(token));
86 return -(token - kLocalsStart);
88 static size_t GlobalIndex(token_t token) {
89 DCHECK(IsGlobal(token));
90 return token - kGlobalsStart;
96 bool IsUnsigned()
const {
return Token() == kUnsigned; }
99 return unsigned_value_;
101 bool IsDouble()
const {
return Token() == kDouble; }
102 double AsDouble()
const {
104 return double_value_;
116 kLocalsStart = -10000,
117 #define V(name, _junk1, _junk2, _junk3) kToken_##name, 118 STDLIB_MATH_FUNCTION_LIST(
V)
119 STDLIB_ARRAY_TYPE_LIST(
V)
121 #define V(name, _junk1) kToken_##name, 122 STDLIB_MATH_VALUE_LIST(
V)
124 #define V(name) kToken_##name, 128 #define V(rawname, name) kToken_##name, 129 LONG_SYMBOL_NAME_LIST(
V)
131 #define V(name, value, string_name) name = value, 132 SPECIAL_TOKEN_LIST(
V)
141 token_t preceding_token_;
144 size_t preceding_position_;
145 size_t next_position_;
147 std::string identifier_string_;
148 bool in_local_scope_;
149 std::unordered_map<std::string, token_t> local_names_;
150 std::unordered_map<std::string, token_t> global_names_;
151 std::unordered_map<std::string, token_t> property_names_;
153 double double_value_;
155 bool preceded_by_newline_;
158 void ConsumeIdentifier(uc32 ch);
159 void ConsumeNumber(uc32 ch);
160 bool ConsumeCComment();
161 void ConsumeCPPComment();
162 void ConsumeString(uc32 quote);
163 void ConsumeCompareOrShift(uc32 ch);
166 bool IsIdentifierStart(uc32 ch);
167 bool IsIdentifierPart(uc32 ch);
168 bool IsNumberStart(uc32 ch);
174 #endif // V8_ASMJS_ASM_SCANNER_H_