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

Side by Side Diff: src/v8natives.js

Issue 6658037: Change __defineGetter__ and __defineSetter__ to respect non-configurable.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 9 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 | « no previous file | test/mjsunit/accessors-on-global-object.js » ('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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 244
245 245
246 // Extensions for providing property getters and setters. 246 // Extensions for providing property getters and setters.
247 function ObjectDefineGetter(name, fun) { 247 function ObjectDefineGetter(name, fun) {
248 if (this == null && !IS_UNDETECTABLE(this)) { 248 if (this == null && !IS_UNDETECTABLE(this)) {
249 throw new $TypeError('Object.prototype.__defineGetter__: this is Null'); 249 throw new $TypeError('Object.prototype.__defineGetter__: this is Null');
250 } 250 }
251 if (!IS_FUNCTION(fun)) { 251 if (!IS_FUNCTION(fun)) {
252 throw new $TypeError('Object.prototype.__defineGetter__: Expecting function' ); 252 throw new $TypeError('Object.prototype.__defineGetter__: Expecting function' );
253 } 253 }
254 return %DefineAccessor(ToObject(this), ToString(name), GETTER, fun); 254 var desc = { get: fun, enumerable: true, configurable: true };
255 desc = ToPropertyDescriptor(desc);
Lasse Reichstein 2011/03/11 07:52:35 Why not var desc = new PropertyDescriptor(); des
Rico 2011/03/11 08:05:48 Done.
256 DefineOwnProperty(ToObject(this), ToString(name), desc, true);
255 } 257 }
256 258
257 259
258 function ObjectLookupGetter(name) { 260 function ObjectLookupGetter(name) {
259 if (this == null && !IS_UNDETECTABLE(this)) { 261 if (this == null && !IS_UNDETECTABLE(this)) {
260 throw new $TypeError('Object.prototype.__lookupGetter__: this is Null'); 262 throw new $TypeError('Object.prototype.__lookupGetter__: this is Null');
261 } 263 }
262 return %LookupAccessor(ToObject(this), ToString(name), GETTER); 264 return %LookupAccessor(ToObject(this), ToString(name), GETTER);
263 } 265 }
264 266
265 267
266 function ObjectDefineSetter(name, fun) { 268 function ObjectDefineSetter(name, fun) {
267 if (this == null && !IS_UNDETECTABLE(this)) { 269 if (this == null && !IS_UNDETECTABLE(this)) {
268 throw new $TypeError('Object.prototype.__defineSetter__: this is Null'); 270 throw new $TypeError('Object.prototype.__defineSetter__: this is Null');
269 } 271 }
270 if (!IS_FUNCTION(fun)) { 272 if (!IS_FUNCTION(fun)) {
271 throw new $TypeError( 273 throw new $TypeError(
272 'Object.prototype.__defineSetter__: Expecting function'); 274 'Object.prototype.__defineSetter__: Expecting function');
273 } 275 }
274 return %DefineAccessor(ToObject(this), ToString(name), SETTER, fun); 276 var desc = { set: fun, enumerable: true, configurable: true };
Lasse Reichstein 2011/03/11 07:52:35 Ditto.
Rico 2011/03/11 08:05:48 Done.
277 desc = ToPropertyDescriptor(desc);
278 DefineOwnProperty(ToObject(this), ToString(name), desc, true);
275 } 279 }
276 280
277 281
278 function ObjectLookupSetter(name) { 282 function ObjectLookupSetter(name) {
279 if (this == null && !IS_UNDETECTABLE(this)) { 283 if (this == null && !IS_UNDETECTABLE(this)) {
280 throw new $TypeError('Object.prototype.__lookupSetter__: this is Null'); 284 throw new $TypeError('Object.prototype.__lookupSetter__: this is Null');
281 } 285 }
282 return %LookupAccessor(ToObject(this), ToString(name), SETTER); 286 return %LookupAccessor(ToObject(this), ToString(name), SETTER);
283 } 287 }
284 288
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 this.enumerable_ = false; 391 this.enumerable_ = false;
388 this.hasEnumerable_ = false; 392 this.hasEnumerable_ = false;
389 this.configurable_ = false; 393 this.configurable_ = false;
390 this.hasConfigurable_ = false; 394 this.hasConfigurable_ = false;
391 this.get_ = void 0; 395 this.get_ = void 0;
392 this.hasGetter_ = false; 396 this.hasGetter_ = false;
393 this.set_ = void 0; 397 this.set_ = void 0;
394 this.hasSetter_ = false; 398 this.hasSetter_ = false;
395 } 399 }
396 400
401 //PropertyDescriptor.prototype.__proto__ = null;
Lasse Reichstein 2011/03/11 07:52:35 Uncomment this! :) And add: PropertyDescriptor.pro
Rico 2011/03/11 08:05:48 Ups, sorry, and done
397 402
398 PropertyDescriptor.prototype.setValue = function(value) { 403 PropertyDescriptor.prototype.setValue = function(value) {
399 this.value_ = value; 404 this.value_ = value;
400 this.hasValue_ = true; 405 this.hasValue_ = true;
401 } 406 }
402 407
403 408
404 PropertyDescriptor.prototype.getValue = function() { 409 PropertyDescriptor.prototype.getValue = function() {
405 return this.value_; 410 return this.value_;
406 } 411 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 493
489 PropertyDescriptor.prototype.hasSetter = function() { 494 PropertyDescriptor.prototype.hasSetter = function() {
490 return this.hasSetter_; 495 return this.hasSetter_;
491 } 496 }
492 497
493 498
494 // Converts an array returned from Runtime_GetOwnProperty to an actual 499 // Converts an array returned from Runtime_GetOwnProperty to an actual
495 // property descriptor. For a description of the array layout please 500 // property descriptor. For a description of the array layout please
496 // see the runtime.cc file. 501 // see the runtime.cc file.
497 function ConvertDescriptorArrayToDescriptor(desc_array) { 502 function ConvertDescriptorArrayToDescriptor(desc_array) {
498 if (desc_array == false) { 503 if (desc_array === false) {
499 throw 'Internal error: invalid desc_array'; 504 throw 'Internal error: invalid desc_array';
500 } 505 }
501 506
502 if (IS_UNDEFINED(desc_array)) { 507 if (IS_UNDEFINED(desc_array)) {
503 return void 0; 508 return void 0;
504 } 509 }
505 510
506 var desc = new PropertyDescriptor(); 511 var desc = new PropertyDescriptor();
507 // This is an accessor. 512 // This is an accessor.
508 if (desc_array[IS_ACCESSOR_INDEX]) { 513 if (desc_array[IS_ACCESSOR_INDEX]) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 if (props == false) return void 0; 552 if (props == false) return void 0;
548 553
549 return ConvertDescriptorArrayToDescriptor(props); 554 return ConvertDescriptorArrayToDescriptor(props);
550 } 555 }
551 556
552 557
553 // ES5 8.12.9. 558 // ES5 8.12.9.
554 function DefineOwnProperty(obj, p, desc, should_throw) { 559 function DefineOwnProperty(obj, p, desc, should_throw) {
555 var current_or_access = %GetOwnProperty(ToObject(obj), ToString(p)); 560 var current_or_access = %GetOwnProperty(ToObject(obj), ToString(p));
556 // A false value here means that access checks failed. 561 // A false value here means that access checks failed.
557 if (current_or_access == false) return void 0; 562 if (current_or_access === false) return void 0;
558 563
559 var current = ConvertDescriptorArrayToDescriptor(current_or_access); 564 var current = ConvertDescriptorArrayToDescriptor(current_or_access);
560 var extensible = %IsExtensible(ToObject(obj)); 565 var extensible = %IsExtensible(ToObject(obj));
561 566
562 // Error handling according to spec. 567 // Error handling according to spec.
563 // Step 3 568 // Step 3
564 if (IS_UNDEFINED(current) && !extensible) 569 if (IS_UNDEFINED(current) && !extensible)
565 throw MakeTypeError("define_disallowed", ["defineProperty"]); 570 throw MakeTypeError("define_disallowed", ["defineProperty"]);
566 571
567 if (!IS_UNDEFINED(current)) { 572 if (!IS_UNDEFINED(current)) {
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after
1243 // ---------------------------------------------------------------------------- 1248 // ----------------------------------------------------------------------------
1244 1249
1245 function SetupFunction() { 1250 function SetupFunction() {
1246 InstallFunctions($Function.prototype, DONT_ENUM, $Array( 1251 InstallFunctions($Function.prototype, DONT_ENUM, $Array(
1247 "bind", FunctionBind, 1252 "bind", FunctionBind,
1248 "toString", FunctionToString 1253 "toString", FunctionToString
1249 )); 1254 ));
1250 } 1255 }
1251 1256
1252 SetupFunction(); 1257 SetupFunction();
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/accessors-on-global-object.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698