OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 11950 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11961 | 11961 |
11962 // Add the new symbol and return it along with the symbol table. | 11962 // Add the new symbol and return it along with the symbol table. |
11963 entry = table->FindInsertionEntry(key->Hash()); | 11963 entry = table->FindInsertionEntry(key->Hash()); |
11964 table->set(EntryToIndex(entry), symbol); | 11964 table->set(EntryToIndex(entry), symbol); |
11965 table->ElementAdded(); | 11965 table->ElementAdded(); |
11966 *s = symbol; | 11966 *s = symbol; |
11967 return table; | 11967 return table; |
11968 } | 11968 } |
11969 | 11969 |
11970 | 11970 |
11971 Object* CompilationCacheTable::Lookup(String* src) { | 11971 // The key for the script compilation cache is dependent on the mode flags, |
11972 StringKey key(src); | 11972 // because they change the global language mode and thus binding behaviour. |
| 11973 // If flags change at some point, we must ensure that we do not hit the cache |
| 11974 // for code compiled with different settings. |
| 11975 static LanguageMode CurrentGlobalLanguageMode() { |
| 11976 return FLAG_use_strict |
| 11977 ? (FLAG_harmony_scoping ? EXTENDED_MODE : STRICT_MODE) |
| 11978 : CLASSIC_MODE; |
| 11979 } |
| 11980 |
| 11981 |
| 11982 Object* CompilationCacheTable::Lookup(String* src, Context* context) { |
| 11983 SharedFunctionInfo* shared = context->closure()->shared(); |
| 11984 StringSharedKey key(src, |
| 11985 shared, |
| 11986 CurrentGlobalLanguageMode(), |
| 11987 RelocInfo::kNoPosition); |
11973 int entry = FindEntry(&key); | 11988 int entry = FindEntry(&key); |
11974 if (entry == kNotFound) return GetHeap()->undefined_value(); | 11989 if (entry == kNotFound) return GetHeap()->undefined_value(); |
11975 return get(EntryToIndex(entry) + 1); | 11990 return get(EntryToIndex(entry) + 1); |
11976 } | 11991 } |
11977 | 11992 |
11978 | 11993 |
11979 Object* CompilationCacheTable::LookupEval(String* src, | 11994 Object* CompilationCacheTable::LookupEval(String* src, |
11980 Context* context, | 11995 Context* context, |
11981 LanguageMode language_mode, | 11996 LanguageMode language_mode, |
11982 int scope_position) { | 11997 int scope_position) { |
11983 StringSharedKey key(src, | 11998 StringSharedKey key(src, |
11984 context->closure()->shared(), | 11999 context->closure()->shared(), |
11985 language_mode, | 12000 language_mode, |
11986 scope_position); | 12001 scope_position); |
11987 int entry = FindEntry(&key); | 12002 int entry = FindEntry(&key); |
11988 if (entry == kNotFound) return GetHeap()->undefined_value(); | 12003 if (entry == kNotFound) return GetHeap()->undefined_value(); |
11989 return get(EntryToIndex(entry) + 1); | 12004 return get(EntryToIndex(entry) + 1); |
11990 } | 12005 } |
11991 | 12006 |
11992 | 12007 |
11993 Object* CompilationCacheTable::LookupRegExp(String* src, | 12008 Object* CompilationCacheTable::LookupRegExp(String* src, |
11994 JSRegExp::Flags flags) { | 12009 JSRegExp::Flags flags) { |
11995 RegExpKey key(src, flags); | 12010 RegExpKey key(src, flags); |
11996 int entry = FindEntry(&key); | 12011 int entry = FindEntry(&key); |
11997 if (entry == kNotFound) return GetHeap()->undefined_value(); | 12012 if (entry == kNotFound) return GetHeap()->undefined_value(); |
11998 return get(EntryToIndex(entry) + 1); | 12013 return get(EntryToIndex(entry) + 1); |
11999 } | 12014 } |
12000 | 12015 |
12001 | 12016 |
12002 MaybeObject* CompilationCacheTable::Put(String* src, Object* value) { | 12017 MaybeObject* CompilationCacheTable::Put(String* src, |
12003 StringKey key(src); | 12018 Context* context, |
| 12019 Object* value) { |
| 12020 SharedFunctionInfo* shared = context->closure()->shared(); |
| 12021 StringSharedKey key(src, |
| 12022 shared, |
| 12023 CurrentGlobalLanguageMode(), |
| 12024 RelocInfo::kNoPosition); |
12004 Object* obj; | 12025 Object* obj; |
12005 { MaybeObject* maybe_obj = EnsureCapacity(1, &key); | 12026 { MaybeObject* maybe_obj = EnsureCapacity(1, &key); |
12006 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 12027 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
12007 } | 12028 } |
12008 | 12029 |
12009 CompilationCacheTable* cache = | 12030 CompilationCacheTable* cache = |
12010 reinterpret_cast<CompilationCacheTable*>(obj); | 12031 reinterpret_cast<CompilationCacheTable*>(obj); |
12011 int entry = cache->FindInsertionEntry(key.Hash()); | 12032 int entry = cache->FindInsertionEntry(key.Hash()); |
12012 cache->set(EntryToIndex(entry), src); | 12033 |
| 12034 Object* k; |
| 12035 { MaybeObject* maybe_k = key.AsObject(); |
| 12036 if (!maybe_k->ToObject(&k)) return maybe_k; |
| 12037 } |
| 12038 |
| 12039 cache->set(EntryToIndex(entry), k); |
12013 cache->set(EntryToIndex(entry) + 1, value); | 12040 cache->set(EntryToIndex(entry) + 1, value); |
12014 cache->ElementAdded(); | 12041 cache->ElementAdded(); |
12015 return cache; | 12042 return cache; |
12016 } | 12043 } |
12017 | 12044 |
12018 | 12045 |
12019 MaybeObject* CompilationCacheTable::PutEval(String* src, | 12046 MaybeObject* CompilationCacheTable::PutEval(String* src, |
12020 Context* context, | 12047 Context* context, |
12021 SharedFunctionInfo* value, | 12048 SharedFunctionInfo* value, |
12022 int scope_position) { | 12049 int scope_position) { |
(...skipping 1144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13167 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); | 13194 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); |
13168 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); | 13195 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); |
13169 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); | 13196 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); |
13170 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); | 13197 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); |
13171 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); | 13198 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); |
13172 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); | 13199 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); |
13173 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); | 13200 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); |
13174 } | 13201 } |
13175 | 13202 |
13176 } } // namespace v8::internal | 13203 } } // namespace v8::internal |
OLD | NEW |