OLD | NEW |
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 2258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2269 // properties if we haven't seen them before. Otherwise we'll | 2269 // properties if we haven't seen them before. Otherwise we'll |
2270 // probably overestimate the number of properties. | 2270 // probably overestimate the number of properties. |
2271 Property* property = expression ? expression->AsProperty() : NULL; | 2271 Property* property = expression ? expression->AsProperty() : NULL; |
2272 if (op == Token::ASSIGN && | 2272 if (op == Token::ASSIGN && |
2273 property != NULL && | 2273 property != NULL && |
2274 property->obj()->AsVariableProxy() != NULL && | 2274 property->obj()->AsVariableProxy() != NULL && |
2275 property->obj()->AsVariableProxy()->is_this()) { | 2275 property->obj()->AsVariableProxy()->is_this()) { |
2276 temp_scope_->AddProperty(); | 2276 temp_scope_->AddProperty(); |
2277 } | 2277 } |
2278 | 2278 |
| 2279 // If we assign a function literal to a property we pretenure the |
| 2280 // literal so it can be added as a constant function property. |
| 2281 if (property != NULL && right->AsFunctionLiteral() != NULL) { |
| 2282 right->AsFunctionLiteral()->set_pretenure(true); |
| 2283 } |
| 2284 |
2279 if (fni_ != NULL) { | 2285 if (fni_ != NULL) { |
2280 // Check if the right hand side is a call to avoid inferring a | 2286 // Check if the right hand side is a call to avoid inferring a |
2281 // name if we're dealing with "a = function(){...}();"-like | 2287 // name if we're dealing with "a = function(){...}();"-like |
2282 // expression. | 2288 // expression. |
2283 if ((op == Token::INIT_VAR | 2289 if ((op == Token::INIT_VAR |
2284 || op == Token::INIT_CONST | 2290 || op == Token::INIT_CONST |
2285 || op == Token::ASSIGN) | 2291 || op == Token::ASSIGN) |
2286 && (right->AsCall() == NULL)) { | 2292 && (right->AsCall() == NULL)) { |
2287 fni_->Infer(); | 2293 fni_->Infer(); |
2288 } | 2294 } |
(...skipping 2448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4737 Handle<String> source = Handle<String>(String::cast(script->source())); | 4743 Handle<String> source = Handle<String>(String::cast(script->source())); |
4738 result = parser.ParseProgram(source, info->is_global()); | 4744 result = parser.ParseProgram(source, info->is_global()); |
4739 } | 4745 } |
4740 } | 4746 } |
4741 | 4747 |
4742 info->SetFunction(result); | 4748 info->SetFunction(result); |
4743 return (result != NULL); | 4749 return (result != NULL); |
4744 } | 4750 } |
4745 | 4751 |
4746 } } // namespace v8::internal | 4752 } } // namespace v8::internal |
OLD | NEW |