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

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

Issue 1307943008: Make default_parameter_values a ZoneGrowableArray instead of an array in new space (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: r Created 5 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
« no previous file with comments | « runtime/vm/flow_graph_inliner.cc ('k') | runtime/vm/parser.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 #ifndef VM_PARSER_H_ 5 #ifndef VM_PARSER_H_
6 #define VM_PARSER_H_ 6 #define VM_PARSER_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 9
10 #include "platform/assert.h" 10 #include "platform/assert.h"
(...skipping 29 matching lines...) Expand all
40 // The class ParsedFunction holds the result of parsing a function. 40 // The class ParsedFunction holds the result of parsing a function.
41 class ParsedFunction : public ZoneAllocated { 41 class ParsedFunction : public ZoneAllocated {
42 public: 42 public:
43 ParsedFunction(Thread* thread, const Function& function) 43 ParsedFunction(Thread* thread, const Function& function)
44 : thread_(thread), 44 : thread_(thread),
45 function_(function), 45 function_(function),
46 code_(Code::Handle(zone(), function.unoptimized_code())), 46 code_(Code::Handle(zone(), function.unoptimized_code())),
47 node_sequence_(NULL), 47 node_sequence_(NULL),
48 regexp_compile_data_(NULL), 48 regexp_compile_data_(NULL),
49 instantiator_(NULL), 49 instantiator_(NULL),
50 default_parameter_values_(Array::ZoneHandle(zone(), Array::null())),
51 current_context_var_(NULL), 50 current_context_var_(NULL),
52 expression_temp_var_(NULL), 51 expression_temp_var_(NULL),
53 finally_return_temp_var_(NULL), 52 finally_return_temp_var_(NULL),
54 deferred_prefixes_(new ZoneGrowableArray<const LibraryPrefix*>()), 53 deferred_prefixes_(new ZoneGrowableArray<const LibraryPrefix*>()),
55 guarded_fields_(new ZoneGrowableArray<const Field*>()), 54 guarded_fields_(new ZoneGrowableArray<const Field*>()),
55 default_parameter_values_(NULL),
56 first_parameter_index_(0), 56 first_parameter_index_(0),
57 first_stack_local_index_(0), 57 first_stack_local_index_(0),
58 num_copied_params_(0), 58 num_copied_params_(0),
59 num_stack_locals_(0), 59 num_stack_locals_(0),
60 have_seen_await_expr_(false) { 60 have_seen_await_expr_(false) {
61 ASSERT(function.IsZoneHandle()); 61 ASSERT(function.IsZoneHandle());
62 // Every function has a local variable for the current context. 62 // Every function has a local variable for the current context.
63 LocalVariable* temp = new(zone()) LocalVariable( 63 LocalVariable* temp = new(zone()) LocalVariable(
64 function.token_pos(), 64 function.token_pos(),
65 Symbols::CurrentContextVar(), 65 Symbols::CurrentContextVar(),
(...skipping 12 matching lines...) Expand all
78 return regexp_compile_data_; 78 return regexp_compile_data_;
79 } 79 }
80 void SetRegExpCompileData(RegExpCompileData* regexp_compile_data); 80 void SetRegExpCompileData(RegExpCompileData* regexp_compile_data);
81 81
82 LocalVariable* instantiator() const { return instantiator_; } 82 LocalVariable* instantiator() const { return instantiator_; }
83 void set_instantiator(LocalVariable* instantiator) { 83 void set_instantiator(LocalVariable* instantiator) {
84 // May be NULL. 84 // May be NULL.
85 instantiator_ = instantiator; 85 instantiator_ = instantiator;
86 } 86 }
87 87
88 const Array& default_parameter_values() const { 88 void set_default_parameter_values(ZoneGrowableArray<const Instance*>* list) {
89 return default_parameter_values_; 89 default_parameter_values_ = list;
90 #if defined(DEBUG)
91 for (intptr_t i = 0; i < list->length(); i++) {
92 ASSERT(list->At(i)->IsZoneHandle() || list->At(i)->InVMHeap());
93 }
94 #endif
90 } 95 }
91 void set_default_parameter_values(const Array& default_parameter_values) { 96
92 ASSERT(default_parameter_values.IsZoneHandle() || 97
93 default_parameter_values.InVMHeap()); 98 const Instance& DefaultParameterValueAt(intptr_t i) const {
94 default_parameter_values_ = default_parameter_values.raw(); 99 ASSERT(default_parameter_values_ != NULL);
100 return *default_parameter_values_->At(i);
95 } 101 }
96 102
97 LocalVariable* current_context_var() const { 103 LocalVariable* current_context_var() const {
98 return current_context_var_; 104 return current_context_var_;
99 } 105 }
100 106
101 LocalVariable* expression_temp_var() const { 107 LocalVariable* expression_temp_var() const {
102 ASSERT(has_expression_temp_var()); 108 ASSERT(has_expression_temp_var());
103 return expression_temp_var_; 109 return expression_temp_var_;
104 } 110 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 Isolate* isolate() const { return thread_->isolate(); } 160 Isolate* isolate() const { return thread_->isolate(); }
155 Zone* zone() const { return thread_->zone(); } 161 Zone* zone() const { return thread_->zone(); }
156 162
157 private: 163 private:
158 Thread* thread_; 164 Thread* thread_;
159 const Function& function_; 165 const Function& function_;
160 Code& code_; 166 Code& code_;
161 SequenceNode* node_sequence_; 167 SequenceNode* node_sequence_;
162 RegExpCompileData* regexp_compile_data_; 168 RegExpCompileData* regexp_compile_data_;
163 LocalVariable* instantiator_; 169 LocalVariable* instantiator_;
164 Array& default_parameter_values_;
165 LocalVariable* current_context_var_; 170 LocalVariable* current_context_var_;
166 LocalVariable* expression_temp_var_; 171 LocalVariable* expression_temp_var_;
167 LocalVariable* finally_return_temp_var_; 172 LocalVariable* finally_return_temp_var_;
168 ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_; 173 ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_;
169 ZoneGrowableArray<const Field*>* guarded_fields_; 174 ZoneGrowableArray<const Field*>* guarded_fields_;
175 ZoneGrowableArray<const Instance*>* default_parameter_values_;
170 176
171 int first_parameter_index_; 177 int first_parameter_index_;
172 int first_stack_local_index_; 178 int first_stack_local_index_;
173 int num_copied_params_; 179 int num_copied_params_;
174 int num_stack_locals_; 180 int num_stack_locals_;
175 bool have_seen_await_expr_; 181 bool have_seen_await_expr_;
176 182
177 friend class Parser; 183 friend class Parser;
178 DISALLOW_COPY_AND_ASSIGN(ParsedFunction); 184 DISALLOW_COPY_AND_ASSIGN(ParsedFunction);
179 }; 185 };
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 ArgumentListNode* arguments, 511 ArgumentListNode* arguments,
506 bool resolve_getter, 512 bool resolve_getter,
507 bool* is_no_such_method); 513 bool* is_no_such_method);
508 AstNode* ParseSuperCall(const String& function_name); 514 AstNode* ParseSuperCall(const String& function_name);
509 AstNode* ParseSuperFieldAccess(const String& field_name, intptr_t field_pos); 515 AstNode* ParseSuperFieldAccess(const String& field_name, intptr_t field_pos);
510 AstNode* ParseSuperOperator(); 516 AstNode* ParseSuperOperator();
511 AstNode* BuildUnarySuperOperator(Token::Kind op, PrimaryNode* super); 517 AstNode* BuildUnarySuperOperator(Token::Kind op, PrimaryNode* super);
512 518
513 static bool ParseFormalParameters(const Function& func, ParamList* params); 519 static bool ParseFormalParameters(const Function& func, ParamList* params);
514 520
515 static void SetupDefaultsForOptionalParams(const ParamList& params, 521 static void SetupDefaultsForOptionalParams(
516 Array* default_values); 522 const ParamList& params,
523 ZoneGrowableArray<const Instance*>* default_values);
517 ClosureNode* CreateImplicitClosureNode(const Function& func, 524 ClosureNode* CreateImplicitClosureNode(const Function& func,
518 intptr_t token_pos, 525 intptr_t token_pos,
519 AstNode* receiver); 526 AstNode* receiver);
520 static void AddFormalParamsToFunction(const ParamList* params, 527 static void AddFormalParamsToFunction(const ParamList* params,
521 const Function& func); 528 const Function& func);
522 void AddFormalParamsToScope(const ParamList* params, LocalScope* scope); 529 void AddFormalParamsToScope(const ParamList* params, LocalScope* scope);
523 530
524 SequenceNode* ParseConstructor(const Function& func, 531 SequenceNode* ParseConstructor(
525 Array* default_parameter_values); 532 const Function& func, ZoneGrowableArray<const Instance*>* default_values);
526 SequenceNode* ParseFunc(const Function& func, 533 SequenceNode* ParseFunc(
527 Array* default_parameter_values); 534 const Function& func, ZoneGrowableArray<const Instance*>* default_values);
528 535
529 void ParseNativeFunctionBlock(const ParamList* params, const Function& func); 536 void ParseNativeFunctionBlock(const ParamList* params, const Function& func);
530 537
531 SequenceNode* ParseInstanceGetter(const Function& func); 538 SequenceNode* ParseInstanceGetter(const Function& func);
532 SequenceNode* ParseInstanceSetter(const Function& func); 539 SequenceNode* ParseInstanceSetter(const Function& func);
533 SequenceNode* ParseStaticFinalGetter(const Function& func); 540 SequenceNode* ParseStaticFinalGetter(const Function& func);
534 SequenceNode* ParseStaticInitializer(); 541 SequenceNode* ParseStaticInitializer();
535 SequenceNode* ParseMethodExtractor(const Function& func); 542 SequenceNode* ParseMethodExtractor(const Function& func);
536 SequenceNode* ParseNoSuchMethodDispatcher(const Function& func, 543 SequenceNode* ParseNoSuchMethodDispatcher(
537 Array* default_values); 544 const Function& func, ZoneGrowableArray<const Instance*>* default_values);
538 SequenceNode* ParseInvokeFieldDispatcher(const Function& func, 545 SequenceNode* ParseInvokeFieldDispatcher(
539 Array* default_values); 546 const Function& func, ZoneGrowableArray<const Instance*>* default_values);
540 SequenceNode* ParseImplicitClosure(const Function& func, 547 SequenceNode* ParseImplicitClosure(
541 Array* default_values); 548 const Function& func, ZoneGrowableArray<const Instance*>* default_values);
542 SequenceNode* ParseConstructorClosure(const Function& func, 549 SequenceNode* ParseConstructorClosure(
543 Array* default_values); 550 const Function& func, ZoneGrowableArray<const Instance*>* default_values);
544 551
545 void BuildDispatcherScope(const Function& func, 552 void BuildDispatcherScope(const Function& func,
546 const ArgumentsDescriptor& desc, 553 const ArgumentsDescriptor& desc,
547 Array* default_values); 554 ZoneGrowableArray<const Instance*>* default_values);
548 555
549 void EnsureHasReturnStatement(SequenceNode* seq, intptr_t return_pos); 556 void EnsureHasReturnStatement(SequenceNode* seq, intptr_t return_pos);
550 void ChainNewBlock(LocalScope* outer_scope); 557 void ChainNewBlock(LocalScope* outer_scope);
551 void OpenBlock(); 558 void OpenBlock();
552 void OpenLoopBlock(); 559 void OpenLoopBlock();
553 void OpenFunctionBlock(const Function& func); 560 void OpenFunctionBlock(const Function& func);
554 void OpenAsyncClosure(); 561 void OpenAsyncClosure();
555 RawFunction* OpenAsyncFunction(intptr_t formal_param_pos); 562 RawFunction* OpenAsyncFunction(intptr_t formal_param_pos);
556 RawFunction* OpenSyncGeneratorFunction(intptr_t func_pos); 563 RawFunction* OpenSyncGeneratorFunction(intptr_t func_pos);
557 SequenceNode* CloseSyncGenFunction(const Function& closure, 564 SequenceNode* CloseSyncGenFunction(const Function& closure,
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 890
884 // Indentation of parser trace. 891 // Indentation of parser trace.
885 intptr_t trace_indent_; 892 intptr_t trace_indent_;
886 893
887 DISALLOW_COPY_AND_ASSIGN(Parser); 894 DISALLOW_COPY_AND_ASSIGN(Parser);
888 }; 895 };
889 896
890 } // namespace dart 897 } // namespace dart
891 898
892 #endif // VM_PARSER_H_ 899 #endif // VM_PARSER_H_
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_inliner.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698