OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 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 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } | 236 } |
237 | 237 |
238 #endif | 238 #endif |
239 | 239 |
240 | 240 |
241 // Sets the function info on a function. | 241 // Sets the function info on a function. |
242 // The start_position points to the first '(' character after the function name | 242 // The start_position points to the first '(' character after the function name |
243 // in the full script source. When counting characters in the script source the | 243 // in the full script source. When counting characters in the script source the |
244 // the first character is number 0 (not 1). | 244 // the first character is number 0 (not 1). |
245 void CodeGenerator::SetFunctionInfo(Handle<JSFunction> fun, | 245 void CodeGenerator::SetFunctionInfo(Handle<JSFunction> fun, |
246 int length, | 246 FunctionLiteral* lit, |
247 int function_token_position, | |
248 int start_position, | |
249 int end_position, | |
250 bool is_expression, | |
251 bool is_toplevel, | 247 bool is_toplevel, |
252 Handle<Script> script, | 248 Handle<Script> script) { |
253 Handle<String> inferred_name) { | 249 fun->shared()->set_length(lit->num_parameters()); |
254 fun->shared()->set_length(length); | 250 fun->shared()->set_formal_parameter_count(lit->num_parameters()); |
255 fun->shared()->set_formal_parameter_count(length); | |
256 fun->shared()->set_script(*script); | 251 fun->shared()->set_script(*script); |
257 fun->shared()->set_function_token_position(function_token_position); | 252 fun->shared()->set_function_token_position(lit->function_token_position()); |
258 fun->shared()->set_start_position(start_position); | 253 fun->shared()->set_start_position(lit->start_position()); |
259 fun->shared()->set_end_position(end_position); | 254 fun->shared()->set_end_position(lit->end_position()); |
260 fun->shared()->set_is_expression(is_expression); | 255 fun->shared()->set_is_expression(lit->is_expression()); |
261 fun->shared()->set_is_toplevel(is_toplevel); | 256 fun->shared()->set_is_toplevel(is_toplevel); |
262 fun->shared()->set_inferred_name(*inferred_name); | 257 fun->shared()->set_inferred_name(*lit->inferred_name()); |
263 } | 258 } |
264 | 259 |
265 | 260 |
266 static Handle<Code> ComputeLazyCompile(int argc) { | 261 static Handle<Code> ComputeLazyCompile(int argc) { |
267 CALL_HEAP_FUNCTION(StubCache::ComputeLazyCompile(argc), Code); | 262 CALL_HEAP_FUNCTION(StubCache::ComputeLazyCompile(argc), Code); |
268 } | 263 } |
269 | 264 |
270 | 265 |
271 Handle<JSFunction> CodeGenerator::BuildBoilerplate(FunctionLiteral* node) { | 266 Handle<JSFunction> CodeGenerator::BuildBoilerplate(FunctionLiteral* node) { |
272 #ifdef DEBUG | 267 #ifdef DEBUG |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 code->instruction_size()); | 305 code->instruction_size()); |
311 #endif | 306 #endif |
312 } | 307 } |
313 | 308 |
314 // Create a boilerplate function. | 309 // Create a boilerplate function. |
315 Handle<JSFunction> function = | 310 Handle<JSFunction> function = |
316 Factory::NewFunctionBoilerplate(node->name(), | 311 Factory::NewFunctionBoilerplate(node->name(), |
317 node->materialized_literal_count(), | 312 node->materialized_literal_count(), |
318 node->contains_array_literal(), | 313 node->contains_array_literal(), |
319 code); | 314 code); |
320 CodeGenerator::SetFunctionInfo(function, node->num_parameters(), | 315 CodeGenerator::SetFunctionInfo(function, node, false, script_); |
321 node->function_token_position(), | |
322 node->start_position(), node->end_position(), | |
323 node->is_expression(), false, script_, | |
324 node->inferred_name()); | |
325 | 316 |
326 #ifdef ENABLE_DEBUGGER_SUPPORT | 317 #ifdef ENABLE_DEBUGGER_SUPPORT |
327 // Notify debugger that a new function has been added. | 318 // Notify debugger that a new function has been added. |
328 Debugger::OnNewFunction(function); | 319 Debugger::OnNewFunction(function); |
329 #endif | 320 #endif |
330 | 321 |
331 // Set the expected number of properties for instances and return | 322 // Set the expected number of properties for instances and return |
332 // the resulting function. | 323 // the resulting function. |
333 SetExpectedNofPropertiesFromEstimate(function, | 324 SetExpectedNofPropertiesFromEstimate(function, |
334 node->expected_property_count()); | 325 node->expected_property_count()); |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 void ArgumentsAccessStub::Generate(MacroAssembler* masm) { | 520 void ArgumentsAccessStub::Generate(MacroAssembler* masm) { |
530 switch (type_) { | 521 switch (type_) { |
531 case READ_LENGTH: GenerateReadLength(masm); break; | 522 case READ_LENGTH: GenerateReadLength(masm); break; |
532 case READ_ELEMENT: GenerateReadElement(masm); break; | 523 case READ_ELEMENT: GenerateReadElement(masm); break; |
533 case NEW_OBJECT: GenerateNewObject(masm); break; | 524 case NEW_OBJECT: GenerateNewObject(masm); break; |
534 } | 525 } |
535 } | 526 } |
536 | 527 |
537 | 528 |
538 } } // namespace v8::internal | 529 } } // namespace v8::internal |
OLD | NEW |