Author: [EMAIL PROTECTED]
Date: Fri Nov 28 03:48:22 2008
New Revision: 866

Modified:
    branches/bleeding_edge/src/bytecodes-irregexp.h
    branches/bleeding_edge/src/interpreter-irregexp.cc
    branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc
    branches/bleeding_edge/src/regexp-macro-assembler-ia32.h
    branches/bleeding_edge/src/regexp-macro-assembler-irregexp.cc
    branches/bleeding_edge/src/regexp-macro-assembler-irregexp.h
    branches/bleeding_edge/src/regexp-macro-assembler.h

Log:
Add an operation that checks whether we are at the start of the string.
Review URL: http://codereview.chromium.org/10998

Modified: branches/bleeding_edge/src/bytecodes-irregexp.h
==============================================================================
--- branches/bleeding_edge/src/bytecodes-irregexp.h     (original)
+++ branches/bleeding_edge/src/bytecodes-irregexp.h     Fri Nov 28 03:48:22 2008
@@ -64,7 +64,8 @@
  V(LOOKUP_MAP8,       29, 99) /* l_map8 start16 byte_map  
addr32*             */ \
  V(LOOKUP_HI_MAP8,    30, 99) /* l_himap8 start8 byte_map_addr32  
addr32*     */ \
  V(CHECK_REGISTER_LT, 31, 8) /* check_reg_lt register_index value16  
addr32   */ \
-V(CHECK_REGISTER_GE, 32, 8) /* check_reg_ge register_index value16  
addr32   */
+V(CHECK_REGISTER_GE, 32, 8) /* check_reg_ge register_index value16  
addr32   */ \
+V(CHECK_NOT_AT_START, 33, 5) /* check_not_at_start  
addr32                   */

  #define DECLARE_BYTECODES(name, code, length) \
    static const int BC_##name = code;

Modified: branches/bleeding_edge/src/interpreter-irregexp.cc
==============================================================================
--- branches/bleeding_edge/src/interpreter-irregexp.cc  (original)
+++ branches/bleeding_edge/src/interpreter-irregexp.cc  Fri Nov 28 03:48:22  
2008
@@ -365,6 +365,13 @@
          }
          break;
        }
+      BYTECODE(CHECK_NOT_AT_START)
+        if (current == 0) {
+          pc += BC_CHECK_NOT_AT_START_LENGTH;
+        } else {
+          pc = code_base + Load32(pc + 1);
+        }
+        break;
        default:
          UNREACHABLE();
          break;

Modified: branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc   (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc   Fri Nov 28  
03:48:22 2008
@@ -162,6 +162,11 @@
  }


+void RegExpMacroAssemblerIA32::CheckNotAtStart(Label* on_not_at_start) {
+  UNIMPLEMENTED();
+}
+
+
  void RegExpMacroAssemblerIA32::CheckCharacterLT(uc16 limit, Label*  
on_less) {
    __ cmp(edx, limit);
    BranchOrBacktrack(less, on_less);

Modified: branches/bleeding_edge/src/regexp-macro-assembler-ia32.h
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler-ia32.h    (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-ia32.h    Fri Nov 28  
03:48:22 2008
@@ -49,6 +49,7 @@
                                 int cp_offset,
                                 Label* on_failure);
    virtual void CheckCurrentPosition(int register_index, Label* on_equal);
+  virtual void CheckNotAtStart(Label* on_not_at_start);
    virtual void CheckNotBackReference(int start_reg, Label* on_no_match);
    virtual void CheckNotBackReferenceIgnoreCase(int start_reg,
                                                 Label* on_no_match);

Modified: branches/bleeding_edge/src/regexp-macro-assembler-irregexp.cc
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler-irregexp.cc       
(original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-irregexp.cc       Fri Nov 
 
28 03:48:22 2008
@@ -226,6 +226,12 @@
  }


+void RegExpMacroAssemblerIrregexp::CheckNotAtStart(Label* on_not_at_start)  
{
+  Emit(BC_CHECK_NOT_AT_START);
+  EmitOrLink(on_not_at_start);
+}
+
+
  void RegExpMacroAssemblerIrregexp::CheckNotCharacter(uc16 c,
                                                       Label* on_not_equal) {
    Emit(BC_CHECK_NOT_CHAR);

Modified: branches/bleeding_edge/src/regexp-macro-assembler-irregexp.h
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler-irregexp.h        
(original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-irregexp.h        Fri Nov 
28  
03:48:22 2008
@@ -70,6 +70,7 @@
    virtual void CheckCharacterLT(uc16 limit, Label* on_less);
    virtual void CheckCharacterGT(uc16 limit, Label* on_greater);
    virtual void CheckCharacter(uc16 c, Label* on_equal);
+  virtual void CheckNotAtStart(Label* on_not_at_start);
    virtual void CheckNotCharacter(uc16 c, Label* on_not_equal);
    virtual void CheckNotCharacterAfterOr(uc16 c, uc16 mask, Label*  
on_not_equal);
    virtual void CheckNotCharacterAfterMinusOr(uc16 c,

Modified: branches/bleeding_edge/src/regexp-macro-assembler.h
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler.h (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler.h Fri Nov 28 03:48:22  
2008
@@ -75,6 +75,7 @@
    virtual void CheckCurrentPosition(
        int register_index,
        Label* on_equal) = 0;
+  virtual void CheckNotAtStart(Label* on_not_at_start) = 0;
    virtual void CheckNotBackReference(int start_reg, Label* on_no_match) =  
0;
    virtual void CheckNotBackReferenceIgnoreCase(int start_reg,
                                                 Label* on_no_match) = 0;

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to