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

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

Issue 1589643002: Source positions for constructors and lots of async machinery (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 months 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
« runtime/vm/flow_graph_builder_test.cc ('K') | « runtime/vm/scanner.h ('k') | no next file » | 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 VM_TOKEN_H_ 5 #ifndef VM_TOKEN_H_
6 #define VM_TOKEN_H_ 6 #define VM_TOKEN_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/allocation.h"
9 10
10 namespace dart { 11 namespace dart {
11 12
12 // Operator precedence table 13 // Operator precedence table
13 // 14 //
14 // 14 multiplicative * / ~/ % 15 // 14 multiplicative * / ~/ %
15 // 13 additive + - 16 // 13 additive + -
16 // 12 shift << >> 17 // 12 shift << >>
17 // 11 bitwise and & 18 // 11 bitwise and &
18 // 10 bitwise xor ^ 19 // 10 bitwise xor ^
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 enum Attribute { 210 enum Attribute {
210 kNoAttribute = 0, 211 kNoAttribute = 0,
211 kKeyword = 1 << 0, 212 kKeyword = 1 << 0,
212 kPseudoKeyword = 1 << 1, 213 kPseudoKeyword = 1 << 1,
213 }; 214 };
214 215
215 static const Kind kFirstKeyword = kABSTRACT; 216 static const Kind kFirstKeyword = kABSTRACT;
216 static const Kind kLastKeyword = kWITH; 217 static const Kind kLastKeyword = kWITH;
217 static const int kNumKeywords = kLastKeyword - kFirstKeyword + 1; 218 static const int kNumKeywords = kLastKeyword - kFirstKeyword + 1;
218 219
220 static const intptr_t kNoSourcePos = -1;
221
219 static bool IsAssignmentOperator(Kind tok) { 222 static bool IsAssignmentOperator(Kind tok) {
220 return kASSIGN <= tok && tok <= kASSIGN_COND; 223 return kASSIGN <= tok && tok <= kASSIGN_COND;
221 } 224 }
222 225
223 static bool IsRelationalOperator(Kind tok) { 226 static bool IsRelationalOperator(Kind tok) {
224 return kLT <= tok && tok <= kGTE; 227 return kLT <= tok && tok <= kGTE;
225 } 228 }
226 229
227 static bool IsEqualityOperator(Kind tok) { 230 static bool IsEqualityOperator(Kind tok) {
228 return kEQ <= tok && tok <= kNE_STRICT; 231 return kEQ <= tok && tok <= kNE_STRICT;
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 } 325 }
323 326
324 private: 327 private:
325 static const char* name_[]; 328 static const char* name_[];
326 static const char* tok_str_[]; 329 static const char* tok_str_[];
327 static const uint8_t precedence_[]; 330 static const uint8_t precedence_[];
328 static const Attribute attributes_[]; 331 static const Attribute attributes_[];
329 }; 332 };
330 333
331 334
335 // These token positions are used to classify instructions that can't be
336 // directly tied to an actual source position.
337 #define CLASSIFYING_TOKEN_POSITIONS(V) \
338 V(Private, -2) \
339 V(Box, -3) \
340 V(ParallelMove, -4) \
341 V(TempMove, -5) \
342 V(Constant, -6) \
343 V(PushArgument, -7) \
344 V(ControlFlow, -8) \
345 V(Context, -9) \
346 V(MethodExtractor, -10)
347
348 // COMPILE_ASSERT that all CLASSIFYING_TOKEN_POSITIONS are less than
349 // Token::kNoSourcePos.
350 #define SANITY_CHECK_VALUES(name, value) \
351 COMPILE_ASSERT(value < Token::kNoSourcePos);
352 CLASSIFYING_TOKEN_POSITIONS(SANITY_CHECK_VALUES);
353 #undef SANITY_CHECK_VALUES
354
355 class ClassifyingTokenPositions : public AllStatic {
356 public:
357 #define DEFINE_VALUES(name, value) \
358 static const intptr_t k##name = value;
359 CLASSIFYING_TOKEN_POSITIONS(DEFINE_VALUES);
360 #undef DEFINE_VALUES
361
362 static const char* ToCString(intptr_t token_pos) {
363 ASSERT(token_pos < 0);
364 switch (token_pos) {
365 case Token::kNoSourcePos: return "NoSource";
366 #define DEFINE_CASE(name, value) \
367 case value: return #name;
368 CLASSIFYING_TOKEN_POSITIONS(DEFINE_CASE);
369 #undef DEFINE_CASE
370 default:
371 UNIMPLEMENTED();
372 return NULL;
373 }
374 }
375 };
376
332 } // namespace dart 377 } // namespace dart
333 378
334 #endif // VM_TOKEN_H_ 379 #endif // VM_TOKEN_H_
OLDNEW
« runtime/vm/flow_graph_builder_test.cc ('K') | « runtime/vm/scanner.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698