lib: use safe methods from primordials · nodejs/node@112cc7c (original) (raw)

`@@ -2,27 +2,17 @@

`

2

2

``

3

3

`const Buffer = require('buffer').Buffer;

`

4

4

`const {

`

5

``

`-

SafeSet,

`

``

5

`+

ArrayPrototype,

`

``

6

`+

FunctionPrototype,

`

6

7

` Object,

`

7

8

` ObjectPrototype,

`

8

``

`-

FunctionPrototype,

`

9

``

`-

ArrayPrototype

`

``

9

`+

SafeSet,

`

10

10

`} = primordials;

`

11

11

``

12

12

`const kSerializedError = 0;

`

13

13

`const kSerializedObject = 1;

`

14

14

`const kInspectedError = 2;

`

15

15

``

16

``

`-

const GetPrototypeOf = Object.getPrototypeOf;

`

17

``

`-

const GetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

`

18

``

`-

const GetOwnPropertyNames = Object.getOwnPropertyNames;

`

19

``

`-

const DefineProperty = Object.defineProperty;

`

20

``

`-

const Assign = Object.assign;

`

21

``

`-

const ObjectPrototypeToString =

`

22

``

`-

FunctionPrototype.call.bind(ObjectPrototype.toString);

`

23

``

`-

const ForEach = FunctionPrototype.call.bind(ArrayPrototype.forEach);

`

24

``

`-

const Call = FunctionPrototype.call.bind(FunctionPrototype.call);

`

25

``

-

26

16

`const errors = {

`

27

17

` Error, TypeError, RangeError, URIError, SyntaxError, ReferenceError, EvalError

`

28

18

`};

`

`@@ -32,17 +22,18 @@ function TryGetAllProperties(object, target = object) {

`

32

22

`const all = Object.create(null);

`

33

23

`if (object === null)

`

34

24

`return all;

`

35

``

`-

Assign(all, TryGetAllProperties(GetPrototypeOf(object), target));

`

36

``

`-

const keys = GetOwnPropertyNames(object);

`

37

``

`-

ForEach(keys, (key) => {

`

``

25

`+

Object.assign(all,

`

``

26

`+

TryGetAllProperties(Object.getPrototypeOf(object), target));

`

``

27

`+

const keys = Object.getOwnPropertyNames(object);

`

``

28

`+

ArrayPrototype.forEach(keys, (key) => {

`

38

29

`let descriptor;

`

39

30

`try {

`

40

``

`-

descriptor = GetOwnPropertyDescriptor(object, key);

`

``

31

`+

descriptor = Object.getOwnPropertyDescriptor(object, key);

`

41

32

`} catch { return; }

`

42

33

`const getter = descriptor.get;

`

43

34

`if (getter && key !== 'proto') {

`

44

35

`try {

`

45

``

`-

descriptor.value = Call(getter, target);

`

``

36

`+

descriptor.value = FunctionPrototype.call(getter, target);

`

46

37

`} catch {}

`

47

38

`}

`

48

39

`if ('value' in descriptor && typeof descriptor.value !== 'function') {

`

`@@ -59,10 +50,10 @@ function GetConstructors(object) {

`

59

50

``

60

51

`for (var current = object;

`

61

52

`current !== null;

`

62

``

`-

current = GetPrototypeOf(current)) {

`

63

``

`-

const desc = GetOwnPropertyDescriptor(current, 'constructor');

`

``

53

`+

current = Object.getPrototypeOf(current)) {

`

``

54

`+

const desc = Object.getOwnPropertyDescriptor(current, 'constructor');

`

64

55

`if (desc && desc.value) {

`

65

``

`-

DefineProperty(constructors, constructors.length, {

`

``

56

`+

Object.defineProperty(constructors, constructors.length, {

`

66

57

`value: desc.value, enumerable: true

`

67

58

`});

`

68

59

`}

`

`@@ -72,7 +63,7 @@ function GetConstructors(object) {

`

72

63

`}

`

73

64

``

74

65

`function GetName(object) {

`

75

``

`-

const desc = GetOwnPropertyDescriptor(object, 'name');

`

``

66

`+

const desc = Object.getOwnPropertyDescriptor(object, 'name');

`

76

67

`return desc && desc.value;

`

77

68

`}

`

78

69

``

`@@ -89,7 +80,7 @@ function serializeError(error) {

`

89

80

`if (!serialize) serialize = require('v8').serialize;

`

90

81

`try {

`

91

82

`if (typeof error === 'object' &&

`

92

``

`-

ObjectPrototypeToString(error) === '[object Error]') {

`

``

83

`+

ObjectPrototype.toString(error) === '[object Error]') {

`

93

84

`const constructors = GetConstructors(error);

`

94

85

`for (var i = 0; i < constructors.length; i++) {

`

95

86

`const name = GetName(constructors[i]);

`