• jwolfe's avatar
    Implement new Function.prototype.toString --harmony-function-tostring · d1d4b9ce
    jwolfe authored
    For functions declared in source code, the .toString() representation
    will be an excerpt of the source code.
    * For functions declared with the "function" keyword, the excerpt
      starts at the "function" or "async" keyword and ends at the final "}".
      The previous behavior would start the excerpt at the "(" of the
      parameter list, and prepend a canonical `"function " + name` or
      similar, which would discard comments and formatting surrounding the
      function's name. Anonymous functions declared as function expressions
      no longer get the name "anonymous" in their toString representation.
    * For methods, the excerpt starts at the "get", "set", "*" (for
      generator methods), or property name, whichever comes first.
      Previously, the toString representation for methods would use a
      canonical prefix before the "(" of the parameter list. Note that any
      "static" keyword is omitted.
    * For arrow functions and class declarations, the excerpt is unchanged.
    
    For functions created with the Function, GeneratorFunction, or
    AsyncFunction constructors:
    * The string separating the parameter text and body text is now
      "\n) {\n", where previously it was "\n/*``*/) {\n" or ") {\n".
    * At one point, newline normalization was required by the spec here,
      but that was removed from the spec, and so this CL does not do it.
    
    Included in this CL is a fix for CreateDynamicFunction parsing. ')'
    and '`' characters in the parameter string are no longer disallowed,
    and Function("a=function(", "}){") is no longer allowed.
    
    BUG=v8:4958, v8:4230
    
    Review-Url: https://codereview.chromium.org/2156303002
    Cr-Commit-Position: refs/heads/master@{#43262}
    d1d4b9ce
runtime-compiler.cc 17.5 KB