| Index: tests/language/regex/regress-regexp-codeflush_test.dart
|
| diff --git a/tests/language/regex/regress-regexp-codeflush_test.dart b/tests/language/regex/regress-regexp-codeflush_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..aebf70f7c095096be83beee8c42fffbbea4611ec
|
| --- /dev/null
|
| +++ b/tests/language/regex/regress-regexp-codeflush_test.dart
|
| @@ -0,0 +1,37 @@
|
| +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +import 'util.dart';
|
| +import 'package:expect/expect.dart';
|
| +
|
| +void main() {
|
| + // Flags: --gc_global
|
| +
|
| + // Regression test for regexp that has multiple matches and which
|
| + // internally calls RegExpImpl::IrregexpExecOnce more than once without
|
| + // ensuring that the regexp is compiled.
|
| + // This can create a crash if the code was exchanged with the sweep
|
| + // generation (for code flushing support) in GC durring the matching.
|
| +
|
| + var re = new RegExp('(s)');
|
| +
|
| + dynamic foo(Match m) {
|
| + return "42";
|
| + }
|
| +
|
| + // Run enough times to get a number of GC's (all mark sweep because of the
|
| + // --gc_global) flag.
|
| + for ( var i = 0; i < 10; i++) {
|
| + // Make a long string with plenty of matches for re.
|
| + var x = "s foo s bar s foo s bar s";
|
| + x = x + x;
|
| + x = x + x;
|
| + x = x + x;
|
| + x = x + x;
|
| + x = x + x;
|
| + x = x + x;
|
| + x = x + x;
|
| + x.replaceAllMapped(re, foo);
|
| + }
|
| +}
|
|
|