Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 397 | 397 |
| 398 | 398 |
| 399 Handle<Object> RegExpImpl::IrregexpExec(Handle<JSRegExp> jsregexp, | 399 Handle<Object> RegExpImpl::IrregexpExec(Handle<JSRegExp> jsregexp, |
| 400 Handle<String> subject, | 400 Handle<String> subject, |
| 401 int previous_index, | 401 int previous_index, |
| 402 Handle<JSArray> last_match_info) { | 402 Handle<JSArray> last_match_info) { |
| 403 ASSERT_EQ(jsregexp->TypeTag(), JSRegExp::IRREGEXP); | 403 ASSERT_EQ(jsregexp->TypeTag(), JSRegExp::IRREGEXP); |
| 404 | 404 |
| 405 // Prepare space for the return values. | 405 // Prepare space for the return values. |
| 406 int number_of_capture_registers = | 406 int number_of_capture_registers = |
| 407 (IrregexpNumberOfCaptures(FixedArray::cast(jsregexp->data())) + 1) * 2; | 407 UseNativeRegexp() ? |
| 408 (IrregexpNumberOfCaptures(FixedArray::cast(jsregexp->data())) + 1) * 2 : | |
|
Lasse Reichstein
2009/06/22 12:32:49
Seems this have different meanings for the two imp
| |
| 409 IrregexpNumberOfRegisters(FixedArray::cast(jsregexp->data())); | |
| 408 OffsetsVector offsets(number_of_capture_registers); | 410 OffsetsVector offsets(number_of_capture_registers); |
| 409 | 411 |
| 410 #ifdef DEBUG | 412 #ifdef DEBUG |
| 411 if (FLAG_trace_regexp_bytecodes) { | 413 if (FLAG_trace_regexp_bytecodes) { |
| 412 String* pattern = jsregexp->Pattern(); | 414 String* pattern = jsregexp->Pattern(); |
| 413 PrintF("\n\nRegexp match: /%s/\n\n", *(pattern->ToCString())); | 415 PrintF("\n\nRegexp match: /%s/\n\n", *(pattern->ToCString())); |
| 414 PrintF("\n\nSubject string: '%s'\n\n", *(subject->ToCString())); | 416 PrintF("\n\nSubject string: '%s'\n\n", *(subject->ToCString())); |
| 415 } | 417 } |
| 416 #endif | 418 #endif |
| 417 | 419 |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 889 | 891 |
| 890 | 892 |
| 891 void Trace::PerformDeferredActions(RegExpMacroAssembler* assembler, | 893 void Trace::PerformDeferredActions(RegExpMacroAssembler* assembler, |
| 892 int max_register, | 894 int max_register, |
| 893 OutSet& affected_registers, | 895 OutSet& affected_registers, |
| 894 OutSet* registers_to_pop, | 896 OutSet* registers_to_pop, |
| 895 OutSet* registers_to_clear) { | 897 OutSet* registers_to_clear) { |
| 896 // The "+1" is to avoid a push_limit of zero if stack_limit_slack() is 1. | 898 // The "+1" is to avoid a push_limit of zero if stack_limit_slack() is 1. |
| 897 const int push_limit = (assembler->stack_limit_slack() + 1) / 2; | 899 const int push_limit = (assembler->stack_limit_slack() + 1) / 2; |
| 898 | 900 |
| 901 // Count pushes performed to force a stack limit check occasionally. | |
| 902 int pushes = 0; | |
| 903 | |
| 899 for (int reg = 0; reg <= max_register; reg++) { | 904 for (int reg = 0; reg <= max_register; reg++) { |
| 900 if (!affected_registers.Get(reg)) { | 905 if (!affected_registers.Get(reg)) { |
| 901 continue; | 906 continue; |
| 902 } | 907 } |
| 903 // Count pushes performed to force a stack limit check occasionally. | |
| 904 int pushes = 0; | |
| 905 | 908 |
| 906 // The chronologically first deferred action in the trace | 909 // The chronologically first deferred action in the trace |
| 907 // is used to infer the action needed to restore a register | 910 // is used to infer the action needed to restore a register |
| 908 // to its previous state (or not, if it's safe to ignore it). | 911 // to its previous state (or not, if it's safe to ignore it). |
| 909 enum DeferredActionUndoType { IGNORE, RESTORE, CLEAR }; | 912 enum DeferredActionUndoType { IGNORE, RESTORE, CLEAR }; |
| 910 DeferredActionUndoType undo_action = IGNORE; | 913 DeferredActionUndoType undo_action = IGNORE; |
| 911 | 914 |
| 912 int value = 0; | 915 int value = 0; |
| 913 bool absolute = false; | 916 bool absolute = false; |
| 914 bool clear = false; | 917 bool clear = false; |
| (...skipping 3566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4481 EmbeddedVector<byte, 1024> codes; | 4484 EmbeddedVector<byte, 1024> codes; |
| 4482 RegExpMacroAssemblerIrregexp macro_assembler(codes); | 4485 RegExpMacroAssemblerIrregexp macro_assembler(codes); |
| 4483 return compiler.Assemble(¯o_assembler, | 4486 return compiler.Assemble(¯o_assembler, |
| 4484 node, | 4487 node, |
| 4485 data->capture_count, | 4488 data->capture_count, |
| 4486 pattern); | 4489 pattern); |
| 4487 } | 4490 } |
| 4488 | 4491 |
| 4489 | 4492 |
| 4490 }} // namespace v8::internal | 4493 }} // namespace v8::internal |
| OLD | NEW |