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

Side by Side Diff: Source/bindings/core/v8/V8Binding.cpp

Issue 993333002: bindings: Use Maybe APIs in toXXX() functions (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « Source/bindings/core/v8/V8Binding.h ('k') | Source/bindings/core/v8/V8BindingMacros.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 static const unsigned numberOfValues = 65536; // 2^16 157 static const unsigned numberOfValues = 65536; // 2^16
158 }; 158 };
159 159
160 template <typename T> 160 template <typename T>
161 static inline T toSmallerInt(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerConversionConfiguration configuration, const char* typeName, ExceptionSta te& exceptionState) 161 static inline T toSmallerInt(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerConversionConfiguration configuration, const char* typeName, ExceptionSta te& exceptionState)
162 { 162 {
163 typedef IntTypeLimits<T> LimitsTrait; 163 typedef IntTypeLimits<T> LimitsTrait;
164 164
165 // Fast case. The value is already a 32-bit integer in the right range. 165 // Fast case. The value is already a 32-bit integer in the right range.
166 if (value->IsInt32()) { 166 if (value->IsInt32()) {
167 int32_t result = value->Int32Value(); 167 int32_t result = value.As<v8::Int32>()->Value();
168 if (result >= LimitsTrait::minValue && result <= LimitsTrait::maxValue) 168 if (result >= LimitsTrait::minValue && result <= LimitsTrait::maxValue)
169 return static_cast<T>(result); 169 return static_cast<T>(result);
170 if (configuration == EnforceRange) { 170 if (configuration == EnforceRange) {
171 exceptionState.throwTypeError("Value is outside the '" + String(type Name) + "' value range."); 171 exceptionState.throwTypeError("Value is outside the '" + String(type Name) + "' value range.");
172 return 0; 172 return 0;
173 } 173 }
174 if (configuration == Clamp) 174 if (configuration == Clamp)
175 return clampTo<T>(result); 175 return clampTo<T>(result);
176 result %= LimitsTrait::numberOfValues; 176 result %= LimitsTrait::numberOfValues;
177 return static_cast<T>(result > LimitsTrait::maxValue ? result - LimitsTr ait::numberOfValues : result); 177 return static_cast<T>(result > LimitsTrait::maxValue ? result - LimitsTr ait::numberOfValues : result);
178 } 178 }
179 179
180 v8::Local<v8::Number> numberObject; 180 v8::Local<v8::Number> numberObject;
181 if (value->IsNumber()) { 181 if (value->IsNumber()) {
182 numberObject = value.As<v8::Number>(); 182 numberObject = value.As<v8::Number>();
183 } else { 183 } else {
184 // Can the value be converted to a number? 184 // Can the value be converted to a number?
185 v8::TryCatch block(isolate); 185 v8::TryCatch block(isolate);
186 numberObject = value->ToNumber(isolate); 186 if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, block)) {
187 if (block.HasCaught()) {
188 exceptionState.rethrowV8Exception(block.Exception()); 187 exceptionState.rethrowV8Exception(block.Exception());
189 return 0; 188 return 0;
190 } 189 }
191 } 190 }
192 ASSERT(!numberObject.IsEmpty()); 191 ASSERT(!numberObject.IsEmpty());
193 192
194 if (configuration == EnforceRange) 193 if (configuration == EnforceRange)
195 return enforceRange(numberObject->Value(), LimitsTrait::minValue, Limits Trait::maxValue, typeName, exceptionState); 194 return enforceRange(numberObject->Value(), LimitsTrait::minValue, Limits Trait::maxValue, typeName, exceptionState);
196 195
197 double numberValue = numberObject->Value(); 196 double numberValue = numberObject->Value();
(...skipping 12 matching lines...) Expand all
210 return static_cast<T>(numberValue > LimitsTrait::maxValue ? numberValue - Li mitsTrait::numberOfValues : numberValue); 209 return static_cast<T>(numberValue > LimitsTrait::maxValue ? numberValue - Li mitsTrait::numberOfValues : numberValue);
211 } 210 }
212 211
213 template <typename T> 212 template <typename T>
214 static inline T toSmallerUInt(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerConversionConfiguration configuration, const char* typeName, ExceptionSt ate& exceptionState) 213 static inline T toSmallerUInt(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerConversionConfiguration configuration, const char* typeName, ExceptionSt ate& exceptionState)
215 { 214 {
216 typedef IntTypeLimits<T> LimitsTrait; 215 typedef IntTypeLimits<T> LimitsTrait;
217 216
218 // Fast case. The value is a 32-bit signed integer - possibly positive? 217 // Fast case. The value is a 32-bit signed integer - possibly positive?
219 if (value->IsInt32()) { 218 if (value->IsInt32()) {
220 int32_t result = value->Int32Value(); 219 int32_t result = value.As<v8::Int32>()->Value();
221 if (result >= 0 && result <= LimitsTrait::maxValue) 220 if (result >= 0 && result <= LimitsTrait::maxValue)
222 return static_cast<T>(result); 221 return static_cast<T>(result);
223 if (configuration == EnforceRange) { 222 if (configuration == EnforceRange) {
224 exceptionState.throwTypeError("Value is outside the '" + String(type Name) + "' value range."); 223 exceptionState.throwTypeError("Value is outside the '" + String(type Name) + "' value range.");
225 return 0; 224 return 0;
226 } 225 }
227 if (configuration == Clamp) 226 if (configuration == Clamp)
228 return clampTo<T>(result); 227 return clampTo<T>(result);
229 return static_cast<T>(result); 228 return static_cast<T>(result);
230 } 229 }
231 230
232 v8::Local<v8::Number> numberObject; 231 v8::Local<v8::Number> numberObject;
233 if (value->IsNumber()) { 232 if (value->IsNumber()) {
234 numberObject = value.As<v8::Number>(); 233 numberObject = value.As<v8::Number>();
235 } else { 234 } else {
236 // Can the value be converted to a number? 235 // Can the value be converted to a number?
237 v8::TryCatch block(isolate); 236 v8::TryCatch block(isolate);
238 numberObject = value->ToNumber(isolate); 237 if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, block)) {
239 if (block.HasCaught()) {
240 exceptionState.rethrowV8Exception(block.Exception()); 238 exceptionState.rethrowV8Exception(block.Exception());
241 return 0; 239 return 0;
242 } 240 }
243 } 241 }
244 ASSERT(!numberObject.IsEmpty()); 242 ASSERT(!numberObject.IsEmpty());
245 243
246 if (configuration == EnforceRange) 244 if (configuration == EnforceRange)
247 return enforceRange(numberObject->Value(), 0, LimitsTrait::maxValue, typ eName, exceptionState); 245 return enforceRange(numberObject->Value(), 0, LimitsTrait::maxValue, typ eName, exceptionState);
248 246
249 double numberValue = numberObject->Value(); 247 double numberValue = numberObject->Value();
(...skipping 29 matching lines...) Expand all
279 uint16_t toUInt16(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerConv ersionConfiguration configuration, ExceptionState& exceptionState) 277 uint16_t toUInt16(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerConv ersionConfiguration configuration, ExceptionState& exceptionState)
280 { 278 {
281 return toSmallerUInt<uint16_t>(isolate, value, configuration, "unsigned shor t", exceptionState); 279 return toSmallerUInt<uint16_t>(isolate, value, configuration, "unsigned shor t", exceptionState);
282 } 280 }
283 281
284 int32_t toInt32Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerCo nversionConfiguration configuration, ExceptionState& exceptionState) 282 int32_t toInt32Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerCo nversionConfiguration configuration, ExceptionState& exceptionState)
285 { 283 {
286 ASSERT(!value->IsInt32()); 284 ASSERT(!value->IsInt32());
287 // Can the value be converted to a number? 285 // Can the value be converted to a number?
288 v8::TryCatch block(isolate); 286 v8::TryCatch block(isolate);
289 v8::Local<v8::Number> numberObject = value->ToNumber(isolate); 287 v8::Local<v8::Number> numberObject;
290 if (block.HasCaught()) { 288 if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, blo ck)) {
291 exceptionState.rethrowV8Exception(block.Exception()); 289 exceptionState.rethrowV8Exception(block.Exception());
292 return 0; 290 return 0;
293 } 291 }
294 292
295 ASSERT(!numberObject.IsEmpty()); 293 ASSERT(!numberObject.IsEmpty());
296 294
297 double numberValue = numberObject->Value(); 295 double numberValue = numberObject->Value();
298 if (configuration == EnforceRange) 296 if (configuration == EnforceRange)
299 return enforceRange(numberValue, kMinInt32, kMaxInt32, "long", exception State); 297 return enforceRange(numberValue, kMinInt32, kMaxInt32, "long", exception State);
300 298
301 if (std::isnan(numberValue)) 299 if (std::isnan(numberValue))
302 return 0; 300 return 0;
303 301
304 if (configuration == Clamp) 302 if (configuration == Clamp)
305 return clampTo<int32_t>(numberValue); 303 return clampTo<int32_t>(numberValue);
306 304
307 if (std::isinf(numberValue)) 305 if (std::isinf(numberValue))
308 return 0; 306 return 0;
309 307
310 return numberObject->Int32Value(); 308 int32_t result;
309 if (!v8Call(numberObject->Int32Value(isolate->GetCurrentContext()), result, block)) {
310 exceptionState.rethrowV8Exception(block.Exception());
Jens Widell 2015/03/25 11:11:15 Technically, this call can't fail, since numberObj
haraken 2015/03/25 11:53:44 In practice this call won't fail, but conceptually
311 return 0;
312 }
313 return result;
311 } 314 }
312 315
313 uint32_t toUInt32Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Integer ConversionConfiguration configuration, ExceptionState& exceptionState) 316 uint32_t toUInt32Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Integer ConversionConfiguration configuration, ExceptionState& exceptionState)
314 { 317 {
315 ASSERT(!value->IsUint32()); 318 ASSERT(!value->IsUint32());
316 if (value->IsInt32()) { 319 if (value->IsInt32()) {
317 ASSERT(configuration != NormalConversion); 320 ASSERT(configuration != NormalConversion);
318 int32_t result = value->Int32Value(); 321 int32_t result = value.As<v8::Int32>()->Value();
319 if (result >= 0) 322 if (result >= 0)
320 return result; 323 return result;
321 if (configuration == EnforceRange) { 324 if (configuration == EnforceRange) {
322 exceptionState.throwTypeError("Value is outside the 'unsigned long' value range."); 325 exceptionState.throwTypeError("Value is outside the 'unsigned long' value range.");
323 return 0; 326 return 0;
324 } 327 }
325 ASSERT(configuration == Clamp); 328 ASSERT(configuration == Clamp);
326 return clampTo<uint32_t>(result); 329 return clampTo<uint32_t>(result);
327 } 330 }
328 331
329 // Can the value be converted to a number? 332 // Can the value be converted to a number?
330 v8::TryCatch block(isolate); 333 v8::TryCatch block(isolate);
331 v8::Local<v8::Number> numberObject = value->ToNumber(isolate); 334 v8::Local<v8::Number> numberObject;
332 if (block.HasCaught()) { 335 if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, blo ck)) {
333 exceptionState.rethrowV8Exception(block.Exception()); 336 exceptionState.rethrowV8Exception(block.Exception());
334 return 0; 337 return 0;
335 } 338 }
336 ASSERT(!numberObject.IsEmpty()); 339 ASSERT(!numberObject.IsEmpty());
337 340
338 if (configuration == EnforceRange) 341 if (configuration == EnforceRange)
339 return enforceRange(numberObject->Value(), 0, kMaxUInt32, "unsigned long ", exceptionState); 342 return enforceRange(numberObject->Value(), 0, kMaxUInt32, "unsigned long ", exceptionState);
340 343
341 double numberValue = numberObject->Value(); 344 double numberValue = numberObject->Value();
342 345
343 if (std::isnan(numberValue)) 346 if (std::isnan(numberValue))
344 return 0; 347 return 0;
345 348
346 if (configuration == Clamp) 349 if (configuration == Clamp)
347 return clampTo<uint32_t>(numberValue); 350 return clampTo<uint32_t>(numberValue);
348 351
349 if (std::isinf(numberValue)) 352 if (std::isinf(numberValue))
350 return 0; 353 return 0;
351 354
352 return numberObject->Uint32Value(); 355 uint32_t result;
356 if (!v8Call(numberObject->Uint32Value(isolate->GetCurrentContext()), result, block)) {
357 exceptionState.rethrowV8Exception(block.Exception());
Jens Widell 2015/03/25 11:11:15 Same here.
358 return 0;
359 }
360 return result;
353 } 361 }
354 362
355 int64_t toInt64Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerCo nversionConfiguration configuration, ExceptionState& exceptionState) 363 int64_t toInt64Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerCo nversionConfiguration configuration, ExceptionState& exceptionState)
356 { 364 {
357 ASSERT(!value->IsInt32()); 365 ASSERT(!value->IsInt32());
358 366
359 v8::Local<v8::Number> numberObject; 367 v8::Local<v8::Number> numberObject;
360 // Can the value be converted to a number? 368 // Can the value be converted to a number?
361 v8::TryCatch block(isolate); 369 v8::TryCatch block(isolate);
362 numberObject = value->ToNumber(isolate); 370 if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, blo ck)) {
363 if (block.HasCaught()) {
364 exceptionState.rethrowV8Exception(block.Exception()); 371 exceptionState.rethrowV8Exception(block.Exception());
365 return 0; 372 return 0;
366 } 373 }
367 ASSERT(!numberObject.IsEmpty()); 374 ASSERT(!numberObject.IsEmpty());
368 375
369 double numberValue = numberObject->Value(); 376 double numberValue = numberObject->Value();
370 377
371 if (configuration == EnforceRange) 378 if (configuration == EnforceRange)
372 return enforceRange(numberValue, -kJSMaxInteger, kJSMaxInteger, "long lo ng", exceptionState); 379 return enforceRange(numberValue, -kJSMaxInteger, kJSMaxInteger, "long lo ng", exceptionState);
373 380
374 if (std::isnan(numberValue) || std::isinf(numberValue)) 381 if (std::isnan(numberValue) || std::isinf(numberValue))
375 return 0; 382 return 0;
376 383
377 // NaNs and +/-Infinity should be 0, otherwise modulo 2^64. 384 // NaNs and +/-Infinity should be 0, otherwise modulo 2^64.
378 unsigned long long integer; 385 unsigned long long integer;
379 doubleToInteger(numberValue, integer); 386 doubleToInteger(numberValue, integer);
380 return integer; 387 return integer;
381 } 388 }
382 389
383 uint64_t toUInt64Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Integer ConversionConfiguration configuration, ExceptionState& exceptionState) 390 uint64_t toUInt64Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Integer ConversionConfiguration configuration, ExceptionState& exceptionState)
384 { 391 {
385 ASSERT(!value->IsUint32()); 392 ASSERT(!value->IsUint32());
386 if (value->IsInt32()) { 393 if (value->IsInt32()) {
387 ASSERT(configuration != NormalConversion); 394 ASSERT(configuration != NormalConversion);
388 int32_t result = value->Int32Value(); 395 int32_t result = value.As<v8::Int32>()->Value();
389 if (result >= 0) 396 if (result >= 0)
390 return result; 397 return result;
391 if (configuration == EnforceRange) { 398 if (configuration == EnforceRange) {
392 exceptionState.throwTypeError("Value is outside the 'unsigned long l ong' value range."); 399 exceptionState.throwTypeError("Value is outside the 'unsigned long l ong' value range.");
393 return 0; 400 return 0;
394 } 401 }
395 ASSERT(configuration == Clamp); 402 ASSERT(configuration == Clamp);
396 return clampTo<uint64_t>(result); 403 return clampTo<uint64_t>(result);
397 } 404 }
398 405
399 v8::Local<v8::Number> numberObject; 406 v8::Local<v8::Number> numberObject;
400 // Can the value be converted to a number? 407 // Can the value be converted to a number?
401 v8::TryCatch block(isolate); 408 v8::TryCatch block(isolate);
402 numberObject = value->ToNumber(isolate); 409 if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, blo ck)) {
403 if (block.HasCaught()) {
404 exceptionState.rethrowV8Exception(block.Exception()); 410 exceptionState.rethrowV8Exception(block.Exception());
405 return 0; 411 return 0;
406 } 412 }
407 ASSERT(!numberObject.IsEmpty()); 413 ASSERT(!numberObject.IsEmpty());
408 414
409 double numberValue = numberObject->Value(); 415 double numberValue = numberObject->Value();
410 416
411 if (configuration == EnforceRange) 417 if (configuration == EnforceRange)
412 return enforceRange(numberValue, 0, kJSMaxInteger, "unsigned long long", exceptionState); 418 return enforceRange(numberValue, 0, kJSMaxInteger, "unsigned long long", exceptionState);
413 419
(...skipping 21 matching lines...) Expand all
435 exceptionState.throwTypeError("The provided float value is non-finite.") ; 441 exceptionState.throwTypeError("The provided float value is non-finite.") ;
436 return 0; 442 return 0;
437 } 443 }
438 return numberValue; 444 return numberValue;
439 } 445 }
440 446
441 double toDoubleSlow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exception State& exceptionState) 447 double toDoubleSlow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exception State& exceptionState)
442 { 448 {
443 ASSERT(!value->IsNumber()); 449 ASSERT(!value->IsNumber());
444 v8::TryCatch block(isolate); 450 v8::TryCatch block(isolate);
445 double doubleValue = value->NumberValue(); 451 double doubleValue;
446 if (block.HasCaught()) { 452 if (!v8Call(value->NumberValue(isolate->GetCurrentContext()), doubleValue, b lock)) {
447 exceptionState.rethrowV8Exception(block.Exception()); 453 exceptionState.rethrowV8Exception(block.Exception());
448 return 0; 454 return 0;
449 } 455 }
450 return doubleValue; 456 return doubleValue;
451 } 457 }
452 458
453 double toRestrictedDouble(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exc eptionState& exceptionState) 459 double toRestrictedDouble(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exc eptionState& exceptionState)
454 { 460 {
455 double numberValue = toDouble(isolate, value, exceptionState); 461 double numberValue = toDouble(isolate, value, exceptionState);
456 if (exceptionState.hadException()) 462 if (exceptionState.hadException())
(...skipping 14 matching lines...) Expand all
471 // From the Web IDL spec: http://heycam.github.io/webidl/#es-ByteString 477 // From the Web IDL spec: http://heycam.github.io/webidl/#es-ByteString
472 if (value.IsEmpty()) 478 if (value.IsEmpty())
473 return String(); 479 return String();
474 480
475 // 1. Let x be ToString(v) 481 // 1. Let x be ToString(v)
476 v8::Local<v8::String> stringObject; 482 v8::Local<v8::String> stringObject;
477 if (value->IsString()) { 483 if (value->IsString()) {
478 stringObject = value.As<v8::String>(); 484 stringObject = value.As<v8::String>();
479 } else { 485 } else {
480 v8::TryCatch block(isolate); 486 v8::TryCatch block(isolate);
481 stringObject = value->ToString(isolate); 487 if (!v8Call(value->ToString(isolate->GetCurrentContext()), stringObject, block)) {
482 if (block.HasCaught()) {
483 exceptionState.rethrowV8Exception(block.Exception()); 488 exceptionState.rethrowV8Exception(block.Exception());
484 return String(); 489 return String();
485 } 490 }
486 } 491 }
487 492
488 String x = toCoreString(stringObject); 493 String x = toCoreString(stringObject);
489 494
490 // 2. If the value of any element of x is greater than 255, then throw a Typ eError. 495 // 2. If the value of any element of x is greater than 255, then throw a Typ eError.
491 if (!x.containsOnlyLatin1()) { 496 if (!x.containsOnlyLatin1()) {
492 exceptionState.throwTypeError("Value is not a valid ByteString."); 497 exceptionState.throwTypeError("Value is not a valid ByteString.");
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 { 611 {
607 // http://heycam.github.io/webidl/#es-USVString 612 // http://heycam.github.io/webidl/#es-USVString
608 if (value.IsEmpty()) 613 if (value.IsEmpty())
609 return String(); 614 return String();
610 615
611 v8::Local<v8::String> stringObject; 616 v8::Local<v8::String> stringObject;
612 if (value->IsString()) { 617 if (value->IsString()) {
613 stringObject = value.As<v8::String>(); 618 stringObject = value.As<v8::String>();
614 } else { 619 } else {
615 v8::TryCatch block(isolate); 620 v8::TryCatch block(isolate);
616 stringObject = value->ToString(isolate); 621 if (!v8Call(value->ToString(isolate->GetCurrentContext()), stringObject, block)) {
617 if (block.HasCaught()) {
618 exceptionState.rethrowV8Exception(block.Exception()); 622 exceptionState.rethrowV8Exception(block.Exception());
619 return String(); 623 return String();
620 } 624 }
621 } 625 }
622 626
623 // USVString is identical to DOMString except that "convert a 627 // USVString is identical to DOMString except that "convert a
624 // DOMString to a sequence of Unicode characters" is used subsequently 628 // DOMString to a sequence of Unicode characters" is used subsequently
625 // when converting to an IDL value 629 // when converting to an IDL value
626 String x = toCoreString(stringObject); 630 String x = toCoreString(stringObject);
627 return replaceUnmatchedSurrogates(x); 631 return replaceUnmatchedSurrogates(x);
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 v8::Local<v8::Value> data = info.Data(); 947 v8::Local<v8::Value> data = info.Data();
944 ASSERT(data->IsExternal()); 948 ASSERT(data->IsExternal());
945 V8PerContextData* perContextData = V8PerContextData::from(info.Holder()->Cre ationContext()); 949 V8PerContextData* perContextData = V8PerContextData::from(info.Holder()->Cre ationContext());
946 if (!perContextData) 950 if (!perContextData)
947 return; 951 return;
948 v8SetReturnValue(info, perContextData->constructorForType(WrapperTypeInfo::u nwrap(data))); 952 v8SetReturnValue(info, perContextData->constructorForType(WrapperTypeInfo::u nwrap(data)));
949 TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); 953 TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution");
950 } 954 }
951 955
952 } // namespace blink 956 } // namespace blink
OLDNEW
« no previous file with comments | « Source/bindings/core/v8/V8Binding.h ('k') | Source/bindings/core/v8/V8BindingMacros.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698