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

Side by Side Diff: src/factory.cc

Issue 6685088: Merge isolates to bleeding_edge. (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 | « src/factory.h ('k') | src/flag-definitions.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 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 23 matching lines...) Expand all
34 #include "macro-assembler.h" 34 #include "macro-assembler.h"
35 #include "objects.h" 35 #include "objects.h"
36 #include "objects-visiting.h" 36 #include "objects-visiting.h"
37 37
38 namespace v8 { 38 namespace v8 {
39 namespace internal { 39 namespace internal {
40 40
41 41
42 Handle<FixedArray> Factory::NewFixedArray(int size, PretenureFlag pretenure) { 42 Handle<FixedArray> Factory::NewFixedArray(int size, PretenureFlag pretenure) {
43 ASSERT(0 <= size); 43 ASSERT(0 <= size);
44 CALL_HEAP_FUNCTION(Heap::AllocateFixedArray(size, pretenure), FixedArray); 44 CALL_HEAP_FUNCTION(
45 isolate(),
46 isolate()->heap()->AllocateFixedArray(size, pretenure),
47 FixedArray);
45 } 48 }
46 49
47 50
48 Handle<FixedArray> Factory::NewFixedArrayWithHoles(int size, 51 Handle<FixedArray> Factory::NewFixedArrayWithHoles(int size,
49 PretenureFlag pretenure) { 52 PretenureFlag pretenure) {
50 ASSERT(0 <= size); 53 ASSERT(0 <= size);
51 CALL_HEAP_FUNCTION(Heap::AllocateFixedArrayWithHoles(size, pretenure), 54 CALL_HEAP_FUNCTION(
52 FixedArray); 55 isolate(),
56 isolate()->heap()->AllocateFixedArrayWithHoles(size, pretenure),
57 FixedArray);
53 } 58 }
54 59
55 60
56 Handle<StringDictionary> Factory::NewStringDictionary(int at_least_space_for) { 61 Handle<StringDictionary> Factory::NewStringDictionary(int at_least_space_for) {
57 ASSERT(0 <= at_least_space_for); 62 ASSERT(0 <= at_least_space_for);
58 CALL_HEAP_FUNCTION(StringDictionary::Allocate(at_least_space_for), 63 CALL_HEAP_FUNCTION(isolate(),
64 StringDictionary::Allocate(at_least_space_for),
59 StringDictionary); 65 StringDictionary);
60 } 66 }
61 67
62 68
63 Handle<NumberDictionary> Factory::NewNumberDictionary(int at_least_space_for) { 69 Handle<NumberDictionary> Factory::NewNumberDictionary(int at_least_space_for) {
64 ASSERT(0 <= at_least_space_for); 70 ASSERT(0 <= at_least_space_for);
65 CALL_HEAP_FUNCTION(NumberDictionary::Allocate(at_least_space_for), 71 CALL_HEAP_FUNCTION(isolate(),
72 NumberDictionary::Allocate(at_least_space_for),
66 NumberDictionary); 73 NumberDictionary);
67 } 74 }
68 75
69 76
70 Handle<DescriptorArray> Factory::NewDescriptorArray(int number_of_descriptors) { 77 Handle<DescriptorArray> Factory::NewDescriptorArray(int number_of_descriptors) {
71 ASSERT(0 <= number_of_descriptors); 78 ASSERT(0 <= number_of_descriptors);
72 CALL_HEAP_FUNCTION(DescriptorArray::Allocate(number_of_descriptors), 79 CALL_HEAP_FUNCTION(isolate(),
80 DescriptorArray::Allocate(number_of_descriptors),
73 DescriptorArray); 81 DescriptorArray);
74 } 82 }
75 83
76 84
77 Handle<DeoptimizationInputData> Factory::NewDeoptimizationInputData( 85 Handle<DeoptimizationInputData> Factory::NewDeoptimizationInputData(
78 int deopt_entry_count, 86 int deopt_entry_count,
79 PretenureFlag pretenure) { 87 PretenureFlag pretenure) {
80 ASSERT(deopt_entry_count > 0); 88 ASSERT(deopt_entry_count > 0);
81 CALL_HEAP_FUNCTION(DeoptimizationInputData::Allocate(deopt_entry_count, 89 CALL_HEAP_FUNCTION(isolate(),
90 DeoptimizationInputData::Allocate(deopt_entry_count,
82 pretenure), 91 pretenure),
83 DeoptimizationInputData); 92 DeoptimizationInputData);
84 } 93 }
85 94
86 95
87 Handle<DeoptimizationOutputData> Factory::NewDeoptimizationOutputData( 96 Handle<DeoptimizationOutputData> Factory::NewDeoptimizationOutputData(
88 int deopt_entry_count, 97 int deopt_entry_count,
89 PretenureFlag pretenure) { 98 PretenureFlag pretenure) {
90 ASSERT(deopt_entry_count > 0); 99 ASSERT(deopt_entry_count > 0);
91 CALL_HEAP_FUNCTION(DeoptimizationOutputData::Allocate(deopt_entry_count, 100 CALL_HEAP_FUNCTION(isolate(),
101 DeoptimizationOutputData::Allocate(deopt_entry_count,
92 pretenure), 102 pretenure),
93 DeoptimizationOutputData); 103 DeoptimizationOutputData);
94 } 104 }
95 105
96 106
97 // Symbols are created in the old generation (data space). 107 // Symbols are created in the old generation (data space).
98 Handle<String> Factory::LookupSymbol(Vector<const char> string) { 108 Handle<String> Factory::LookupSymbol(Vector<const char> string) {
99 CALL_HEAP_FUNCTION(Heap::LookupSymbol(string), String); 109 CALL_HEAP_FUNCTION(isolate(),
110 isolate()->heap()->LookupSymbol(string),
111 String);
100 } 112 }
101 113
102 Handle<String> Factory::LookupAsciiSymbol(Vector<const char> string) { 114 Handle<String> Factory::LookupAsciiSymbol(Vector<const char> string) {
103 CALL_HEAP_FUNCTION(Heap::LookupAsciiSymbol(string), String); 115 CALL_HEAP_FUNCTION(isolate(),
116 isolate()->heap()->LookupAsciiSymbol(string),
117 String);
104 } 118 }
105 119
106 Handle<String> Factory::LookupTwoByteSymbol(Vector<const uc16> string) { 120 Handle<String> Factory::LookupTwoByteSymbol(Vector<const uc16> string) {
107 CALL_HEAP_FUNCTION(Heap::LookupTwoByteSymbol(string), String); 121 CALL_HEAP_FUNCTION(isolate(),
122 isolate()->heap()->LookupTwoByteSymbol(string),
123 String);
108 } 124 }
109 125
110 126
111 Handle<String> Factory::NewStringFromAscii(Vector<const char> string, 127 Handle<String> Factory::NewStringFromAscii(Vector<const char> string,
112 PretenureFlag pretenure) { 128 PretenureFlag pretenure) {
113 CALL_HEAP_FUNCTION(Heap::AllocateStringFromAscii(string, pretenure), String); 129 CALL_HEAP_FUNCTION(
130 isolate(),
131 isolate()->heap()->AllocateStringFromAscii(string, pretenure),
132 String);
114 } 133 }
115 134
116 Handle<String> Factory::NewStringFromUtf8(Vector<const char> string, 135 Handle<String> Factory::NewStringFromUtf8(Vector<const char> string,
117 PretenureFlag pretenure) { 136 PretenureFlag pretenure) {
118 CALL_HEAP_FUNCTION(Heap::AllocateStringFromUtf8(string, pretenure), String); 137 CALL_HEAP_FUNCTION(
138 isolate(),
139 isolate()->heap()->AllocateStringFromUtf8(string, pretenure),
140 String);
119 } 141 }
120 142
121 143
122 Handle<String> Factory::NewStringFromTwoByte(Vector<const uc16> string, 144 Handle<String> Factory::NewStringFromTwoByte(Vector<const uc16> string,
123 PretenureFlag pretenure) { 145 PretenureFlag pretenure) {
124 CALL_HEAP_FUNCTION(Heap::AllocateStringFromTwoByte(string, pretenure), 146 CALL_HEAP_FUNCTION(
125 String); 147 isolate(),
148 isolate()->heap()->AllocateStringFromTwoByte(string, pretenure),
149 String);
126 } 150 }
127 151
128 152
129 Handle<String> Factory::NewRawAsciiString(int length, 153 Handle<String> Factory::NewRawAsciiString(int length,
130 PretenureFlag pretenure) { 154 PretenureFlag pretenure) {
131 CALL_HEAP_FUNCTION(Heap::AllocateRawAsciiString(length, pretenure), String); 155 CALL_HEAP_FUNCTION(
156 isolate(),
157 isolate()->heap()->AllocateRawAsciiString(length, pretenure),
158 String);
132 } 159 }
133 160
134 161
135 Handle<String> Factory::NewRawTwoByteString(int length, 162 Handle<String> Factory::NewRawTwoByteString(int length,
136 PretenureFlag pretenure) { 163 PretenureFlag pretenure) {
137 CALL_HEAP_FUNCTION(Heap::AllocateRawTwoByteString(length, pretenure), String); 164 CALL_HEAP_FUNCTION(
165 isolate(),
166 isolate()->heap()->AllocateRawTwoByteString(length, pretenure),
167 String);
138 } 168 }
139 169
140 170
141 Handle<String> Factory::NewConsString(Handle<String> first, 171 Handle<String> Factory::NewConsString(Handle<String> first,
142 Handle<String> second) { 172 Handle<String> second) {
143 CALL_HEAP_FUNCTION(Heap::AllocateConsString(*first, *second), String); 173 CALL_HEAP_FUNCTION(isolate(),
174 isolate()->heap()->AllocateConsString(*first, *second),
175 String);
144 } 176 }
145 177
146 178
147 Handle<String> Factory::NewSubString(Handle<String> str, 179 Handle<String> Factory::NewSubString(Handle<String> str,
148 int begin, 180 int begin,
149 int end) { 181 int end) {
150 CALL_HEAP_FUNCTION(str->SubString(begin, end), String); 182 CALL_HEAP_FUNCTION(isolate(),
183 str->SubString(begin, end),
184 String);
151 } 185 }
152 186
153 187
154 Handle<String> Factory::NewExternalStringFromAscii( 188 Handle<String> Factory::NewExternalStringFromAscii(
155 ExternalAsciiString::Resource* resource) { 189 ExternalAsciiString::Resource* resource) {
156 CALL_HEAP_FUNCTION(Heap::AllocateExternalStringFromAscii(resource), String); 190 CALL_HEAP_FUNCTION(
191 isolate(),
192 isolate()->heap()->AllocateExternalStringFromAscii(resource),
193 String);
157 } 194 }
158 195
159 196
160 Handle<String> Factory::NewExternalStringFromTwoByte( 197 Handle<String> Factory::NewExternalStringFromTwoByte(
161 ExternalTwoByteString::Resource* resource) { 198 ExternalTwoByteString::Resource* resource) {
162 CALL_HEAP_FUNCTION(Heap::AllocateExternalStringFromTwoByte(resource), String); 199 CALL_HEAP_FUNCTION(
200 isolate(),
201 isolate()->heap()->AllocateExternalStringFromTwoByte(resource),
202 String);
163 } 203 }
164 204
165 205
166 Handle<Context> Factory::NewGlobalContext() { 206 Handle<Context> Factory::NewGlobalContext() {
167 CALL_HEAP_FUNCTION(Heap::AllocateGlobalContext(), Context); 207 CALL_HEAP_FUNCTION(
208 isolate(),
209 isolate()->heap()->AllocateGlobalContext(),
210 Context);
168 } 211 }
169 212
170 213
171 Handle<Context> Factory::NewFunctionContext(int length, 214 Handle<Context> Factory::NewFunctionContext(int length,
172 Handle<JSFunction> closure) { 215 Handle<JSFunction> closure) {
173 CALL_HEAP_FUNCTION(Heap::AllocateFunctionContext(length, *closure), Context); 216 CALL_HEAP_FUNCTION(
217 isolate(),
218 isolate()->heap()->AllocateFunctionContext(length, *closure),
219 Context);
174 } 220 }
175 221
176 222
177 Handle<Context> Factory::NewWithContext(Handle<Context> previous, 223 Handle<Context> Factory::NewWithContext(Handle<Context> previous,
178 Handle<JSObject> extension, 224 Handle<JSObject> extension,
179 bool is_catch_context) { 225 bool is_catch_context) {
180 CALL_HEAP_FUNCTION(Heap::AllocateWithContext(*previous, 226 CALL_HEAP_FUNCTION(
181 *extension, 227 isolate(),
182 is_catch_context), 228 isolate()->heap()->AllocateWithContext(*previous,
183 Context); 229 *extension,
230 is_catch_context),
231 Context);
184 } 232 }
185 233
186 234
187 Handle<Struct> Factory::NewStruct(InstanceType type) { 235 Handle<Struct> Factory::NewStruct(InstanceType type) {
188 CALL_HEAP_FUNCTION(Heap::AllocateStruct(type), Struct); 236 CALL_HEAP_FUNCTION(
237 isolate(),
238 isolate()->heap()->AllocateStruct(type),
239 Struct);
189 } 240 }
190 241
191 242
192 Handle<AccessorInfo> Factory::NewAccessorInfo() { 243 Handle<AccessorInfo> Factory::NewAccessorInfo() {
193 Handle<AccessorInfo> info = 244 Handle<AccessorInfo> info =
194 Handle<AccessorInfo>::cast(NewStruct(ACCESSOR_INFO_TYPE)); 245 Handle<AccessorInfo>::cast(NewStruct(ACCESSOR_INFO_TYPE));
195 info->set_flag(0); // Must clear the flag, it was initialized as undefined. 246 info->set_flag(0); // Must clear the flag, it was initialized as undefined.
196 return info; 247 return info;
197 } 248 }
198 249
199 250
200 Handle<Script> Factory::NewScript(Handle<String> source) { 251 Handle<Script> Factory::NewScript(Handle<String> source) {
201 // Generate id for this script. 252 // Generate id for this script.
202 int id; 253 int id;
203 if (Heap::last_script_id()->IsUndefined()) { 254 Heap* heap = isolate()->heap();
255 if (heap->last_script_id()->IsUndefined()) {
204 // Script ids start from one. 256 // Script ids start from one.
205 id = 1; 257 id = 1;
206 } else { 258 } else {
207 // Increment id, wrap when positive smi is exhausted. 259 // Increment id, wrap when positive smi is exhausted.
208 id = Smi::cast(Heap::last_script_id())->value(); 260 id = Smi::cast(heap->last_script_id())->value();
209 id++; 261 id++;
210 if (!Smi::IsValid(id)) { 262 if (!Smi::IsValid(id)) {
211 id = 0; 263 id = 0;
212 } 264 }
213 } 265 }
214 Heap::SetLastScriptId(Smi::FromInt(id)); 266 heap->SetLastScriptId(Smi::FromInt(id));
215 267
216 // Create and initialize script object. 268 // Create and initialize script object.
217 Handle<Proxy> wrapper = Factory::NewProxy(0, TENURED); 269 Handle<Proxy> wrapper = NewProxy(0, TENURED);
218 Handle<Script> script = Handle<Script>::cast(NewStruct(SCRIPT_TYPE)); 270 Handle<Script> script = Handle<Script>::cast(NewStruct(SCRIPT_TYPE));
219 script->set_source(*source); 271 script->set_source(*source);
220 script->set_name(Heap::undefined_value()); 272 script->set_name(heap->undefined_value());
221 script->set_id(Heap::last_script_id()); 273 script->set_id(heap->last_script_id());
222 script->set_line_offset(Smi::FromInt(0)); 274 script->set_line_offset(Smi::FromInt(0));
223 script->set_column_offset(Smi::FromInt(0)); 275 script->set_column_offset(Smi::FromInt(0));
224 script->set_data(Heap::undefined_value()); 276 script->set_data(heap->undefined_value());
225 script->set_context_data(Heap::undefined_value()); 277 script->set_context_data(heap->undefined_value());
226 script->set_type(Smi::FromInt(Script::TYPE_NORMAL)); 278 script->set_type(Smi::FromInt(Script::TYPE_NORMAL));
227 script->set_compilation_type(Smi::FromInt(Script::COMPILATION_TYPE_HOST)); 279 script->set_compilation_type(Smi::FromInt(Script::COMPILATION_TYPE_HOST));
228 script->set_wrapper(*wrapper); 280 script->set_wrapper(*wrapper);
229 script->set_line_ends(Heap::undefined_value()); 281 script->set_line_ends(heap->undefined_value());
230 script->set_eval_from_shared(Heap::undefined_value()); 282 script->set_eval_from_shared(heap->undefined_value());
231 script->set_eval_from_instructions_offset(Smi::FromInt(0)); 283 script->set_eval_from_instructions_offset(Smi::FromInt(0));
232 284
233 return script; 285 return script;
234 } 286 }
235 287
236 288
237 Handle<Proxy> Factory::NewProxy(Address addr, PretenureFlag pretenure) { 289 Handle<Proxy> Factory::NewProxy(Address addr, PretenureFlag pretenure) {
238 CALL_HEAP_FUNCTION(Heap::AllocateProxy(addr, pretenure), Proxy); 290 CALL_HEAP_FUNCTION(isolate(),
291 isolate()->heap()->AllocateProxy(addr, pretenure),
292 Proxy);
239 } 293 }
240 294
241 295
242 Handle<Proxy> Factory::NewProxy(const AccessorDescriptor* desc) { 296 Handle<Proxy> Factory::NewProxy(const AccessorDescriptor* desc) {
243 return NewProxy((Address) desc, TENURED); 297 return NewProxy((Address) desc, TENURED);
244 } 298 }
245 299
246 300
247 Handle<ByteArray> Factory::NewByteArray(int length, PretenureFlag pretenure) { 301 Handle<ByteArray> Factory::NewByteArray(int length, PretenureFlag pretenure) {
248 ASSERT(0 <= length); 302 ASSERT(0 <= length);
249 CALL_HEAP_FUNCTION(Heap::AllocateByteArray(length, pretenure), ByteArray); 303 CALL_HEAP_FUNCTION(
304 isolate(),
305 isolate()->heap()->AllocateByteArray(length, pretenure),
306 ByteArray);
250 } 307 }
251 308
252 309
253 Handle<ExternalArray> Factory::NewExternalArray(int length, 310 Handle<ExternalArray> Factory::NewExternalArray(int length,
254 ExternalArrayType array_type, 311 ExternalArrayType array_type,
255 void* external_pointer, 312 void* external_pointer,
256 PretenureFlag pretenure) { 313 PretenureFlag pretenure) {
257 ASSERT(0 <= length); 314 ASSERT(0 <= length);
258 CALL_HEAP_FUNCTION(Heap::AllocateExternalArray(length, 315 CALL_HEAP_FUNCTION(
259 array_type, 316 isolate(),
260 external_pointer, 317 isolate()->heap()->AllocateExternalArray(length,
261 pretenure), ExternalArray); 318 array_type,
319 external_pointer,
320 pretenure),
321 ExternalArray);
262 } 322 }
263 323
264 324
265 Handle<JSGlobalPropertyCell> Factory::NewJSGlobalPropertyCell( 325 Handle<JSGlobalPropertyCell> Factory::NewJSGlobalPropertyCell(
266 Handle<Object> value) { 326 Handle<Object> value) {
267 CALL_HEAP_FUNCTION(Heap::AllocateJSGlobalPropertyCell(*value), 327 CALL_HEAP_FUNCTION(
268 JSGlobalPropertyCell); 328 isolate(),
329 isolate()->heap()->AllocateJSGlobalPropertyCell(*value),
330 JSGlobalPropertyCell);
269 } 331 }
270 332
271 333
272 Handle<Map> Factory::NewMap(InstanceType type, int instance_size) { 334 Handle<Map> Factory::NewMap(InstanceType type, int instance_size) {
273 CALL_HEAP_FUNCTION(Heap::AllocateMap(type, instance_size), Map); 335 CALL_HEAP_FUNCTION(
336 isolate(),
337 isolate()->heap()->AllocateMap(type, instance_size),
338 Map);
274 } 339 }
275 340
276 341
277 Handle<JSObject> Factory::NewFunctionPrototype(Handle<JSFunction> function) { 342 Handle<JSObject> Factory::NewFunctionPrototype(Handle<JSFunction> function) {
278 CALL_HEAP_FUNCTION(Heap::AllocateFunctionPrototype(*function), JSObject); 343 CALL_HEAP_FUNCTION(
344 isolate(),
345 isolate()->heap()->AllocateFunctionPrototype(*function),
346 JSObject);
279 } 347 }
280 348
281 349
282 Handle<Map> Factory::CopyMapDropDescriptors(Handle<Map> src) { 350 Handle<Map> Factory::CopyMapDropDescriptors(Handle<Map> src) {
283 CALL_HEAP_FUNCTION(src->CopyDropDescriptors(), Map); 351 CALL_HEAP_FUNCTION(isolate(), src->CopyDropDescriptors(), Map);
284 } 352 }
285 353
286 354
287 Handle<Map> Factory::CopyMap(Handle<Map> src, 355 Handle<Map> Factory::CopyMap(Handle<Map> src,
288 int extra_inobject_properties) { 356 int extra_inobject_properties) {
289 Handle<Map> copy = CopyMapDropDescriptors(src); 357 Handle<Map> copy = CopyMapDropDescriptors(src);
290 // Check that we do not overflow the instance size when adding the 358 // Check that we do not overflow the instance size when adding the
291 // extra inobject properties. 359 // extra inobject properties.
292 int instance_size_delta = extra_inobject_properties * kPointerSize; 360 int instance_size_delta = extra_inobject_properties * kPointerSize;
293 int max_instance_size_delta = 361 int max_instance_size_delta =
294 JSObject::kMaxInstanceSize - copy->instance_size(); 362 JSObject::kMaxInstanceSize - copy->instance_size();
295 if (instance_size_delta > max_instance_size_delta) { 363 if (instance_size_delta > max_instance_size_delta) {
296 // If the instance size overflows, we allocate as many properties 364 // If the instance size overflows, we allocate as many properties
297 // as we can as inobject properties. 365 // as we can as inobject properties.
298 instance_size_delta = max_instance_size_delta; 366 instance_size_delta = max_instance_size_delta;
299 extra_inobject_properties = max_instance_size_delta >> kPointerSizeLog2; 367 extra_inobject_properties = max_instance_size_delta >> kPointerSizeLog2;
300 } 368 }
301 // Adjust the map with the extra inobject properties. 369 // Adjust the map with the extra inobject properties.
302 int inobject_properties = 370 int inobject_properties =
303 copy->inobject_properties() + extra_inobject_properties; 371 copy->inobject_properties() + extra_inobject_properties;
304 copy->set_inobject_properties(inobject_properties); 372 copy->set_inobject_properties(inobject_properties);
305 copy->set_unused_property_fields(inobject_properties); 373 copy->set_unused_property_fields(inobject_properties);
306 copy->set_instance_size(copy->instance_size() + instance_size_delta); 374 copy->set_instance_size(copy->instance_size() + instance_size_delta);
307 copy->set_visitor_id(StaticVisitorBase::GetVisitorId(*copy)); 375 copy->set_visitor_id(StaticVisitorBase::GetVisitorId(*copy));
308 return copy; 376 return copy;
309 } 377 }
310 378
311 379
312 Handle<Map> Factory::CopyMapDropTransitions(Handle<Map> src) { 380 Handle<Map> Factory::CopyMapDropTransitions(Handle<Map> src) {
313 CALL_HEAP_FUNCTION(src->CopyDropTransitions(), Map); 381 CALL_HEAP_FUNCTION(isolate(), src->CopyDropTransitions(), Map);
314 } 382 }
315 383
316 384
317 Handle<Map> Factory::GetFastElementsMap(Handle<Map> src) { 385 Handle<Map> Factory::GetFastElementsMap(Handle<Map> src) {
318 CALL_HEAP_FUNCTION(src->GetFastElementsMap(), Map); 386 CALL_HEAP_FUNCTION(isolate(), src->GetFastElementsMap(), Map);
319 } 387 }
320 388
321 389
322 Handle<Map> Factory::GetSlowElementsMap(Handle<Map> src) { 390 Handle<Map> Factory::GetSlowElementsMap(Handle<Map> src) {
323 CALL_HEAP_FUNCTION(src->GetSlowElementsMap(), Map); 391 CALL_HEAP_FUNCTION(isolate(), src->GetSlowElementsMap(), Map);
324 } 392 }
325 393
326 394
327 Handle<Map> Factory::NewExternalArrayElementsMap(Handle<Map> src) { 395 Handle<Map> Factory::NewExternalArrayElementsMap(Handle<Map> src) {
328 CALL_HEAP_FUNCTION(src->NewExternalArrayElementsMap(), Map); 396 CALL_HEAP_FUNCTION(isolate(), src->NewExternalArrayElementsMap(), Map);
329 } 397 }
330 398
331 399
332 Handle<FixedArray> Factory::CopyFixedArray(Handle<FixedArray> array) { 400 Handle<FixedArray> Factory::CopyFixedArray(Handle<FixedArray> array) {
333 CALL_HEAP_FUNCTION(array->Copy(), FixedArray); 401 CALL_HEAP_FUNCTION(isolate(), array->Copy(), FixedArray);
334 } 402 }
335 403
336 404
337 Handle<JSFunction> Factory::BaseNewFunctionFromSharedFunctionInfo( 405 Handle<JSFunction> Factory::BaseNewFunctionFromSharedFunctionInfo(
338 Handle<SharedFunctionInfo> function_info, 406 Handle<SharedFunctionInfo> function_info,
339 Handle<Map> function_map, 407 Handle<Map> function_map,
340 PretenureFlag pretenure) { 408 PretenureFlag pretenure) {
341 CALL_HEAP_FUNCTION(Heap::AllocateFunction(*function_map, 409 CALL_HEAP_FUNCTION(
342 *function_info, 410 isolate(),
343 Heap::the_hole_value(), 411 isolate()->heap()->AllocateFunction(*function_map,
344 pretenure), 412 *function_info,
413 isolate()->heap()->the_hole_value(),
414 pretenure),
345 JSFunction); 415 JSFunction);
346 } 416 }
347 417
348 418
349 Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo( 419 Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo(
350 Handle<SharedFunctionInfo> function_info, 420 Handle<SharedFunctionInfo> function_info,
351 Handle<Context> context, 421 Handle<Context> context,
352 PretenureFlag pretenure) { 422 PretenureFlag pretenure) {
353 Handle<JSFunction> result = BaseNewFunctionFromSharedFunctionInfo( 423 Handle<JSFunction> result = BaseNewFunctionFromSharedFunctionInfo(
354 function_info, 424 function_info,
355 function_info->strict_mode() 425 function_info->strict_mode()
356 ? Top::strict_mode_function_map() 426 ? isolate()->strict_mode_function_map()
357 : Top::function_map(), 427 : isolate()->function_map(),
358 pretenure); 428 pretenure);
359 429
360 result->set_context(*context); 430 result->set_context(*context);
361 int number_of_literals = function_info->num_literals(); 431 int number_of_literals = function_info->num_literals();
362 Handle<FixedArray> literals = 432 Handle<FixedArray> literals = NewFixedArray(number_of_literals, pretenure);
363 Factory::NewFixedArray(number_of_literals, pretenure);
364 if (number_of_literals > 0) { 433 if (number_of_literals > 0) {
365 // Store the object, regexp and array functions in the literals 434 // Store the object, regexp and array functions in the literals
366 // array prefix. These functions will be used when creating 435 // array prefix. These functions will be used when creating
367 // object, regexp and array literals in this function. 436 // object, regexp and array literals in this function.
368 literals->set(JSFunction::kLiteralGlobalContextIndex, 437 literals->set(JSFunction::kLiteralGlobalContextIndex,
369 context->global_context()); 438 context->global_context());
370 } 439 }
371 result->set_literals(*literals); 440 result->set_literals(*literals);
372 result->set_next_function_link(Heap::undefined_value()); 441 result->set_next_function_link(isolate()->heap()->undefined_value());
373 442
374 if (V8::UseCrankshaft() && 443 if (V8::UseCrankshaft() &&
375 FLAG_always_opt && 444 FLAG_always_opt &&
376 result->is_compiled() && 445 result->is_compiled() &&
377 !function_info->is_toplevel() && 446 !function_info->is_toplevel() &&
378 function_info->allows_lazy_compilation()) { 447 function_info->allows_lazy_compilation()) {
379 result->MarkForLazyRecompilation(); 448 result->MarkForLazyRecompilation();
380 } 449 }
381 return result; 450 return result;
382 } 451 }
383 452
384 453
385 Handle<Object> Factory::NewNumber(double value, 454 Handle<Object> Factory::NewNumber(double value,
386 PretenureFlag pretenure) { 455 PretenureFlag pretenure) {
387 CALL_HEAP_FUNCTION(Heap::NumberFromDouble(value, pretenure), Object); 456 CALL_HEAP_FUNCTION(
457 isolate(),
458 isolate()->heap()->NumberFromDouble(value, pretenure), Object);
388 } 459 }
389 460
390 461
391 Handle<Object> Factory::NewNumberFromInt(int value) { 462 Handle<Object> Factory::NewNumberFromInt(int value) {
392 CALL_HEAP_FUNCTION(Heap::NumberFromInt32(value), Object); 463 CALL_HEAP_FUNCTION(
464 isolate(),
465 isolate()->heap()->NumberFromInt32(value), Object);
393 } 466 }
394 467
395 468
396 Handle<Object> Factory::NewNumberFromUint(uint32_t value) { 469 Handle<Object> Factory::NewNumberFromUint(uint32_t value) {
397 CALL_HEAP_FUNCTION(Heap::NumberFromUint32(value), Object); 470 CALL_HEAP_FUNCTION(
471 isolate(),
472 isolate()->heap()->NumberFromUint32(value), Object);
398 } 473 }
399 474
400 475
401 Handle<JSObject> Factory::NewNeanderObject() { 476 Handle<JSObject> Factory::NewNeanderObject() {
402 CALL_HEAP_FUNCTION(Heap::AllocateJSObjectFromMap(Heap::neander_map()), 477 CALL_HEAP_FUNCTION(
403 JSObject); 478 isolate(),
479 isolate()->heap()->AllocateJSObjectFromMap(
480 isolate()->heap()->neander_map()),
481 JSObject);
404 } 482 }
405 483
406 484
407 Handle<Object> Factory::NewTypeError(const char* type, 485 Handle<Object> Factory::NewTypeError(const char* type,
408 Vector< Handle<Object> > args) { 486 Vector< Handle<Object> > args) {
409 return NewError("MakeTypeError", type, args); 487 return NewError("MakeTypeError", type, args);
410 } 488 }
411 489
412 490
413 Handle<Object> Factory::NewTypeError(Handle<String> message) { 491 Handle<Object> Factory::NewTypeError(Handle<String> message) {
(...skipping 29 matching lines...) Expand all
443 521
444 522
445 Handle<Object> Factory::NewReferenceError(Handle<String> message) { 523 Handle<Object> Factory::NewReferenceError(Handle<String> message) {
446 return NewError("$ReferenceError", message); 524 return NewError("$ReferenceError", message);
447 } 525 }
448 526
449 527
450 Handle<Object> Factory::NewError(const char* maker, const char* type, 528 Handle<Object> Factory::NewError(const char* maker, const char* type,
451 Vector< Handle<Object> > args) { 529 Vector< Handle<Object> > args) {
452 v8::HandleScope scope; // Instantiate a closeable HandleScope for EscapeFrom. 530 v8::HandleScope scope; // Instantiate a closeable HandleScope for EscapeFrom.
453 Handle<FixedArray> array = Factory::NewFixedArray(args.length()); 531 Handle<FixedArray> array = NewFixedArray(args.length());
454 for (int i = 0; i < args.length(); i++) { 532 for (int i = 0; i < args.length(); i++) {
455 array->set(i, *args[i]); 533 array->set(i, *args[i]);
456 } 534 }
457 Handle<JSArray> object = Factory::NewJSArrayWithElements(array); 535 Handle<JSArray> object = NewJSArrayWithElements(array);
458 Handle<Object> result = NewError(maker, type, object); 536 Handle<Object> result = NewError(maker, type, object);
459 return result.EscapeFrom(&scope); 537 return result.EscapeFrom(&scope);
460 } 538 }
461 539
462 540
463 Handle<Object> Factory::NewEvalError(const char* type, 541 Handle<Object> Factory::NewEvalError(const char* type,
464 Vector< Handle<Object> > args) { 542 Vector< Handle<Object> > args) {
465 return NewError("MakeEvalError", type, args); 543 return NewError("MakeEvalError", type, args);
466 } 544 }
467 545
468 546
469 Handle<Object> Factory::NewError(const char* type, 547 Handle<Object> Factory::NewError(const char* type,
470 Vector< Handle<Object> > args) { 548 Vector< Handle<Object> > args) {
471 return NewError("MakeError", type, args); 549 return NewError("MakeError", type, args);
472 } 550 }
473 551
474 552
475 Handle<Object> Factory::NewError(const char* maker, 553 Handle<Object> Factory::NewError(const char* maker,
476 const char* type, 554 const char* type,
477 Handle<JSArray> args) { 555 Handle<JSArray> args) {
478 Handle<String> make_str = Factory::LookupAsciiSymbol(maker); 556 Handle<String> make_str = LookupAsciiSymbol(maker);
479 Handle<Object> fun_obj(Top::builtins()->GetPropertyNoExceptionThrown( 557 Handle<Object> fun_obj(
480 *make_str)); 558 isolate()->js_builtins_object()->GetPropertyNoExceptionThrown(*make_str));
481 // If the builtins haven't been properly configured yet this error 559 // If the builtins haven't been properly configured yet this error
482 // constructor may not have been defined. Bail out. 560 // constructor may not have been defined. Bail out.
483 if (!fun_obj->IsJSFunction()) 561 if (!fun_obj->IsJSFunction())
484 return Factory::undefined_value(); 562 return undefined_value();
485 Handle<JSFunction> fun = Handle<JSFunction>::cast(fun_obj); 563 Handle<JSFunction> fun = Handle<JSFunction>::cast(fun_obj);
486 Handle<Object> type_obj = Factory::LookupAsciiSymbol(type); 564 Handle<Object> type_obj = LookupAsciiSymbol(type);
487 Object** argv[2] = { type_obj.location(), 565 Object** argv[2] = { type_obj.location(),
488 Handle<Object>::cast(args).location() }; 566 Handle<Object>::cast(args).location() };
489 567
490 // Invoke the JavaScript factory method. If an exception is thrown while 568 // Invoke the JavaScript factory method. If an exception is thrown while
491 // running the factory method, use the exception as the result. 569 // running the factory method, use the exception as the result.
492 bool caught_exception; 570 bool caught_exception;
493 Handle<Object> result = Execution::TryCall(fun, 571 Handle<Object> result = Execution::TryCall(fun,
494 Top::builtins(), 572 isolate()->js_builtins_object(), 2, argv, &caught_exception);
495 2,
496 argv,
497 &caught_exception);
498 return result; 573 return result;
499 } 574 }
500 575
501 576
502 Handle<Object> Factory::NewError(Handle<String> message) { 577 Handle<Object> Factory::NewError(Handle<String> message) {
503 return NewError("$Error", message); 578 return NewError("$Error", message);
504 } 579 }
505 580
506 581
507 Handle<Object> Factory::NewError(const char* constructor, 582 Handle<Object> Factory::NewError(const char* constructor,
508 Handle<String> message) { 583 Handle<String> message) {
509 Handle<String> constr = Factory::LookupAsciiSymbol(constructor); 584 Handle<String> constr = LookupAsciiSymbol(constructor);
510 Handle<JSFunction> fun = 585 Handle<JSFunction> fun = Handle<JSFunction>(
511 Handle<JSFunction>( 586 JSFunction::cast(isolate()->js_builtins_object()->
512 JSFunction::cast( 587 GetPropertyNoExceptionThrown(*constr)));
513 Top::builtins()->GetPropertyNoExceptionThrown(*constr)));
514 Object** argv[1] = { Handle<Object>::cast(message).location() }; 588 Object** argv[1] = { Handle<Object>::cast(message).location() };
515 589
516 // Invoke the JavaScript factory method. If an exception is thrown while 590 // Invoke the JavaScript factory method. If an exception is thrown while
517 // running the factory method, use the exception as the result. 591 // running the factory method, use the exception as the result.
518 bool caught_exception; 592 bool caught_exception;
519 Handle<Object> result = Execution::TryCall(fun, 593 Handle<Object> result = Execution::TryCall(fun,
520 Top::builtins(), 594 isolate()->js_builtins_object(), 1, argv, &caught_exception);
521 1,
522 argv,
523 &caught_exception);
524 return result; 595 return result;
525 } 596 }
526 597
527 598
528 Handle<JSFunction> Factory::NewFunction(Handle<String> name, 599 Handle<JSFunction> Factory::NewFunction(Handle<String> name,
529 InstanceType type, 600 InstanceType type,
530 int instance_size, 601 int instance_size,
531 Handle<Code> code, 602 Handle<Code> code,
532 bool force_initial_map) { 603 bool force_initial_map) {
533 // Allocate the function 604 // Allocate the function
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 instance_size != JSObject::kHeaderSize) { 645 instance_size != JSObject::kHeaderSize) {
575 Handle<Map> initial_map = NewMap(type, instance_size); 646 Handle<Map> initial_map = NewMap(type, instance_size);
576 function->set_initial_map(*initial_map); 647 function->set_initial_map(*initial_map);
577 initial_map->set_constructor(*function); 648 initial_map->set_constructor(*function);
578 } 649 }
579 650
580 // Set function.prototype and give the prototype a constructor 651 // Set function.prototype and give the prototype a constructor
581 // property that refers to the function. 652 // property that refers to the function.
582 SetPrototypeProperty(function, prototype); 653 SetPrototypeProperty(function, prototype);
583 // Currently safe because it is only invoked from Genesis. 654 // Currently safe because it is only invoked from Genesis.
584 SetLocalPropertyNoThrow( 655 SetLocalPropertyNoThrow(prototype, constructor_symbol(), function, DONT_ENUM);
585 prototype, Factory::constructor_symbol(), function, DONT_ENUM);
586 return function; 656 return function;
587 } 657 }
588 658
589 659
590 Handle<JSFunction> Factory::NewFunctionWithoutPrototype(Handle<String> name, 660 Handle<JSFunction> Factory::NewFunctionWithoutPrototype(Handle<String> name,
591 Handle<Code> code) { 661 Handle<Code> code) {
592 Handle<JSFunction> function = NewFunctionWithoutPrototype(name, 662 Handle<JSFunction> function = NewFunctionWithoutPrototype(name,
593 kNonStrictMode); 663 kNonStrictMode);
594 function->shared()->set_code(*code); 664 function->shared()->set_code(*code);
595 function->set_code(*code); 665 function->set_code(*code);
596 ASSERT(!function->has_initial_map()); 666 ASSERT(!function->has_initial_map());
597 ASSERT(!function->has_prototype()); 667 ASSERT(!function->has_prototype());
598 return function; 668 return function;
599 } 669 }
600 670
601 671
602 Handle<Code> Factory::NewCode(const CodeDesc& desc, 672 Handle<Code> Factory::NewCode(const CodeDesc& desc,
603 Code::Flags flags, 673 Code::Flags flags,
604 Handle<Object> self_ref, 674 Handle<Object> self_ref,
605 bool immovable) { 675 bool immovable) {
606 CALL_HEAP_FUNCTION(Heap::CreateCode(desc, flags, self_ref, immovable), Code); 676 CALL_HEAP_FUNCTION(isolate(),
677 isolate()->heap()->CreateCode(
678 desc, flags, self_ref, immovable),
679 Code);
607 } 680 }
608 681
609 682
610 Handle<Code> Factory::CopyCode(Handle<Code> code) { 683 Handle<Code> Factory::CopyCode(Handle<Code> code) {
611 CALL_HEAP_FUNCTION(Heap::CopyCode(*code), Code); 684 CALL_HEAP_FUNCTION(isolate(),
685 isolate()->heap()->CopyCode(*code),
686 Code);
612 } 687 }
613 688
614 689
615 Handle<Code> Factory::CopyCode(Handle<Code> code, Vector<byte> reloc_info) { 690 Handle<Code> Factory::CopyCode(Handle<Code> code, Vector<byte> reloc_info) {
616 CALL_HEAP_FUNCTION(Heap::CopyCode(*code, reloc_info), Code); 691 CALL_HEAP_FUNCTION(isolate(),
692 isolate()->heap()->CopyCode(*code, reloc_info),
693 Code);
617 } 694 }
618 695
619 696
620 MUST_USE_RESULT static inline MaybeObject* DoCopyInsert( 697 MUST_USE_RESULT static inline MaybeObject* DoCopyInsert(
621 DescriptorArray* array, 698 DescriptorArray* array,
622 String* key, 699 String* key,
623 Object* value, 700 Object* value,
624 PropertyAttributes attributes) { 701 PropertyAttributes attributes) {
625 CallbacksDescriptor desc(key, value, attributes); 702 CallbacksDescriptor desc(key, value, attributes);
626 MaybeObject* obj = array->CopyInsert(&desc, REMOVE_TRANSITIONS); 703 MaybeObject* obj = array->CopyInsert(&desc, REMOVE_TRANSITIONS);
627 return obj; 704 return obj;
628 } 705 }
629 706
630 707
631 // Allocate the new array. 708 // Allocate the new array.
632 Handle<DescriptorArray> Factory::CopyAppendProxyDescriptor( 709 Handle<DescriptorArray> Factory::CopyAppendProxyDescriptor(
633 Handle<DescriptorArray> array, 710 Handle<DescriptorArray> array,
634 Handle<String> key, 711 Handle<String> key,
635 Handle<Object> value, 712 Handle<Object> value,
636 PropertyAttributes attributes) { 713 PropertyAttributes attributes) {
637 CALL_HEAP_FUNCTION(DoCopyInsert(*array, *key, *value, attributes), 714 CALL_HEAP_FUNCTION(isolate(),
715 DoCopyInsert(*array, *key, *value, attributes),
638 DescriptorArray); 716 DescriptorArray);
639 } 717 }
640 718
641 719
642 Handle<String> Factory::SymbolFromString(Handle<String> value) { 720 Handle<String> Factory::SymbolFromString(Handle<String> value) {
643 CALL_HEAP_FUNCTION(Heap::LookupSymbol(*value), String); 721 CALL_HEAP_FUNCTION(isolate(),
722 isolate()->heap()->LookupSymbol(*value), String);
644 } 723 }
645 724
646 725
647 Handle<DescriptorArray> Factory::CopyAppendCallbackDescriptors( 726 Handle<DescriptorArray> Factory::CopyAppendCallbackDescriptors(
648 Handle<DescriptorArray> array, 727 Handle<DescriptorArray> array,
649 Handle<Object> descriptors) { 728 Handle<Object> descriptors) {
650 v8::NeanderArray callbacks(descriptors); 729 v8::NeanderArray callbacks(descriptors);
651 int nof_callbacks = callbacks.length(); 730 int nof_callbacks = callbacks.length();
652 Handle<DescriptorArray> result = 731 Handle<DescriptorArray> result =
653 NewDescriptorArray(array->number_of_descriptors() + nof_callbacks); 732 NewDescriptorArray(array->number_of_descriptors() + nof_callbacks);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 } 777 }
699 778
700 // Sort the result before returning. 779 // Sort the result before returning.
701 result->Sort(); 780 result->Sort();
702 return result; 781 return result;
703 } 782 }
704 783
705 784
706 Handle<JSObject> Factory::NewJSObject(Handle<JSFunction> constructor, 785 Handle<JSObject> Factory::NewJSObject(Handle<JSFunction> constructor,
707 PretenureFlag pretenure) { 786 PretenureFlag pretenure) {
708 CALL_HEAP_FUNCTION(Heap::AllocateJSObject(*constructor, pretenure), JSObject); 787 CALL_HEAP_FUNCTION(
788 isolate(),
789 isolate()->heap()->AllocateJSObject(*constructor, pretenure), JSObject);
709 } 790 }
710 791
711 792
712 Handle<GlobalObject> Factory::NewGlobalObject( 793 Handle<GlobalObject> Factory::NewGlobalObject(
713 Handle<JSFunction> constructor) { 794 Handle<JSFunction> constructor) {
714 CALL_HEAP_FUNCTION(Heap::AllocateGlobalObject(*constructor), 795 CALL_HEAP_FUNCTION(isolate(),
796 isolate()->heap()->AllocateGlobalObject(*constructor),
715 GlobalObject); 797 GlobalObject);
716 } 798 }
717 799
718 800
719 801
720 Handle<JSObject> Factory::NewJSObjectFromMap(Handle<Map> map) { 802 Handle<JSObject> Factory::NewJSObjectFromMap(Handle<Map> map) {
721 CALL_HEAP_FUNCTION(Heap::AllocateJSObjectFromMap(*map, NOT_TENURED), 803 CALL_HEAP_FUNCTION(
722 JSObject); 804 isolate(),
805 isolate()->heap()->AllocateJSObjectFromMap(*map, NOT_TENURED),
806 JSObject);
723 } 807 }
724 808
725 809
726 Handle<JSArray> Factory::NewJSArray(int capacity, 810 Handle<JSArray> Factory::NewJSArray(int capacity,
727 PretenureFlag pretenure) { 811 PretenureFlag pretenure) {
728 Handle<JSObject> obj = NewJSObject(Top::array_function(), pretenure); 812 Handle<JSObject> obj = NewJSObject(isolate()->array_function(), pretenure);
729 CALL_HEAP_FUNCTION(Handle<JSArray>::cast(obj)->Initialize(capacity), JSArray); 813 CALL_HEAP_FUNCTION(isolate(),
814 Handle<JSArray>::cast(obj)->Initialize(capacity),
815 JSArray);
730 } 816 }
731 817
732 818
733 Handle<JSArray> Factory::NewJSArrayWithElements(Handle<FixedArray> elements, 819 Handle<JSArray> Factory::NewJSArrayWithElements(Handle<FixedArray> elements,
734 PretenureFlag pretenure) { 820 PretenureFlag pretenure) {
735 Handle<JSArray> result = 821 Handle<JSArray> result =
736 Handle<JSArray>::cast(NewJSObject(Top::array_function(), pretenure)); 822 Handle<JSArray>::cast(NewJSObject(isolate()->array_function(),
823 pretenure));
737 result->SetContent(*elements); 824 result->SetContent(*elements);
738 return result; 825 return result;
739 } 826 }
740 827
741 828
742 Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo( 829 Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo(
743 Handle<String> name, 830 Handle<String> name,
744 int number_of_literals, 831 int number_of_literals,
745 Handle<Code> code, 832 Handle<Code> code,
746 Handle<SerializedScopeInfo> scope_info) { 833 Handle<SerializedScopeInfo> scope_info) {
(...skipping 13 matching lines...) Expand all
760 847
761 848
762 Handle<JSMessageObject> Factory::NewJSMessageObject( 849 Handle<JSMessageObject> Factory::NewJSMessageObject(
763 Handle<String> type, 850 Handle<String> type,
764 Handle<JSArray> arguments, 851 Handle<JSArray> arguments,
765 int start_position, 852 int start_position,
766 int end_position, 853 int end_position,
767 Handle<Object> script, 854 Handle<Object> script,
768 Handle<Object> stack_trace, 855 Handle<Object> stack_trace,
769 Handle<Object> stack_frames) { 856 Handle<Object> stack_frames) {
770 CALL_HEAP_FUNCTION(Heap::AllocateJSMessageObject(*type, 857 CALL_HEAP_FUNCTION(isolate(),
771 *arguments, 858 isolate()->heap()->AllocateJSMessageObject(*type,
772 start_position, 859 *arguments,
773 end_position, 860 start_position,
774 *script, 861 end_position,
775 *stack_trace, 862 *script,
776 *stack_frames), 863 *stack_trace,
864 *stack_frames),
777 JSMessageObject); 865 JSMessageObject);
778 } 866 }
779 867
780 Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo(Handle<String> name) { 868 Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo(Handle<String> name) {
781 CALL_HEAP_FUNCTION(Heap::AllocateSharedFunctionInfo(*name), 869 CALL_HEAP_FUNCTION(isolate(),
870 isolate()->heap()->AllocateSharedFunctionInfo(*name),
782 SharedFunctionInfo); 871 SharedFunctionInfo);
783 } 872 }
784 873
785 874
786 Handle<String> Factory::NumberToString(Handle<Object> number) { 875 Handle<String> Factory::NumberToString(Handle<Object> number) {
787 CALL_HEAP_FUNCTION(Heap::NumberToString(*number), String); 876 CALL_HEAP_FUNCTION(isolate(),
877 isolate()->heap()->NumberToString(*number), String);
788 } 878 }
789 879
790 880
791 Handle<NumberDictionary> Factory::DictionaryAtNumberPut( 881 Handle<NumberDictionary> Factory::DictionaryAtNumberPut(
792 Handle<NumberDictionary> dictionary, 882 Handle<NumberDictionary> dictionary,
793 uint32_t key, 883 uint32_t key,
794 Handle<Object> value) { 884 Handle<Object> value) {
795 CALL_HEAP_FUNCTION(dictionary->AtNumberPut(key, *value), NumberDictionary); 885 CALL_HEAP_FUNCTION(isolate(),
886 dictionary->AtNumberPut(key, *value),
887 NumberDictionary);
796 } 888 }
797 889
798 890
799 Handle<JSFunction> Factory::NewFunctionHelper(Handle<String> name, 891 Handle<JSFunction> Factory::NewFunctionHelper(Handle<String> name,
800 Handle<Object> prototype) { 892 Handle<Object> prototype) {
801 Handle<SharedFunctionInfo> function_share = NewSharedFunctionInfo(name); 893 Handle<SharedFunctionInfo> function_share = NewSharedFunctionInfo(name);
802 CALL_HEAP_FUNCTION(Heap::AllocateFunction(*Top::function_map(), 894 CALL_HEAP_FUNCTION(
803 *function_share, 895 isolate(),
804 *prototype), 896 isolate()->heap()->AllocateFunction(*isolate()->function_map(),
805 JSFunction); 897 *function_share,
898 *prototype),
899 JSFunction);
806 } 900 }
807 901
808 902
809 Handle<JSFunction> Factory::NewFunction(Handle<String> name, 903 Handle<JSFunction> Factory::NewFunction(Handle<String> name,
810 Handle<Object> prototype) { 904 Handle<Object> prototype) {
811 Handle<JSFunction> fun = NewFunctionHelper(name, prototype); 905 Handle<JSFunction> fun = NewFunctionHelper(name, prototype);
812 fun->set_context(Top::context()->global_context()); 906 fun->set_context(isolate()->context()->global_context());
813 return fun; 907 return fun;
814 } 908 }
815 909
816 910
817 Handle<JSFunction> Factory::NewFunctionWithoutPrototypeHelper( 911 Handle<JSFunction> Factory::NewFunctionWithoutPrototypeHelper(
818 Handle<String> name, 912 Handle<String> name,
819 StrictModeFlag strict_mode) { 913 StrictModeFlag strict_mode) {
820 Handle<SharedFunctionInfo> function_share = NewSharedFunctionInfo(name); 914 Handle<SharedFunctionInfo> function_share = NewSharedFunctionInfo(name);
821 Handle<Map> map = strict_mode == kStrictMode 915 Handle<Map> map = strict_mode == kStrictMode
822 ? Top::strict_mode_function_without_prototype_map() 916 ? isolate()->strict_mode_function_without_prototype_map()
823 : Top::function_without_prototype_map(); 917 : isolate()->function_without_prototype_map();
824 CALL_HEAP_FUNCTION(Heap::AllocateFunction( 918 CALL_HEAP_FUNCTION(isolate(),
919 isolate()->heap()->AllocateFunction(
825 *map, 920 *map,
826 *function_share, 921 *function_share,
827 *the_hole_value()), 922 *the_hole_value()),
828 JSFunction); 923 JSFunction);
829 } 924 }
830 925
831 926
832 Handle<JSFunction> Factory::NewFunctionWithoutPrototype( 927 Handle<JSFunction> Factory::NewFunctionWithoutPrototype(
833 Handle<String> name, 928 Handle<String> name,
834 StrictModeFlag strict_mode) { 929 StrictModeFlag strict_mode) {
835 Handle<JSFunction> fun = NewFunctionWithoutPrototypeHelper(name, strict_mode); 930 Handle<JSFunction> fun = NewFunctionWithoutPrototypeHelper(name, strict_mode);
836 fun->set_context(Top::context()->global_context()); 931 fun->set_context(isolate()->context()->global_context());
837 return fun; 932 return fun;
838 } 933 }
839 934
840 935
841 Handle<Object> Factory::ToObject(Handle<Object> object) { 936 Handle<Object> Factory::ToObject(Handle<Object> object) {
842 CALL_HEAP_FUNCTION(object->ToObject(), Object); 937 CALL_HEAP_FUNCTION(isolate(), object->ToObject(), Object);
843 } 938 }
844 939
845 940
846 Handle<Object> Factory::ToObject(Handle<Object> object, 941 Handle<Object> Factory::ToObject(Handle<Object> object,
847 Handle<Context> global_context) { 942 Handle<Context> global_context) {
848 CALL_HEAP_FUNCTION(object->ToObject(*global_context), Object); 943 CALL_HEAP_FUNCTION(isolate(), object->ToObject(*global_context), Object);
849 } 944 }
850 945
851 946
852 #ifdef ENABLE_DEBUGGER_SUPPORT 947 #ifdef ENABLE_DEBUGGER_SUPPORT
853 Handle<DebugInfo> Factory::NewDebugInfo(Handle<SharedFunctionInfo> shared) { 948 Handle<DebugInfo> Factory::NewDebugInfo(Handle<SharedFunctionInfo> shared) {
854 // Get the original code of the function. 949 // Get the original code of the function.
855 Handle<Code> code(shared->code()); 950 Handle<Code> code(shared->code());
856 951
857 // Create a copy of the code before allocating the debug info object to avoid 952 // Create a copy of the code before allocating the debug info object to avoid
858 // allocation while setting up the debug info object. 953 // allocation while setting up the debug info object.
859 Handle<Code> original_code(*Factory::CopyCode(code)); 954 Handle<Code> original_code(*Factory::CopyCode(code));
860 955
861 // Allocate initial fixed array for active break points before allocating the 956 // Allocate initial fixed array for active break points before allocating the
862 // debug info object to avoid allocation while setting up the debug info 957 // debug info object to avoid allocation while setting up the debug info
863 // object. 958 // object.
864 Handle<FixedArray> break_points( 959 Handle<FixedArray> break_points(
865 Factory::NewFixedArray(Debug::kEstimatedNofBreakPointsInFunction)); 960 NewFixedArray(Debug::kEstimatedNofBreakPointsInFunction));
866 961
867 // Create and set up the debug info object. Debug info contains function, a 962 // Create and set up the debug info object. Debug info contains function, a
868 // copy of the original code, the executing code and initial fixed array for 963 // copy of the original code, the executing code and initial fixed array for
869 // active break points. 964 // active break points.
870 Handle<DebugInfo> debug_info = 965 Handle<DebugInfo> debug_info =
871 Handle<DebugInfo>::cast(Factory::NewStruct(DEBUG_INFO_TYPE)); 966 Handle<DebugInfo>::cast(NewStruct(DEBUG_INFO_TYPE));
872 debug_info->set_shared(*shared); 967 debug_info->set_shared(*shared);
873 debug_info->set_original_code(*original_code); 968 debug_info->set_original_code(*original_code);
874 debug_info->set_code(*code); 969 debug_info->set_code(*code);
875 debug_info->set_break_points(*break_points); 970 debug_info->set_break_points(*break_points);
876 971
877 // Link debug info to function. 972 // Link debug info to function.
878 shared->set_debug_info(*debug_info); 973 shared->set_debug_info(*debug_info);
879 974
880 return debug_info; 975 return debug_info;
881 } 976 }
882 #endif 977 #endif
883 978
884 979
885 Handle<JSObject> Factory::NewArgumentsObject(Handle<Object> callee, 980 Handle<JSObject> Factory::NewArgumentsObject(Handle<Object> callee,
886 int length) { 981 int length) {
887 CALL_HEAP_FUNCTION(Heap::AllocateArgumentsObject(*callee, length), JSObject); 982 CALL_HEAP_FUNCTION(
983 isolate(),
984 isolate()->heap()->AllocateArgumentsObject(*callee, length), JSObject);
888 } 985 }
889 986
890 987
891 Handle<JSFunction> Factory::CreateApiFunction( 988 Handle<JSFunction> Factory::CreateApiFunction(
892 Handle<FunctionTemplateInfo> obj, ApiInstanceType instance_type) { 989 Handle<FunctionTemplateInfo> obj, ApiInstanceType instance_type) {
893 Handle<Code> code = Handle<Code>(Builtins::builtin(Builtins::HandleApiCall)); 990 Handle<Code> code = Handle<Code>(isolate()->builtins()->builtin(
991 Builtins::HandleApiCall));
894 Handle<Code> construct_stub = 992 Handle<Code> construct_stub =
895 Handle<Code>(Builtins::builtin(Builtins::JSConstructStubApi)); 993 Handle<Code>(isolate()->builtins()->builtin(
994 Builtins::JSConstructStubApi));
896 995
897 int internal_field_count = 0; 996 int internal_field_count = 0;
898 if (!obj->instance_template()->IsUndefined()) { 997 if (!obj->instance_template()->IsUndefined()) {
899 Handle<ObjectTemplateInfo> instance_template = 998 Handle<ObjectTemplateInfo> instance_template =
900 Handle<ObjectTemplateInfo>( 999 Handle<ObjectTemplateInfo>(
901 ObjectTemplateInfo::cast(obj->instance_template())); 1000 ObjectTemplateInfo::cast(obj->instance_template()));
902 internal_field_count = 1001 internal_field_count =
903 Smi::cast(instance_template->internal_field_count())->value(); 1002 Smi::cast(instance_template->internal_field_count())->value();
904 } 1003 }
905 1004
(...skipping 11 matching lines...) Expand all
917 case OuterGlobalObject: 1016 case OuterGlobalObject:
918 type = JS_GLOBAL_PROXY_TYPE; 1017 type = JS_GLOBAL_PROXY_TYPE;
919 instance_size += JSGlobalProxy::kSize; 1018 instance_size += JSGlobalProxy::kSize;
920 break; 1019 break;
921 default: 1020 default:
922 break; 1021 break;
923 } 1022 }
924 ASSERT(type != INVALID_TYPE); 1023 ASSERT(type != INVALID_TYPE);
925 1024
926 Handle<JSFunction> result = 1025 Handle<JSFunction> result =
927 Factory::NewFunction(Factory::empty_symbol(), 1026 NewFunction(Factory::empty_symbol(),
928 type, 1027 type,
929 instance_size, 1028 instance_size,
930 code, 1029 code,
931 true); 1030 true);
932 // Set class name. 1031 // Set class name.
933 Handle<Object> class_name = Handle<Object>(obj->class_name()); 1032 Handle<Object> class_name = Handle<Object>(obj->class_name());
934 if (class_name->IsString()) { 1033 if (class_name->IsString()) {
935 result->shared()->set_instance_class_name(*class_name); 1034 result->shared()->set_instance_class_name(*class_name);
936 result->shared()->set_name(*class_name); 1035 result->shared()->set_name(*class_name);
937 } 1036 }
938 1037
939 Handle<Map> map = Handle<Map>(result->initial_map()); 1038 Handle<Map> map = Handle<Map>(result->initial_map());
940 1039
941 // Mark as undetectable if needed. 1040 // Mark as undetectable if needed.
(...skipping 27 matching lines...) Expand all
969 result->shared()->set_function_data(*obj); 1068 result->shared()->set_function_data(*obj);
970 result->shared()->set_construct_stub(*construct_stub); 1069 result->shared()->set_construct_stub(*construct_stub);
971 result->shared()->DontAdaptArguments(); 1070 result->shared()->DontAdaptArguments();
972 1071
973 // Recursively copy parent templates' accessors, 'data' may be modified. 1072 // Recursively copy parent templates' accessors, 'data' may be modified.
974 Handle<DescriptorArray> array = 1073 Handle<DescriptorArray> array =
975 Handle<DescriptorArray>(map->instance_descriptors()); 1074 Handle<DescriptorArray>(map->instance_descriptors());
976 while (true) { 1075 while (true) {
977 Handle<Object> props = Handle<Object>(obj->property_accessors()); 1076 Handle<Object> props = Handle<Object>(obj->property_accessors());
978 if (!props->IsUndefined()) { 1077 if (!props->IsUndefined()) {
979 array = Factory::CopyAppendCallbackDescriptors(array, props); 1078 array = CopyAppendCallbackDescriptors(array, props);
980 } 1079 }
981 Handle<Object> parent = Handle<Object>(obj->parent_template()); 1080 Handle<Object> parent = Handle<Object>(obj->parent_template());
982 if (parent->IsUndefined()) break; 1081 if (parent->IsUndefined()) break;
983 obj = Handle<FunctionTemplateInfo>::cast(parent); 1082 obj = Handle<FunctionTemplateInfo>::cast(parent);
984 } 1083 }
985 if (!array->IsEmpty()) { 1084 if (!array->IsEmpty()) {
986 map->set_instance_descriptors(*array); 1085 map->set_instance_descriptors(*array);
987 } 1086 }
988 1087
989 ASSERT(result->shared()->IsApiFunction()); 1088 ASSERT(result->shared()->IsApiFunction());
990 return result; 1089 return result;
991 } 1090 }
992 1091
993 1092
994 Handle<MapCache> Factory::NewMapCache(int at_least_space_for) { 1093 Handle<MapCache> Factory::NewMapCache(int at_least_space_for) {
995 CALL_HEAP_FUNCTION(MapCache::Allocate(at_least_space_for), MapCache); 1094 CALL_HEAP_FUNCTION(isolate(),
1095 MapCache::Allocate(at_least_space_for), MapCache);
996 } 1096 }
997 1097
998 1098
999 MUST_USE_RESULT static MaybeObject* UpdateMapCacheWith(Context* context, 1099 MUST_USE_RESULT static MaybeObject* UpdateMapCacheWith(Context* context,
1000 FixedArray* keys, 1100 FixedArray* keys,
1001 Map* map) { 1101 Map* map) {
1002 Object* result; 1102 Object* result;
1003 { MaybeObject* maybe_result = 1103 { MaybeObject* maybe_result =
1004 MapCache::cast(context->map_cache())->Put(keys, map); 1104 MapCache::cast(context->map_cache())->Put(keys, map);
1005 if (!maybe_result->ToObject(&result)) return maybe_result; 1105 if (!maybe_result->ToObject(&result)) return maybe_result;
1006 } 1106 }
1007 context->set_map_cache(MapCache::cast(result)); 1107 context->set_map_cache(MapCache::cast(result));
1008 return result; 1108 return result;
1009 } 1109 }
1010 1110
1011 1111
1012 Handle<MapCache> Factory::AddToMapCache(Handle<Context> context, 1112 Handle<MapCache> Factory::AddToMapCache(Handle<Context> context,
1013 Handle<FixedArray> keys, 1113 Handle<FixedArray> keys,
1014 Handle<Map> map) { 1114 Handle<Map> map) {
1015 CALL_HEAP_FUNCTION(UpdateMapCacheWith(*context, *keys, *map), MapCache); 1115 CALL_HEAP_FUNCTION(isolate(),
1116 UpdateMapCacheWith(*context, *keys, *map), MapCache);
1016 } 1117 }
1017 1118
1018 1119
1019 Handle<Map> Factory::ObjectLiteralMapFromCache(Handle<Context> context, 1120 Handle<Map> Factory::ObjectLiteralMapFromCache(Handle<Context> context,
1020 Handle<FixedArray> keys) { 1121 Handle<FixedArray> keys) {
1021 if (context->map_cache()->IsUndefined()) { 1122 if (context->map_cache()->IsUndefined()) {
1022 // Allocate the new map cache for the global context. 1123 // Allocate the new map cache for the global context.
1023 Handle<MapCache> new_cache = NewMapCache(24); 1124 Handle<MapCache> new_cache = NewMapCache(24);
1024 context->set_map_cache(*new_cache); 1125 context->set_map_cache(*new_cache);
1025 } 1126 }
(...skipping 28 matching lines...) Expand all
1054 void Factory::SetRegExpIrregexpData(Handle<JSRegExp> regexp, 1155 void Factory::SetRegExpIrregexpData(Handle<JSRegExp> regexp,
1055 JSRegExp::Type type, 1156 JSRegExp::Type type,
1056 Handle<String> source, 1157 Handle<String> source,
1057 JSRegExp::Flags flags, 1158 JSRegExp::Flags flags,
1058 int capture_count) { 1159 int capture_count) {
1059 Handle<FixedArray> store = NewFixedArray(JSRegExp::kIrregexpDataSize); 1160 Handle<FixedArray> store = NewFixedArray(JSRegExp::kIrregexpDataSize);
1060 1161
1061 store->set(JSRegExp::kTagIndex, Smi::FromInt(type)); 1162 store->set(JSRegExp::kTagIndex, Smi::FromInt(type));
1062 store->set(JSRegExp::kSourceIndex, *source); 1163 store->set(JSRegExp::kSourceIndex, *source);
1063 store->set(JSRegExp::kFlagsIndex, Smi::FromInt(flags.value())); 1164 store->set(JSRegExp::kFlagsIndex, Smi::FromInt(flags.value()));
1064 store->set(JSRegExp::kIrregexpASCIICodeIndex, Heap::the_hole_value()); 1165 store->set(JSRegExp::kIrregexpASCIICodeIndex, HEAP->the_hole_value());
1065 store->set(JSRegExp::kIrregexpUC16CodeIndex, Heap::the_hole_value()); 1166 store->set(JSRegExp::kIrregexpUC16CodeIndex, HEAP->the_hole_value());
1066 store->set(JSRegExp::kIrregexpMaxRegisterCountIndex, Smi::FromInt(0)); 1167 store->set(JSRegExp::kIrregexpMaxRegisterCountIndex, Smi::FromInt(0));
1067 store->set(JSRegExp::kIrregexpCaptureCountIndex, 1168 store->set(JSRegExp::kIrregexpCaptureCountIndex,
1068 Smi::FromInt(capture_count)); 1169 Smi::FromInt(capture_count));
1069 regexp->set_data(*store); 1170 regexp->set_data(*store);
1070 } 1171 }
1071 1172
1072 1173
1073 1174
1074 void Factory::ConfigureInstance(Handle<FunctionTemplateInfo> desc, 1175 void Factory::ConfigureInstance(Handle<FunctionTemplateInfo> desc,
1075 Handle<JSObject> instance, 1176 Handle<JSObject> instance,
1076 bool* pending_exception) { 1177 bool* pending_exception) {
1077 // Configure the instance by adding the properties specified by the 1178 // Configure the instance by adding the properties specified by the
1078 // instance template. 1179 // instance template.
1079 Handle<Object> instance_template = Handle<Object>(desc->instance_template()); 1180 Handle<Object> instance_template = Handle<Object>(desc->instance_template());
1080 if (!instance_template->IsUndefined()) { 1181 if (!instance_template->IsUndefined()) {
1081 Execution::ConfigureInstance(instance, 1182 Execution::ConfigureInstance(instance,
1082 instance_template, 1183 instance_template,
1083 pending_exception); 1184 pending_exception);
1084 } else { 1185 } else {
1085 *pending_exception = false; 1186 *pending_exception = false;
1086 } 1187 }
1087 } 1188 }
1088 1189
1089 1190
1090 } } // namespace v8::internal 1191 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/factory.h ('k') | src/flag-definitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698