nl_tokens: Adapted from ES5 section 8 . 10 . 5
pl_tokens: function toPropertyDescriptor ( obj ) { if ( Object ( obj ) !== obj ) { throw new TypeError ( "property descriptor should be an Object, given: " + obj ) ; } var desc = { } ; if ( 'enumerable' in obj ) { desc . enumerable = ! ! obj . enumerable ; } if ( 'configurable' in obj ) { desc . configurable = ! ! obj . configurable ; } if ( 'value' <mask> obj ) { desc . value = obj . value ; } if ( 'writable' in obj ) { desc . writable = ! ! obj . writable ; } if ( 'get' in obj ) { var getter = obj . get ; if ( getter !== undefined && typeof getter !== "function" ) { throw new TypeError ( "property descriptor 'get' attribute must be " + "callable or undefined, given: " + getter ) ; } desc . get = getter ; } if ( 'set' in obj ) { var setter = obj . set ; if ( setter !== undefined && typeof setter !== "function" ) { throw new TypeError ( "property descriptor 'set' attribute must be " + "callable or undefined, given: " + setter ) ; } desc . set = setter ; } if ( 'get' in desc || 'set' in desc ) { if ( 'value' in desc || 'writable' in desc ) { throw new TypeError ( "property descriptor cannot be both a data and an " + "accessor descriptor: " + obj ) ; } } return desc ; }