Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: runtime/vm/regexp_assembler_ir.h

Issue 2481873005: clang-format runtime/vm (Closed)
Patch Set: Merge Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/regexp_assembler_bytecode_inl.h ('k') | runtime/vm/regexp_assembler_ir.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_ 5 #ifndef RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_
6 #define RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_ 6 #define RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_
7 7
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/intermediate_language.h" 9 #include "vm/intermediate_language.h"
10 #include "vm/object.h" 10 #include "vm/object.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 uint16_t to, 76 uint16_t to,
77 BlockLabel* on_in_range); 77 BlockLabel* on_in_range);
78 virtual void CheckCharacterNotInRange(uint16_t from, 78 virtual void CheckCharacterNotInRange(uint16_t from,
79 uint16_t to, 79 uint16_t to,
80 BlockLabel* on_not_in_range); 80 BlockLabel* on_not_in_range);
81 virtual void CheckBitInTable(const TypedData& table, BlockLabel* on_bit_set); 81 virtual void CheckBitInTable(const TypedData& table, BlockLabel* on_bit_set);
82 82
83 // Checks whether the given offset from the current position is before 83 // Checks whether the given offset from the current position is before
84 // the end of the string. 84 // the end of the string.
85 virtual void CheckPosition(intptr_t cp_offset, BlockLabel* on_outside_input); 85 virtual void CheckPosition(intptr_t cp_offset, BlockLabel* on_outside_input);
86 virtual bool CheckSpecialCharacterClass( 86 virtual bool CheckSpecialCharacterClass(uint16_t type,
87 uint16_t type, BlockLabel* on_no_match); 87 BlockLabel* on_no_match);
88 virtual void Fail(); 88 virtual void Fail();
89 virtual void IfRegisterGE(intptr_t reg, 89 virtual void IfRegisterGE(intptr_t reg,
90 intptr_t comparand, BlockLabel* if_ge); 90 intptr_t comparand,
91 BlockLabel* if_ge);
91 virtual void IfRegisterLT(intptr_t reg, 92 virtual void IfRegisterLT(intptr_t reg,
92 intptr_t comparand, BlockLabel* if_lt); 93 intptr_t comparand,
94 BlockLabel* if_lt);
93 virtual void IfRegisterEqPos(intptr_t reg, BlockLabel* if_eq); 95 virtual void IfRegisterEqPos(intptr_t reg, BlockLabel* if_eq);
94 virtual IrregexpImplementation Implementation(); 96 virtual IrregexpImplementation Implementation();
95 virtual void GoTo(BlockLabel* to); 97 virtual void GoTo(BlockLabel* to);
96 virtual void LoadCurrentCharacter(intptr_t cp_offset, 98 virtual void LoadCurrentCharacter(intptr_t cp_offset,
97 BlockLabel* on_end_of_input, 99 BlockLabel* on_end_of_input,
98 bool check_bounds = true, 100 bool check_bounds = true,
99 intptr_t characters = 1); 101 intptr_t characters = 1);
100 virtual void PopCurrentPosition(); 102 virtual void PopCurrentPosition();
101 virtual void PopRegister(intptr_t register_index); 103 virtual void PopRegister(intptr_t register_index);
102 virtual void Print(const char* str); 104 virtual void Print(const char* str);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 kNE, 144 kNE,
143 kLT, 145 kLT,
144 kGT, 146 kGT,
145 kLTE, 147 kLTE,
146 kGTE, 148 kGTE,
147 }; 149 };
148 150
149 struct InstanceCallDescriptor { 151 struct InstanceCallDescriptor {
150 // Standard (i.e. most non-Smi) functions. 152 // Standard (i.e. most non-Smi) functions.
151 explicit InstanceCallDescriptor(const String& name) 153 explicit InstanceCallDescriptor(const String& name)
152 : name(name), 154 : name(name), token_kind(Token::kILLEGAL), checked_argument_count(1) {}
153 token_kind(Token::kILLEGAL),
154 checked_argument_count(1) { }
155 155
156 InstanceCallDescriptor(const String& name, 156 InstanceCallDescriptor(const String& name,
157 Token::Kind token_kind, 157 Token::Kind token_kind,
158 intptr_t checked_argument_count) 158 intptr_t checked_argument_count)
159 : name(name), 159 : name(name),
160 token_kind(token_kind), 160 token_kind(token_kind),
161 checked_argument_count(checked_argument_count) { } 161 checked_argument_count(checked_argument_count) {}
162 162
163 // Special cases for Smi and indexing functions. 163 // Special cases for Smi and indexing functions.
164 static InstanceCallDescriptor FromToken(Token::Kind token_kind) { 164 static InstanceCallDescriptor FromToken(Token::Kind token_kind) {
165 switch (token_kind) { 165 switch (token_kind) {
166 case Token::kEQ: return InstanceCallDescriptor( 166 case Token::kEQ:
167 Symbols::EqualOperator(), token_kind, 2); 167 return InstanceCallDescriptor(Symbols::EqualOperator(), token_kind,
168 case Token::kADD: return InstanceCallDescriptor( 168 2);
169 Symbols::Plus(), token_kind, 2); 169 case Token::kADD:
170 case Token::kSUB: return InstanceCallDescriptor( 170 return InstanceCallDescriptor(Symbols::Plus(), token_kind, 2);
171 Symbols::Minus(), token_kind, 2); 171 case Token::kSUB:
172 case Token::kBIT_OR: return InstanceCallDescriptor( 172 return InstanceCallDescriptor(Symbols::Minus(), token_kind, 2);
173 Symbols::BitOr(), token_kind, 2); 173 case Token::kBIT_OR:
174 case Token::kBIT_AND: return InstanceCallDescriptor( 174 return InstanceCallDescriptor(Symbols::BitOr(), token_kind, 2);
175 Symbols::BitAnd(), token_kind, 2); 175 case Token::kBIT_AND:
176 case Token::kLT: return InstanceCallDescriptor( 176 return InstanceCallDescriptor(Symbols::BitAnd(), token_kind, 2);
177 Symbols::LAngleBracket(), token_kind, 2); 177 case Token::kLT:
178 case Token::kLTE: return InstanceCallDescriptor( 178 return InstanceCallDescriptor(Symbols::LAngleBracket(), token_kind,
179 Symbols::LessEqualOperator(), token_kind, 2); 179 2);
180 case Token::kGT: return InstanceCallDescriptor( 180 case Token::kLTE:
181 Symbols::RAngleBracket(), token_kind, 2); 181 return InstanceCallDescriptor(Symbols::LessEqualOperator(),
182 case Token::kGTE: return InstanceCallDescriptor( 182 token_kind, 2);
183 Symbols::GreaterEqualOperator(), token_kind, 2); 183 case Token::kGT:
184 case Token::kNEGATE: return InstanceCallDescriptor( 184 return InstanceCallDescriptor(Symbols::RAngleBracket(), token_kind,
185 Symbols::UnaryMinus(), token_kind, 1); 185 2);
186 case Token::kINDEX: return InstanceCallDescriptor( 186 case Token::kGTE:
187 Symbols::IndexToken(), token_kind, 2); 187 return InstanceCallDescriptor(Symbols::GreaterEqualOperator(),
188 case Token::kASSIGN_INDEX: return InstanceCallDescriptor( 188 token_kind, 2);
189 Symbols::AssignIndexToken(), token_kind, 2); 189 case Token::kNEGATE:
190 return InstanceCallDescriptor(Symbols::UnaryMinus(), token_kind, 1);
191 case Token::kINDEX:
192 return InstanceCallDescriptor(Symbols::IndexToken(), token_kind, 2);
193 case Token::kASSIGN_INDEX:
194 return InstanceCallDescriptor(Symbols::AssignIndexToken(), token_kind,
195 2);
190 default: 196 default:
191 UNREACHABLE(); 197 UNREACHABLE();
192 } 198 }
193 UNREACHABLE(); 199 UNREACHABLE();
194 return InstanceCallDescriptor(Symbols::Empty()); 200 return InstanceCallDescriptor(Symbols::Empty());
195 } 201 }
196 202
197 const String& name; 203 const String& name;
198 Token::Kind token_kind; 204 Token::Kind token_kind;
199 intptr_t checked_argument_count; 205 intptr_t checked_argument_count;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 BlockLabel* true_successor); 293 BlockLabel* true_successor);
288 294
289 // Set up all local variables and parameters. 295 // Set up all local variables and parameters.
290 void InitializeLocals(); 296 void InitializeLocals();
291 297
292 // Allocates a new local, and returns the appropriate id for placing it 298 // Allocates a new local, and returns the appropriate id for placing it
293 // on the stack. 299 // on the stack.
294 intptr_t GetNextLocalIndex(); 300 intptr_t GetNextLocalIndex();
295 301
296 // We never have any copied parameters. 302 // We never have any copied parameters.
297 intptr_t num_copied_params() const { 303 intptr_t num_copied_params() const { return 0; }
298 return 0;
299 }
300 304
301 // Return the position register at the specified index, creating it if 305 // Return the position register at the specified index, creating it if
302 // necessary. Note that the number of such registers can exceed the amount 306 // necessary. Note that the number of such registers can exceed the amount
303 // required by the number of output captures. 307 // required by the number of output captures.
304 LocalVariable* position_register(intptr_t index); 308 LocalVariable* position_register(intptr_t index);
305 309
306 void set_current_instruction(Instruction* instruction); 310 void set_current_instruction(Instruction* instruction);
307 311
308 // The following functions are responsible for appending instructions 312 // The following functions are responsible for appending instructions
309 // to the current instruction in various ways. The most simple one 313 // to the current instruction in various ways. The most simple one
(...skipping 19 matching lines...) Expand all
329 Definition* PeekStack(); 333 Definition* PeekStack();
330 void CheckStackLimit(); 334 void CheckStackLimit();
331 void GrowStack(); 335 void GrowStack();
332 336
333 // Prints the specified argument. Used for debugging. 337 // Prints the specified argument. Used for debugging.
334 void Print(PushArgumentInstr* argument); 338 void Print(PushArgumentInstr* argument);
335 339
336 // A utility class tracking ids of various objects such as blocks, temps, etc. 340 // A utility class tracking ids of various objects such as blocks, temps, etc.
337 class IdAllocator : public ValueObject { 341 class IdAllocator : public ValueObject {
338 public: 342 public:
339 IdAllocator() : next_id(0) { } 343 IdAllocator() : next_id(0) {}
340 344
341 intptr_t Count() const { return next_id; } 345 intptr_t Count() const { return next_id; }
342 intptr_t Alloc(intptr_t count = 1) { 346 intptr_t Alloc(intptr_t count = 1) {
343 ASSERT(count >= 0); 347 ASSERT(count >= 0);
344 intptr_t current_id = next_id; 348 intptr_t current_id = next_id;
345 next_id += count; 349 next_id += count;
346 return current_id; 350 return current_id;
347 } 351 }
348 void Dealloc(intptr_t count = 1) { 352 void Dealloc(intptr_t count = 1) {
349 ASSERT(count <= next_id); 353 ASSERT(count <= next_id);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 IdAllocator temp_id_; 430 IdAllocator temp_id_;
427 IdAllocator arg_id_; 431 IdAllocator arg_id_;
428 IdAllocator local_id_; 432 IdAllocator local_id_;
429 IdAllocator indirect_id_; 433 IdAllocator indirect_id_;
430 }; 434 };
431 435
432 436
433 } // namespace dart 437 } // namespace dart
434 438
435 #endif // RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_ 439 #endif // RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_
OLDNEW
« no previous file with comments | « runtime/vm/regexp_assembler_bytecode_inl.h ('k') | runtime/vm/regexp_assembler_ir.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698