OLD | NEW |
1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 }; | 129 }; |
130 | 130 |
131 | 131 |
132 // Sub-cache for eval scripts. | 132 // Sub-cache for eval scripts. |
133 class CompilationCacheEval: public CompilationSubCache { | 133 class CompilationCacheEval: public CompilationSubCache { |
134 public: | 134 public: |
135 explicit CompilationCacheEval(int generations) | 135 explicit CompilationCacheEval(int generations) |
136 : CompilationSubCache(generations) { } | 136 : CompilationSubCache(generations) { } |
137 | 137 |
138 Handle<SharedFunctionInfo> Lookup(Handle<String> source, | 138 Handle<SharedFunctionInfo> Lookup(Handle<String> source, |
139 Handle<Context> context); | 139 Handle<Context> context, |
| 140 StrictModeFlag strict_mode); |
140 | 141 |
141 void Put(Handle<String> source, | 142 void Put(Handle<String> source, |
142 Handle<Context> context, | 143 Handle<Context> context, |
143 Handle<SharedFunctionInfo> function_info); | 144 Handle<SharedFunctionInfo> function_info); |
144 | 145 |
145 private: | 146 private: |
146 MUST_USE_RESULT MaybeObject* TryTablePut( | 147 MUST_USE_RESULT MaybeObject* TryTablePut( |
147 Handle<String> source, | 148 Handle<String> source, |
148 Handle<Context> context, | 149 Handle<Context> context, |
149 Handle<SharedFunctionInfo> function_info); | 150 Handle<SharedFunctionInfo> function_info); |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 | 365 |
365 | 366 |
366 void CompilationCacheScript::Put(Handle<String> source, | 367 void CompilationCacheScript::Put(Handle<String> source, |
367 Handle<SharedFunctionInfo> function_info) { | 368 Handle<SharedFunctionInfo> function_info) { |
368 HandleScope scope; | 369 HandleScope scope; |
369 SetFirstTable(TablePut(source, function_info)); | 370 SetFirstTable(TablePut(source, function_info)); |
370 } | 371 } |
371 | 372 |
372 | 373 |
373 Handle<SharedFunctionInfo> CompilationCacheEval::Lookup( | 374 Handle<SharedFunctionInfo> CompilationCacheEval::Lookup( |
374 Handle<String> source, Handle<Context> context) { | 375 Handle<String> source, |
| 376 Handle<Context> context, |
| 377 StrictModeFlag strict_mode) { |
375 // Make sure not to leak the table into the surrounding handle | 378 // Make sure not to leak the table into the surrounding handle |
376 // scope. Otherwise, we risk keeping old tables around even after | 379 // scope. Otherwise, we risk keeping old tables around even after |
377 // having cleared the cache. | 380 // having cleared the cache. |
378 Object* result = NULL; | 381 Object* result = NULL; |
379 int generation; | 382 int generation; |
380 { HandleScope scope; | 383 { HandleScope scope; |
381 for (generation = 0; generation < generations(); generation++) { | 384 for (generation = 0; generation < generations(); generation++) { |
382 Handle<CompilationCacheTable> table = GetTable(generation); | 385 Handle<CompilationCacheTable> table = GetTable(generation); |
383 result = table->LookupEval(*source, *context); | 386 result = table->LookupEval(*source, *context, strict_mode); |
384 if (result->IsSharedFunctionInfo()) { | 387 if (result->IsSharedFunctionInfo()) { |
385 break; | 388 break; |
386 } | 389 } |
387 } | 390 } |
388 } | 391 } |
389 if (result->IsSharedFunctionInfo()) { | 392 if (result->IsSharedFunctionInfo()) { |
390 Handle<SharedFunctionInfo> | 393 Handle<SharedFunctionInfo> |
391 function_info(SharedFunctionInfo::cast(result)); | 394 function_info(SharedFunctionInfo::cast(result)); |
392 if (generation != 0) { | 395 if (generation != 0) { |
393 Put(source, context, function_info); | 396 Put(source, context, function_info); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 int line_offset, | 499 int line_offset, |
497 int column_offset) { | 500 int column_offset) { |
498 if (!IsEnabled()) { | 501 if (!IsEnabled()) { |
499 return Handle<SharedFunctionInfo>::null(); | 502 return Handle<SharedFunctionInfo>::null(); |
500 } | 503 } |
501 | 504 |
502 return script.Lookup(source, name, line_offset, column_offset); | 505 return script.Lookup(source, name, line_offset, column_offset); |
503 } | 506 } |
504 | 507 |
505 | 508 |
506 Handle<SharedFunctionInfo> CompilationCache::LookupEval(Handle<String> source, | 509 Handle<SharedFunctionInfo> CompilationCache::LookupEval( |
507 Handle<Context> context, | 510 Handle<String> source, |
508 bool is_global) { | 511 Handle<Context> context, |
| 512 bool is_global, |
| 513 StrictModeFlag strict_mode) { |
509 if (!IsEnabled()) { | 514 if (!IsEnabled()) { |
510 return Handle<SharedFunctionInfo>::null(); | 515 return Handle<SharedFunctionInfo>::null(); |
511 } | 516 } |
512 | 517 |
513 Handle<SharedFunctionInfo> result; | 518 Handle<SharedFunctionInfo> result; |
514 if (is_global) { | 519 if (is_global) { |
515 result = eval_global.Lookup(source, context); | 520 result = eval_global.Lookup(source, context, strict_mode); |
516 } else { | 521 } else { |
517 result = eval_contextual.Lookup(source, context); | 522 result = eval_contextual.Lookup(source, context, strict_mode); |
518 } | 523 } |
519 return result; | 524 return result; |
520 } | 525 } |
521 | 526 |
522 | 527 |
523 Handle<FixedArray> CompilationCache::LookupRegExp(Handle<String> source, | 528 Handle<FixedArray> CompilationCache::LookupRegExp(Handle<String> source, |
524 JSRegExp::Flags flags) { | 529 JSRegExp::Flags flags) { |
525 if (!IsEnabled()) { | 530 if (!IsEnabled()) { |
526 return Handle<FixedArray>::null(); | 531 return Handle<FixedArray>::null(); |
527 } | 532 } |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 } | 645 } |
641 | 646 |
642 | 647 |
643 void CompilationCache::Disable() { | 648 void CompilationCache::Disable() { |
644 enabled = false; | 649 enabled = false; |
645 Clear(); | 650 Clear(); |
646 } | 651 } |
647 | 652 |
648 | 653 |
649 } } // namespace v8::internal | 654 } } // namespace v8::internal |
OLD | NEW |