OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <sstream> | 5 #include <sstream> |
6 | 6 |
7 #include "src/v8.h" | 7 #include "src/v8.h" |
8 | 8 |
9 #include "src/accessors.h" | 9 #include "src/accessors.h" |
10 #include "src/allocation-site-scopes.h" | 10 #include "src/allocation-site-scopes.h" |
(...skipping 14831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14842 Isolate* isolate = GetIsolate(); | 14842 Isolate* isolate = GetIsolate(); |
14843 Handle<SharedFunctionInfo> shared(context->closure()->shared()); | 14843 Handle<SharedFunctionInfo> shared(context->closure()->shared()); |
14844 StringSharedKey key(src, shared, FLAG_use_strict ? STRICT : SLOPPY, | 14844 StringSharedKey key(src, shared, FLAG_use_strict ? STRICT : SLOPPY, |
14845 RelocInfo::kNoPosition); | 14845 RelocInfo::kNoPosition); |
14846 int entry = FindEntry(&key); | 14846 int entry = FindEntry(&key); |
14847 if (entry == kNotFound) return isolate->factory()->undefined_value(); | 14847 if (entry == kNotFound) return isolate->factory()->undefined_value(); |
14848 return Handle<Object>(get(EntryToIndex(entry) + 1), isolate); | 14848 return Handle<Object>(get(EntryToIndex(entry) + 1), isolate); |
14849 } | 14849 } |
14850 | 14850 |
14851 | 14851 |
14852 Handle<Object> CompilationCacheTable::LookupEval(Handle<String> src, | 14852 Handle<Object> CompilationCacheTable::LookupEval( |
14853 Handle<Context> context, | 14853 Handle<String> src, Handle<SharedFunctionInfo> outer_info, |
14854 StrictMode strict_mode, | 14854 StrictMode strict_mode, int scope_position) { |
14855 int scope_position) { | |
14856 Isolate* isolate = GetIsolate(); | 14855 Isolate* isolate = GetIsolate(); |
14857 Handle<SharedFunctionInfo> shared(context->closure()->shared()); | 14856 // Cache key is the tuple (source, outer shared function info, scope position) |
14858 StringSharedKey key(src, shared, strict_mode, scope_position); | 14857 // to unambiguously identify the context chain the cached eval code assumes. |
| 14858 StringSharedKey key(src, outer_info, strict_mode, scope_position); |
14859 int entry = FindEntry(&key); | 14859 int entry = FindEntry(&key); |
14860 if (entry == kNotFound) return isolate->factory()->undefined_value(); | 14860 if (entry == kNotFound) return isolate->factory()->undefined_value(); |
14861 return Handle<Object>(get(EntryToIndex(entry) + 1), isolate); | 14861 return Handle<Object>(get(EntryToIndex(entry) + 1), isolate); |
14862 } | 14862 } |
14863 | 14863 |
14864 | 14864 |
14865 Handle<Object> CompilationCacheTable::LookupRegExp(Handle<String> src, | 14865 Handle<Object> CompilationCacheTable::LookupRegExp(Handle<String> src, |
14866 JSRegExp::Flags flags) { | 14866 JSRegExp::Flags flags) { |
14867 Isolate* isolate = GetIsolate(); | 14867 Isolate* isolate = GetIsolate(); |
14868 DisallowHeapAllocation no_allocation; | 14868 DisallowHeapAllocation no_allocation; |
(...skipping 16 matching lines...) Expand all Loading... |
14885 int entry = cache->FindInsertionEntry(key.Hash()); | 14885 int entry = cache->FindInsertionEntry(key.Hash()); |
14886 cache->set(EntryToIndex(entry), *k); | 14886 cache->set(EntryToIndex(entry), *k); |
14887 cache->set(EntryToIndex(entry) + 1, *value); | 14887 cache->set(EntryToIndex(entry) + 1, *value); |
14888 cache->ElementAdded(); | 14888 cache->ElementAdded(); |
14889 return cache; | 14889 return cache; |
14890 } | 14890 } |
14891 | 14891 |
14892 | 14892 |
14893 Handle<CompilationCacheTable> CompilationCacheTable::PutEval( | 14893 Handle<CompilationCacheTable> CompilationCacheTable::PutEval( |
14894 Handle<CompilationCacheTable> cache, Handle<String> src, | 14894 Handle<CompilationCacheTable> cache, Handle<String> src, |
14895 Handle<Context> context, Handle<SharedFunctionInfo> value, | 14895 Handle<SharedFunctionInfo> outer_info, Handle<SharedFunctionInfo> value, |
14896 int scope_position) { | 14896 int scope_position) { |
14897 Isolate* isolate = cache->GetIsolate(); | 14897 Isolate* isolate = cache->GetIsolate(); |
14898 Handle<SharedFunctionInfo> shared(context->closure()->shared()); | 14898 StringSharedKey key(src, outer_info, value->strict_mode(), scope_position); |
14899 StringSharedKey key(src, shared, value->strict_mode(), scope_position); | |
14900 cache = EnsureCapacity(cache, 1, &key); | 14899 cache = EnsureCapacity(cache, 1, &key); |
14901 Handle<Object> k = key.AsHandle(isolate); | 14900 Handle<Object> k = key.AsHandle(isolate); |
14902 int entry = cache->FindInsertionEntry(key.Hash()); | 14901 int entry = cache->FindInsertionEntry(key.Hash()); |
14903 cache->set(EntryToIndex(entry), *k); | 14902 cache->set(EntryToIndex(entry), *k); |
14904 cache->set(EntryToIndex(entry) + 1, *value); | 14903 cache->set(EntryToIndex(entry) + 1, *value); |
14905 cache->ElementAdded(); | 14904 cache->ElementAdded(); |
14906 return cache; | 14905 return cache; |
14907 } | 14906 } |
14908 | 14907 |
14909 | 14908 |
(...skipping 1590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16500 Handle<DependentCode> codes = | 16499 Handle<DependentCode> codes = |
16501 DependentCode::Insert(handle(cell->dependent_code(), info->isolate()), | 16500 DependentCode::Insert(handle(cell->dependent_code(), info->isolate()), |
16502 DependentCode::kPropertyCellChangedGroup, | 16501 DependentCode::kPropertyCellChangedGroup, |
16503 info->object_wrapper()); | 16502 info->object_wrapper()); |
16504 if (*codes != cell->dependent_code()) cell->set_dependent_code(*codes); | 16503 if (*codes != cell->dependent_code()) cell->set_dependent_code(*codes); |
16505 info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add( | 16504 info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add( |
16506 cell, info->zone()); | 16505 cell, info->zone()); |
16507 } | 16506 } |
16508 | 16507 |
16509 } } // namespace v8::internal | 16508 } } // namespace v8::internal |
OLD | NEW |