Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(717)

Unified Diff: src/codegen-arm.cc

Issue 42068: Deallocate the dynamically-allocated shadow targets that we use for... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/codegen-ia32.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/codegen-arm.cc
===================================================================
--- src/codegen-arm.cc (revision 1486)
+++ src/codegen-arm.cc (working copy)
@@ -2053,7 +2053,7 @@
// After shadowing stops, the original labels are unshadowed and the
// LabelShadows represent the formerly shadowing labels.
bool has_unlinks = false;
- for (int i = 0; i <= nof_escapes; i++) {
+ for (int i = 0; i < shadows.length(); i++) {
shadows[i]->StopShadowing();
has_unlinks = has_unlinks || shadows[i]->is_linked();
}
@@ -2076,8 +2076,8 @@
}
// Generate unlink code for the (formerly) shadowing labels that have been
- // jumped to.
- for (int i = 0; i <= nof_escapes; i++) {
+ // jumped to. Deallocate each shadow target.
+ for (int i = 0; i < shadows.length(); i++) {
if (shadows[i]->is_linked()) {
// Unlink from try chain;
shadows[i]->Bind();
@@ -2105,6 +2105,7 @@
}
shadows[i]->other_target()->Jump();
}
+ delete shadows[i];
}
exit.Bind();
@@ -2169,7 +2170,7 @@
// After shadowing stops, the original labels are unshadowed and the
// LabelShadows represent the formerly shadowing labels.
int nof_unlinks = 0;
- for (int i = 0; i <= nof_escapes; i++) {
+ for (int i = 0; i < shadows.length(); i++) {
shadows[i]->StopShadowing();
if (shadows[i]->is_linked()) nof_unlinks++;
}
@@ -2199,8 +2200,8 @@
}
// Generate code to unlink and set the state for the (formerly)
- // shadowing labels that have been jumped to.
- for (int i = 0; i <= nof_escapes; i++) {
+ // shadowing targets that have been jumped to.
+ for (int i = 0; i < shadows.length(); i++) {
if (shadows[i]->is_linked()) {
// If we have come from the shadowed return, the return value is
// in (a non-refcounted reference to) r0. We must preserve it
@@ -2264,9 +2265,9 @@
frame_->EmitPop(r2);
frame_->EmitPop(r0);
- // Generate code to jump to the right destination for all used (formerly)
- // shadowing labels.
- for (int i = 0; i <= nof_escapes; i++) {
+ // Generate code to jump to the right destination for all used
+ // formerly shadowing targets. Deallocate each shadow target.
+ for (int i = 0; i < shadows.length(); i++) {
if (shadows[i]->is_bound()) {
JumpTarget* original = shadows[i]->other_target();
__ cmp(r2, Operand(Smi::FromInt(JUMPING + i)));
@@ -2280,6 +2281,7 @@
original->Branch(eq);
}
}
+ delete shadows[i];
}
// Check if we need to rethrow the exception.
« no previous file with comments | « no previous file | src/codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698