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

Side by Side Diff: src/regexp/regexp-ast.h

Issue 2050343002: [regexp] Experimental support for regexp named captures (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: static_cast<int> Created 4 years, 6 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
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_REGEXP_REGEXP_AST_H_ 5 #ifndef V8_REGEXP_REGEXP_AST_H_
6 #define V8_REGEXP_REGEXP_AST_H_ 6 #define V8_REGEXP_REGEXP_AST_H_
7 7
8 #include "src/objects.h" 8 #include "src/objects.h"
9 #include "src/utils.h" 9 #include "src/utils.h"
10 #include "src/zone-containers.h"
10 #include "src/zone.h" 11 #include "src/zone.h"
11 12
12 namespace v8 { 13 namespace v8 {
13 namespace internal { 14 namespace internal {
14 15
15 #define FOR_EACH_REG_EXP_TREE_TYPE(VISIT) \ 16 #define FOR_EACH_REG_EXP_TREE_TYPE(VISIT) \
16 VISIT(Disjunction) \ 17 VISIT(Disjunction) \
17 VISIT(Alternative) \ 18 VISIT(Alternative) \
18 VISIT(Assertion) \ 19 VISIT(Assertion) \
19 VISIT(CharacterClass) \ 20 VISIT(CharacterClass) \
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 int min_; 406 int min_;
406 int max_; 407 int max_;
407 int min_match_; 408 int min_match_;
408 int max_match_; 409 int max_match_;
409 QuantifierType quantifier_type_; 410 QuantifierType quantifier_type_;
410 }; 411 };
411 412
412 413
413 class RegExpCapture final : public RegExpTree { 414 class RegExpCapture final : public RegExpTree {
414 public: 415 public:
415 explicit RegExpCapture(int index) : body_(NULL), index_(index) {} 416 explicit RegExpCapture(int index)
417 : body_(NULL), index_(index), name_(nullptr) {}
416 void* Accept(RegExpVisitor* visitor, void* data) override; 418 void* Accept(RegExpVisitor* visitor, void* data) override;
417 RegExpNode* ToNode(RegExpCompiler* compiler, RegExpNode* on_success) override; 419 RegExpNode* ToNode(RegExpCompiler* compiler, RegExpNode* on_success) override;
418 static RegExpNode* ToNode(RegExpTree* body, int index, 420 static RegExpNode* ToNode(RegExpTree* body, int index,
419 RegExpCompiler* compiler, RegExpNode* on_success); 421 RegExpCompiler* compiler, RegExpNode* on_success);
420 RegExpCapture* AsCapture() override; 422 RegExpCapture* AsCapture() override;
421 bool IsAnchoredAtStart() override; 423 bool IsAnchoredAtStart() override;
422 bool IsAnchoredAtEnd() override; 424 bool IsAnchoredAtEnd() override;
423 Interval CaptureRegisters() override; 425 Interval CaptureRegisters() override;
424 bool IsCapture() override; 426 bool IsCapture() override;
425 int min_match() override { return body_->min_match(); } 427 int min_match() override { return body_->min_match(); }
426 int max_match() override { return body_->max_match(); } 428 int max_match() override { return body_->max_match(); }
427 RegExpTree* body() { return body_; } 429 RegExpTree* body() { return body_; }
428 void set_body(RegExpTree* body) { body_ = body; } 430 void set_body(RegExpTree* body) { body_ = body; }
429 int index() { return index_; } 431 int index() { return index_; }
432 const ZoneVector<uc16>* name() const { return name_; }
433 void set_name(const ZoneVector<uc16>* name) { name_ = name; }
430 static int StartRegister(int index) { return index * 2; } 434 static int StartRegister(int index) { return index * 2; }
431 static int EndRegister(int index) { return index * 2 + 1; } 435 static int EndRegister(int index) { return index * 2 + 1; }
432 436
433 private: 437 private:
434 RegExpTree* body_; 438 RegExpTree* body_;
435 int index_; 439 int index_;
440 const ZoneVector<uc16>* name_;
436 }; 441 };
437 442
438 443
439 class RegExpLookaround final : public RegExpTree { 444 class RegExpLookaround final : public RegExpTree {
440 public: 445 public:
441 enum Type { LOOKAHEAD, LOOKBEHIND }; 446 enum Type { LOOKAHEAD, LOOKBEHIND };
442 447
443 RegExpLookaround(RegExpTree* body, bool is_positive, int capture_count, 448 RegExpLookaround(RegExpTree* body, bool is_positive, int capture_count,
444 int capture_from, Type type) 449 int capture_from, Type type)
445 : body_(body), 450 : body_(body),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 RegExpTree* body_; 487 RegExpTree* body_;
483 bool is_positive_; 488 bool is_positive_;
484 int capture_count_; 489 int capture_count_;
485 int capture_from_; 490 int capture_from_;
486 Type type_; 491 Type type_;
487 }; 492 };
488 493
489 494
490 class RegExpBackReference final : public RegExpTree { 495 class RegExpBackReference final : public RegExpTree {
491 public: 496 public:
492 explicit RegExpBackReference(RegExpCapture* capture) : capture_(capture) {} 497 RegExpBackReference() : capture_(nullptr), name_(nullptr) {}
498 explicit RegExpBackReference(RegExpCapture* capture)
499 : capture_(capture), name_(nullptr) {}
493 void* Accept(RegExpVisitor* visitor, void* data) override; 500 void* Accept(RegExpVisitor* visitor, void* data) override;
494 RegExpNode* ToNode(RegExpCompiler* compiler, RegExpNode* on_success) override; 501 RegExpNode* ToNode(RegExpCompiler* compiler, RegExpNode* on_success) override;
495 RegExpBackReference* AsBackReference() override; 502 RegExpBackReference* AsBackReference() override;
496 bool IsBackReference() override; 503 bool IsBackReference() override;
497 int min_match() override { return 0; } 504 int min_match() override { return 0; }
498 // The back reference may be recursive, e.g. /(\2)(\1)/. To avoid infinite 505 // The back reference may be recursive, e.g. /(\2)(\1)/. To avoid infinite
499 // recursion, we give up. Ignorance is bliss. 506 // recursion, we give up. Ignorance is bliss.
500 int max_match() override { return kInfinity; } 507 int max_match() override { return kInfinity; }
501 int index() { return capture_->index(); } 508 int index() { return capture_->index(); }
502 RegExpCapture* capture() { return capture_; } 509 RegExpCapture* capture() { return capture_; }
510 void set_capture(RegExpCapture* capture) { capture_ = capture; }
511 const ZoneVector<uc16>* name() const { return name_; }
512 void set_name(const ZoneVector<uc16>* name) { name_ = name; }
503 513
504 private: 514 private:
505 RegExpCapture* capture_; 515 RegExpCapture* capture_;
516 const ZoneVector<uc16>* name_;
506 }; 517 };
507 518
508 519
509 class RegExpEmpty final : public RegExpTree { 520 class RegExpEmpty final : public RegExpTree {
510 public: 521 public:
511 RegExpEmpty() {} 522 RegExpEmpty() {}
512 void* Accept(RegExpVisitor* visitor, void* data) override; 523 void* Accept(RegExpVisitor* visitor, void* data) override;
513 RegExpNode* ToNode(RegExpCompiler* compiler, RegExpNode* on_success) override; 524 RegExpNode* ToNode(RegExpCompiler* compiler, RegExpNode* on_success) override;
514 RegExpEmpty* AsEmpty() override; 525 RegExpEmpty* AsEmpty() override;
515 bool IsEmpty() override; 526 bool IsEmpty() override;
516 int min_match() override { return 0; } 527 int min_match() override { return 0; }
517 int max_match() override { return 0; } 528 int max_match() override { return 0; }
518 }; 529 };
519 530
520 } // namespace internal 531 } // namespace internal
521 } // namespace v8 532 } // namespace v8
522 533
523 #endif // V8_REGEXP_REGEXP_AST_H_ 534 #endif // V8_REGEXP_REGEXP_AST_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698