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

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

Issue 2997173002: [vm] Remove Dart_MakeExternalString and --support-externalizable-strings (Closed)
Patch Set: Update vm.status Created 3 years, 4 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
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 #if !defined(DART_PRECOMPILED_RUNTIME) 5 #if !defined(DART_PRECOMPILED_RUNTIME)
6 6
7 #include "vm/flow_graph_builder.h" 7 #include "vm/flow_graph_builder.h"
8 8
9 #include "lib/invocation_mirror.h" 9 #include "lib/invocation_mirror.h"
10 #include "vm/ast_printer.h" 10 #include "vm/ast_printer.h"
(...skipping 28 matching lines...) Expand all
39 true, 39 true,
40 "Eliminate type checks when allowed by static type analysis."); 40 "Eliminate type checks when allowed by static type analysis.");
41 DEFINE_FLAG(bool, print_ast, false, "Print abstract syntax tree."); 41 DEFINE_FLAG(bool, print_ast, false, "Print abstract syntax tree.");
42 DEFINE_FLAG(bool, print_scopes, false, "Print scopes of local variables."); 42 DEFINE_FLAG(bool, print_scopes, false, "Print scopes of local variables.");
43 DEFINE_FLAG(bool, 43 DEFINE_FLAG(bool,
44 trace_type_check_elimination, 44 trace_type_check_elimination,
45 false, 45 false,
46 "Trace type check elimination at compile time."); 46 "Trace type check elimination at compile time.");
47 47
48 DECLARE_FLAG(bool, profile_vm); 48 DECLARE_FLAG(bool, profile_vm);
49 DECLARE_FLAG(bool, support_externalizable_strings);
50 49
51 // Quick access to the locally defined zone() method. 50 // Quick access to the locally defined zone() method.
52 #define Z (zone()) 51 #define Z (zone())
53 52
54 // Quick access to the locally defined thread() method. 53 // Quick access to the locally defined thread() method.
55 #define T (thread()) 54 #define T (thread())
56 55
57 // Quick synthetic token position. 56 // Quick synthetic token position.
58 #define ST(token_pos) ((token_pos).ToSynthetic()) 57 #define ST(token_pos) ((token_pos).ToSynthetic())
59 58
(...skipping 3111 matching lines...) Expand 10 before | Expand all | Expand 10 after
3171 Value* other = Bind(new (Z) LoadLocalInstr(*other_var, token_pos)); 3170 Value* other = Bind(new (Z) LoadLocalInstr(*other_var, token_pos));
3172 // Receiver is not a number because numbers override equality. 3171 // Receiver is not a number because numbers override equality.
3173 const bool kNoNumberCheck = false; 3172 const bool kNoNumberCheck = false;
3174 StrictCompareInstr* compare = new (Z) 3173 StrictCompareInstr* compare = new (Z)
3175 StrictCompareInstr(token_pos, Token::kEQ_STRICT, receiver, other, 3174 StrictCompareInstr(token_pos, Token::kEQ_STRICT, receiver, other,
3176 kNoNumberCheck, owner()->GetNextDeoptId()); 3175 kNoNumberCheck, owner()->GetNextDeoptId());
3177 return ReturnDefinition(compare); 3176 return ReturnDefinition(compare);
3178 } 3177 }
3179 case MethodRecognizer::kStringBaseLength: 3178 case MethodRecognizer::kStringBaseLength:
3180 case MethodRecognizer::kStringBaseIsEmpty: { 3179 case MethodRecognizer::kStringBaseIsEmpty: {
3181 // Treat length loads as mutable (i.e. affected by side effects) to
3182 // avoid hoisting them since we can't hoist the preceding class-check.
3183 // This is because of externalization of strings that affects their
3184 // class-id.
3185 LoadFieldInstr* load = BuildNativeGetter( 3180 LoadFieldInstr* load = BuildNativeGetter(
3186 node, MethodRecognizer::kStringBaseLength, String::length_offset(), 3181 node, MethodRecognizer::kStringBaseLength, String::length_offset(),
3187 Type::ZoneHandle(Z, Type::SmiType()), kSmiCid); 3182 Type::ZoneHandle(Z, Type::SmiType()), kSmiCid);
3188 load->set_is_immutable(!FLAG_support_externalizable_strings); 3183 load->set_is_immutable(true);
3189 if (kind == MethodRecognizer::kStringBaseLength) { 3184 if (kind == MethodRecognizer::kStringBaseLength) {
3190 return ReturnDefinition(load); 3185 return ReturnDefinition(load);
3191 } 3186 }
3192 ASSERT(kind == MethodRecognizer::kStringBaseIsEmpty); 3187 ASSERT(kind == MethodRecognizer::kStringBaseIsEmpty);
3193 Value* zero_val = 3188 Value* zero_val =
3194 Bind(new (Z) ConstantInstr(Smi::ZoneHandle(Z, Smi::New(0)))); 3189 Bind(new (Z) ConstantInstr(Smi::ZoneHandle(Z, Smi::New(0))));
3195 Value* load_val = Bind(load); 3190 Value* load_val = Bind(load);
3196 StrictCompareInstr* compare = new (Z) StrictCompareInstr( 3191 StrictCompareInstr* compare = new (Z) StrictCompareInstr(
3197 token_pos, Token::kEQ_STRICT, load_val, zero_val, false, 3192 token_pos, Token::kEQ_STRICT, load_val, zero_val, false,
3198 owner()->GetNextDeoptId()); // No number check. 3193 owner()->GetNextDeoptId()); // No number check.
(...skipping 1218 matching lines...) Expand 10 before | Expand all | Expand 10 after
4417 // Bail if the type has any type parameters. 4412 // Bail if the type has any type parameters.
4418 if (type_class.IsGeneric()) return false; 4413 if (type_class.IsGeneric()) return false;
4419 4414
4420 // Finally a simple class for instance of checking. 4415 // Finally a simple class for instance of checking.
4421 return true; 4416 return true;
4422 } 4417 }
4423 4418
4424 } // namespace dart 4419 } // namespace dart
4425 4420
4426 #endif // !defined(DART_PRECOMPILED_RUNTIME) 4421 #endif // !defined(DART_PRECOMPILED_RUNTIME)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698