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

Side by Side Diff: src/builtins/builtins-string.cc

Issue 2675133003: [string] Don't tail-call into runtime with adaptor frames (Closed)
Patch Set: Created 3 years, 10 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 unified diff | Download patch
« no previous file with comments | « no previous file | test/mjsunit/regress/regress-688690.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/builtins/builtins-regexp.h" 5 #include "src/builtins/builtins-regexp.h"
6 #include "src/builtins/builtins-utils.h" 6 #include "src/builtins/builtins-utils.h"
7 #include "src/builtins/builtins.h" 7 #include "src/builtins/builtins.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/code-stub-assembler.h" 9 #include "src/code-stub-assembler.h"
10 #include "src/regexp/regexp-utils.h" 10 #include "src/regexp/regexp-utils.h"
(...skipping 1179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 1190
1191 Node* const dollar_char = Int32Constant('$'); 1191 Node* const dollar_char = Int32Constant('$');
1192 Node* const index_of_dollar = 1192 Node* const index_of_dollar =
1193 StringIndexOfChar(context, replace, dollar_char, smi_zero); 1193 StringIndexOfChar(context, replace, dollar_char, smi_zero);
1194 GotoUnless(SmiIsNegative(index_of_dollar), &next); 1194 GotoUnless(SmiIsNegative(index_of_dollar), &next);
1195 1195
1196 // Searching by traversing a cons string tree and replace with cons of 1196 // Searching by traversing a cons string tree and replace with cons of
1197 // slices works only when the replaced string is a single character, being 1197 // slices works only when the replaced string is a single character, being
1198 // replaced by a simple string and only pays off for long strings. 1198 // replaced by a simple string and only pays off for long strings.
1199 // TODO(jgruber): Reevaluate if this is still beneficial. 1199 // TODO(jgruber): Reevaluate if this is still beneficial.
1200 TailCallRuntime(Runtime::kStringReplaceOneCharWithString, context, 1200 // TODO(jgruber): TailCallRuntime when it correctly handles adapter frames.
1201 subject_string, search_string, replace); 1201 Return(CallRuntime(Runtime::kStringReplaceOneCharWithString, context,
1202 subject_string, search_string, replace));
1202 1203
1203 Bind(&next); 1204 Bind(&next);
1204 } 1205 }
1205 1206
1206 // TODO(jgruber): Extend StringIndexOfChar to handle two-byte strings and 1207 // TODO(jgruber): Extend StringIndexOfChar to handle two-byte strings and
1207 // longer substrings - we can handle up to 8 chars (one-byte) / 4 chars 1208 // longer substrings - we can handle up to 8 chars (one-byte) / 4 chars
1208 // (2-byte). 1209 // (2-byte).
1209 1210
1210 Callable indexof_stub = CodeFactory::StringIndexOf(isolate()); 1211 Callable indexof_stub = CodeFactory::StringIndexOf(isolate());
1211 Node* const match_start_index = 1212 Node* const match_start_index =
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after
1855 CallRuntime(Runtime::kThrowIncompatibleMethodReceiver, context, 1856 CallRuntime(Runtime::kThrowIncompatibleMethodReceiver, context,
1856 HeapConstant(factory()->NewStringFromAsciiChecked( 1857 HeapConstant(factory()->NewStringFromAsciiChecked(
1857 "String Iterator.prototype.next", TENURED)), 1858 "String Iterator.prototype.next", TENURED)),
1858 iterator); 1859 iterator);
1859 Return(result); // Never reached. 1860 Return(result); // Never reached.
1860 } 1861 }
1861 } 1862 }
1862 1863
1863 } // namespace internal 1864 } // namespace internal
1864 } // namespace v8 1865 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/regress/regress-688690.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698