22
22
if (!(r)) return env->ThrowRangeError (" out of range index" ); \
23
23
} while (0 )
24
24
25
- #define THROW_AND_RETURN_UNLESS_BUFFER (env, obj ) \
26
- do { \
27
- if (!HasInstance (obj)) \
28
- return env->ThrowTypeError (" argument should be a Buffer" ); \
29
- } while (0 )
30
-
31
- #define SPREAD_ARG (val, name ) \
32
- CHECK ((val)->IsUint8Array()); \
33
- Local<Uint8Array> name = (val).As<Uint8Array>(); \
34
- ArrayBuffer::Contents name##_c = name->Buffer ()->GetContents(); \
35
- const size_t name##_offset = name->ByteOffset (); \
36
- const size_t name##_length = name->ByteLength (); \
37
- char * const name##_data = \
38
- static_cast <char *>(name##_c.Data()) + name##_offset; \
39
- if (name##_length > 0 ) \
40
- CHECK_NE (name##_data, nullptr );
41
-
42
25
#define SLICE_START_END (start_arg, end_arg, end_max ) \
43
26
size_t start; \
44
27
size_t end; \
@@ -448,7 +431,7 @@ void StringSlice(const FunctionCallbackInfo<Value>& args) {
448
431
Isolate* isolate = env->isolate ();
449
432
450
433
THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
451
- SPREAD_ARG (args.This (), ts_obj);
434
+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
452
435
453
436
if (ts_obj_length == 0 )
454
437
return args.GetReturnValue ().SetEmptyString ();
@@ -465,7 +448,7 @@ void StringSlice<UCS2>(const FunctionCallbackInfo<Value>& args) {
465
448
Environment* env = Environment::GetCurrent (args);
466
449
467
450
THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
468
- SPREAD_ARG (args.This (), ts_obj);
451
+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
469
452
470
453
if (ts_obj_length == 0 )
471
454
return args.GetReturnValue ().SetEmptyString ();
@@ -543,8 +526,8 @@ void Copy(const FunctionCallbackInfo<Value> &args) {
543
526
THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
544
527
THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
545
528
Local<Object> target_obj = args[0 ].As <Object>();
546
- SPREAD_ARG (args.This (), ts_obj);
547
- SPREAD_ARG (target_obj, target);
529
+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
530
+ SPREAD_BUFFER_ARG (target_obj, target);
548
531
549
532
size_t target_start;
550
533
size_t source_start;
@@ -577,7 +560,7 @@ void Fill(const FunctionCallbackInfo<Value>& args) {
577
560
Environment* env = Environment::GetCurrent (args);
578
561
579
562
THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
580
- SPREAD_ARG (args[0 ], ts_obj);
563
+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
581
564
582
565
size_t start = args[2 ]->Uint32Value ();
583
566
size_t end = args[3 ]->Uint32Value ();
@@ -590,7 +573,7 @@ void Fill(const FunctionCallbackInfo<Value>& args) {
590
573
591
574
// First check if Buffer has been passed.
592
575
if (Buffer::HasInstance (args[1 ])) {
593
- SPREAD_ARG (args[1 ], fill_obj);
576
+ SPREAD_BUFFER_ARG (args[1 ], fill_obj);
594
577
str_length = fill_obj_length;
595
578
memcpy (ts_obj_data + start, fill_obj_data, MIN (str_length, fill_length));
596
579
goto start_fill;
@@ -669,7 +652,7 @@ void StringWrite(const FunctionCallbackInfo<Value>& args) {
669
652
Environment* env = Environment::GetCurrent (args);
670
653
671
654
THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
672
- SPREAD_ARG (args.This (), ts_obj);
655
+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
673
656
674
657
if (!args[0 ]->IsString ())
675
658
return env->ThrowTypeError (" Argument must be a string" );
@@ -747,7 +730,7 @@ static inline void Swizzle(char* start, unsigned int len) {
747
730
template <typename T, enum Endianness endianness>
748
731
void ReadFloatGeneric (const FunctionCallbackInfo<Value>& args) {
749
732
THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[0 ]);
750
- SPREAD_ARG (args[0 ], ts_obj);
733
+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
751
734
752
735
uint32_t offset = args[1 ]->Uint32Value ();
753
736
CHECK_LE (offset + sizeof (T), ts_obj_length);
@@ -881,8 +864,8 @@ void CompareOffset(const FunctionCallbackInfo<Value> &args) {
881
864
882
865
THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
883
866
THROW_AND_RETURN_UNLESS_BUFFER (env, args[1 ]);
884
- SPREAD_ARG (args[0 ], ts_obj);
885
- SPREAD_ARG (args[1 ], target);
867
+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
868
+ SPREAD_BUFFER_ARG (args[1 ], target);
886
869
887
870
size_t target_start;
888
871
size_t source_start;
@@ -921,8 +904,8 @@ void Compare(const FunctionCallbackInfo<Value> &args) {
921
904
922
905
THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
923
906
THROW_AND_RETURN_UNLESS_BUFFER (env, args[1 ]);
924
- SPREAD_ARG (args[0 ], obj_a);
925
- SPREAD_ARG (args[1 ], obj_b);
907
+ SPREAD_BUFFER_ARG (args[0 ], obj_a);
908
+ SPREAD_BUFFER_ARG (args[1 ], obj_b);
926
909
927
910
size_t cmp_length = MIN (obj_a_length, obj_b_length);
928
911
@@ -977,7 +960,7 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args) {
977
960
UTF8);
978
961
979
962
THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[0 ]);
980
- SPREAD_ARG (args[0 ], ts_obj);
963
+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
981
964
982
965
Local<String> needle = args[1 ].As <String>();
983
966
int64_t offset_i64 = args[2 ]->IntegerValue ();
@@ -1084,8 +1067,8 @@ void IndexOfBuffer(const FunctionCallbackInfo<Value>& args) {
1084
1067
1085
1068
THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[0 ]);
1086
1069
THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[1 ]);
1087
- SPREAD_ARG (args[0 ], ts_obj);
1088
- SPREAD_ARG (args[1 ], buf);
1070
+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
1071
+ SPREAD_BUFFER_ARG (args[1 ], buf);
1089
1072
int64_t offset_i64 = args[2 ]->IntegerValue ();
1090
1073
bool is_forward = args[4 ]->IsTrue ();
1091
1074
@@ -1143,7 +1126,7 @@ void IndexOfNumber(const FunctionCallbackInfo<Value>& args) {
1143
1126
ASSERT (args[3 ]->IsBoolean ());
1144
1127
1145
1128
THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[0 ]);
1146
- SPREAD_ARG (args[0 ], ts_obj);
1129
+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
1147
1130
1148
1131
uint32_t needle = args[1 ]->Uint32Value ();
1149
1132
int64_t offset_i64 = args[2 ]->IntegerValue ();
@@ -1171,7 +1154,7 @@ void IndexOfNumber(const FunctionCallbackInfo<Value>& args) {
1171
1154
void Swap16 (const FunctionCallbackInfo<Value>& args) {
1172
1155
Environment* env = Environment::GetCurrent (args);
1173
1156
THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
1174
- SPREAD_ARG (args[0 ], ts_obj);
1157
+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
1175
1158
SwapBytes16 (ts_obj_data, ts_obj_length);
1176
1159
args.GetReturnValue ().Set (args[0 ]);
1177
1160
}
@@ -1180,7 +1163,7 @@ void Swap16(const FunctionCallbackInfo<Value>& args) {
1180
1163
void Swap32 (const FunctionCallbackInfo<Value>& args) {
1181
1164
Environment* env = Environment::GetCurrent (args);
1182
1165
THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
1183
- SPREAD_ARG (args[0 ], ts_obj);
1166
+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
1184
1167
SwapBytes32 (ts_obj_data, ts_obj_length);
1185
1168
args.GetReturnValue ().Set (args[0 ]);
1186
1169
}
@@ -1189,7 +1172,7 @@ void Swap32(const FunctionCallbackInfo<Value>& args) {
1189
1172
void Swap64 (const FunctionCallbackInfo<Value>& args) {
1190
1173
Environment* env = Environment::GetCurrent (args);
1191
1174
THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
1192
- SPREAD_ARG (args[0 ], ts_obj);
1175
+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
1193
1176
SwapBytes64 (ts_obj_data, ts_obj_length);
1194
1177
args.GetReturnValue ().Set (args[0 ]);
1195
1178
}
0 commit comments