Reviewers: Michael Starzinger,

Message:
PTAL

Description:
ARM64: Propagate notification about aborted compilation from RegExpEngine to
MacroAssembler.

BUG=chromium:489290
LOG=Y

Please review this at https://codereview.chromium.org/1145653004/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+15, -1 lines):
  M src/arm64/regexp-macro-assembler-arm64.h
  M src/jsregexp.cc
  M src/regexp-macro-assembler.h
  M src/regexp-macro-assembler-tracer.h
  M src/regexp-macro-assembler-tracer.cc


Index: src/arm64/regexp-macro-assembler-arm64.h
diff --git a/src/arm64/regexp-macro-assembler-arm64.h b/src/arm64/regexp-macro-assembler-arm64.h index da6b26b9258ba19401e401dbb6096fdd7750ac2a..ae4393f7ac5ce8d35258b5c91c8b88efffbe5db9 100644
--- a/src/arm64/regexp-macro-assembler-arm64.h
+++ b/src/arm64/regexp-macro-assembler-arm64.h
@@ -20,6 +20,7 @@ class RegExpMacroAssemblerARM64: public NativeRegExpMacroAssembler {
   RegExpMacroAssemblerARM64(Isolate* isolate, Zone* zone, Mode mode,
                             int registers_to_save);
   virtual ~RegExpMacroAssemblerARM64();
+  virtual void AbortedCodeGeneration() { masm_->AbortedCodeGeneration(); }
   virtual int stack_limit_slack();
   virtual void AdvanceCurrentPosition(int by);
   virtual void AdvanceRegister(int reg, int by);
Index: src/jsregexp.cc
diff --git a/src/jsregexp.cc b/src/jsregexp.cc
index ddab751a89a05fbe65af59c1335a2ee3882afad7..5d34ba6b32d1c6c7310e58c5c074781d064079f4 100644
--- a/src/jsregexp.cc
+++ b/src/jsregexp.cc
@@ -1091,7 +1091,10 @@ RegExpEngine::CompilationResult RegExpCompiler::Assemble(
     node->set_on_work_list(false);
     if (!node->label()->is_bound()) node->Emit(this, &new_trace);
   }
-  if (reg_exp_too_big_) return IrregexpRegExpTooBig(isolate_);
+  if (reg_exp_too_big_) {
+    macro_assembler_->AbortedCodeGeneration();
+    return IrregexpRegExpTooBig(isolate_);
+  }

   Handle<HeapObject> code = macro_assembler_->GetCode(pattern);
   heap->IncreaseTotalRegexpCodeGenerated(code->Size());
Index: src/regexp-macro-assembler-tracer.cc
diff --git a/src/regexp-macro-assembler-tracer.cc b/src/regexp-macro-assembler-tracer.cc index 71d0b9b0f7ec5a767d654b2a00df1cf81f32f1b1..00055ed31450b49932a93606fa78a4cc582cd575 100644
--- a/src/regexp-macro-assembler-tracer.cc
+++ b/src/regexp-macro-assembler-tracer.cc
@@ -26,6 +26,12 @@ RegExpMacroAssemblerTracer::~RegExpMacroAssemblerTracer() {
 }


+void RegExpMacroAssemblerTracer::AbortedCodeGeneration() {
+  PrintF(" AbortedCodeGeneration\n");
+  assembler_->AbortedCodeGeneration();
+}
+
+
// This is used for printing out debugging information. It makes an integer
 // that is closely related to the address of an object.
 static int LabelToInt(Label* label) {
Index: src/regexp-macro-assembler-tracer.h
diff --git a/src/regexp-macro-assembler-tracer.h b/src/regexp-macro-assembler-tracer.h index 67b1710e45782b4408c4f61a8eadfac84b6f2c43..8b8d80a15a823dbd523530b2492d7e2e341933ec 100644
--- a/src/regexp-macro-assembler-tracer.h
+++ b/src/regexp-macro-assembler-tracer.h
@@ -13,6 +13,7 @@ class RegExpMacroAssemblerTracer: public RegExpMacroAssembler {
  public:
RegExpMacroAssemblerTracer(Isolate* isolate, RegExpMacroAssembler* assembler);
   virtual ~RegExpMacroAssemblerTracer();
+  virtual void AbortedCodeGeneration();
virtual int stack_limit_slack() { return assembler_->stack_limit_slack(); } virtual bool CanReadUnaligned() { return assembler_->CanReadUnaligned(); }
   virtual void AdvanceCurrentPosition(int by);  // Signed cp change.
Index: src/regexp-macro-assembler.h
diff --git a/src/regexp-macro-assembler.h b/src/regexp-macro-assembler.h
index c0a8d0027ed1ffb286a9e070c86e93d0b69e873e..df244249b630320117a6b7d6cc47dc3315a82e74 100644
--- a/src/regexp-macro-assembler.h
+++ b/src/regexp-macro-assembler.h
@@ -45,6 +45,9 @@ class RegExpMacroAssembler {

   RegExpMacroAssembler(Isolate* isolate, Zone* zone);
   virtual ~RegExpMacroAssembler();
+  // This function is called when code generation is aborted, so that
+  // the assembler could clean up internal data structures.
+  virtual void AbortedCodeGeneration() {}
   // The maximal number of pushes between stack checks. Users must supply
// kCheckStackLimit flag to push operations (instead of kNoStackLimitCheck)
   // at least once for every stack_limit() pushes that are executed.


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to