//@ skip if $architecture == "x86" function assert(a) { if (!a) throw Error("bad assertion"); } function testRegexpInline(functor) { for (let i = 0; i < 100000; i++) { functor(); } gc(); // Create objects to force collected objects be reused for (let i = 0; i < 10000000; i++) { let a = {value: i}; } // Checking if RegExp were collected for (let i = 0; i < 100; i++) { functor(); } } function toInlineGlobal() { var re = /cc+/; assert(re.test("ccc")); assert(!re.test("abc")); return 0; } function withRegexp() { toInlineGlobal(); var re = /(ab)+/; assert(re.test("ab")); assert(!re.test("ba")); return 0; } noInline(withRegexp); testRegexpInline(withRegexp); function inlineRegexpNotGlobal() { let toInline = () => { let re = /a+/; assert(re.test("aaaaaa")); assert(!re.test("bc")); } toInline(); } noInline(inlineRegexpNotGlobal); testRegexpInline(inlineRegexpNotGlobal); function toInlineRecursive(depth) { if (depth == 5) { return; } var re = /(ef)+/; assert(re.test("efef")); assert(!re.test("abc")); toInlineRecursive(depth + 1); } function regexpContainsRecursive() { var re = /r+/; toInlineRecursive(0); assert(re.test("r")); assert(!re.test("ab")); } noInline(regexpContainsRecursive); testRegexpInline(regexpContainsRecursive);