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 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 } | 386 } |
387 } | 387 } |
388 | 388 |
389 // Store the arguments object. This must happen after context | 389 // Store the arguments object. This must happen after context |
390 // initialization because the arguments object may be stored in | 390 // initialization because the arguments object may be stored in |
391 // the context. | 391 // the context. |
392 if (ArgumentsMode() != NO_ARGUMENTS_ALLOCATION) { | 392 if (ArgumentsMode() != NO_ARGUMENTS_ALLOCATION) { |
393 StoreArgumentsObject(true); | 393 StoreArgumentsObject(true); |
394 } | 394 } |
395 | 395 |
| 396 // Initialize ThisFunction reference if present. |
| 397 if (scope_->is_function_scope() && scope_->function() != NULL) { |
| 398 frame_->Push(Factory::the_hole_value()); |
| 399 StoreToSlot(scope_->function()->slot(), NOT_CONST_INIT); |
| 400 } |
| 401 |
396 // Generate code to 'execute' declarations and initialize functions | 402 // Generate code to 'execute' declarations and initialize functions |
397 // (source elements). In case of an illegal redeclaration we need to | 403 // (source elements). In case of an illegal redeclaration we need to |
398 // handle that instead of processing the declarations. | 404 // handle that instead of processing the declarations. |
399 if (scope_->HasIllegalRedeclaration()) { | 405 if (scope_->HasIllegalRedeclaration()) { |
400 Comment cmnt(masm_, "[ illegal redeclarations"); | 406 Comment cmnt(masm_, "[ illegal redeclarations"); |
401 scope_->VisitIllegalRedeclaration(this); | 407 scope_->VisitIllegalRedeclaration(this); |
402 } else { | 408 } else { |
403 Comment cmnt(masm_, "[ declarations"); | 409 Comment cmnt(masm_, "[ declarations"); |
404 ProcessDeclarations(scope_->declarations()); | 410 ProcessDeclarations(scope_->declarations()); |
405 // Bail out if a stack-overflow exception occurred when processing | 411 // Bail out if a stack-overflow exception occurred when processing |
(...skipping 7761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8167 masm.GetCode(&desc); | 8173 masm.GetCode(&desc); |
8168 // Call the function from C++. | 8174 // Call the function from C++. |
8169 return FUNCTION_CAST<ModuloFunction>(buffer); | 8175 return FUNCTION_CAST<ModuloFunction>(buffer); |
8170 } | 8176 } |
8171 | 8177 |
8172 #endif | 8178 #endif |
8173 | 8179 |
8174 #undef __ | 8180 #undef __ |
8175 | 8181 |
8176 } } // namespace v8::internal | 8182 } } // namespace v8::internal |
OLD | NEW |