You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
1001 B
27 lines
1001 B
'use strict'; |
|
|
|
let fastProto = null; |
|
|
|
// Creates an object with permanently fast properties in V8. See Toon Verwaest's |
|
// post https://medium.com/@tverwaes/setting-up-prototypes-in-v8-ec9c9491dfe2#5f62 |
|
// for more details. Use %HasFastProperties(object) and the Node.js flag |
|
// --allow-natives-syntax to check whether an object has fast properties. |
|
function FastObject(o) { |
|
// A prototype object will have "fast properties" enabled once it is checked |
|
// against the inline property cache of a function, e.g. fastProto.property: |
|
// https://github.com/v8/v8/blob/6.0.122/test/mjsunit/fast-prototype.js#L48-L63 |
|
if (fastProto !== null && typeof fastProto.property) { |
|
const result = fastProto; |
|
fastProto = FastObject.prototype = null; |
|
return result; |
|
} |
|
fastProto = FastObject.prototype = o == null ? Object.create(null) : o; |
|
return new FastObject; |
|
} |
|
|
|
// Initialize the inline property cache of FastObject |
|
FastObject(); |
|
|
|
module.exports = function toFastproperties(o) { |
|
return FastObject(o); |
|
};
|
|
|