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

Side by Side Diff: src/debug/debug-evaluate.cc

Issue 2680163005: [debugger] extend whitelist for side-effect free debug-evaluate. (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/debugger/debug/debug-evaluate-no-side-effect-control.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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/debug/debug-evaluate.h" 5 #include "src/debug/debug-evaluate.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/compiler.h" 8 #include "src/compiler.h"
9 #include "src/contexts.h" 9 #include "src/contexts.h"
10 #include "src/debug/debug-frames.h" 10 #include "src/debug/debug-frames.h"
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 // Whitelist for intrinsics amd runtime functions. 264 // Whitelist for intrinsics amd runtime functions.
265 // Conversions. 265 // Conversions.
266 case Runtime::kToInteger: 266 case Runtime::kToInteger:
267 case Runtime::kInlineToInteger: 267 case Runtime::kInlineToInteger:
268 case Runtime::kToObject: 268 case Runtime::kToObject:
269 case Runtime::kInlineToObject: 269 case Runtime::kInlineToObject:
270 case Runtime::kToString: 270 case Runtime::kToString:
271 case Runtime::kInlineToString: 271 case Runtime::kInlineToString:
272 case Runtime::kToLength: 272 case Runtime::kToLength:
273 case Runtime::kInlineToLength: 273 case Runtime::kInlineToLength:
274 // Type checks.
275 case Runtime::kIsJSReceiver:
276 case Runtime::kInlineIsJSReceiver:
277 case Runtime::kIsSmi:
278 case Runtime::kInlineIsSmi:
279 case Runtime::kIsArray:
280 case Runtime::kIsFunction:
281 case Runtime::kIsDate:
282 case Runtime::kIsJSProxy:
283 case Runtime::kIsRegExp:
284 case Runtime::kIsTypedArray:
274 // Loads. 285 // Loads.
275 case Runtime::kLoadLookupSlotForCall: 286 case Runtime::kLoadLookupSlotForCall:
276 // Errors. 287 // Errors.
288 case Runtime::kReThrow:
277 case Runtime::kThrowReferenceError: 289 case Runtime::kThrowReferenceError:
290 case Runtime::kThrowSymbolIteratorInvalid:
291 case Runtime::kThrowIteratorResultNotAnObject:
292 case Runtime::kNewTypeError:
278 // Strings. 293 // Strings.
279 case Runtime::kInlineStringCharCodeAt: 294 case Runtime::kInlineStringCharCodeAt:
280 case Runtime::kStringCharCodeAt: 295 case Runtime::kStringCharCodeAt:
281 case Runtime::kStringIndexOf: 296 case Runtime::kStringIndexOf:
282 case Runtime::kStringReplaceOneCharWithString: 297 case Runtime::kStringReplaceOneCharWithString:
283 case Runtime::kSubString: 298 case Runtime::kSubString:
284 case Runtime::kInlineSubString: 299 case Runtime::kInlineSubString:
285 case Runtime::kStringToLowerCase: 300 case Runtime::kStringToLowerCase:
286 case Runtime::kStringToUpperCase: 301 case Runtime::kStringToUpperCase:
287 case Runtime::kRegExpInternalReplace: 302 case Runtime::kRegExpInternalReplace:
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 // Contexts. 360 // Contexts.
346 case Bytecode::kCreateBlockContext: 361 case Bytecode::kCreateBlockContext:
347 case Bytecode::kCreateCatchContext: 362 case Bytecode::kCreateCatchContext:
348 case Bytecode::kCreateFunctionContext: 363 case Bytecode::kCreateFunctionContext:
349 case Bytecode::kCreateEvalContext: 364 case Bytecode::kCreateEvalContext:
350 case Bytecode::kCreateWithContext: 365 case Bytecode::kCreateWithContext:
351 // Literals. 366 // Literals.
352 case Bytecode::kCreateArrayLiteral: 367 case Bytecode::kCreateArrayLiteral:
353 case Bytecode::kCreateObjectLiteral: 368 case Bytecode::kCreateObjectLiteral:
354 case Bytecode::kCreateRegExpLiteral: 369 case Bytecode::kCreateRegExpLiteral:
370 // Allocations.
371 case Bytecode::kCreateClosure:
372 case Bytecode::kCreateUnmappedArguments:
373 // Conversions.
374 case Bytecode::kToObject:
355 // Misc. 375 // Misc.
356 case Bytecode::kCreateUnmappedArguments: 376 case Bytecode::kForInPrepare:
jgruber 2017/02/09 10:47:45 There's also a corresponding runtime function you
Yang 2017/02/09 11:23:00 Done.
377 case Bytecode::kForInNext:
378 case Bytecode::kForInStep:
357 case Bytecode::kThrow: 379 case Bytecode::kThrow:
380 case Bytecode::kReThrow:
358 case Bytecode::kIllegal: 381 case Bytecode::kIllegal:
359 case Bytecode::kCallJSRuntime: 382 case Bytecode::kCallJSRuntime:
360 case Bytecode::kStackCheck: 383 case Bytecode::kStackCheck:
361 case Bytecode::kReturn: 384 case Bytecode::kReturn:
362 case Bytecode::kSetPendingMessage: 385 case Bytecode::kSetPendingMessage:
363 return true; 386 return true;
364 default: 387 default:
365 if (FLAG_trace_side_effect_free_debug_evaluate) { 388 if (FLAG_trace_side_effect_free_debug_evaluate) {
366 PrintF("[debug-evaluate] bytecode %s may cause side effect.\n", 389 PrintF("[debug-evaluate] bytecode %s may cause side effect.\n",
367 Bytecodes::ToString(bytecode)); 390 Bytecodes::ToString(bytecode));
368 } 391 }
369 return false; 392 return false;
370 } 393 }
371 } 394 }
372 395
373 bool BuiltinHasNoSideEffect(Builtins::Name id) { 396 bool BuiltinHasNoSideEffect(Builtins::Name id) {
374 switch (id) { 397 switch (id) {
375 // Whitelist for builtins. 398 // Whitelist for builtins.
399 // Array builtins.
400 case Builtins::kArrayPrototypeValues:
376 // Math builtins. 401 // Math builtins.
377 case Builtins::kMathAbs: 402 case Builtins::kMathAbs:
378 case Builtins::kMathAcos: 403 case Builtins::kMathAcos:
379 case Builtins::kMathAcosh: 404 case Builtins::kMathAcosh:
380 case Builtins::kMathAsin: 405 case Builtins::kMathAsin:
381 case Builtins::kMathAsinh: 406 case Builtins::kMathAsinh:
382 case Builtins::kMathAtan: 407 case Builtins::kMathAtan:
383 case Builtins::kMathAtanh: 408 case Builtins::kMathAtanh:
384 case Builtins::kMathAtan2: 409 case Builtins::kMathAtan2:
385 case Builtins::kMathCeil: 410 case Builtins::kMathCeil:
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 537
513 if (FLAG_trace_side_effect_free_debug_evaluate) { 538 if (FLAG_trace_side_effect_free_debug_evaluate) {
514 PrintF("[debug-evaluate] API Callback at %p may cause side effect.\n", 539 PrintF("[debug-evaluate] API Callback at %p may cause side effect.\n",
515 reinterpret_cast<void*>(function_addr)); 540 reinterpret_cast<void*>(function_addr));
516 } 541 }
517 return false; 542 return false;
518 } 543 }
519 544
520 } // namespace internal 545 } // namespace internal
521 } // namespace v8 546 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/debugger/debug/debug-evaluate-no-side-effect-control.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698