Skip to content

Commit 7306252

Browse files
committed
src: deprecate smalloc public functions
Upcoming V8 changes will make it impossible to keep supporting the smalloc functionality so deprecate the functions in smalloc.h now and tell people to switch to typed arrays. This commit shuffles code around in smalloc.cc to avoid generating the deprecation warnings when building io.js itself. PR-URL: #1565 Reviewed-By: Trevor Norris <[email protected]>
1 parent ccb199a commit 7306252

File tree

2 files changed

+81
-61
lines changed

2 files changed

+81
-61
lines changed

src/smalloc.cc

+36-31
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,37 @@ void CallbackInfo::WeakCallback(
129129
}
130130

131131

132+
inline size_t InternalExternalArraySize(enum ExternalArrayType type) {
133+
switch (type) {
134+
case v8::kExternalUint8Array:
135+
return sizeof(uint8_t);
136+
case v8::kExternalInt8Array:
137+
return sizeof(int8_t);
138+
case v8::kExternalInt16Array:
139+
return sizeof(int16_t);
140+
case v8::kExternalUint16Array:
141+
return sizeof(uint16_t);
142+
case v8::kExternalInt32Array:
143+
return sizeof(int32_t);
144+
case v8::kExternalUint32Array:
145+
return sizeof(uint32_t);
146+
case v8::kExternalFloat32Array:
147+
return sizeof(float); // NOLINT(runtime/sizeof)
148+
case v8::kExternalFloat64Array:
149+
return sizeof(double); // NOLINT(runtime/sizeof)
150+
case v8::kExternalUint8ClampedArray:
151+
return sizeof(uint8_t);
152+
}
153+
return 0;
154+
}
155+
156+
132157
void CallbackInfo::WeakCallback(Isolate* isolate, Local<Object> object) {
133158
void* array_data = object->GetIndexedPropertiesExternalArrayData();
134159
size_t array_length = object->GetIndexedPropertiesExternalArrayDataLength();
135160
enum ExternalArrayType array_type =
136161
object->GetIndexedPropertiesExternalArrayDataType();
137-
size_t array_size = ExternalArraySize(array_type);
162+
size_t array_size = InternalExternalArraySize(array_type);
138163
CHECK_GT(array_size, 0);
139164
if (array_size > 1 && array_data != NULL) {
140165
CHECK_GT(array_length * array_size, array_length); // Overflow check.
@@ -152,27 +177,7 @@ void CallbackInfo::WeakCallback(Isolate* isolate, Local<Object> object) {
152177

153178
// return size of external array type, or 0 if unrecognized
154179
size_t ExternalArraySize(enum ExternalArrayType type) {
155-
switch (type) {
156-
case v8::kExternalUint8Array:
157-
return sizeof(uint8_t);
158-
case v8::kExternalInt8Array:
159-
return sizeof(int8_t);
160-
case v8::kExternalInt16Array:
161-
return sizeof(int16_t);
162-
case v8::kExternalUint16Array:
163-
return sizeof(uint16_t);
164-
case v8::kExternalInt32Array:
165-
return sizeof(int32_t);
166-
case v8::kExternalUint32Array:
167-
return sizeof(uint32_t);
168-
case v8::kExternalFloat32Array:
169-
return sizeof(float); // NOLINT(runtime/sizeof)
170-
case v8::kExternalFloat64Array:
171-
return sizeof(double); // NOLINT(runtime/sizeof)
172-
case v8::kExternalUint8ClampedArray:
173-
return sizeof(uint8_t);
174-
}
175-
return 0;
180+
return InternalExternalArraySize(type);
176181
}
177182

178183

@@ -200,12 +205,12 @@ void CopyOnto(const FunctionCallbackInfo<Value>& args) {
200205
size_t source_length = source->GetIndexedPropertiesExternalArrayDataLength();
201206
enum ExternalArrayType source_type =
202207
source->GetIndexedPropertiesExternalArrayDataType();
203-
size_t source_size = ExternalArraySize(source_type);
208+
size_t source_size = InternalExternalArraySize(source_type);
204209

205210
size_t dest_length = dest->GetIndexedPropertiesExternalArrayDataLength();
206211
enum ExternalArrayType dest_type =
207212
dest->GetIndexedPropertiesExternalArrayDataType();
208-
size_t dest_size = ExternalArraySize(dest_type);
213+
size_t dest_size = InternalExternalArraySize(dest_type);
209214

210215
// optimization for Uint8 arrays (i.e. Buffers)
211216
if (source_size != 1 || dest_size != 1) {
@@ -261,7 +266,7 @@ void SliceOnto(const FunctionCallbackInfo<Value>& args) {
261266
size_t source_len = source->GetIndexedPropertiesExternalArrayDataLength();
262267
enum ExternalArrayType source_type =
263268
source->GetIndexedPropertiesExternalArrayDataType();
264-
size_t source_size = ExternalArraySize(source_type);
269+
size_t source_size = InternalExternalArraySize(source_type);
265270

266271
CHECK_NE(source_size, 0);
267272

@@ -304,7 +309,7 @@ void Alloc(const FunctionCallbackInfo<Value>& args) {
304309
array_type = kExternalUint8Array;
305310
} else {
306311
array_type = static_cast<ExternalArrayType>(args[2]->Uint32Value());
307-
size_t type_length = ExternalArraySize(array_type);
312+
size_t type_length = InternalExternalArraySize(array_type);
308313
CHECK_GE(type_length * length, length);
309314
length *= type_length;
310315
}
@@ -318,7 +323,7 @@ void Alloc(Environment* env,
318323
Handle<Object> obj,
319324
size_t length,
320325
enum ExternalArrayType type) {
321-
size_t type_size = ExternalArraySize(type);
326+
size_t type_size = InternalExternalArraySize(type);
322327

323328
CHECK_LE(length, kMaxLength);
324329
CHECK_GT(type_size, 0);
@@ -345,7 +350,7 @@ void Alloc(Environment* env,
345350
enum ExternalArrayType type) {
346351
CHECK_EQ(false, obj->HasIndexedPropertiesInExternalArrayData());
347352
env->isolate()->AdjustAmountOfExternalAllocatedMemory(length);
348-
size_t size = length / ExternalArraySize(type);
353+
size_t size = length / InternalExternalArraySize(type);
349354
obj->SetIndexedPropertiesToExternalArrayData(data, type, size);
350355
CallbackInfo::New(env->isolate(),
351356
CallbackInfo::kInternal,
@@ -378,7 +383,7 @@ void AllocDispose(Environment* env, Handle<Object> obj) {
378383
size_t length = obj->GetIndexedPropertiesExternalArrayDataLength();
379384
enum ExternalArrayType array_type =
380385
obj->GetIndexedPropertiesExternalArrayDataType();
381-
size_t array_size = ExternalArraySize(array_type);
386+
size_t array_size = InternalExternalArraySize(array_type);
382387

383388
CHECK_GT(array_size, 0);
384389
CHECK_GE(length * array_size, length);
@@ -412,7 +417,7 @@ static void Alloc(Environment* env,
412417
env->set_using_smalloc_alloc_cb(true);
413418
CallbackInfo* info = CallbackInfo::New(isolate, ownership, obj, fn, hint);
414419
obj->SetHiddenValue(env->smalloc_p_string(), External::New(isolate, info));
415-
size_t size = length / ExternalArraySize(type);
420+
size_t size = length / InternalExternalArraySize(type);
416421
obj->SetIndexedPropertiesToExternalArrayData(data, type, size);
417422
}
418423

@@ -425,7 +430,7 @@ void Alloc(Environment* env,
425430
enum ExternalArrayType type) {
426431
CHECK_LE(length, kMaxLength);
427432

428-
size_t type_size = ExternalArraySize(type);
433+
size_t type_size = InternalExternalArraySize(type);
429434

430435
CHECK_GT(type_size, 0);
431436
CHECK_GE(length * type_size, length);

src/smalloc.h

+45-30
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ NODE_EXTERN typedef void (*FreeCallback)(char* data, void* hint);
2626
/**
2727
* Return byte size of external array type.
2828
*/
29-
NODE_EXTERN size_t ExternalArraySize(enum v8::ExternalArrayType type);
29+
NODE_DEPRECATED(
30+
"Use typed arrays",
31+
NODE_EXTERN size_t ExternalArraySize(enum v8::ExternalArrayType type));
3032

3133
/**
3234
* Allocate external array data onto obj.
@@ -55,45 +57,58 @@ NODE_EXTERN size_t ExternalArraySize(enum v8::ExternalArrayType type);
5557
* v8::Integer::NewFromUnsigned(array_length));
5658
* \code
5759
*/
58-
NODE_EXTERN void Alloc(v8::Isolate* isolate,
59-
v8::Handle<v8::Object> obj,
60-
size_t length,
61-
enum v8::ExternalArrayType type =
62-
v8::kExternalUnsignedByteArray);
63-
NODE_EXTERN void Alloc(v8::Isolate* isolate,
64-
v8::Handle<v8::Object> obj,
65-
char* data,
66-
size_t length,
67-
enum v8::ExternalArrayType type =
68-
v8::kExternalUnsignedByteArray);
69-
NODE_EXTERN void Alloc(v8::Isolate* isolate,
70-
v8::Handle<v8::Object> obj,
71-
size_t length,
72-
FreeCallback fn,
73-
void* hint,
74-
enum v8::ExternalArrayType type =
75-
v8::kExternalUnsignedByteArray);
76-
NODE_EXTERN void Alloc(v8::Isolate* isolate,
77-
v8::Handle<v8::Object> obj,
78-
char* data,
79-
size_t length,
80-
FreeCallback fn,
81-
void* hint,
82-
enum v8::ExternalArrayType type =
83-
v8::kExternalUnsignedByteArray);
60+
NODE_DEPRECATED(
61+
"Use typed arrays",
62+
NODE_EXTERN void Alloc(v8::Isolate* isolate,
63+
v8::Handle<v8::Object> obj,
64+
size_t length,
65+
enum v8::ExternalArrayType type =
66+
v8::kExternalUnsignedByteArray));
67+
NODE_DEPRECATED(
68+
"Use typed arrays",
69+
NODE_EXTERN void Alloc(v8::Isolate* isolate,
70+
v8::Handle<v8::Object> obj,
71+
char* data,
72+
size_t length,
73+
enum v8::ExternalArrayType type =
74+
v8::kExternalUnsignedByteArray));
75+
NODE_DEPRECATED(
76+
"Use typed arrays",
77+
NODE_EXTERN void Alloc(v8::Isolate* isolate,
78+
v8::Handle<v8::Object> obj,
79+
size_t length,
80+
FreeCallback fn,
81+
void* hint,
82+
enum v8::ExternalArrayType type =
83+
v8::kExternalUnsignedByteArray));
84+
NODE_DEPRECATED(
85+
"Use typed arrays",
86+
NODE_EXTERN void Alloc(v8::Isolate* isolate,
87+
v8::Handle<v8::Object> obj,
88+
char* data,
89+
size_t length,
90+
FreeCallback fn,
91+
void* hint,
92+
enum v8::ExternalArrayType type =
93+
v8::kExternalUnsignedByteArray));
8494

8595
/**
8696
* Free memory associated with an externally allocated object. If no external
8797
* memory is allocated to the object then nothing will happen.
8898
*/
89-
NODE_EXTERN void AllocDispose(v8::Isolate* isolate, v8::Handle<v8::Object> obj);
99+
NODE_DEPRECATED(
100+
"Use typed arrays",
101+
NODE_EXTERN void AllocDispose(v8::Isolate* isolate,
102+
v8::Handle<v8::Object> obj));
90103

91104

92105
/**
93106
* Check if the Object has externally allocated memory.
94107
*/
95-
NODE_EXTERN bool HasExternalData(v8::Isolate* isolate,
96-
v8::Local<v8::Object> obj);
108+
NODE_DEPRECATED(
109+
"Use typed arrays",
110+
NODE_EXTERN bool HasExternalData(v8::Isolate* isolate,
111+
v8::Local<v8::Object> obj));
97112

98113

99114
// Internal use

0 commit comments

Comments
 (0)