Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: src/d8.cc

Issue 1089853005: prepare to deprecate non phantom weak callbacks (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/cctest/test-api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 5
6 // Defined when linking against shared lib on Windows. 6 // Defined when linking against shared lib on Windows.
7 #if defined(USING_V8_SHARED) && !defined(V8_SHARED) 7 #if defined(USING_V8_SHARED) && !defined(V8_SHARED)
8 #define V8_SHARED 8 #define V8_SHARED
9 #endif 9 #endif
10 10
(...skipping 1112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1123 i += read; 1123 i += read;
1124 } 1124 }
1125 fclose(file); 1125 fclose(file);
1126 *size_out = size; 1126 *size_out = size;
1127 return chars; 1127 return chars;
1128 } 1128 }
1129 1129
1130 1130
1131 struct DataAndPersistent { 1131 struct DataAndPersistent {
1132 uint8_t* data; 1132 uint8_t* data;
1133 Persistent<ArrayBuffer> handle; 1133 int byte_length;
1134 Global<ArrayBuffer> handle;
1134 }; 1135 };
1135 1136
1136 1137
1137 static void ReadBufferWeakCallback( 1138 static void ReadBufferWeakCallback(
1138 const v8::WeakCallbackData<ArrayBuffer, DataAndPersistent>& data) { 1139 const v8::WeakCallbackInfo<DataAndPersistent>& data) {
1139 size_t byte_length = data.GetValue()->ByteLength(); 1140 int byte_length = data.GetParameter()->byte_length;
1140 data.GetIsolate()->AdjustAmountOfExternalAllocatedMemory( 1141 data.GetIsolate()->AdjustAmountOfExternalAllocatedMemory(
1141 -static_cast<intptr_t>(byte_length)); 1142 -static_cast<intptr_t>(byte_length));
1142 1143
1143 delete[] data.GetParameter()->data; 1144 delete[] data.GetParameter()->data;
1144 data.GetParameter()->handle.Reset(); 1145 data.GetParameter()->handle.Reset();
1145 delete data.GetParameter(); 1146 delete data.GetParameter();
1146 } 1147 }
1147 1148
1148 1149
1149 void Shell::ReadBuffer(const v8::FunctionCallbackInfo<v8::Value>& args) { 1150 void Shell::ReadBuffer(const v8::FunctionCallbackInfo<v8::Value>& args) {
1150 DCHECK(sizeof(char) == sizeof(uint8_t)); // NOLINT 1151 DCHECK(sizeof(char) == sizeof(uint8_t)); // NOLINT
1151 String::Utf8Value filename(args[0]); 1152 String::Utf8Value filename(args[0]);
1152 int length; 1153 int length;
1153 if (*filename == NULL) { 1154 if (*filename == NULL) {
1154 Throw(args.GetIsolate(), "Error loading file"); 1155 Throw(args.GetIsolate(), "Error loading file");
1155 return; 1156 return;
1156 } 1157 }
1157 1158
1158 Isolate* isolate = args.GetIsolate(); 1159 Isolate* isolate = args.GetIsolate();
1159 DataAndPersistent* data = new DataAndPersistent; 1160 DataAndPersistent* data = new DataAndPersistent;
1160 data->data = reinterpret_cast<uint8_t*>( 1161 data->data = reinterpret_cast<uint8_t*>(
1161 ReadChars(args.GetIsolate(), *filename, &length)); 1162 ReadChars(args.GetIsolate(), *filename, &length));
1162 if (data->data == NULL) { 1163 if (data->data == NULL) {
1163 delete data; 1164 delete data;
1164 Throw(args.GetIsolate(), "Error reading file"); 1165 Throw(args.GetIsolate(), "Error reading file");
1165 return; 1166 return;
1166 } 1167 }
1168 data->byte_length = length;
1167 Handle<v8::ArrayBuffer> buffer = 1169 Handle<v8::ArrayBuffer> buffer =
1168 ArrayBuffer::New(isolate, data->data, length); 1170 ArrayBuffer::New(isolate, data->data, length);
1169 data->handle.Reset(isolate, buffer); 1171 data->handle.Reset(isolate, buffer);
1170 data->handle.SetWeak(data, ReadBufferWeakCallback); 1172 data->handle.SetWeak(data, ReadBufferWeakCallback,
1173 v8::WeakCallbackType::kParameter);
1171 data->handle.MarkIndependent(); 1174 data->handle.MarkIndependent();
1172 isolate->AdjustAmountOfExternalAllocatedMemory(length); 1175 isolate->AdjustAmountOfExternalAllocatedMemory(length);
1173 1176
1174 args.GetReturnValue().Set(buffer); 1177 args.GetReturnValue().Set(buffer);
1175 } 1178 }
1176 1179
1177 1180
1178 // Reads a file into a v8 string. 1181 // Reads a file into a v8 string.
1179 Handle<String> Shell::ReadFile(Isolate* isolate, const char* name) { 1182 Handle<String> Shell::ReadFile(Isolate* isolate, const char* name) {
1180 int size = 0; 1183 int size = 0;
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
1725 } 1728 }
1726 1729
1727 } // namespace v8 1730 } // namespace v8
1728 1731
1729 1732
1730 #ifndef GOOGLE3 1733 #ifndef GOOGLE3
1731 int main(int argc, char* argv[]) { 1734 int main(int argc, char* argv[]) {
1732 return v8::Shell::Main(argc, argv); 1735 return v8::Shell::Main(argc, argv);
1733 } 1736 }
1734 #endif 1737 #endif
OLDNEW
« no previous file with comments | « no previous file | test/cctest/test-api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698