Changeset 69516 in webkit for trunk/JavaScriptCore/runtime/Arguments.cpp
- Timestamp:
- Oct 11, 2010, 12:12:29 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/runtime/Arguments.cpp
r65588 r69516 154 154 return JSObject::getOwnPropertySlot(exec, Identifier(exec, UString::number(i)), slot); 155 155 } 156 157 void Arguments::createStrictModeCallerIfNecessary(ExecState* exec) 158 { 159 if (d->overrodeCaller) 160 return; 161 162 d->overrodeCaller = true; 163 PropertyDescriptor descriptor; 164 JSValue thrower = createTypeErrorFunction(exec, "Unable to access caller of strict mode function"); 165 descriptor.setAccessorDescriptor(thrower, thrower, DontEnum | DontDelete | Getter | Setter); 166 defineOwnProperty(exec, exec->propertyNames().caller, descriptor, false); 167 } 168 169 void Arguments::createStrictModeCalleeIfNecessary(ExecState* exec) 170 { 171 if (d->overrodeCallee) 172 return; 173 174 d->overrodeCallee = true; 175 PropertyDescriptor descriptor; 176 JSValue thrower = createTypeErrorFunction(exec, "Unable to access callee of strict mode function"); 177 descriptor.setAccessorDescriptor(thrower, thrower, DontEnum | DontDelete | Getter | Setter); 178 defineOwnProperty(exec, exec->propertyNames().callee, descriptor, false); 179 } 156 180 157 181 bool Arguments::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot) … … 173 197 174 198 if (propertyName == exec->propertyNames().callee && LIKELY(!d->overrodeCallee)) { 175 slot.setValue(d->callee); 176 return true; 177 } 199 if (!d->isStrictMode) { 200 slot.setValue(d->callee); 201 return true; 202 } 203 createStrictModeCalleeIfNecessary(exec); 204 } 205 206 if (propertyName == exec->propertyNames().caller && d->isStrictMode) 207 createStrictModeCallerIfNecessary(exec); 178 208 179 209 return JSObject::getOwnPropertySlot(exec, propertyName, slot); … … 198 228 199 229 if (propertyName == exec->propertyNames().callee && LIKELY(!d->overrodeCallee)) { 200 descriptor.setDescriptor(d->callee, DontEnum); 201 return true; 202 } 230 if (!d->isStrictMode) { 231 descriptor.setDescriptor(d->callee, DontEnum); 232 return true; 233 } 234 createStrictModeCalleeIfNecessary(exec); 235 } 236 237 if (propertyName == exec->propertyNames().caller && d->isStrictMode) 238 createStrictModeCallerIfNecessary(exec); 203 239 204 240 return JSObject::getOwnPropertyDescriptor(exec, propertyName, descriptor); … … 250 286 251 287 if (propertyName == exec->propertyNames().callee && !d->overrodeCallee) { 252 d->overrodeCallee = true; 253 putDirect(propertyName, value, DontEnum); 254 return; 255 } 288 if (!d->isStrictMode) { 289 d->overrodeCallee = true; 290 putDirect(propertyName, value, DontEnum); 291 return; 292 } 293 createStrictModeCalleeIfNecessary(exec); 294 } 295 296 if (propertyName == exec->propertyNames().caller && d->isStrictMode) 297 createStrictModeCallerIfNecessary(exec); 256 298 257 299 JSObject::put(exec, propertyName, value, slot); … … 295 337 296 338 if (propertyName == exec->propertyNames().callee && !d->overrodeCallee) { 297 d->overrodeCallee = true; 298 return true; 299 } 339 if (!d->isStrictMode) { 340 d->overrodeCallee = true; 341 return true; 342 } 343 createStrictModeCalleeIfNecessary(exec); 344 } 345 346 if (propertyName == exec->propertyNames().caller && !d->isStrictMode) 347 createStrictModeCallerIfNecessary(exec); 300 348 301 349 return JSObject::deleteProperty(exec, propertyName);
Note:
See TracChangeset
for help on using the changeset viewer.