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

Side by Side Diff: src/factory.cc

Issue 952483002: NewError no longer returns a MaybeObject. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@reland
Patch Set: Created 5 years, 10 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
« no previous file with comments | « src/factory.h ('k') | src/isolate.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 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/factory.h" 5 #include "src/factory.h"
6 6
7 #include "src/allocation-site-scopes.h" 7 #include "src/allocation-site-scopes.h"
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/conversions.h" 9 #include "src/conversions.h"
10 #include "src/isolate-inl.h" 10 #include "src/isolate-inl.h"
(...skipping 1040 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 Handle<HeapNumber> Factory::NewHeapNumber(double value, 1051 Handle<HeapNumber> Factory::NewHeapNumber(double value,
1052 MutableMode mode, 1052 MutableMode mode,
1053 PretenureFlag pretenure) { 1053 PretenureFlag pretenure) {
1054 CALL_HEAP_FUNCTION( 1054 CALL_HEAP_FUNCTION(
1055 isolate(), 1055 isolate(),
1056 isolate()->heap()->AllocateHeapNumber(value, mode, pretenure), 1056 isolate()->heap()->AllocateHeapNumber(value, mode, pretenure),
1057 HeapNumber); 1057 HeapNumber);
1058 } 1058 }
1059 1059
1060 1060
1061 MaybeHandle<Object> Factory::NewTypeError(const char* message, 1061 Handle<Object> Factory::NewTypeError(const char* message,
1062 Vector<Handle<Object> > args) { 1062 Vector<Handle<Object> > args) {
1063 return NewError("MakeTypeError", message, args); 1063 return NewError("MakeTypeError", message, args);
1064 } 1064 }
1065 1065
1066 1066
1067 MaybeHandle<Object> Factory::NewTypeError(Handle<String> message) { 1067 Handle<Object> Factory::NewTypeError(Handle<String> message) {
1068 return NewError("$TypeError", message); 1068 return NewError("$TypeError", message);
1069 } 1069 }
1070 1070
1071 1071
1072 MaybeHandle<Object> Factory::NewRangeError(const char* message, 1072 Handle<Object> Factory::NewRangeError(const char* message,
1073 Vector<Handle<Object> > args) { 1073 Vector<Handle<Object> > args) {
1074 return NewError("MakeRangeError", message, args); 1074 return NewError("MakeRangeError", message, args);
1075 } 1075 }
1076 1076
1077 1077
1078 MaybeHandle<Object> Factory::NewRangeError(Handle<String> message) { 1078 Handle<Object> Factory::NewRangeError(Handle<String> message) {
1079 return NewError("$RangeError", message); 1079 return NewError("$RangeError", message);
1080 } 1080 }
1081 1081
1082 1082
1083 MaybeHandle<Object> Factory::NewSyntaxError(const char* message, 1083 Handle<Object> Factory::NewSyntaxError(const char* message,
1084 Handle<JSArray> args) { 1084 Handle<JSArray> args) {
1085 return NewError("MakeSyntaxError", message, args); 1085 return NewError("MakeSyntaxError", message, args);
1086 } 1086 }
1087 1087
1088 1088
1089 MaybeHandle<Object> Factory::NewSyntaxError(Handle<String> message) { 1089 Handle<Object> Factory::NewSyntaxError(Handle<String> message) {
1090 return NewError("$SyntaxError", message); 1090 return NewError("$SyntaxError", message);
1091 } 1091 }
1092 1092
1093 1093
1094 MaybeHandle<Object> Factory::NewReferenceError(const char* message, 1094 Handle<Object> Factory::NewReferenceError(const char* message,
1095 Vector<Handle<Object> > args) { 1095 Vector<Handle<Object> > args) {
1096 return NewError("MakeReferenceError", message, args); 1096 return NewError("MakeReferenceError", message, args);
1097 } 1097 }
1098 1098
1099 1099
1100 MaybeHandle<Object> Factory::NewReferenceError(const char* message, 1100 Handle<Object> Factory::NewReferenceError(const char* message,
1101 Handle<JSArray> args) { 1101 Handle<JSArray> args) {
1102 return NewError("MakeReferenceError", message, args); 1102 return NewError("MakeReferenceError", message, args);
1103 } 1103 }
1104 1104
1105 1105
1106 MaybeHandle<Object> Factory::NewReferenceError(Handle<String> message) { 1106 Handle<Object> Factory::NewReferenceError(Handle<String> message) {
1107 return NewError("$ReferenceError", message); 1107 return NewError("$ReferenceError", message);
1108 } 1108 }
1109 1109
1110 1110
1111 MaybeHandle<Object> Factory::NewError(const char* maker, const char* message, 1111 Handle<Object> Factory::NewError(const char* maker, const char* message,
1112 Vector<Handle<Object> > args) { 1112 Vector<Handle<Object> > args) {
1113 // Instantiate a closeable HandleScope for EscapeFrom. 1113 // Instantiate a closeable HandleScope for EscapeFrom.
1114 v8::EscapableHandleScope scope(reinterpret_cast<v8::Isolate*>(isolate())); 1114 v8::EscapableHandleScope scope(reinterpret_cast<v8::Isolate*>(isolate()));
1115 Handle<FixedArray> array = NewFixedArray(args.length()); 1115 Handle<FixedArray> array = NewFixedArray(args.length());
1116 for (int i = 0; i < args.length(); i++) { 1116 for (int i = 0; i < args.length(); i++) {
1117 array->set(i, *args[i]); 1117 array->set(i, *args[i]);
1118 } 1118 }
1119 Handle<JSArray> object = NewJSArrayWithElements(array); 1119 Handle<JSArray> object = NewJSArrayWithElements(array);
1120 Handle<Object> result; 1120 Handle<Object> result = NewError(maker, message, object);
1121 ASSIGN_RETURN_ON_EXCEPTION(isolate(), result,
1122 NewError(maker, message, object), Object);
1123 return result.EscapeFrom(&scope); 1121 return result.EscapeFrom(&scope);
1124 } 1122 }
1125 1123
1126 1124
1127 MaybeHandle<Object> Factory::NewEvalError(const char* message, 1125 Handle<Object> Factory::NewEvalError(const char* message,
1128 Vector<Handle<Object> > args) { 1126 Vector<Handle<Object> > args) {
1129 return NewError("MakeEvalError", message, args); 1127 return NewError("MakeEvalError", message, args);
1130 } 1128 }
1131 1129
1132 1130
1133 MaybeHandle<Object> Factory::NewError(const char* message, 1131 Handle<Object> Factory::NewError(const char* message,
1134 Vector<Handle<Object> > args) { 1132 Vector<Handle<Object> > args) {
1135 return NewError("MakeError", message, args); 1133 return NewError("MakeError", message, args);
1136 } 1134 }
1137 1135
1138 1136
1139 Handle<String> Factory::EmergencyNewError(const char* message, 1137 Handle<String> Factory::EmergencyNewError(const char* message,
1140 Handle<JSArray> args) { 1138 Handle<JSArray> args) {
1141 const int kBufferSize = 1000; 1139 const int kBufferSize = 1000;
1142 char buffer[kBufferSize]; 1140 char buffer[kBufferSize];
1143 size_t space = kBufferSize; 1141 size_t space = kBufferSize;
1144 char* p = &buffer[0]; 1142 char* p = &buffer[0];
(...skipping 20 matching lines...) Expand all
1165 } 1163 }
1166 if (space > 0) { 1164 if (space > 0) {
1167 *p = '\0'; 1165 *p = '\0';
1168 } else { 1166 } else {
1169 buffer[kBufferSize - 1] = '\0'; 1167 buffer[kBufferSize - 1] = '\0';
1170 } 1168 }
1171 return NewStringFromUtf8(CStrVector(buffer), TENURED).ToHandleChecked(); 1169 return NewStringFromUtf8(CStrVector(buffer), TENURED).ToHandleChecked();
1172 } 1170 }
1173 1171
1174 1172
1175 MaybeHandle<Object> Factory::NewError(const char* maker, const char* message, 1173 Handle<Object> Factory::NewError(const char* maker, const char* message,
1176 Handle<JSArray> args) { 1174 Handle<JSArray> args) {
1177 Handle<String> make_str = InternalizeUtf8String(maker); 1175 Handle<String> make_str = InternalizeUtf8String(maker);
1178 Handle<Object> fun_obj = Object::GetProperty( 1176 Handle<Object> fun_obj = Object::GetProperty(
1179 isolate()->js_builtins_object(), make_str).ToHandleChecked(); 1177 isolate()->js_builtins_object(), make_str).ToHandleChecked();
1180 // If the builtins haven't been properly configured yet this error 1178 // If the builtins haven't been properly configured yet this error
1181 // constructor may not have been defined. Bail out. 1179 // constructor may not have been defined. Bail out.
1182 if (!fun_obj->IsJSFunction()) { 1180 if (!fun_obj->IsJSFunction()) {
1183 return EmergencyNewError(message, args); 1181 return EmergencyNewError(message, args);
1184 } 1182 }
1185 Handle<JSFunction> fun = Handle<JSFunction>::cast(fun_obj); 1183 Handle<JSFunction> fun = Handle<JSFunction>::cast(fun_obj);
1186 Handle<Object> message_obj = InternalizeUtf8String(message); 1184 Handle<Object> message_obj = InternalizeUtf8String(message);
1187 Handle<Object> argv[] = { message_obj, args }; 1185 Handle<Object> argv[] = { message_obj, args };
1188 1186
1189 // Invoke the JavaScript factory method. If an exception is thrown while 1187 // Invoke the JavaScript factory method. If an exception is thrown while
1190 // running the factory method, use the exception as the result. 1188 // running the factory method, use the exception as the result.
1191 Handle<Object> result; 1189 Handle<Object> result;
1192 MaybeHandle<Object> exception; 1190 MaybeHandle<Object> exception;
1193 if (!Execution::TryCall(fun, 1191 if (!Execution::TryCall(fun,
1194 isolate()->js_builtins_object(), 1192 isolate()->js_builtins_object(),
1195 arraysize(argv), 1193 arraysize(argv),
1196 argv, 1194 argv,
1197 &exception).ToHandle(&result)) { 1195 &exception).ToHandle(&result)) {
1198 Handle<Object> exception_obj; 1196 Handle<Object> exception_obj;
1199 if (exception.ToHandle(&exception_obj)) return exception_obj; 1197 if (exception.ToHandle(&exception_obj)) return exception_obj;
1200 return undefined_value(); 1198 return undefined_value();
1201 } 1199 }
1202 return result; 1200 return result;
1203 } 1201 }
1204 1202
1205 1203
1206 MaybeHandle<Object> Factory::NewError(Handle<String> message) { 1204 Handle<Object> Factory::NewError(Handle<String> message) {
1207 return NewError("$Error", message); 1205 return NewError("$Error", message);
1208 } 1206 }
1209 1207
1210 1208
1211 MaybeHandle<Object> Factory::NewError(const char* constructor, 1209 Handle<Object> Factory::NewError(const char* constructor,
1212 Handle<String> message) { 1210 Handle<String> message) {
1213 Handle<String> constr = InternalizeUtf8String(constructor); 1211 Handle<String> constr = InternalizeUtf8String(constructor);
1214 Handle<JSFunction> fun = Handle<JSFunction>::cast(Object::GetProperty( 1212 Handle<JSFunction> fun = Handle<JSFunction>::cast(Object::GetProperty(
1215 isolate()->js_builtins_object(), constr).ToHandleChecked()); 1213 isolate()->js_builtins_object(), constr).ToHandleChecked());
1216 Handle<Object> argv[] = { message }; 1214 Handle<Object> argv[] = { message };
1217 1215
1218 // Invoke the JavaScript factory method. If an exception is thrown while 1216 // Invoke the JavaScript factory method. If an exception is thrown while
1219 // running the factory method, use the exception as the result. 1217 // running the factory method, use the exception as the result.
1220 Handle<Object> result; 1218 Handle<Object> result;
1221 MaybeHandle<Object> exception; 1219 MaybeHandle<Object> exception;
1222 if (!Execution::TryCall(fun, 1220 if (!Execution::TryCall(fun,
(...skipping 1111 matching lines...) Expand 10 before | Expand all | Expand 10 after
2334 return Handle<Object>::null(); 2332 return Handle<Object>::null();
2335 } 2333 }
2336 2334
2337 2335
2338 Handle<Object> Factory::ToBoolean(bool value) { 2336 Handle<Object> Factory::ToBoolean(bool value) {
2339 return value ? true_value() : false_value(); 2337 return value ? true_value() : false_value();
2340 } 2338 }
2341 2339
2342 2340
2343 } } // namespace v8::internal 2341 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/factory.h ('k') | src/isolate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698