| Index: test/cctest/test-regexp.cc | 
| =================================================================== | 
| --- test/cctest/test-regexp.cc	(revision 927) | 
| +++ test/cctest/test-regexp.cc	(working copy) | 
| @@ -362,7 +362,8 @@ | 
| if (!v8::internal::ParseRegExp(&reader, multiline, &result)) | 
| return NULL; | 
| RegExpNode* node = NULL; | 
| -  RegExpEngine::Compile(&result, &node, false, multiline); | 
| +  Handle<String> pattern = Factory::NewStringFromUtf8(CStrVector(input)); | 
| +  RegExpEngine::Compile(&result, &node, false, multiline, pattern); | 
| return node; | 
| } | 
|  | 
| @@ -520,16 +521,16 @@ | 
| m.Fail(); | 
| m.Bind(&start); | 
| m.PushBacktrack(&fail2); | 
| -  m.CheckCharacters(foo, 0, &fail); | 
| -  m.WriteCurrentPositionToRegister(0); | 
| +  m.CheckCharacters(foo, 0, &fail, true); | 
| +  m.WriteCurrentPositionToRegister(0, 0); | 
| m.PushCurrentPosition(); | 
| m.AdvanceCurrentPosition(3); | 
| -  m.WriteCurrentPositionToRegister(1); | 
| +  m.WriteCurrentPositionToRegister(1, 0); | 
| m.PopCurrentPosition(); | 
| m.AdvanceCurrentPosition(1); | 
| -  m.WriteCurrentPositionToRegister(2); | 
| +  m.WriteCurrentPositionToRegister(2, 0); | 
| m.AdvanceCurrentPosition(1); | 
| -  m.WriteCurrentPositionToRegister(3); | 
| +  m.WriteCurrentPositionToRegister(3, 0); | 
| m.Succeed(); | 
|  | 
| m.Bind(&fail); | 
| @@ -542,7 +543,8 @@ | 
|  | 
| v8::HandleScope scope; | 
|  | 
| -  Handle<ByteArray> array = Handle<ByteArray>::cast(m.GetCode()); | 
| +  Handle<String> source = Factory::NewStringFromAscii(CStrVector("^f(o)o")); | 
| +  Handle<ByteArray> array = Handle<ByteArray>::cast(m.GetCode(source)); | 
| int captures[5]; | 
|  | 
| Handle<String> f1 = | 
| @@ -576,7 +578,8 @@ | 
|  | 
| m.Succeed(); | 
|  | 
| -  Handle<Object> code_object = m.GetCode(); | 
| +  Handle<String> source = Factory::NewStringFromAscii(CStrVector("")); | 
| +  Handle<Object> code_object = m.GetCode(source); | 
| Handle<Code> code = Handle<Code>::cast(code_object); | 
|  | 
| int captures[4] = {42, 37, 87, 117}; | 
| @@ -614,15 +617,16 @@ | 
| Vector<const uc16> foo(foo_chars, 3); | 
|  | 
| Label fail; | 
| -  m.CheckCharacters(foo, 0, &fail); | 
| -  m.WriteCurrentPositionToRegister(0); | 
| +  m.CheckCharacters(foo, 0, &fail, true); | 
| +  m.WriteCurrentPositionToRegister(0, 0); | 
| m.AdvanceCurrentPosition(3); | 
| -  m.WriteCurrentPositionToRegister(1); | 
| +  m.WriteCurrentPositionToRegister(1, 0); | 
| m.Succeed(); | 
| m.Bind(&fail); | 
| m.Fail(); | 
|  | 
| -  Handle<Object> code_object = m.GetCode(); | 
| +  Handle<String> source = Factory::NewStringFromAscii(CStrVector("^foo")); | 
| +  Handle<Object> code_object = m.GetCode(source); | 
| Handle<Code> code = Handle<Code>::cast(code_object); | 
|  | 
| int captures[4] = {42, 37, 87, 117}; | 
| @@ -675,15 +679,16 @@ | 
| Vector<const uc16> foo(foo_chars, 3); | 
|  | 
| Label fail; | 
| -  m.CheckCharacters(foo, 0, &fail); | 
| -  m.WriteCurrentPositionToRegister(0); | 
| +  m.CheckCharacters(foo, 0, &fail, true); | 
| +  m.WriteCurrentPositionToRegister(0, 0); | 
| m.AdvanceCurrentPosition(3); | 
| -  m.WriteCurrentPositionToRegister(1); | 
| +  m.WriteCurrentPositionToRegister(1, 0); | 
| m.Succeed(); | 
| m.Bind(&fail); | 
| m.Fail(); | 
|  | 
| -  Handle<Object> code_object = m.GetCode(); | 
| +  Handle<String> source = Factory::NewStringFromAscii(CStrVector("^foo")); | 
| +  Handle<Object> code_object = m.GetCode(source); | 
| Handle<Code> code = Handle<Code>::cast(code_object); | 
|  | 
| int captures[4] = {42, 37, 87, 117}; | 
| @@ -735,9 +740,6 @@ | 
|  | 
| RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 0); | 
|  | 
| -  uc16 foo_chars[3] = {'f', 'o', 'o'}; | 
| -  Vector<const uc16> foo(foo_chars, 3); | 
| - | 
| Label fail; | 
| Label backtrack; | 
| m.LoadCurrentCharacter(10, &fail); | 
| @@ -749,7 +751,8 @@ | 
| m.Bind(&backtrack); | 
| m.Fail(); | 
|  | 
| -  Handle<Object> code_object = m.GetCode(); | 
| +  Handle<String> source = Factory::NewStringFromAscii(CStrVector("..........")); | 
| +  Handle<Object> code_object = m.GetCode(source); | 
| Handle<Code> code = Handle<Code>::cast(code_object); | 
|  | 
| Handle<String> input = Factory::NewStringFromAscii(CStrVector("foofoo")); | 
| @@ -778,9 +781,9 @@ | 
|  | 
| RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 3); | 
|  | 
| -  m.WriteCurrentPositionToRegister(0); | 
| +  m.WriteCurrentPositionToRegister(0, 0); | 
| m.AdvanceCurrentPosition(2); | 
| -  m.WriteCurrentPositionToRegister(1); | 
| +  m.WriteCurrentPositionToRegister(1, 0); | 
| Label nomatch; | 
| m.CheckNotBackReference(0, &nomatch); | 
| m.Fail(); | 
| @@ -788,12 +791,13 @@ | 
| m.AdvanceCurrentPosition(2); | 
| Label missing_match; | 
| m.CheckNotBackReference(0, &missing_match); | 
| -  m.WriteCurrentPositionToRegister(2); | 
| +  m.WriteCurrentPositionToRegister(2, 0); | 
| m.Succeed(); | 
| m.Bind(&missing_match); | 
| m.Fail(); | 
|  | 
| -  Handle<Object> code_object = m.GetCode(); | 
| +  Handle<String> source = Factory::NewStringFromAscii(CStrVector("^(..)..\1")); | 
| +  Handle<Object> code_object = m.GetCode(source); | 
| Handle<Code> code = Handle<Code>::cast(code_object); | 
|  | 
| Handle<String> input = Factory::NewStringFromAscii(CStrVector("fooofo")); | 
| @@ -826,9 +830,6 @@ | 
|  | 
| RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 0); | 
|  | 
| -  uc16 foo_chars[3] = {'f', 'o', 'o'}; | 
| -  Vector<const uc16> foo(foo_chars, 3); | 
| - | 
| Label not_at_start, newline, fail; | 
| m.CheckNotAtStart(¬_at_start); | 
| // Check that prevchar = '\n' and current = 'f'. | 
| @@ -850,7 +851,8 @@ | 
| m.CheckNotCharacter('b', &fail); | 
| m.Succeed(); | 
|  | 
| -  Handle<Object> code_object = m.GetCode(); | 
| +  Handle<String> source = Factory::NewStringFromAscii(CStrVector("(^f|ob)")); | 
| +  Handle<Object> code_object = m.GetCode(source); | 
| Handle<Code> code = Handle<Code>::cast(code_object); | 
|  | 
| Handle<String> input = Factory::NewStringFromAscii(CStrVector("foobar")); | 
| @@ -893,10 +895,10 @@ | 
|  | 
| Label fail, succ; | 
|  | 
| -  m.WriteCurrentPositionToRegister(0); | 
| -  m.WriteCurrentPositionToRegister(2); | 
| +  m.WriteCurrentPositionToRegister(0, 0); | 
| +  m.WriteCurrentPositionToRegister(2, 0); | 
| m.AdvanceCurrentPosition(3); | 
| -  m.WriteCurrentPositionToRegister(3); | 
| +  m.WriteCurrentPositionToRegister(3, 0); | 
| m.CheckNotBackReferenceIgnoreCase(2, &fail);  // Match "AbC". | 
| m.CheckNotBackReferenceIgnoreCase(2, &fail);  // Match "ABC". | 
| Label expected_fail; | 
| @@ -910,10 +912,12 @@ | 
| m.Fail(); | 
|  | 
| m.Bind(&succ); | 
| -  m.WriteCurrentPositionToRegister(1); | 
| +  m.WriteCurrentPositionToRegister(1, 0); | 
| m.Succeed(); | 
|  | 
| -  Handle<Object> code_object = m.GetCode(); | 
| +  Handle<String> source = | 
| +      Factory::NewStringFromAscii(CStrVector("^(abc)\1\1(?!\1)...(?!\1)")); | 
| +  Handle<Object> code_object = m.GetCode(source); | 
| Handle<Code> code = Handle<Code>::cast(code_object); | 
|  | 
| Handle<String> input = | 
| @@ -955,13 +959,13 @@ | 
| enum registers { out1, out2, out3, out4, out5, sp, loop_cnt }; | 
| Label fail; | 
| Label backtrack; | 
| -  m.WriteCurrentPositionToRegister(out1);  // Output: [0] | 
| +  m.WriteCurrentPositionToRegister(out1, 0);  // Output: [0] | 
| m.PushRegister(out1); | 
| m.PushBacktrack(&backtrack); | 
| m.WriteStackPointerToRegister(sp); | 
| // Fill stack and registers | 
| m.AdvanceCurrentPosition(2); | 
| -  m.WriteCurrentPositionToRegister(out1); | 
| +  m.WriteCurrentPositionToRegister(out1, 0); | 
| m.PushRegister(out1); | 
| m.PushBacktrack(&fail); | 
| // Drop backtrack stack frames. | 
| @@ -977,7 +981,7 @@ | 
| m.PopRegister(out1); | 
| m.ReadCurrentPositionFromRegister(out1); | 
| m.AdvanceCurrentPosition(3); | 
| -  m.WriteCurrentPositionToRegister(out2);  // [0,3] | 
| +  m.WriteCurrentPositionToRegister(out2, 0);  // [0,3] | 
|  | 
| Label loop; | 
| m.SetRegister(loop_cnt, 0);  // loop counter | 
| @@ -985,7 +989,7 @@ | 
| m.AdvanceRegister(loop_cnt, 1); | 
| m.AdvanceCurrentPosition(1); | 
| m.IfRegisterLT(loop_cnt, 3, &loop); | 
| -  m.WriteCurrentPositionToRegister(out3);  // [0,3,6] | 
| +  m.WriteCurrentPositionToRegister(out3, 0);  // [0,3,6] | 
|  | 
| Label loop2; | 
| m.SetRegister(loop_cnt, 2);  // loop counter | 
| @@ -993,24 +997,29 @@ | 
| m.AdvanceRegister(loop_cnt, -1); | 
| m.AdvanceCurrentPosition(1); | 
| m.IfRegisterGE(loop_cnt, 0, &loop2); | 
| -  m.WriteCurrentPositionToRegister(out4);  // [0,3,6,9] | 
| +  m.WriteCurrentPositionToRegister(out4, 0);  // [0,3,6,9] | 
|  | 
| Label loop3; | 
| Label exit_loop3; | 
| +  m.PushRegister(out4); | 
| +  m.PushRegister(out4); | 
| m.ReadCurrentPositionFromRegister(out3); | 
| m.Bind(&loop3); | 
| m.AdvanceCurrentPosition(1); | 
| -  m.CheckCurrentPosition(out4, &exit_loop3); | 
| +  m.CheckGreedyLoop(&exit_loop3); | 
| m.GoTo(&loop3); | 
| m.Bind(&exit_loop3); | 
| -  m.WriteCurrentPositionToRegister(out5);  // [0,3,6,9,9] | 
| +  m.PopCurrentPosition(); | 
| +  m.WriteCurrentPositionToRegister(out5, 0);  // [0,3,6,9,9] | 
|  | 
| m.Succeed(); | 
|  | 
| m.Bind(&fail); | 
| m.Fail(); | 
|  | 
| -  Handle<Object> code_object = m.GetCode(); | 
| +  Handle<String> source = | 
| +      Factory::NewStringFromAscii(CStrVector("<loop test>")); | 
| +  Handle<Object> code_object = m.GetCode(source); | 
| Handle<Code> code = Handle<Code>::cast(code_object); | 
|  | 
| // String long enough for test (content doesn't matter). | 
| @@ -1291,5 +1300,5 @@ | 
|  | 
| TEST(Graph) { | 
| V8::Initialize(NULL); | 
| -  Execute("\\b\\w", false, true); | 
| +  Execute("(?=[d#.])", false, true); | 
| } | 
|  |