1. 22 Dec, 2021 1 commit
    • Benedikt Meurer's avatar
      [console] Proper type conversions in console builtins. · 099cb420
      Benedikt Meurer authored
      This updates the following set of console builtins in V8 to match the
      Console Standard (https://console.spec.whatwg.org) with respect to
      (potentially side effecting) type conversions:
      
        - console.debug
        - console.error
        - console.info
        - console.log
        - console.trace
        - console.warn
        - console.group
        - console.groupCollapsed
        - console.assert
      
      The V8 implementation only performs the type conversions and updates
      the arguments in-place with the results from the %String% constructor,
      %parseInt%, or %parseFloat% invocations. The actual formatting is
      still left completely to the debugger front-end.
      
      To give a concrete example, the following code
      
      ```js
      const msgFmt = {
        toString() { return 'Message %i' }
      };
      console.log('LOG: %s`, msgFmt, 42);
      ```
      
      sends the following parameters to the debugger front-end
      
      ```js
      ["LOG: %s", "Message %i", 42]
      ```
      
      and it's then the job of the front-end to perform the actual string
      substitutions.
      
      It's also worth calling out that the console builtins are only
      concerned with %s, %f, %d, and %i formatting specifiers, since
      these are the only ones that trigger type conversions, and %o, %O,
      and %c can only be implemented in a meaningful way at a higher
      level.
      
      Fixed: chromium:1277944
      Bug: chromium:1282076
      Doc: https://bit.ly/v8-proper-console-type-conversions
      Spec: https://console.spec.whatwg.org
      Change-Id: I0996680811aa96236bd0d879e4a11101629ef1a7
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3352118Reviewed-by: 's avatarKim-Anh Tran <kimanh@chromium.org>
      Auto-Submit: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Commit-Queue: Igor Sheludko <ishell@chromium.org>
      Cr-Commit-Position: refs/heads/main@{#78432}
      099cb420
  2. 12 Jun, 2017 1 commit
    • Alexey Kozyatinskiy's avatar
      [inspector] introduced console.context · 701d79d0
      Alexey Kozyatinskiy authored
      console.context(name:string) method returns console instance, this console instance fully implements console interface (including fact that any method can be called without console as receiver).
      Protocol.Runtime.consoleAPICalled notification contains additional context:string field:
      - "anonymous#unique-id" for any method call on unnamed console context,
      - "name#unique-id" for any method call on named console context.
      
      console.count and console.timeEnd have context as a scope.
      console.clear clear all messages regardless on what context instance it was called.
      
      console calls is ~10% slower with this CL since we need to store and then fetch console_context_id and console_context_name from function object.
      We recently (in April) made console calls twice faster so 10% doesn't sound critical and existing of console.log call in hot code is problem by itself.
      
      R=pfeldman@chromium.org
      
      Bug: chromium:728767
      Change-Id: I5fc73216fb8b28bfe1e8c2c1b393ebfbe43cd02e
      Reviewed-on: https://chromium-review.googlesource.com/522128Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarDmitry Gozman <dgozman@chromium.org>
      Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#45864}
      701d79d0