| Index: runtime/vm/parser.h
|
| diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
|
| index 827626aea9d098227406b70df6f752b3b227648b..1d7dbf751e35761b3499bae96cb5a6358e42c865 100644
|
| --- a/runtime/vm/parser.h
|
| +++ b/runtime/vm/parser.h
|
| @@ -47,12 +47,12 @@ class ParsedFunction : public ZoneAllocated {
|
| node_sequence_(NULL),
|
| regexp_compile_data_(NULL),
|
| instantiator_(NULL),
|
| - default_parameter_values_(Array::ZoneHandle(zone(), Array::null())),
|
| current_context_var_(NULL),
|
| expression_temp_var_(NULL),
|
| finally_return_temp_var_(NULL),
|
| deferred_prefixes_(new ZoneGrowableArray<const LibraryPrefix*>()),
|
| guarded_fields_(new ZoneGrowableArray<const Field*>()),
|
| + default_parameter_values_(NULL),
|
| first_parameter_index_(0),
|
| first_stack_local_index_(0),
|
| num_copied_params_(0),
|
| @@ -85,13 +85,19 @@ class ParsedFunction : public ZoneAllocated {
|
| instantiator_ = instantiator;
|
| }
|
|
|
| - const Array& default_parameter_values() const {
|
| - return default_parameter_values_;
|
| + void set_default_parameter_values(ZoneGrowableArray<const Instance*>* list) {
|
| + default_parameter_values_ = list;
|
| +#if defined(DEBUG)
|
| + for (intptr_t i = 0; i < list->length(); i++) {
|
| + ASSERT(list->At(i)->IsZoneHandle() || list->At(i)->InVMHeap());
|
| + }
|
| +#endif
|
| }
|
| - void set_default_parameter_values(const Array& default_parameter_values) {
|
| - ASSERT(default_parameter_values.IsZoneHandle() ||
|
| - default_parameter_values.InVMHeap());
|
| - default_parameter_values_ = default_parameter_values.raw();
|
| +
|
| +
|
| + const Instance& DefaultParameterValueAt(intptr_t i) const {
|
| + ASSERT(default_parameter_values_ != NULL);
|
| + return *default_parameter_values_->At(i);
|
| }
|
|
|
| LocalVariable* current_context_var() const {
|
| @@ -161,12 +167,12 @@ class ParsedFunction : public ZoneAllocated {
|
| SequenceNode* node_sequence_;
|
| RegExpCompileData* regexp_compile_data_;
|
| LocalVariable* instantiator_;
|
| - Array& default_parameter_values_;
|
| LocalVariable* current_context_var_;
|
| LocalVariable* expression_temp_var_;
|
| LocalVariable* finally_return_temp_var_;
|
| ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_;
|
| ZoneGrowableArray<const Field*>* guarded_fields_;
|
| + ZoneGrowableArray<const Instance*>* default_parameter_values_;
|
|
|
| int first_parameter_index_;
|
| int first_stack_local_index_;
|
| @@ -512,8 +518,9 @@ class Parser : public ValueObject {
|
|
|
| static bool ParseFormalParameters(const Function& func, ParamList* params);
|
|
|
| - static void SetupDefaultsForOptionalParams(const ParamList& params,
|
| - Array* default_values);
|
| + static void SetupDefaultsForOptionalParams(
|
| + const ParamList& params,
|
| + ZoneGrowableArray<const Instance*>* default_values);
|
| ClosureNode* CreateImplicitClosureNode(const Function& func,
|
| intptr_t token_pos,
|
| AstNode* receiver);
|
| @@ -521,10 +528,10 @@ class Parser : public ValueObject {
|
| const Function& func);
|
| void AddFormalParamsToScope(const ParamList* params, LocalScope* scope);
|
|
|
| - SequenceNode* ParseConstructor(const Function& func,
|
| - Array* default_parameter_values);
|
| - SequenceNode* ParseFunc(const Function& func,
|
| - Array* default_parameter_values);
|
| + SequenceNode* ParseConstructor(
|
| + const Function& func, ZoneGrowableArray<const Instance*>* default_values);
|
| + SequenceNode* ParseFunc(
|
| + const Function& func, ZoneGrowableArray<const Instance*>* default_values);
|
|
|
| void ParseNativeFunctionBlock(const ParamList* params, const Function& func);
|
|
|
| @@ -533,18 +540,18 @@ class Parser : public ValueObject {
|
| SequenceNode* ParseStaticFinalGetter(const Function& func);
|
| SequenceNode* ParseStaticInitializer();
|
| SequenceNode* ParseMethodExtractor(const Function& func);
|
| - SequenceNode* ParseNoSuchMethodDispatcher(const Function& func,
|
| - Array* default_values);
|
| - SequenceNode* ParseInvokeFieldDispatcher(const Function& func,
|
| - Array* default_values);
|
| - SequenceNode* ParseImplicitClosure(const Function& func,
|
| - Array* default_values);
|
| - SequenceNode* ParseConstructorClosure(const Function& func,
|
| - Array* default_values);
|
| + SequenceNode* ParseNoSuchMethodDispatcher(
|
| + const Function& func, ZoneGrowableArray<const Instance*>* default_values);
|
| + SequenceNode* ParseInvokeFieldDispatcher(
|
| + const Function& func, ZoneGrowableArray<const Instance*>* default_values);
|
| + SequenceNode* ParseImplicitClosure(
|
| + const Function& func, ZoneGrowableArray<const Instance*>* default_values);
|
| + SequenceNode* ParseConstructorClosure(
|
| + const Function& func, ZoneGrowableArray<const Instance*>* default_values);
|
|
|
| void BuildDispatcherScope(const Function& func,
|
| const ArgumentsDescriptor& desc,
|
| - Array* default_values);
|
| + ZoneGrowableArray<const Instance*>* default_values);
|
|
|
| void EnsureHasReturnStatement(SequenceNode* seq, intptr_t return_pos);
|
| void ChainNewBlock(LocalScope* outer_scope);
|
|
|