Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - Toggleable JsValue internals displaying #1865

Closed
wants to merge 1 commit into from

Conversation

HalidOdat
Copy link
Member

@HalidOdat HalidOdat commented Feb 23, 2022

This PR makes JsValue (object) only display owned properties, cleans up object printing. This can be toggled with value.display().internals(true)

>> ({x: 1, y: ""})
Before:

{
   x: 1,
   y: "",
__proto__: {
hasOwnProperty: {
      length: 1,
        name: "hasOwnProperty",
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
propertyIsEnumerable: {
      length: 1,
        name: "propertyIsEnumerable",
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
toString: {
      length: 0,
        name: "toString",
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
 valueOf: {
      length: 0,
        name: "valueOf",
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
isPrototypeOf: {
      length: 1,
        name: "isPrototypeOf",
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
constructor: {
      create: {
          length: 2,
            name: "create",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
setPrototypeOf: {
          length: 2,
            name: "setPrototypeOf",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
getPrototypeOf: {
          length: 1,
            name: "getPrototypeOf",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
defineProperty: {
          length: 3,
            name: "defineProperty",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
defineProperties: {
          length: 2,
            name: "defineProperties",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
      assign: {
          length: 2,
            name: "assign",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
          is: {
          length: 2,
            name: "is",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
        keys: {
          length: 1,
            name: "keys",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
      values: {
          length: 1,
            name: "values",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
     entries: {
          length: 1,
            name: "entries",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
        seal: {
          length: 1,
            name: "seal",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
    isSealed: {
          length: 1,
            name: "isSealed",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
      freeze: {
          length: 1,
            name: "freeze",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
    isFrozen: {
          length: 1,
            name: "isFrozen",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
preventExtensions: {
          length: 1,
            name: "preventExtensions",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
isExtensible: {
          length: 1,
            name: "isExtensible",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
getOwnPropertyDescriptor: {
          length: 2,
            name: "getOwnPropertyDescriptor",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
getOwnPropertyDescriptors: {
          length: 1,
            name: "getOwnPropertyDescriptors",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
getOwnPropertyNames: {
          length: 1,
            name: "getOwnPropertyNames",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
getOwnPropertySymbols: {
          length: 1,
            name: "getOwnPropertySymbols",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
      hasOwn: {
          length: 2,
            name: "hasOwn",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
 fromEntries: {
          length: 1,
            name: "fromEntries",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
      length: 1,
        name: "Object",
   prototype: [Cycle],
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
__proto__: null
    }
}

After:

{
   x: 1,
   y: ""
}

@HalidOdat HalidOdat added enhancement New feature or request API labels Feb 23, 2022
@HalidOdat HalidOdat added this to the v0.14.0 milestone Feb 23, 2022
@github-actions
Copy link

github-actions bot commented Feb 23, 2022

Test262 conformance changes

VM implementation

Test result main count PR count difference
Total 88,342 88,342 0
Passed 41,386 41,386 0
Ignored 21,413 21,413 0
Failed 25,543 25,543 0
Panics 12 12 0
Conformance 46.85% 46.85% 0.00%

@codecov
Copy link

codecov bot commented Feb 23, 2022

Codecov Report

Merging #1865 (d0e93a2) into main (2c19c6a) will decrease coverage by 0.03%.
The diff coverage is 25.00%.

❗ Current head d0e93a2 differs from pull request most recent head e6cda69. Consider uploading reports for the commit e6cda69 to get more accurate results

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #1865      +/-   ##
==========================================
- Coverage   56.30%   56.26%   -0.04%     
==========================================
  Files         201      201              
  Lines       17937    17940       +3     
==========================================
- Hits        10099    10094       -5     
- Misses       7838     7846       +8     
Impacted Files Coverage Δ
boa_engine/src/value/mod.rs 58.68% <ø> (ø)
boa_engine/src/value/display.rs 81.30% <25.00%> (-7.16%) ⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 2c19c6a...e6cda69. Read the comment docs.

@HalidOdat
Copy link
Member Author

I have no idea why some test are failing... maybe they are false positives? 🤔

@github-actions
Copy link

Benchmark for 9cb7d91

Click to view benchmark
Test Base PR %
Arithmetic operations (Compiler) 519.4±3.74ns 514.8±1.52ns -0.89%
Arithmetic operations (Execution) 2.1±0.12µs 2.4±0.05µs +14.29%
Arithmetic operations (Parser) 5.8±0.20µs 7.2±0.03µs +24.14%
Array access (Compiler) 1402.6±9.11ns 1393.1±22.37ns -0.68%
Array access (Execution) 10.5±0.50µs 12.2±0.10µs +16.19%
Array access (Parser) 12.8±0.35µs 14.4±0.02µs +12.50%
Array creation (Compiler) 2.0±0.02µs 1994.2±9.76ns -0.29%
Array creation (Execution) 3.3±0.20ms 3.7±0.01ms +12.12%
Array creation (Parser) 14.4±0.26µs 16.2±0.05µs +12.50%
Array pop (Compiler) 3.9±0.01µs 3.9±0.01µs 0.00%
Array pop (Execution) 1371.0±55.61µs 1599.7±5.89µs +16.68%
Array pop (Parser) 157.3±1.30µs 169.9±0.73µs +8.01%
Boolean Object Access (Compiler) 1092.1±15.00ns 1098.3±5.87ns +0.57%
Boolean Object Access (Execution) 6.3±0.25µs 6.8±0.02µs +7.94%
Boolean Object Access (Parser) 14.3±0.76µs 17.7±0.02µs +23.78%
Clean js (Compiler) 3.8±0.06µs 3.8±0.02µs 0.00%
Clean js (Execution) 1130.9±61.16µs 1293.8±7.74µs +14.40%
Clean js (Parser) 31.0±0.32µs 35.2±0.17µs +13.55%
Create Realm 318.4±3.53ns 319.8±0.91ns +0.44%
Dynamic Object Property Access (Compiler) 1799.5±18.62ns 1765.1±8.06ns -1.91%
Dynamic Object Property Access (Execution) 7.4±0.42µs 8.0±0.04µs +8.11%
Dynamic Object Property Access (Parser) 11.5±0.09µs 12.6±0.02µs +9.57%
Fibonacci (Compiler) 2.5±0.09µs 2.5±0.02µs 0.00%
Fibonacci (Execution) 2.1±0.06ms 2.1±0.03ms 0.00%
Fibonacci (Parser) 17.5±0.24µs 20.0±0.08µs +14.29%
For loop (Compiler) 2.0±0.06µs 2.2±0.04µs +10.00%
For loop (Execution) 51.1±0.25µs 51.0±0.18µs -0.20%
For loop (Parser) 15.2±0.09µs 17.1±0.11µs +12.50%
Mini js (Compiler) 3.7±0.04µs 3.6±0.08µs -2.70%
Mini js (Execution) 1101.1±35.41µs 1199.5±7.64µs +8.94%
Mini js (Parser) 26.6±0.94µs 31.0±0.42µs +16.54%
Number Object Access (Compiler) 1032.5±15.00ns 1029.7±6.32ns -0.27%
Number Object Access (Execution) 5.0±0.19µs 5.3±0.04µs +6.00%
Number Object Access (Parser) 11.2±0.54µs 13.8±0.02µs +23.21%
Object Creation (Compiler) 1568.1±12.64ns 1551.0±6.62ns -1.09%
Object Creation (Execution) 7.1±0.22µs 7.2±0.03µs +1.41%
Object Creation (Parser) 10.0±0.12µs 11.0±0.05µs +10.00%
RegExp (Compiler) 1807.9±11.40ns 1818.2±11.47ns +0.57%
RegExp (Execution) 12.8±0.40µs 13.9±0.08µs +8.59%
RegExp (Parser) 10.8±0.23µs 13.0±1.25µs +20.37%
RegExp Creation (Compiler) 1545.8±9.83ns 1569.7±4.43ns +1.55%
RegExp Creation (Execution) 9.8±0.35µs 10.7±0.04µs +9.18%
RegExp Creation (Parser) 8.8±0.23µs 10.2±0.02µs +15.91%
RegExp Literal (Compiler) 1780.0±26.68ns 1787.6±7.85ns +0.43%
RegExp Literal (Execution) 13.2±0.54µs 13.9±0.06µs +5.30%
RegExp Literal (Parser) 8.3±0.41µs 9.8±0.02µs +18.07%
RegExp Literal Creation (Compiler) 1547.8±10.75ns 1553.2±8.21ns +0.35%
RegExp Literal Creation (Execution) 9.7±0.52µs 10.6±0.20µs +9.28%
RegExp Literal Creation (Parser) 6.9±0.13µs 7.7±0.02µs +11.59%
Static Object Property Access (Compiler) 1566.0±14.28ns 1550.9±33.76ns -0.96%
Static Object Property Access (Execution) 7.0±0.28µs 7.4±0.18µs +5.71%
Static Object Property Access (Parser) 10.7±0.12µs 11.7±0.09µs +9.35%
String Object Access (Compiler) 1465.8±27.95ns 1475.5±7.77ns +0.66%
String Object Access (Execution) 7.8±0.39µs 8.8±0.04µs +12.82%
String Object Access (Parser) 14.8±0.58µs 17.4±0.07µs +17.57%
String comparison (Compiler) 2.4±0.02µs 2.4±0.02µs 0.00%
String comparison (Execution) 6.3±0.19µs 7.0±0.06µs +11.11%
String comparison (Parser) 11.2±0.61µs 13.5±0.06µs +20.54%
String concatenation (Compiler) 1835.3±10.47ns 1797.5±5.70ns -2.06%
String concatenation (Execution) 5.4±0.22µs 6.2±0.02µs +14.81%
String concatenation (Parser) 7.7±0.36µs 9.1±0.01µs +18.18%
String copy (Compiler) 1448.0±11.19ns 1421.9±14.28ns -1.80%
String copy (Execution) 5.1±0.22µs 5.6±0.03µs +9.80%
String copy (Parser) 5.6±0.28µs 6.7±0.02µs +19.64%
Symbols (Compiler) 958.6±33.16ns 987.3±6.21ns +2.99%
Symbols (Execution) 5.2±0.06µs 5.3±0.03µs +1.92%
Symbols (Parser) 4.5±0.03µs 4.9±0.03µs +8.89%

@HalidOdat
Copy link
Member Author

HalidOdat commented Feb 23, 2022

I have no idea why some test are failing... maybe they are false positives? thinking

Well it turns out that the way we check if we throw a Test262Error in Negative test cases we display then to_string it and check if it contains the string Test262Error. And now we don't print internal stuff so we print so just { message: "" } is printed.
A quick fix would be to call internals in the negative test cases so we print internals (like we did before) and find a better way of checking what error was printed in the future.

Copy link
Member

@Razican Razican left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, but I would prefer if the Test262 tests are fixed. In the future, we might be able to do this better without printing. Can we somehow get the constructor of these errors to know that they are Test262?

@HalidOdat
Copy link
Member Author

HalidOdat commented Feb 23, 2022

Looks good to me, but I would prefer if the Test262 tests are fixed. In the future, we might be able to do this better without printing.

Fixed in the latest commit

Can we somehow get the constructor of these errors to know that they are Test262?

We could get the constructor from the global object and then call .instanceof() to see if it is indeed a Test262Error object instantiation

@github-actions
Copy link

Benchmark for 5a177bd

Click to view benchmark
Test Base PR %
Arithmetic operations (Compiler) 388.8±3.26ns 390.6±0.86ns +0.46%
Arithmetic operations (Execution) 1791.2±1.75ns 1784.5±1.82ns -0.37%
Arithmetic operations (Parser) 4.8±0.01µs 5.5±0.00µs +14.58%
Array access (Compiler) 1120.2±2.87ns 1198.5±3.11ns +6.99%
Array access (Execution) 9.2±0.02µs 9.1±0.02µs -1.09%
Array access (Parser) 10.4±0.02µs 11.7±0.02µs +12.50%
Array creation (Compiler) 1650.9±4.62ns 1518.7±2.98ns -8.01%
Array creation (Execution) 3.1±0.00ms 2.7±0.01ms -12.90%
Array creation (Parser) 11.5±0.02µs 13.0±0.02µs +13.04%
Array pop (Compiler) 3.0±0.01µs 2.9±0.01µs -3.33%
Array pop (Execution) 1373.6±6.02µs 1185.9±14.66µs -13.66%
Array pop (Parser) 119.6±0.08µs 135.6±0.14µs +13.38%
Boolean Object Access (Compiler) 910.8±1.14ns 912.9±2.34ns +0.23%
Boolean Object Access (Execution) 5.4±0.01µs 4.9±0.01µs -9.26%
Boolean Object Access (Parser) 14.0±0.06µs 14.0±0.04µs 0.00%
Clean js (Compiler) 2.9±0.00µs 2.9±0.01µs 0.00%
Clean js (Execution) 991.9±7.00µs 957.6±4.23µs -3.46%
Clean js (Parser) 24.9±0.04µs 28.1±0.13µs +12.85%
Create Realm 229.7±0.38ns 266.3±0.27ns +15.93%
Dynamic Object Property Access (Compiler) 1427.5±6.08ns 1511.7±3.59ns +5.90%
Dynamic Object Property Access (Execution) 6.1±0.03µs 5.9±0.02µs -3.28%
Dynamic Object Property Access (Parser) 9.3±0.02µs 10.4±0.02µs +11.83%
Fibonacci (Compiler) 2.0±0.01µs 2.2±0.01µs +10.00%
Fibonacci (Execution) 1593.3±4.40µs 1560.3±6.67µs -2.07%
Fibonacci (Parser) 14.0±0.02µs 15.8±0.02µs +12.86%
For loop (Compiler) 1731.1±4.96ns 1808.8±3.81ns +4.49%
For loop (Execution) 38.2±0.09µs 38.2±0.08µs 0.00%
For loop (Parser) 11.9±0.03µs 13.4±0.02µs +12.61%
Mini js (Compiler) 2.8±0.01µs 2.8±0.01µs 0.00%
Mini js (Execution) 911.7±4.86µs 880.5±3.99µs -3.42%
Mini js (Parser) 21.9±0.03µs 24.6±0.03µs +12.33%
Number Object Access (Compiler) 849.4±2.69ns 852.4±3.89ns +0.35%
Number Object Access (Execution) 4.1±0.01µs 3.9±0.03µs -4.88%
Number Object Access (Parser) 10.9±0.01µs 11.0±0.02µs +0.92%
Object Creation (Compiler) 1221.0±2.72ns 1294.8±2.70ns +6.04%
Object Creation (Execution) 5.5±0.01µs 5.4±0.01µs -1.82%
Object Creation (Parser) 8.0±0.03µs 9.1±0.05µs +13.75%
RegExp (Compiler) 1453.9±9.96ns 1521.7±3.80ns +4.66%
RegExp (Execution) 10.8±0.06µs 10.6±0.03µs -1.85%
RegExp (Parser) 8.7±0.02µs 9.9±0.02µs +13.79%
RegExp Creation (Compiler) 1233.6±15.05ns 1313.4±2.45ns +6.47%
RegExp Creation (Execution) 8.1±0.03µs 8.0±0.08µs -1.23%
RegExp Creation (Parser) 7.3±0.02µs 8.3±0.02µs +13.70%
RegExp Literal (Compiler) 1404.4±13.67ns 1522.8±3.56ns +8.43%
RegExp Literal (Execution) 10.8±0.05µs 10.6±0.03µs -1.85%
RegExp Literal (Parser) 7.0±0.02µs 8.0±0.02µs +14.29%
RegExp Literal Creation (Compiler) 1216.6±3.45ns 1328.8±4.93ns +9.22%
RegExp Literal Creation (Execution) 8.0±0.03µs 8.0±0.02µs 0.00%
RegExp Literal Creation (Parser) 5.5±0.02µs 6.3±0.02µs +14.55%
Static Object Property Access (Compiler) 1246.7±2.02ns 1313.7±4.62ns +5.37%
Static Object Property Access (Execution) 5.7±0.03µs 5.5±0.01µs -3.51%
Static Object Property Access (Parser) 8.7±0.01µs 9.7±0.02µs +11.49%
String Object Access (Compiler) 1217.4±3.20ns 1194.9±3.01ns -1.85%
String Object Access (Execution) 7.0±0.03µs 6.5±0.04µs -7.14%
String Object Access (Parser) 13.7±0.01µs 13.7±0.03µs 0.00%
String comparison (Compiler) 1931.4±5.16ns 1796.7±7.46ns -6.97%
String comparison (Execution) 5.2±0.01µs 5.2±0.01µs 0.00%
String comparison (Parser) 9.4±0.02µs 10.6±0.03µs +12.77%
String concatenation (Compiler) 1484.7±9.20ns 1380.1±5.88ns -7.05%
String concatenation (Execution) 4.8±0.01µs 4.6±0.02µs -4.17%
String concatenation (Parser) 6.5±0.03µs 7.3±0.03µs +12.31%
String copy (Compiler) 1200.6±4.05ns 1056.8±5.24ns -11.98%
String copy (Execution) 4.3±0.01µs 4.2±0.01µs -2.33%
String copy (Parser) 4.8±0.01µs 5.5±0.02µs +14.58%
Symbols (Compiler) 786.5±11.79ns 813.8±1.97ns +3.47%
Symbols (Execution) 4.0±0.02µs 3.9±0.01µs -2.50%
Symbols (Parser) 3.7±0.01µs 4.2±0.02µs +13.51%

@raskad
Copy link
Member

raskad commented Feb 23, 2022

bors r+

bors bot pushed a commit that referenced this pull request Feb 23, 2022
This PR makes `JsValue` (object) only display owned properties, cleans up object printing. This can be toggled with `value.display().internals(true)`

`>> ({x: 1, y: ""})`
_Before:_
<details>
<pre>
{
   x: 1,
   y: "",
__proto__: {
hasOwnProperty: {
      length: 1,
        name: "hasOwnProperty",
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
propertyIsEnumerable: {
      length: 1,
        name: "propertyIsEnumerable",
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
toString: {
      length: 0,
        name: "toString",
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
 valueOf: {
      length: 0,
        name: "valueOf",
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
isPrototypeOf: {
      length: 1,
        name: "isPrototypeOf",
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
constructor: {
      create: {
          length: 2,
            name: "create",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
setPrototypeOf: {
          length: 2,
            name: "setPrototypeOf",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
getPrototypeOf: {
          length: 1,
            name: "getPrototypeOf",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
defineProperty: {
          length: 3,
            name: "defineProperty",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
defineProperties: {
          length: 2,
            name: "defineProperties",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
      assign: {
          length: 2,
            name: "assign",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
          is: {
          length: 2,
            name: "is",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
        keys: {
          length: 1,
            name: "keys",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
      values: {
          length: 1,
            name: "values",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
     entries: {
          length: 1,
            name: "entries",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
        seal: {
          length: 1,
            name: "seal",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
    isSealed: {
          length: 1,
            name: "isSealed",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
      freeze: {
          length: 1,
            name: "freeze",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
    isFrozen: {
          length: 1,
            name: "isFrozen",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
preventExtensions: {
          length: 1,
            name: "preventExtensions",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
isExtensible: {
          length: 1,
            name: "isExtensible",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
getOwnPropertyDescriptor: {
          length: 2,
            name: "getOwnPropertyDescriptor",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
getOwnPropertyDescriptors: {
          length: 1,
            name: "getOwnPropertyDescriptors",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
getOwnPropertyNames: {
          length: 1,
            name: "getOwnPropertyNames",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
getOwnPropertySymbols: {
          length: 1,
            name: "getOwnPropertySymbols",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
      hasOwn: {
          length: 2,
            name: "hasOwn",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
 fromEntries: {
          length: 1,
            name: "fromEntries",
       __proto__: {
                name: "",
              length: 0,
               apply: {
                  length: 1,
                    name: "apply",
               __proto__: [Cycle]
                    },
                bind: {
                  length: 1,
                    name: "bind",
               __proto__: [Cycle]
                    },
                call: {
                  length: 1,
                    name: "call",
               __proto__: [Cycle]
                    },
            toString: {
                  length: 0,
                    name: "toString",
               __proto__: [Cycle]
                    },
         constructor: {
                  length: 1,
                    name: "Function",
               prototype: [Cycle],
               __proto__: [Cycle]
                    },
Symbol(Symbol.hasInstance): {
                  length: 1,
                    name: "[Symbol.iterator]",
               __proto__: [Cycle]
                    },
           __proto__: [Cycle]
                }
            },
      length: 1,
        name: "Object",
   prototype: [Cycle],
   __proto__: {
            name: "",
          length: 0,
           apply: {
              length: 1,
                name: "apply",
           __proto__: [Cycle]
                },
            bind: {
              length: 1,
                name: "bind",
           __proto__: [Cycle]
                },
            call: {
              length: 1,
                name: "call",
           __proto__: [Cycle]
                },
        toString: {
              length: 0,
                name: "toString",
           __proto__: [Cycle]
                },
     constructor: {
              length: 1,
                name: "Function",
           prototype: [Cycle],
           __proto__: [Cycle]
                },
Symbol(Symbol.hasInstance): {
              length: 1,
                name: "[Symbol.iterator]",
           __proto__: [Cycle]
                },
       __proto__: [Cycle]
            }
        },
__proto__: null
    }
}
</pre>
</details>

_After:_
```text
{
   x: 1,
   y: ""
}
```
@bors
Copy link

bors bot commented Feb 23, 2022

Pull request successfully merged into main.

Build succeeded:

@bors bors bot changed the title Toggleable JsValue internals displaying [Merged by Bors] - Toggleable JsValue internals displaying Feb 23, 2022
@bors bors bot closed this Feb 23, 2022
@bors bors bot deleted the better-jsvalue-display branch February 23, 2022 19:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
API enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants