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

Side by Side Diff: src/messages.js

Issue 7736018: Make functions on the built-in object non-writable. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 3 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
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 11 matching lines...) Expand all
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 28
29 // ------------------------------------------------------------------- 29 // -------------------------------------------------------------------
30 // 30 //
31 // Matches Script::Type from objects.h 31 // Matches Script::Type from objects.h
32 var TYPE_NATIVE = 0; 32 const TYPE_NATIVE = 0;
Kevin Millikin (Chromium) 2011/09/01 07:58:24 Is this change necessary? If it is, can you inste
Lasse Reichstein 2011/09/01 09:26:58 Nothing here is *necessary*, but it's an attempt t
Kevin Millikin (Chromium) 2011/09/01 09:53:14 I think something like that, even if you have to i
33 var TYPE_EXTENSION = 1; 33 const TYPE_EXTENSION = 1;
34 var TYPE_NORMAL = 2; 34 const TYPE_NORMAL = 2;
35 35
36 // Matches Script::CompilationType from objects.h 36 // Matches Script::CompilationType from objects.h
37 var COMPILATION_TYPE_HOST = 0; 37 const COMPILATION_TYPE_HOST = 0;
38 var COMPILATION_TYPE_EVAL = 1; 38 const COMPILATION_TYPE_EVAL = 1;
39 var COMPILATION_TYPE_JSON = 2; 39 const COMPILATION_TYPE_JSON = 2;
40 40
41 // Matches Messages::kNoLineNumberInfo from v8.h 41 // Matches Messages::kNoLineNumberInfo from v8.h
42 var kNoLineNumberInfo = 0; 42 const kNoLineNumberInfo = 0;
43 43
44 // If this object gets passed to an error constructor the error will 44 // If this object gets passed to an error constructor the error will
45 // get an accessor for .message that constructs a descriptive error 45 // get an accessor for .message that constructs a descriptive error
46 // message on access. 46 // message on access.
47 var kAddMessageAccessorsMarker = { }; 47 var kAddMessageAccessorsMarker = { };
48 48
49 var kMessages = 0; 49 var kMessages = 0;
50 50
51 var kReplacementMarkers = [ "%0", "%1", "%2", "%3" ]; 51 var kReplacementMarkers = [ "%0", "%1", "%2", "%3" ];
52 52
(...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after
1000 1000
1001 function DefineError(f) { 1001 function DefineError(f) {
1002 // Store the error function in both the global object 1002 // Store the error function in both the global object
1003 // and the runtime object. The function is fetched 1003 // and the runtime object. The function is fetched
1004 // from the runtime object when throwing errors from 1004 // from the runtime object when throwing errors from
1005 // within the runtime system to avoid strange side 1005 // within the runtime system to avoid strange side
1006 // effects when overwriting the error functions from 1006 // effects when overwriting the error functions from
1007 // user code. 1007 // user code.
1008 var name = f.name; 1008 var name = f.name;
1009 %SetProperty(global, name, f, DONT_ENUM); 1009 %SetProperty(global, name, f, DONT_ENUM);
1010 this['$' + name] = f; 1010 %SetProperty(this, '$' + name, f, DONT_ENUM | DONT_DELETE | READ_ONLY);
1011 // Configure the error function. 1011 // Configure the error function.
1012 if (name == 'Error') { 1012 if (name == 'Error') {
1013 // The prototype of the Error object must itself be an error. 1013 // The prototype of the Error object must itself be an error.
1014 // However, it can't be an instance of the Error object because 1014 // However, it can't be an instance of the Error object because
1015 // it hasn't been properly configured yet. Instead we create a 1015 // it hasn't been properly configured yet. Instead we create a
1016 // special not-a-true-error-but-close-enough object. 1016 // special not-a-true-error-but-close-enough object.
1017 function ErrorPrototype() {} 1017 function ErrorPrototype() {}
1018 %FunctionSetPrototype(ErrorPrototype, $Object.prototype); 1018 %FunctionSetPrototype(ErrorPrototype, $Object.prototype);
1019 %FunctionSetInstanceClassName(ErrorPrototype, 'Error'); 1019 %FunctionSetInstanceClassName(ErrorPrototype, 'Error');
1020 %FunctionSetPrototype(f, new ErrorPrototype()); 1020 %FunctionSetPrototype(f, new ErrorPrototype());
1021 } else { 1021 } else {
1022 %FunctionSetPrototype(f, new $Error()); 1022 %FunctionSetPrototype(f, new $Error());
1023 } 1023 }
1024 %FunctionSetInstanceClassName(f, 'Error'); 1024 %FunctionSetInstanceClassName(f, 'Error');
1025 %SetProperty(f.prototype, 'constructor', f, DONT_ENUM); 1025 %SetProperty(f.prototype, 'constructor', f, DONT_ENUM);
1026 // The name property on the prototype of error objects is not 1026 // The name property on the prototype of error objects is not
1027 // specified as being read-one and dont-delete. However, allowing 1027 // specified as being read-only and dont-delete. However, allowing
1028 // overwriting allows leaks of error objects between script blocks 1028 // overwriting allows leaks of error objects between script blocks
1029 // in the same context in a browser setting. Therefore we fix the 1029 // in the same context in a browser setting. Therefore we fix the
1030 // name. 1030 // name.
1031 %SetProperty(f.prototype, "name", name, DONT_ENUM | DONT_DELETE | READ_ONLY); 1031 %SetProperty(f.prototype, "name", name, DONT_ENUM | DONT_DELETE | READ_ONLY);
1032 %SetCode(f, function(m) { 1032 %SetCode(f, function(m) {
1033 if (%_IsConstructCall()) { 1033 if (%_IsConstructCall()) {
1034 // Define all the expected properties directly on the error 1034 // Define all the expected properties directly on the error
1035 // object. This avoids going through getters and setters defined 1035 // object. This avoids going through getters and setters defined
1036 // on prototype objects. 1036 // on prototype objects.
1037 %IgnoreAttributesAndSetProperty(this, 'stack', void 0, DONT_ENUM); 1037 %IgnoreAttributesAndSetProperty(this, 'stack', void 0, DONT_ENUM);
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 throw e; 1141 throw e;
1142 } 1142 }
1143 } 1143 }
1144 1144
1145 1145
1146 InstallFunctions($Error.prototype, DONT_ENUM, ['toString', errorToString]); 1146 InstallFunctions($Error.prototype, DONT_ENUM, ['toString', errorToString]);
1147 1147
1148 // Boilerplate for exceptions for stack overflows. Used from 1148 // Boilerplate for exceptions for stack overflows. Used from
1149 // Isolate::StackOverflow(). 1149 // Isolate::StackOverflow().
1150 const kStackOverflowBoilerplate = MakeRangeError('stack_overflow', []); 1150 const kStackOverflowBoilerplate = MakeRangeError('stack_overflow', []);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698