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

Side by Side Diff: runtime/vm/regexp.cc

Issue 2508253002: VM: Fix sticky matching for anchored regexps on interpreter. (Closed)
Patch Set: 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 | « no previous file | 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) 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 #include "vm/regexp.h" 5 #include "vm/regexp.h"
6 6
7 #include "vm/dart_entry.h" 7 #include "vm/dart_entry.h"
8 #include "vm/regexp_assembler.h" 8 #include "vm/regexp_assembler.h"
9 #include "vm/regexp_assembler_bytecode.h" 9 #include "vm/regexp_assembler_bytecode.h"
10 #include "vm/regexp_assembler_ir.h" 10 #include "vm/regexp_assembler_ir.h"
(...skipping 4986 matching lines...) Expand 10 before | Expand all | Expand 10 after
4997 4997
4998 // Bytecode regexp implementation. 4998 // Bytecode regexp implementation.
4999 4999
5000 ZoneGrowableArray<uint8_t> buffer(zone, 1024); 5000 ZoneGrowableArray<uint8_t> buffer(zone, 1024);
5001 BytecodeRegExpMacroAssembler* macro_assembler = 5001 BytecodeRegExpMacroAssembler* macro_assembler =
5002 new (zone) BytecodeRegExpMacroAssembler(&buffer, zone); 5002 new (zone) BytecodeRegExpMacroAssembler(&buffer, zone);
5003 5003
5004 // Inserted here, instead of in Assembler, because it depends on information 5004 // Inserted here, instead of in Assembler, because it depends on information
5005 // in the AST that isn't replicated in the Node structure. 5005 // in the AST that isn't replicated in the Node structure.
5006 static const intptr_t kMaxBacksearchLimit = 1024; 5006 static const intptr_t kMaxBacksearchLimit = 1024;
5007 if (is_end_anchored && !is_start_anchored && 5007 if (is_end_anchored && !is_start_anchored && !is_sticky &&
5008 max_length < kMaxBacksearchLimit) { 5008 max_length < kMaxBacksearchLimit) {
5009 macro_assembler->SetCurrentPositionFromEnd(max_length); 5009 macro_assembler->SetCurrentPositionFromEnd(max_length);
5010 } 5010 }
5011 5011
5012 if (is_global) { 5012 if (is_global) {
5013 macro_assembler->set_global_mode( 5013 macro_assembler->set_global_mode(
5014 (data->tree->min_match() > 0) 5014 (data->tree->min_match() > 0)
5015 ? RegExpMacroAssembler::GLOBAL_NO_ZERO_LENGTH_CHECK 5015 ? RegExpMacroAssembler::GLOBAL_NO_ZERO_LENGTH_CHECK
5016 : RegExpMacroAssembler::GLOBAL); 5016 : RegExpMacroAssembler::GLOBAL);
5017 } 5017 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
5108 CreateSpecializedFunction(thread, zone, regexp, cid, /*sticky=*/true, 5108 CreateSpecializedFunction(thread, zone, regexp, cid, /*sticky=*/true,
5109 owner); 5109 owner);
5110 } 5110 }
5111 } 5111 }
5112 5112
5113 return regexp.raw(); 5113 return regexp.raw();
5114 } 5114 }
5115 5115
5116 5116
5117 } // namespace dart 5117 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698