Changeset 197383 in webkit for trunk/Source/JavaScriptCore/runtime
- Timestamp:
- Feb 29, 2016, 7:48:36 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/ProxyObject.cpp
r197295 r197383 96 96 97 97 ProxyObject* proxyObject = jsCast<ProxyObject*>(proxyObjectAsObject); 98 JSObject* target = proxyObject->target(); 99 100 auto performDefaultGet = [&] { 101 return JSValue::encode(target->get(exec, propertyName)); 102 }; 103 104 if (vm.propertyNames->isPrivateName(Identifier::fromUid(&vm, propertyName.uid()))) 105 return performDefaultGet(); 106 98 107 JSValue handlerValue = proxyObject->handler(); 99 108 if (handlerValue.isNull()) … … 107 116 return JSValue::encode(jsUndefined()); 108 117 109 JSObject* target = proxyObject->target();110 118 if (getHandler.isUndefined()) 111 return JSValue::encode(target->get(exec, propertyName));119 return performDefaultGet(); 112 120 113 121 MarkedArgumentBuffer arguments; … … 139 147 { 140 148 VM& vm = exec->vm(); 149 JSObject* target = this->target(); 150 151 auto performDefaultGetOwnProperty = [&] { 152 return target->methodTable(vm)->getOwnPropertySlot(target, exec, propertyName, slot); 153 }; 154 155 if (vm.propertyNames->isPrivateName(Identifier::fromUid(&vm, propertyName.uid()))) 156 return performDefaultGetOwnProperty(); 157 141 158 JSValue handlerValue = this->handler(); 142 159 if (handlerValue.isNull()) { … … 151 168 if (exec->hadException()) 152 169 return false; 153 JSObject* target = this->target();154 170 if (getOwnPropertyDescriptorMethod.isUndefined()) 155 return target->methodTable(vm)->getOwnPropertySlot(target, exec, propertyName, slot);171 return performDefaultGetOwnProperty(); 156 172 157 173 MarkedArgumentBuffer arguments; … … 227 243 { 228 244 VM& vm = exec->vm(); 245 JSObject* target = this->target(); 229 246 slot.setValue(this, None, jsUndefined()); // Nobody should rely on our value, but be safe and protect against any bad actors reading our value. 230 247 248 auto performDefaultHasProperty = [&] { 249 return target->methodTable(vm)->getOwnPropertySlot(target, exec, propertyName, slot); 250 }; 251 252 if (vm.propertyNames->isPrivateName(Identifier::fromUid(&vm, propertyName.uid()))) 253 return performDefaultHasProperty(); 254 231 255 JSValue handlerValue = this->handler(); 232 256 if (handlerValue.isNull()) { … … 241 265 if (exec->hadException()) 242 266 return false; 243 JSObject* target = this->target();244 267 if (hasMethod.isUndefined()) 245 return target->methodTable(vm)->getOwnPropertySlot(target, exec, propertyName, slot);268 return performDefaultHasProperty(); 246 269 247 270 MarkedArgumentBuffer arguments; … … 311 334 312 335 template <typename PerformDefaultPutFunction> 313 void ProxyObject::performPut(ExecState* exec, JSValue putValue, JSValue thisValue, PropertyName propertyName, PerformDefaultPutFunction performDefaultPutFunction) 314 { 315 VM& vm = exec->vm(); 336 void ProxyObject::performPut(ExecState* exec, JSValue putValue, JSValue thisValue, PropertyName propertyName, PerformDefaultPutFunction performDefaultPut) 337 { 338 VM& vm = exec->vm(); 339 340 if (vm.propertyNames->isPrivateName(Identifier::fromUid(&vm, propertyName.uid()))) 341 return performDefaultPut(); 342 316 343 JSValue handlerValue = this->handler(); 317 344 if (handlerValue.isNull()) { … … 328 355 JSObject* target = this->target(); 329 356 if (setMethod.isUndefined()) { 330 performDefaultPut Function();357 performDefaultPut(); 331 358 return; 332 359 } … … 488 515 489 516 template <typename DefaultDeleteFunction> 490 bool ProxyObject::performDelete(ExecState* exec, PropertyName propertyName, DefaultDeleteFunction defaultDeleteFunction) 491 { 492 VM& vm = exec->vm(); 517 bool ProxyObject::performDelete(ExecState* exec, PropertyName propertyName, DefaultDeleteFunction performDefaultDelete) 518 { 519 VM& vm = exec->vm(); 520 521 if (vm.propertyNames->isPrivateName(Identifier::fromUid(&vm, propertyName.uid()))) 522 return performDefaultDelete(); 523 493 524 JSValue handlerValue = this->handler(); 494 525 if (handlerValue.isNull()) { … … 505 536 JSObject* target = this->target(); 506 537 if (deletePropertyMethod.isUndefined()) 507 return defaultDeleteFunction();538 return performDefaultDelete(); 508 539 509 540 MarkedArgumentBuffer arguments; … … 538 569 { 539 570 ProxyObject* thisObject = jsCast<ProxyObject*>(cell); 540 auto defaultDelete = [&] () -> bool {571 auto performDefaultDelete = [&] () -> bool { 541 572 JSObject* target = jsCast<JSObject*>(thisObject->target()); 542 573 return target->methodTable(exec->vm())->deleteProperty(target, exec, propertyName); 543 574 }; 544 return thisObject->performDelete(exec, propertyName, defaultDelete);575 return thisObject->performDelete(exec, propertyName, performDefaultDelete); 545 576 } 546 577 … … 551 582 if (exec->hadException()) 552 583 return false; 553 auto defaultDelete = [&] () -> bool {584 auto performDefaultDelete = [&] () -> bool { 554 585 JSObject* target = jsCast<JSObject*>(thisObject->target()); 555 586 return target->methodTable(exec->vm())->deletePropertyByIndex(target, exec, propertyName); 556 587 }; 557 return thisObject->performDelete(exec, ident.impl(), defaultDelete);588 return thisObject->performDelete(exec, ident.impl(), performDefaultDelete); 558 589 } 559 590
Note:
See TracChangeset
for help on using the changeset viewer.