OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 } | 150 } |
151 | 151 |
152 | 152 |
153 Handle<TypeFeedbackInfo> Factory::NewTypeFeedbackInfo() { | 153 Handle<TypeFeedbackInfo> Factory::NewTypeFeedbackInfo() { |
154 CALL_HEAP_FUNCTION(isolate(), | 154 CALL_HEAP_FUNCTION(isolate(), |
155 isolate()->heap()->AllocateTypeFeedbackInfo(), | 155 isolate()->heap()->AllocateTypeFeedbackInfo(), |
156 TypeFeedbackInfo); | 156 TypeFeedbackInfo); |
157 } | 157 } |
158 | 158 |
159 | 159 |
160 // Symbols are created in the old generation (data space). | 160 // Internalized strings are created in the old generation (data space). |
161 Handle<String> Factory::LookupUtf8Symbol(Vector<const char> string) { | 161 Handle<String> Factory::InternalizeUtf8String(Vector<const char> string) { |
162 CALL_HEAP_FUNCTION(isolate(), | 162 CALL_HEAP_FUNCTION(isolate(), |
163 isolate()->heap()->LookupUtf8Symbol(string), | 163 isolate()->heap()->InternalizeUtf8String(string), |
164 String); | 164 String); |
165 } | 165 } |
166 | 166 |
167 // Symbols are created in the old generation (data space). | 167 // Internalized strings are created in the old generation (data space). |
168 Handle<String> Factory::LookupSymbol(Handle<String> string) { | 168 Handle<String> Factory::InternalizeString(Handle<String> string) { |
169 CALL_HEAP_FUNCTION(isolate(), | 169 CALL_HEAP_FUNCTION(isolate(), |
170 isolate()->heap()->LookupSymbol(*string), | 170 isolate()->heap()->InternalizeString(*string), |
171 String); | 171 String); |
172 } | 172 } |
173 | 173 |
174 Handle<String> Factory::LookupOneByteSymbol(Vector<const uint8_t> string) { | 174 Handle<String> Factory::InternalizeOneByteString(Vector<const uint8_t> string) { |
175 CALL_HEAP_FUNCTION(isolate(), | 175 CALL_HEAP_FUNCTION(isolate(), |
176 isolate()->heap()->LookupOneByteSymbol(string), | 176 isolate()->heap()->InternalizeOneByteString(string), |
177 String); | 177 String); |
178 } | 178 } |
179 | 179 |
180 | 180 |
181 Handle<String> Factory::LookupOneByteSymbol(Handle<SeqOneByteString> string, | 181 Handle<String> Factory::InternalizeOneByteString( |
182 int from, | 182 Handle<SeqOneByteString> string, int from, int length) { |
183 int length) { | |
184 CALL_HEAP_FUNCTION(isolate(), | 183 CALL_HEAP_FUNCTION(isolate(), |
185 isolate()->heap()->LookupOneByteSymbol(string, | 184 isolate()->heap()->InternalizeOneByteString( |
186 from, | 185 string, from, length), |
187 length), | |
188 String); | 186 String); |
189 } | 187 } |
190 | 188 |
191 | 189 |
192 Handle<String> Factory::LookupTwoByteSymbol(Vector<const uc16> string) { | 190 Handle<String> Factory::InternalizeTwoByteString(Vector<const uc16> string) { |
193 CALL_HEAP_FUNCTION(isolate(), | 191 CALL_HEAP_FUNCTION(isolate(), |
194 isolate()->heap()->LookupTwoByteSymbol(string), | 192 isolate()->heap()->InternalizeTwoByteString(string), |
195 String); | 193 String); |
196 } | 194 } |
197 | 195 |
198 | 196 |
199 Handle<String> Factory::NewStringFromOneByte(Vector<const uint8_t> string, | 197 Handle<String> Factory::NewStringFromOneByte(Vector<const uint8_t> string, |
200 PretenureFlag pretenure) { | 198 PretenureFlag pretenure) { |
201 CALL_HEAP_FUNCTION( | 199 CALL_HEAP_FUNCTION( |
202 isolate(), | 200 isolate(), |
203 isolate()->heap()->AllocateStringFromOneByte(string, pretenure), | 201 isolate()->heap()->AllocateStringFromOneByte(string, pretenure), |
204 String); | 202 String); |
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 buffer[kBufferSize - 1] = '\0'; | 732 buffer[kBufferSize - 1] = '\0'; |
735 } | 733 } |
736 Handle<String> error_string = NewStringFromUtf8(CStrVector(buffer), TENURED); | 734 Handle<String> error_string = NewStringFromUtf8(CStrVector(buffer), TENURED); |
737 return error_string; | 735 return error_string; |
738 } | 736 } |
739 | 737 |
740 | 738 |
741 Handle<Object> Factory::NewError(const char* maker, | 739 Handle<Object> Factory::NewError(const char* maker, |
742 const char* type, | 740 const char* type, |
743 Handle<JSArray> args) { | 741 Handle<JSArray> args) { |
744 Handle<String> make_str = LookupUtf8Symbol(maker); | 742 Handle<String> make_str = InternalizeUtf8String(maker); |
745 Handle<Object> fun_obj( | 743 Handle<Object> fun_obj( |
746 isolate()->js_builtins_object()->GetPropertyNoExceptionThrown(*make_str)); | 744 isolate()->js_builtins_object()->GetPropertyNoExceptionThrown(*make_str)); |
747 // If the builtins haven't been properly configured yet this error | 745 // If the builtins haven't been properly configured yet this error |
748 // constructor may not have been defined. Bail out. | 746 // constructor may not have been defined. Bail out. |
749 if (!fun_obj->IsJSFunction()) { | 747 if (!fun_obj->IsJSFunction()) { |
750 return EmergencyNewError(type, args); | 748 return EmergencyNewError(type, args); |
751 } | 749 } |
752 Handle<JSFunction> fun = Handle<JSFunction>::cast(fun_obj); | 750 Handle<JSFunction> fun = Handle<JSFunction>::cast(fun_obj); |
753 Handle<Object> type_obj = LookupUtf8Symbol(type); | 751 Handle<Object> type_obj = InternalizeUtf8String(type); |
754 Handle<Object> argv[] = { type_obj, args }; | 752 Handle<Object> argv[] = { type_obj, args }; |
755 | 753 |
756 // Invoke the JavaScript factory method. If an exception is thrown while | 754 // Invoke the JavaScript factory method. If an exception is thrown while |
757 // running the factory method, use the exception as the result. | 755 // running the factory method, use the exception as the result. |
758 bool caught_exception; | 756 bool caught_exception; |
759 Handle<Object> result = Execution::TryCall(fun, | 757 Handle<Object> result = Execution::TryCall(fun, |
760 isolate()->js_builtins_object(), | 758 isolate()->js_builtins_object(), |
761 ARRAY_SIZE(argv), | 759 ARRAY_SIZE(argv), |
762 argv, | 760 argv, |
763 &caught_exception); | 761 &caught_exception); |
764 return result; | 762 return result; |
765 } | 763 } |
766 | 764 |
767 | 765 |
768 Handle<Object> Factory::NewError(Handle<String> message) { | 766 Handle<Object> Factory::NewError(Handle<String> message) { |
769 return NewError("$Error", message); | 767 return NewError("$Error", message); |
770 } | 768 } |
771 | 769 |
772 | 770 |
773 Handle<Object> Factory::NewError(const char* constructor, | 771 Handle<Object> Factory::NewError(const char* constructor, |
774 Handle<String> message) { | 772 Handle<String> message) { |
775 Handle<String> constr = LookupUtf8Symbol(constructor); | 773 Handle<String> constr = InternalizeUtf8String(constructor); |
776 Handle<JSFunction> fun = Handle<JSFunction>( | 774 Handle<JSFunction> fun = Handle<JSFunction>( |
777 JSFunction::cast(isolate()->js_builtins_object()-> | 775 JSFunction::cast(isolate()->js_builtins_object()-> |
778 GetPropertyNoExceptionThrown(*constr))); | 776 GetPropertyNoExceptionThrown(*constr))); |
779 Handle<Object> argv[] = { message }; | 777 Handle<Object> argv[] = { message }; |
780 | 778 |
781 // Invoke the JavaScript factory method. If an exception is thrown while | 779 // Invoke the JavaScript factory method. If an exception is thrown while |
782 // running the factory method, use the exception as the result. | 780 // running the factory method, use the exception as the result. |
783 bool caught_exception; | 781 bool caught_exception; |
784 Handle<Object> result = Execution::TryCall(fun, | 782 Handle<Object> result = Execution::TryCall(fun, |
785 isolate()->js_builtins_object(), | 783 isolate()->js_builtins_object(), |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 function->set_initial_map(*initial_map); | 841 function->set_initial_map(*initial_map); |
844 initial_map->set_constructor(*function); | 842 initial_map->set_constructor(*function); |
845 } | 843 } |
846 | 844 |
847 // Set function.prototype and give the prototype a constructor | 845 // Set function.prototype and give the prototype a constructor |
848 // property that refers to the function. | 846 // property that refers to the function. |
849 SetPrototypeProperty(function, prototype); | 847 SetPrototypeProperty(function, prototype); |
850 // Currently safe because it is only invoked from Genesis. | 848 // Currently safe because it is only invoked from Genesis. |
851 CHECK_NOT_EMPTY_HANDLE(isolate(), | 849 CHECK_NOT_EMPTY_HANDLE(isolate(), |
852 JSObject::SetLocalPropertyIgnoreAttributes( | 850 JSObject::SetLocalPropertyIgnoreAttributes( |
853 prototype, constructor_symbol(), | 851 prototype, constructor_string(), |
854 function, DONT_ENUM)); | 852 function, DONT_ENUM)); |
855 return function; | 853 return function; |
856 } | 854 } |
857 | 855 |
858 | 856 |
859 Handle<JSFunction> Factory::NewFunctionWithoutPrototype(Handle<String> name, | 857 Handle<JSFunction> Factory::NewFunctionWithoutPrototype(Handle<String> name, |
860 Handle<Code> code) { | 858 Handle<Code> code) { |
861 Handle<JSFunction> function = NewFunctionWithoutPrototype(name, | 859 Handle<JSFunction> function = NewFunctionWithoutPrototype(name, |
862 CLASSIC_MODE); | 860 CLASSIC_MODE); |
863 function->shared()->set_code(*code); | 861 function->shared()->set_code(*code); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
901 } | 899 } |
902 | 900 |
903 | 901 |
904 Handle<Code> Factory::CopyCode(Handle<Code> code, Vector<byte> reloc_info) { | 902 Handle<Code> Factory::CopyCode(Handle<Code> code, Vector<byte> reloc_info) { |
905 CALL_HEAP_FUNCTION(isolate(), | 903 CALL_HEAP_FUNCTION(isolate(), |
906 isolate()->heap()->CopyCode(*code, reloc_info), | 904 isolate()->heap()->CopyCode(*code, reloc_info), |
907 Code); | 905 Code); |
908 } | 906 } |
909 | 907 |
910 | 908 |
911 Handle<String> Factory::SymbolFromString(Handle<String> value) { | 909 Handle<String> Factory::InternalizedStringFromString(Handle<String> value) { |
912 CALL_HEAP_FUNCTION(isolate(), | 910 CALL_HEAP_FUNCTION(isolate(), |
913 isolate()->heap()->LookupSymbol(*value), String); | 911 isolate()->heap()->InternalizeString(*value), String); |
914 } | 912 } |
915 | 913 |
916 | 914 |
917 Handle<JSObject> Factory::NewJSObject(Handle<JSFunction> constructor, | 915 Handle<JSObject> Factory::NewJSObject(Handle<JSFunction> constructor, |
918 PretenureFlag pretenure) { | 916 PretenureFlag pretenure) { |
919 CALL_HEAP_FUNCTION( | 917 CALL_HEAP_FUNCTION( |
920 isolate(), | 918 isolate(), |
921 isolate()->heap()->AllocateJSObject(*constructor, pretenure), JSObject); | 919 isolate()->heap()->AllocateJSObject(*constructor, pretenure), JSObject); |
922 } | 920 } |
923 | 921 |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1248 case OuterGlobalObject: | 1246 case OuterGlobalObject: |
1249 type = JS_GLOBAL_PROXY_TYPE; | 1247 type = JS_GLOBAL_PROXY_TYPE; |
1250 instance_size += JSGlobalProxy::kSize; | 1248 instance_size += JSGlobalProxy::kSize; |
1251 break; | 1249 break; |
1252 default: | 1250 default: |
1253 break; | 1251 break; |
1254 } | 1252 } |
1255 ASSERT(type != INVALID_TYPE); | 1253 ASSERT(type != INVALID_TYPE); |
1256 | 1254 |
1257 Handle<JSFunction> result = | 1255 Handle<JSFunction> result = |
1258 NewFunction(Factory::empty_symbol(), | 1256 NewFunction(Factory::empty_string(), |
1259 type, | 1257 type, |
1260 instance_size, | 1258 instance_size, |
1261 code, | 1259 code, |
1262 true); | 1260 true); |
1263 | 1261 |
1264 // Set length. | 1262 // Set length. |
1265 result->shared()->set_length(obj->length()); | 1263 result->shared()->set_length(obj->length()); |
1266 | 1264 |
1267 // Set class name. | 1265 // Set class name. |
1268 Handle<Object> class_name = Handle<Object>(obj->class_name()); | 1266 Handle<Object> class_name = Handle<Object>(obj->class_name()); |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1432 instance_template, | 1430 instance_template, |
1433 pending_exception); | 1431 pending_exception); |
1434 } else { | 1432 } else { |
1435 *pending_exception = false; | 1433 *pending_exception = false; |
1436 } | 1434 } |
1437 } | 1435 } |
1438 | 1436 |
1439 | 1437 |
1440 Handle<Object> Factory::GlobalConstantFor(Handle<String> name) { | 1438 Handle<Object> Factory::GlobalConstantFor(Handle<String> name) { |
1441 Heap* h = isolate()->heap(); | 1439 Heap* h = isolate()->heap(); |
1442 if (name->Equals(h->undefined_symbol())) return undefined_value(); | 1440 if (name->Equals(h->undefined_string())) return undefined_value(); |
1443 if (name->Equals(h->nan_symbol())) return nan_value(); | 1441 if (name->Equals(h->nan_string())) return nan_value(); |
1444 if (name->Equals(h->infinity_symbol())) return infinity_value(); | 1442 if (name->Equals(h->infinity_string())) return infinity_value(); |
1445 return Handle<Object>::null(); | 1443 return Handle<Object>::null(); |
1446 } | 1444 } |
1447 | 1445 |
1448 | 1446 |
1449 Handle<Object> Factory::ToBoolean(bool value) { | 1447 Handle<Object> Factory::ToBoolean(bool value) { |
1450 return Handle<Object>(value | 1448 return Handle<Object>(value |
1451 ? isolate()->heap()->true_value() | 1449 ? isolate()->heap()->true_value() |
1452 : isolate()->heap()->false_value()); | 1450 : isolate()->heap()->false_value()); |
1453 } | 1451 } |
1454 | 1452 |
1455 | 1453 |
1456 } } // namespace v8::internal | 1454 } } // namespace v8::internal |
OLD | NEW |