Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Side by Side Diff: runtime/vm/parser.cc

Issue 2147493005: Remove per-isolate compile-time constants cache. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/parser.h ('k') | runtime/vm/precompiler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/parser.h" 5 #include "vm/parser.h"
6 #include "vm/flags.h" 6 #include "vm/flags.h"
7 7
8 #ifndef DART_PRECOMPILED_RUNTIME 8 #ifndef DART_PRECOMPILED_RUNTIME
9 9
10 #include "lib/invocation_mirror.h" 10 #include "lib/invocation_mirror.h"
(...skipping 12127 matching lines...) Expand 10 before | Expand all | Expand 10 after
12138 } 12138 }
12139 return current_class().IsGeneric(); 12139 return current_class().IsGeneric();
12140 } 12140 }
12141 12141
12142 12142
12143 void Parser::InsertCachedConstantValue(const Script& script, 12143 void Parser::InsertCachedConstantValue(const Script& script,
12144 TokenPosition token_pos, 12144 TokenPosition token_pos,
12145 const Instance& value) { 12145 const Instance& value) {
12146 ASSERT(Thread::Current()->IsMutatorThread()); 12146 ASSERT(Thread::Current()->IsMutatorThread());
12147 const intptr_t kInitialConstMapSize = 16; 12147 const intptr_t kInitialConstMapSize = 16;
12148 if (script.InVMHeap()) { 12148 ASSERT(!script.InVMHeap());
12149 // For scripts in the vm heap, their constants are in a shared 12149 if (script.compile_time_constants() == Array::null()) {
12150 // per-isolate map. 12150 const Array& array =
12151 Isolate* isolate = Isolate::Current(); 12151 Array::Handle(HashTables::New<ConstantsMap>(kInitialConstMapSize,
12152 const String& url = String::Handle(script.url()); 12152 Heap::kNew));
12153 UrlAndPosKey key(url, token_pos); 12153 script.set_compile_time_constants(array);
12154 if (isolate->object_store()->vm_compile_time_constants() == Array::null()) {
12155 isolate->object_store()->set_vm_compile_time_constants(
12156 Array::Handle(HashTables::New<VMConstantsMap>(
12157 kInitialConstMapSize, Heap::kNew)));
12158 }
12159 VMConstantsMap constants(
12160 isolate->object_store()->vm_compile_time_constants());
12161 constants.InsertNewOrGetValue(key, value);
12162 isolate->object_store()->set_vm_compile_time_constants(constants.Release());
12163 } else {
12164 // For scripts which are not in the vm heap, their constants are
12165 // stored in the script itself.
12166 if (script.compile_time_constants() == Array::null()) {
12167 const Array& array =
12168 Array::Handle(HashTables::New<ConstantsMap>(kInitialConstMapSize,
12169 Heap::kNew));
12170 script.set_compile_time_constants(array);
12171 }
12172 ConstantsMap constants(script.compile_time_constants());
12173 constants.InsertNewOrGetValue(token_pos, value);
12174 script.set_compile_time_constants(constants.Release());
12175 } 12154 }
12155 ConstantsMap constants(script.compile_time_constants());
12156 constants.InsertNewOrGetValue(token_pos, value);
12157 script.set_compile_time_constants(constants.Release());
12176 } 12158 }
12177 12159
12178 12160
12179 void Parser::CacheConstantValue(TokenPosition token_pos, 12161 void Parser::CacheConstantValue(TokenPosition token_pos,
12180 const Instance& value) { 12162 const Instance& value) {
12181 if (current_function().kind() == RawFunction::kImplicitStaticFinalGetter) { 12163 if (current_function().kind() == RawFunction::kImplicitStaticFinalGetter) {
12182 // Don't cache constants in initializer expressions. They get 12164 // Don't cache constants in initializer expressions. They get
12183 // evaluated only once. 12165 // evaluated only once.
12184 return; 12166 return;
12185 } 12167 }
12186 InsertCachedConstantValue(script_, token_pos, value); 12168 InsertCachedConstantValue(script_, token_pos, value);
12187 } 12169 }
12188 12170
12189 12171
12190 bool Parser::GetCachedConstant(TokenPosition token_pos, Instance* value) { 12172 bool Parser::GetCachedConstant(TokenPosition token_pos, Instance* value) {
12191 bool is_present = false; 12173 bool is_present = false;
12192 if (script_.InVMHeap()) { 12174 ASSERT(!script_.InVMHeap());
12193 // For scripts in the vm heap, their constants are in a shared 12175 if (script_.compile_time_constants() == Array::null()) {
12194 // per-isolate map. 12176 return false;
12195 if (isolate()->object_store()->vm_compile_time_constants() ==
12196 Array::null()) {
12197 return false;
12198 }
12199 UrlAndPosKey key(String::Handle(Z, script_.url()), token_pos);
12200 VMConstantsMap constants(
12201 isolate()->object_store()->vm_compile_time_constants());
12202 *value ^= constants.GetOrNull(key, &is_present);
12203 // Mutator compiler thread may add constants while background compiler
12204 // is running, and thus change the value of 'vm_compile_time_constants';
12205 // do not assert that 'vm_compile_time_constants' has not changed.
12206 constants.Release();
12207 } else {
12208 // For scripts which are not in the vm heap, their constants are
12209 // stored in the script itself.
12210 if (script_.compile_time_constants() == Array::null()) {
12211 return false;
12212 }
12213 ConstantsMap constants(script_.compile_time_constants());
12214 *value ^= constants.GetOrNull(token_pos, &is_present);
12215 // Mutator compiler thread may add constants while background compiler
12216 // is running, and thus change the value of 'compile_time_constants';
12217 // do not assert that 'compile_time_constants' has not changed.
12218 constants.Release();
12219 } 12177 }
12178 ConstantsMap constants(script_.compile_time_constants());
12179 *value ^= constants.GetOrNull(token_pos, &is_present);
12180 // Mutator compiler thread may add constants while background compiler
12181 // is running, and thus change the value of 'compile_time_constants';
12182 // do not assert that 'compile_time_constants' has not changed.
12183 constants.Release();
12220 if (FLAG_compiler_stats && is_present) { 12184 if (FLAG_compiler_stats && is_present) {
12221 thread_->compiler_stats()->num_const_cache_hits++; 12185 thread_->compiler_stats()->num_const_cache_hits++;
12222 } 12186 }
12223 return is_present; 12187 return is_present;
12224 } 12188 }
12225 12189
12226 12190
12227 RawInstance* Parser::TryCanonicalize(const Instance& instance, 12191 RawInstance* Parser::TryCanonicalize(const Instance& instance,
12228 TokenPosition token_pos) { 12192 TokenPosition token_pos) {
12229 if (instance.IsNull()) { 12193 if (instance.IsNull()) {
(...skipping 2446 matching lines...) Expand 10 before | Expand all | Expand 10 after
14676 const ArgumentListNode& function_args, 14640 const ArgumentListNode& function_args,
14677 const LocalVariable* temp_for_last_arg, 14641 const LocalVariable* temp_for_last_arg,
14678 bool is_super_invocation) { 14642 bool is_super_invocation) {
14679 UNREACHABLE(); 14643 UNREACHABLE();
14680 return NULL; 14644 return NULL;
14681 } 14645 }
14682 14646
14683 } // namespace dart 14647 } // namespace dart
14684 14648
14685 #endif // DART_PRECOMPILED_RUNTIME 14649 #endif // DART_PRECOMPILED_RUNTIME
OLDNEW
« no previous file with comments | « runtime/vm/parser.h ('k') | runtime/vm/precompiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698