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

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

Issue 2944433003: [kernel] Add TokenPosition to AllocateObject, fix some cc tests (Closed)
Patch Set: Created 3 years, 6 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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/kernel_binary_flowgraph.h" 5 #include "vm/kernel_binary_flowgraph.h"
6 6
7 #include "vm/compiler.h" 7 #include "vm/compiler.h"
8 #include "vm/longjump.h" 8 #include "vm/longjump.h"
9 #include "vm/object_store.h" 9 #include "vm/object_store.h"
10 10
(...skipping 4560 matching lines...) Expand 10 before | Expand all | Expand 10 after
4571 const TypeArguments& type_arguments) { 4571 const TypeArguments& type_arguments) {
4572 return flow_graph_builder_->TranslateInstantiatedTypeArguments( 4572 return flow_graph_builder_->TranslateInstantiatedTypeArguments(
4573 type_arguments); 4573 type_arguments);
4574 } 4574 }
4575 4575
4576 Fragment StreamingFlowGraphBuilder::StrictCompare(Token::Kind kind, 4576 Fragment StreamingFlowGraphBuilder::StrictCompare(Token::Kind kind,
4577 bool number_check) { 4577 bool number_check) {
4578 return flow_graph_builder_->StrictCompare(kind, number_check); 4578 return flow_graph_builder_->StrictCompare(kind, number_check);
4579 } 4579 }
4580 4580
4581 Fragment StreamingFlowGraphBuilder::AllocateObject(const dart::Class& klass, 4581 Fragment StreamingFlowGraphBuilder::AllocateObject(TokenPosition position,
4582 const dart::Class& klass,
4582 intptr_t argument_count) { 4583 intptr_t argument_count) {
4583 return flow_graph_builder_->AllocateObject(klass, argument_count); 4584 return flow_graph_builder_->AllocateObject(position, klass, argument_count);
4584 } 4585 }
4585 4586
4586 Fragment StreamingFlowGraphBuilder::InstanceCall(TokenPosition position, 4587 Fragment StreamingFlowGraphBuilder::InstanceCall(TokenPosition position,
4587 const dart::String& name, 4588 const dart::String& name,
4588 Token::Kind kind, 4589 Token::Kind kind,
4589 intptr_t argument_count, 4590 intptr_t argument_count,
4590 const Array& argument_names, 4591 const Array& argument_names,
4591 intptr_t num_args_checked) { 4592 intptr_t num_args_checked) {
4592 return flow_graph_builder_->InstanceCall(position, name, kind, argument_count, 4593 return flow_graph_builder_->InstanceCall(position, name, kind, argument_count,
4593 argument_names, num_args_checked); 4594 argument_names, num_args_checked);
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after
5212 // In that case we'll make an instance and pass it as first argument. 5213 // In that case we'll make an instance and pass it as first argument.
5213 // 5214 //
5214 // TODO(27590): Get rid of this after we're using core libraries compiled 5215 // TODO(27590): Get rid of this after we're using core libraries compiled
5215 // into Kernel. 5216 // into Kernel.
5216 if (target.IsGenerativeConstructor()) { 5217 if (target.IsGenerativeConstructor()) {
5217 if (klass.NumTypeArguments() > 0) { 5218 if (klass.NumTypeArguments() > 0) {
5218 const TypeArguments& type_arguments = 5219 const TypeArguments& type_arguments =
5219 PeekArgumentsInstantiatedType(klass); 5220 PeekArgumentsInstantiatedType(klass);
5220 instructions += TranslateInstantiatedTypeArguments(type_arguments); 5221 instructions += TranslateInstantiatedTypeArguments(type_arguments);
5221 instructions += PushArgument(); 5222 instructions += PushArgument();
5222 instructions += AllocateObject(klass, 1); 5223 instructions += AllocateObject(position, klass, 1);
5223 } else { 5224 } else {
5224 instructions += AllocateObject(klass, 0); 5225 instructions += AllocateObject(position, klass, 0);
5225 } 5226 }
5226 5227
5227 instance_variable = MakeTemporary(); 5228 instance_variable = MakeTemporary();
5228 5229
5229 instructions += LoadLocal(instance_variable); 5230 instructions += LoadLocal(instance_variable);
5230 instructions += PushArgument(); 5231 instructions += PushArgument();
5231 } else if (target.IsFactory()) { 5232 } else if (target.IsFactory()) {
5232 // The VM requires currently a TypeArguments object as first parameter for 5233 // The VM requires currently a TypeArguments object as first parameter for
5233 // every factory constructor :-/ ! 5234 // every factory constructor :-/ !
5234 // 5235 //
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
5332 TypeArguments& canonicalized_type_arguments = 5333 TypeArguments& canonicalized_type_arguments =
5333 TypeArguments::ZoneHandle(Z, type.arguments()); 5334 TypeArguments::ZoneHandle(Z, type.arguments());
5334 canonicalized_type_arguments = 5335 canonicalized_type_arguments =
5335 canonicalized_type_arguments.Canonicalize(); 5336 canonicalized_type_arguments.Canonicalize();
5336 instructions += Constant(canonicalized_type_arguments); 5337 instructions += Constant(canonicalized_type_arguments);
5337 } else { 5338 } else {
5338 instructions += TranslateInstantiatedTypeArguments(type_arguments); 5339 instructions += TranslateInstantiatedTypeArguments(type_arguments);
5339 } 5340 }
5340 5341
5341 instructions += PushArgument(); 5342 instructions += PushArgument();
5342 instructions += AllocateObject(klass, 1); 5343 instructions += AllocateObject(position, klass, 1);
5343 } else { 5344 } else {
5344 instructions += AllocateObject(klass, 0); 5345 instructions += AllocateObject(position, klass, 0);
5345 } 5346 }
5346 LocalVariable* variable = MakeTemporary(); 5347 LocalVariable* variable = MakeTemporary();
5347 5348
5348 instructions += LoadLocal(variable); 5349 instructions += LoadLocal(variable);
5349 instructions += PushArgument(); 5350 instructions += PushArgument();
5350 5351
5351 Array& argument_names = Array::ZoneHandle(Z); 5352 Array& argument_names = Array::ZoneHandle(Z);
5352 intptr_t argument_count; 5353 intptr_t argument_count;
5353 instructions += 5354 instructions +=
5354 BuildArguments(&argument_names, &argument_count); // read arguments. 5355 BuildArguments(&argument_names, &argument_count); // read arguments.
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
5911 Z, klass.LookupConstructorAllowPrivate( 5912 Z, klass.LookupConstructorAllowPrivate(
5912 H.DartSymbol("_AssertionError._create"))); 5913 H.DartSymbol("_AssertionError._create")));
5913 ASSERT(!constructor.IsNull()); 5914 ASSERT(!constructor.IsNull());
5914 5915
5915 const dart::String& url = H.DartString( 5916 const dart::String& url = H.DartString(
5916 parsed_function()->function().ToLibNamePrefixedQualifiedCString(), 5917 parsed_function()->function().ToLibNamePrefixedQualifiedCString(),
5917 Heap::kOld); 5918 Heap::kOld);
5918 5919
5919 // Create instance of _AssertionError 5920 // Create instance of _AssertionError
5920 Fragment otherwise_fragment(otherwise); 5921 Fragment otherwise_fragment(otherwise);
5921 otherwise_fragment += AllocateObject(klass, 0); 5922 otherwise_fragment += AllocateObject(TokenPosition::kNoSource, klass, 0);
5922 LocalVariable* instance = MakeTemporary(); 5923 LocalVariable* instance = MakeTemporary();
5923 5924
5924 // Call _AssertionError._create constructor. 5925 // Call _AssertionError._create constructor.
5925 otherwise_fragment += LoadLocal(instance); 5926 otherwise_fragment += LoadLocal(instance);
5926 otherwise_fragment += PushArgument(); // this 5927 otherwise_fragment += PushArgument(); // this
5927 5928
5928 otherwise_fragment += Constant(H.DartString("<no message>", Heap::kOld)); 5929 otherwise_fragment += Constant(H.DartString("<no message>", Heap::kOld));
5929 otherwise_fragment += PushArgument(); // failedAssertion 5930 otherwise_fragment += PushArgument(); // failedAssertion
5930 5931
5931 otherwise_fragment += Constant(url); 5932 otherwise_fragment += Constant(url);
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
6231 ASSERT(!klass.IsNull()); 6232 ASSERT(!klass.IsNull());
6232 const dart::Function& constructor = dart::Function::ZoneHandle( 6233 const dart::Function& constructor = dart::Function::ZoneHandle(
6233 Z, klass.LookupConstructorAllowPrivate( 6234 Z, klass.LookupConstructorAllowPrivate(
6234 H.DartSymbol("FallThroughError._create"))); 6235 H.DartSymbol("FallThroughError._create")));
6235 ASSERT(!constructor.IsNull()); 6236 ASSERT(!constructor.IsNull());
6236 const dart::String& url = H.DartString( 6237 const dart::String& url = H.DartString(
6237 parsed_function()->function().ToLibNamePrefixedQualifiedCString(), 6238 parsed_function()->function().ToLibNamePrefixedQualifiedCString(),
6238 Heap::kOld); 6239 Heap::kOld);
6239 6240
6240 // Create instance of _FallThroughError 6241 // Create instance of _FallThroughError
6241 body_fragment += AllocateObject(klass, 0); 6242 body_fragment += AllocateObject(TokenPosition::kNoSource, klass, 0);
Vyacheslav Egorov (Google) 2017/06/16 11:09:18 I guess this needs some informative position event
jensj 2017/06/16 11:39:07 I'll give parser.cc an extra look to see if I can
jensj 2017/06/16 11:55:33 Actually, this gives us the excellent exception ``
6242 LocalVariable* instance = MakeTemporary(); 6243 LocalVariable* instance = MakeTemporary();
6243 6244
6244 // Call _FallThroughError._create constructor. 6245 // Call _FallThroughError._create constructor.
6245 body_fragment += LoadLocal(instance); 6246 body_fragment += LoadLocal(instance);
6246 body_fragment += PushArgument(); // this 6247 body_fragment += PushArgument(); // this
6247 6248
6248 body_fragment += Constant(url); 6249 body_fragment += Constant(url);
6249 body_fragment += PushArgument(); // url 6250 body_fragment += PushArgument(); // url
6250 6251
6251 body_fragment += NullConstant(); 6252 body_fragment += NullConstant();
(...skipping 898 matching lines...) Expand 10 before | Expand all | Expand 10 after
7150 metadata_values.SetAt(i, value); 7151 metadata_values.SetAt(i, value);
7151 } 7152 }
7152 7153
7153 return metadata_values.raw(); 7154 return metadata_values.raw();
7154 } 7155 }
7155 7156
7156 } // namespace kernel 7157 } // namespace kernel
7157 } // namespace dart 7158 } // namespace dart
7158 7159
7159 #endif // !defined(DART_PRECOMPILED_RUNTIME) 7160 #endif // !defined(DART_PRECOMPILED_RUNTIME)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698