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

Unified Diff: src/debug/debug-evaluate.cc

Issue 2772853003: [debug] extend debug-evaluate by Map builtins. (Closed)
Patch Set: Created 3 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 | test/debugger/debug/debug-evaluate-no-side-effect-builtins-2.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/debug/debug-evaluate.cc
diff --git a/src/debug/debug-evaluate.cc b/src/debug/debug-evaluate.cc
index 176c0dfb769edeb47f9609223f9d1823b02f9aed..8937c89ab26e78c156a0952777288e3aebea608c 100644
--- a/src/debug/debug-evaluate.cc
+++ b/src/debug/debug-evaluate.cc
@@ -259,64 +259,68 @@ void DebugEvaluate::ContextBuilder::MaterializeReceiver(
namespace {
bool IntrinsicHasNoSideEffect(Runtime::FunctionId id) {
+// Use macro to include both inlined and non-inlined version of an intrinsic.
+#define INTRINSIC_WHITELIST(V) \
jgruber 2017/03/24 08:24:17 Nice.
+ /* Conversions */ \
+ V(ToInteger) \
+ V(ToObject) \
+ V(ToString) \
+ V(ToLength) \
+ V(ToNumber) \
+ /* Type checks */ \
+ V(IsJSReceiver) \
+ V(IsSmi) \
+ V(IsArray) \
+ V(IsFunction) \
+ V(IsDate) \
+ V(IsJSProxy) \
+ V(IsRegExp) \
+ V(IsTypedArray) \
+ V(ClassOf) \
+ /* Loads */ \
+ V(LoadLookupSlotForCall) \
+ /* Arrays */ \
+ V(ArraySpeciesConstructor) \
+ V(NormalizeElements) \
+ V(GetArrayKeys) \
+ V(HasComplexElements) \
+ V(EstimateNumberOfElements) \
+ /* Errors */ \
+ V(ReThrow) \
+ V(ThrowReferenceError) \
+ V(ThrowSymbolIteratorInvalid) \
+ V(ThrowIteratorResultNotAnObject) \
+ V(NewTypeError) \
+ /* Strings */ \
+ V(StringCharCodeAt) \
+ V(StringIndexOf) \
+ V(StringReplaceOneCharWithString) \
+ V(SubString) \
+ V(RegExpInternalReplace) \
+ /* Literals */ \
+ V(CreateArrayLiteral) \
+ V(CreateObjectLiteral) \
+ V(CreateRegExpLiteral) \
+ /* Collections */ \
+ V(JSCollectionGetTable) \
+ V(FixedArrayGet) \
+ V(StringGetRawHashField) \
+ V(GenericHash) \
+ V(MapIteratorInitialize) \
+ V(MapInitialize) \
+ /* Misc. */ \
+ V(ForInPrepare) \
+ V(Call) \
+ V(MaxSmi) \
+ V(HasInPrototypeChain)
+
+#define CASE(Name) \
+ case Runtime::k##Name: \
+ case Runtime::kInline##Name:
+
switch (id) {
- // Whitelist for intrinsics and runtime functions.
- // Conversions.
- case Runtime::kToInteger:
- case Runtime::kInlineToInteger:
- case Runtime::kToObject:
- case Runtime::kInlineToObject:
- case Runtime::kToString:
- case Runtime::kInlineToString:
- case Runtime::kToLength:
- case Runtime::kInlineToLength:
- case Runtime::kToNumber:
- // Type checks.
- case Runtime::kIsJSReceiver:
- case Runtime::kInlineIsJSReceiver:
- case Runtime::kIsSmi:
- case Runtime::kInlineIsSmi:
- case Runtime::kIsArray:
- case Runtime::kInlineIsArray:
- case Runtime::kIsFunction:
- case Runtime::kIsDate:
- case Runtime::kIsJSProxy:
- case Runtime::kIsRegExp:
- case Runtime::kIsTypedArray:
- // Loads.
- case Runtime::kLoadLookupSlotForCall:
- // Arrays.
- case Runtime::kArraySpeciesConstructor:
- case Runtime::kNormalizeElements:
- case Runtime::kGetArrayKeys:
- case Runtime::kHasComplexElements:
- case Runtime::kEstimateNumberOfElements:
- // Errors.
- case Runtime::kReThrow:
- case Runtime::kThrowReferenceError:
- case Runtime::kThrowSymbolIteratorInvalid:
- case Runtime::kThrowIteratorResultNotAnObject:
- case Runtime::kNewTypeError:
- // Strings.
- case Runtime::kInlineStringCharCodeAt:
- case Runtime::kStringCharCodeAt:
- case Runtime::kStringIndexOf:
- case Runtime::kStringReplaceOneCharWithString:
- case Runtime::kSubString:
- case Runtime::kInlineSubString:
- case Runtime::kRegExpInternalReplace:
- // Literals.
- case Runtime::kCreateArrayLiteral:
- case Runtime::kCreateObjectLiteral:
- case Runtime::kCreateRegExpLiteral:
- // Misc.
- case Runtime::kForInPrepare:
- case Runtime::kInlineCall:
- case Runtime::kCall:
- case Runtime::kInlineMaxSmi:
- case Runtime::kMaxSmi:
- case Runtime::kHasInPrototypeChain:
- return true;
+ INTRINSIC_WHITELIST(CASE)
+ return true;
default:
if (FLAG_trace_side_effect_free_debug_evaluate) {
PrintF("[debug-evaluate] intrinsic %s may cause side effect.\n",
@@ -324,6 +328,9 @@ bool IntrinsicHasNoSideEffect(Runtime::FunctionId id) {
}
return false;
}
+
+#undef CASE
+#undef INTRINSIC_WHITELIST
}
bool BytecodeHasNoSideEffect(interpreter::Bytecode bytecode) {
@@ -556,6 +563,8 @@ bool BuiltinHasNoSideEffect(Builtins::Name id) {
case Builtins::kGlobalEncodeURIComponent:
case Builtins::kGlobalEscape:
case Builtins::kGlobalUnescape:
+ case Builtins::kGlobalIsFinite:
+ case Builtins::kGlobalIsNaN:
// Error builtins.
case Builtins::kMakeError:
case Builtins::kMakeTypeError:
« no previous file with comments | « no previous file | test/debugger/debug/debug-evaluate-no-side-effect-builtins-2.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698