| Index: runtime/vm/parser.h
|
| diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
|
| index 9d9e50346ca2b5fac395f6ff8635c8f659cdc5fb..ebf38d3860419fa26b06797608636061ab54dcb9 100644
|
| --- a/runtime/vm/parser.h
|
| +++ b/runtime/vm/parser.h
|
| @@ -233,8 +233,12 @@ class Parser : public ValueObject {
|
| struct Block;
|
| class TryStack;
|
|
|
| - Parser(const Script& script, const Library& library, intptr_t token_pos);
|
| - Parser(const Script& script, ParsedFunction* function, intptr_t token_pos);
|
| + Parser(const Script& script,
|
| + const Library& library,
|
| + TokenPosition token_pos);
|
| + Parser(const Script& script,
|
| + ParsedFunction* function,
|
| + TokenPosition token_pos);
|
| ~Parser();
|
|
|
| // The function for which we will generate code.
|
| @@ -274,7 +278,7 @@ class Parser : public ValueObject {
|
| }
|
|
|
| const Script& script() const { return script_; }
|
| - void SetScript(const Script& script, intptr_t token_pos);
|
| + void SetScript(const Script& script, TokenPosition token_pos);
|
|
|
| const Library& library() const { return library_; }
|
| void set_library(const Library& value) const { library_ = value.raw(); }
|
| @@ -294,8 +298,10 @@ class Parser : public ValueObject {
|
| return script_.kind() == RawScript::kPatchTag;
|
| }
|
|
|
| - intptr_t TokenPos() const { return tokens_iterator_.CurrentPosition(); }
|
| - intptr_t PrevTokenPos() const { return prev_token_pos_; }
|
| + TokenPosition TokenPos() const {
|
| + return tokens_iterator_.CurrentPosition();
|
| + }
|
| + TokenPosition PrevTokenPos() const { return prev_token_pos_; }
|
|
|
| Token::Kind CurrentToken() {
|
| if (token_kind_ == Token::kILLEGAL) {
|
| @@ -314,7 +320,7 @@ class Parser : public ValueObject {
|
| RawInteger* CurrentIntegerLiteral() const;
|
|
|
| // Sets parser to given token position in the stream.
|
| - void SetPosition(intptr_t position);
|
| + void SetPosition(TokenPosition position);
|
|
|
| void ConsumeToken() {
|
| // Reset cache and advance the token.
|
| @@ -337,7 +343,7 @@ class Parser : public ValueObject {
|
| void SkipToMatching();
|
| void SkipToMatchingParenthesis();
|
| void SkipBlock();
|
| - intptr_t SkipMetadata();
|
| + TokenPosition SkipMetadata();
|
| void SkipTypeArguments();
|
| void SkipType(bool allow_void);
|
| void SkipInitializers();
|
| @@ -362,7 +368,7 @@ class Parser : public ValueObject {
|
|
|
| AstNode* DartPrint(const char* str);
|
|
|
| - void CheckConstructorCallTypeArguments(intptr_t pos,
|
| + void CheckConstructorCallTypeArguments(TokenPosition pos,
|
| const Function& constructor,
|
| const TypeArguments& type_arguments);
|
|
|
| @@ -374,7 +380,7 @@ class Parser : public ValueObject {
|
|
|
| // Concatenate and report an already formatted error and a new error message.
|
| static void ReportErrors(const Error& prev_error,
|
| - const Script& script, intptr_t token_pos,
|
| + const Script& script, TokenPosition token_pos,
|
| const char* format, ...) PRINTF_ATTRIBUTE(4, 5);
|
|
|
| // Report error message at location of current token in current script.
|
| @@ -383,62 +389,62 @@ class Parser : public ValueObject {
|
| void ReportErrorBefore(const char* format, ...) PRINTF_ATTRIBUTE(2, 3);
|
|
|
| // Report error message at given location in current script.
|
| - void ReportError(intptr_t token_pos,
|
| + void ReportError(TokenPosition token_pos,
|
| const char* msg, ...) const PRINTF_ATTRIBUTE(3, 4);
|
|
|
| // Report warning message at location of current token in current script.
|
| void ReportWarning(const char* msg, ...) const PRINTF_ATTRIBUTE(2, 3);
|
|
|
| // Report warning message at given location in current script.
|
| - void ReportWarning(intptr_t token_pos,
|
| + void ReportWarning(TokenPosition token_pos,
|
| const char* msg, ...) const PRINTF_ATTRIBUTE(3, 4);
|
|
|
| void CheckRecursiveInvocation();
|
|
|
| - const Instance& EvaluateConstExpr(intptr_t expr_pos, AstNode* expr);
|
| + const Instance& EvaluateConstExpr(TokenPosition expr_pos, AstNode* expr);
|
| StaticGetterNode* RunStaticFieldInitializer(const Field& field,
|
| - intptr_t field_ref_pos);
|
| + TokenPosition field_ref_pos);
|
| RawObject* EvaluateConstConstructorCall(const Class& type_class,
|
| const TypeArguments& type_arguments,
|
| const Function& constructor,
|
| ArgumentListNode* arguments);
|
| - LiteralNode* FoldConstExpr(intptr_t expr_pos, AstNode* expr);
|
| + LiteralNode* FoldConstExpr(TokenPosition expr_pos, AstNode* expr);
|
|
|
| // Support for parsing of scripts.
|
| void ParseTopLevel();
|
| void ParseEnumDeclaration(const GrowableObjectArray& pending_classes,
|
| const Object& tl_owner,
|
| - intptr_t metadata_pos);
|
| + TokenPosition metadata_pos);
|
| void ParseEnumDefinition(const Class& cls);
|
| void ParseClassDeclaration(const GrowableObjectArray& pending_classes,
|
| const Object& tl_owner,
|
| - intptr_t metadata_pos);
|
| + TokenPosition metadata_pos);
|
| void ParseClassDefinition(const Class& cls);
|
| void ParseMixinAppAlias(const GrowableObjectArray& pending_classes,
|
| const Object& tl_owner,
|
| - intptr_t metadata_pos);
|
| + TokenPosition metadata_pos);
|
| void ParseTypedef(const GrowableObjectArray& pending_classes,
|
| const Object& tl_owner,
|
| - intptr_t metadata_pos);
|
| + TokenPosition metadata_pos);
|
| void ParseTopLevelVariable(TopLevel* top_level,
|
| - const Object& owner, intptr_t metadata_pos);
|
| + const Object& owner, TokenPosition metadata_pos);
|
| void ParseTopLevelFunction(TopLevel* top_level,
|
| - const Object& owner, intptr_t metadata_pos);
|
| + const Object& owner, TokenPosition metadata_pos);
|
| void ParseTopLevelAccessor(TopLevel* top_level,
|
| - const Object& owner, intptr_t metadata_pos);
|
| + const Object& owner, TokenPosition metadata_pos);
|
| RawArray* EvaluateMetadata();
|
|
|
| RawFunction::AsyncModifier ParseFunctionModifier();
|
|
|
| // Support for parsing libraries.
|
| RawObject* CallLibraryTagHandler(Dart_LibraryTag tag,
|
| - intptr_t token_pos,
|
| + TokenPosition token_pos,
|
| const String& url);
|
| void ParseIdentList(GrowableObjectArray* names);
|
| void ParseLibraryDefinition(const Object& tl_owner);
|
| void ParseLibraryName();
|
| void ParseLibraryImportExport(const Object& tl_owner,
|
| - intptr_t metadata_pos);
|
| + TokenPosition metadata_pos);
|
| void ParseLibraryPart();
|
| void ParsePartHeader();
|
| void ParseLibraryNameObsoleteSyntax();
|
| @@ -464,7 +470,7 @@ class Parser : public ValueObject {
|
| void ParseFieldDefinition(ClassDesc* members, MemberDesc* field);
|
| void CheckMemberNameConflict(ClassDesc* members, MemberDesc* member);
|
| void ParseClassMemberDefinition(ClassDesc* members,
|
| - intptr_t metadata_pos);
|
| + TokenPosition metadata_pos);
|
| void ParseFormalParameter(bool allow_explicit_default_value,
|
| bool evaluate_metadata,
|
| ParamList* params);
|
| @@ -483,14 +489,14 @@ class Parser : public ValueObject {
|
| LocalVariable* receiver,
|
| GrowableArray<Field*>* initialized_fields);
|
| AstNode* CheckDuplicateFieldInit(
|
| - intptr_t init_pos,
|
| + TokenPosition init_pos,
|
| GrowableArray<Field*>* initialized_fields,
|
| AstNode* instance,
|
| Field* field,
|
| AstNode* init_value);
|
| StaticCallNode* GenerateSuperConstructorCall(
|
| const Class& cls,
|
| - intptr_t supercall_pos,
|
| + TokenPosition supercall_pos,
|
| LocalVariable* receiver,
|
| ArgumentListNode* forwarding_args);
|
| StaticCallNode* ParseSuperInitializer(
|
| @@ -507,7 +513,7 @@ class Parser : public ValueObject {
|
| void ParseInterfaceList(const Class& cls);
|
| RawAbstractType* ParseMixins(const AbstractType& super_type);
|
| static StaticCallNode* BuildInvocationMirrorAllocation(
|
| - intptr_t call_pos,
|
| + TokenPosition call_pos,
|
| const String& function_name,
|
| const ArgumentListNode& function_args,
|
| const LocalVariable* temp,
|
| @@ -515,18 +521,19 @@ class Parser : public ValueObject {
|
| // Build arguments for a NoSuchMethodCall. If LocalVariable temp is not NULL,
|
| // the last argument is stored in temp.
|
| static ArgumentListNode* BuildNoSuchMethodArguments(
|
| - intptr_t call_pos,
|
| + TokenPosition call_pos,
|
| const String& function_name,
|
| const ArgumentListNode& function_args,
|
| const LocalVariable* temp,
|
| bool is_super_invocation);
|
| - RawFunction* GetSuperFunction(intptr_t token_pos,
|
| + RawFunction* GetSuperFunction(TokenPosition token_pos,
|
| const String& name,
|
| ArgumentListNode* arguments,
|
| bool resolve_getter,
|
| bool* is_no_such_method);
|
| AstNode* ParseSuperCall(const String& function_name);
|
| - AstNode* ParseSuperFieldAccess(const String& field_name, intptr_t field_pos);
|
| + AstNode* ParseSuperFieldAccess(const String& field_name,
|
| + TokenPosition field_pos);
|
| AstNode* ParseSuperOperator();
|
| AstNode* BuildUnarySuperOperator(Token::Kind op, PrimaryNode* super);
|
|
|
| @@ -534,7 +541,7 @@ class Parser : public ValueObject {
|
|
|
| void SetupDefaultsForOptionalParams(const ParamList& params);
|
| ClosureNode* CreateImplicitClosureNode(const Function& func,
|
| - intptr_t token_pos,
|
| + TokenPosition token_pos,
|
| AstNode* receiver);
|
| static void AddFormalParamsToFunction(const ParamList* params,
|
| const Function& func);
|
| @@ -558,21 +565,21 @@ class Parser : public ValueObject {
|
| void BuildDispatcherScope(const Function& func,
|
| const ArgumentsDescriptor& desc);
|
|
|
| - void EnsureHasReturnStatement(SequenceNode* seq, intptr_t return_pos);
|
| + void EnsureHasReturnStatement(SequenceNode* seq, TokenPosition return_pos);
|
| void ChainNewBlock(LocalScope* outer_scope);
|
| void OpenBlock();
|
| void OpenLoopBlock();
|
| void OpenFunctionBlock(const Function& func);
|
| void OpenAsyncClosure();
|
| - RawFunction* OpenAsyncFunction(intptr_t formal_param_pos);
|
| - RawFunction* OpenSyncGeneratorFunction(intptr_t func_pos);
|
| + RawFunction* OpenAsyncFunction(TokenPosition formal_param_pos);
|
| + RawFunction* OpenSyncGeneratorFunction(TokenPosition func_pos);
|
| SequenceNode* CloseSyncGenFunction(const Function& closure,
|
| SequenceNode* closure_node);
|
| void AddSyncGenClosureParameters(ParamList* params);
|
| void AddAsyncGenClosureParameters(ParamList* params);
|
|
|
| // Support for async* functions.
|
| - RawFunction* OpenAsyncGeneratorFunction(intptr_t func_pos);
|
| + RawFunction* OpenAsyncGeneratorFunction(TokenPosition func_pos);
|
| SequenceNode* CloseAsyncGeneratorFunction(const Function& closure,
|
| SequenceNode* closure_node);
|
| void OpenAsyncGeneratorClosure();
|
| @@ -596,10 +603,10 @@ class Parser : public ValueObject {
|
| LocalVariable* LookupTypeArgumentsParameter(LocalScope* from_scope,
|
| bool test_only);
|
| void CaptureInstantiator();
|
| - AstNode* LoadReceiver(intptr_t token_pos);
|
| + AstNode* LoadReceiver(TokenPosition token_pos);
|
| AstNode* LoadFieldIfUnresolved(AstNode* node);
|
| AstNode* LoadClosure(PrimaryNode* primary);
|
| - InstanceGetterNode* CallGetter(intptr_t token_pos,
|
| + InstanceGetterNode* CallGetter(TokenPosition token_pos,
|
| AstNode* object,
|
| const String& name);
|
|
|
| @@ -610,7 +617,7 @@ class Parser : public ValueObject {
|
| AstNode* ParseDoWhileStatement(String* label_name);
|
| AstNode* ParseForStatement(String* label_name);
|
| AstNode* ParseAwaitForStatement(String* label_name);
|
| - AstNode* ParseForInStatement(intptr_t forin_pos, SourceLabel* label);
|
| + AstNode* ParseForInStatement(TokenPosition forin_pos, SourceLabel* label);
|
| RawClass* CheckCaseExpressions(const GrowableArray<LiteralNode*>& values);
|
| CaseNode* ParseCaseClause(LocalVariable* switch_expr_value,
|
| GrowableArray<LiteralNode*>* case_expr_values,
|
| @@ -634,7 +641,7 @@ class Parser : public ValueObject {
|
| LocalVariable* saved_exception_var,
|
| LocalVariable* saved_stack_trace_var);
|
| // Parse all the catch clause of a try.
|
| - SequenceNode* ParseCatchClauses(intptr_t handler_pos,
|
| + SequenceNode* ParseCatchClauses(TokenPosition handler_pos,
|
| bool is_async,
|
| LocalVariable* exception_var,
|
| LocalVariable* stack_trace_var,
|
| @@ -717,15 +724,15 @@ class Parser : public ValueObject {
|
| String* ParseImportStringLiteral();
|
| AstNode* ParseCompoundLiteral();
|
| AstNode* ParseSymbolLiteral();
|
| - AstNode* ParseListLiteral(intptr_t type_pos,
|
| + AstNode* ParseListLiteral(TokenPosition type_pos,
|
| bool is_const,
|
| const TypeArguments& type_arguments);
|
| - AstNode* ParseMapLiteral(intptr_t type_pos,
|
| + AstNode* ParseMapLiteral(TokenPosition type_pos,
|
| bool is_const,
|
| const TypeArguments& type_arguments);
|
|
|
| RawFunction* BuildConstructorClosureFunction(const Function& ctr,
|
| - intptr_t token_pos);
|
| + TokenPosition token_pos);
|
| AstNode* ParseNewOperator(Token::Kind op_kind);
|
| void ParseConstructorClosurization(Function* constructor,
|
| TypeArguments* type_arguments);
|
| @@ -735,24 +742,25 @@ class Parser : public ValueObject {
|
| bool require_const);
|
| AstNode* ParseStaticCall(const Class& cls,
|
| const String& method_name,
|
| - intptr_t ident_pos);
|
| + TokenPosition ident_pos);
|
| AstNode* ParseInstanceCall(AstNode* receiver,
|
| const String& method_name,
|
| - intptr_t ident_pos,
|
| + TokenPosition ident_pos,
|
| bool is_conditional);
|
| AstNode* ParseClosureCall(AstNode* closure);
|
| AstNode* GenerateStaticFieldLookup(const Field& field,
|
| - intptr_t ident_pos);
|
| + TokenPosition ident_pos);
|
| AstNode* GenerateStaticFieldAccess(const Class& cls,
|
| const String& field_name,
|
| - intptr_t ident_pos);
|
| + TokenPosition ident_pos);
|
|
|
| LocalVariable* LookupLocalScope(const String& ident);
|
| - void CheckInstanceFieldAccess(intptr_t field_pos, const String& field_name);
|
| + void CheckInstanceFieldAccess(TokenPosition field_pos,
|
| + const String& field_name);
|
| bool ParsingStaticMember() const;
|
| const AbstractType* ReceiverType(const Class& cls);
|
| bool IsInstantiatorRequired() const;
|
| - bool ResolveIdentInLocalScope(intptr_t ident_pos,
|
| + bool ResolveIdentInLocalScope(TokenPosition ident_pos,
|
| const String &ident,
|
| AstNode** node);
|
| static const bool kResolveLocally = true;
|
| @@ -760,28 +768,29 @@ class Parser : public ValueObject {
|
|
|
| // Resolve a primary identifier in the library or prefix scope and
|
| // generate the corresponding AstNode.
|
| - AstNode* ResolveIdentInCurrentLibraryScope(intptr_t ident_pos,
|
| + AstNode* ResolveIdentInCurrentLibraryScope(TokenPosition ident_pos,
|
| const String& ident);
|
| - AstNode* ResolveIdentInPrefixScope(intptr_t ident_pos,
|
| + AstNode* ResolveIdentInPrefixScope(TokenPosition ident_pos,
|
| const LibraryPrefix& prefix,
|
| const String& ident);
|
|
|
| - AstNode* ResolveIdent(intptr_t ident_pos,
|
| + AstNode* ResolveIdent(TokenPosition ident_pos,
|
| const String& ident,
|
| bool allow_closure_names);
|
| - RawString* ResolveImportVar(intptr_t ident_pos, const String& ident);
|
| - AstNode* OptimizeBinaryOpNode(intptr_t op_pos,
|
| + RawString* ResolveImportVar(TokenPosition ident_pos, const String& ident);
|
| + AstNode* OptimizeBinaryOpNode(TokenPosition op_pos,
|
| Token::Kind binary_op,
|
| AstNode* lhs,
|
| AstNode* rhs);
|
| - AstNode* ExpandAssignableOp(intptr_t op_pos,
|
| + AstNode* ExpandAssignableOp(TokenPosition op_pos,
|
| Token::Kind assignment_op,
|
| AstNode* lhs,
|
| AstNode* rhs);
|
| LetNode* PrepareCompoundAssignmentNodes(AstNode** expr);
|
| - LocalVariable* CreateTempConstVariable(intptr_t token_pos, const char* s);
|
| + LocalVariable* CreateTempConstVariable(TokenPosition token_pos,
|
| + const char* s);
|
|
|
| - static SequenceNode* NodeAsSequenceNode(intptr_t sequence_pos,
|
| + static SequenceNode* NodeAsSequenceNode(TokenPosition sequence_pos,
|
| AstNode* node,
|
| LocalScope* scope);
|
|
|
| @@ -790,10 +799,11 @@ class Parser : public ValueObject {
|
| const String& func_name,
|
| ArgumentListNode* arguments);
|
| String& Interpolate(const GrowableArray<AstNode*>& values);
|
| - AstNode* MakeAssertCall(intptr_t begin, intptr_t end);
|
| - AstNode* ThrowTypeError(intptr_t type_pos, const AbstractType& type,
|
| - LibraryPrefix* prefix = NULL);
|
| - AstNode* ThrowNoSuchMethodError(intptr_t call_pos,
|
| + AstNode* MakeAssertCall(TokenPosition begin, TokenPosition end);
|
| + AstNode* ThrowTypeError(TokenPosition type_pos,
|
| + const AbstractType& type,
|
| + LibraryPrefix* prefix = NULL);
|
| + AstNode* ThrowNoSuchMethodError(TokenPosition call_pos,
|
| const Class& cls,
|
| const String& function_name,
|
| ArgumentListNode* function_arguments,
|
| @@ -807,29 +817,30 @@ class Parser : public ValueObject {
|
| void CheckOperatorArity(const MemberDesc& member);
|
|
|
| void EnsureExpressionTemp();
|
| - bool IsLegalAssignableSyntax(AstNode* expr, intptr_t end_pos);
|
| + bool IsLegalAssignableSyntax(AstNode* expr, TokenPosition end_pos);
|
| AstNode* CreateAssignmentNode(AstNode* original,
|
| AstNode* rhs,
|
| const String* left_ident,
|
| - intptr_t left_pos,
|
| + TokenPosition left_pos,
|
| bool is_compound = false);
|
| AstNode* InsertClosureCallNodes(AstNode* condition);
|
|
|
| ConstructorCallNode* CreateConstructorCallNode(
|
| - intptr_t token_pos,
|
| + TokenPosition token_pos,
|
| const TypeArguments& type_arguments,
|
| const Function& constructor,
|
| ArgumentListNode* arguments);
|
|
|
| void AddEqualityNullCheck();
|
|
|
| - AstNode* BuildClosureCall(intptr_t token_pos,
|
| + AstNode* BuildClosureCall(TokenPosition token_pos,
|
| AstNode* closure,
|
| ArgumentListNode* arguments);
|
|
|
| - RawInstance* TryCanonicalize(const Instance& instance, intptr_t token_pos);
|
| - void CacheConstantValue(intptr_t token_pos, const Instance& value);
|
| - bool GetCachedConstant(intptr_t token_pos, Instance* value);
|
| + RawInstance* TryCanonicalize(const Instance& instance,
|
| + TokenPosition token_pos);
|
| + void CacheConstantValue(TokenPosition token_pos, const Instance& value);
|
| + bool GetCachedConstant(TokenPosition token_pos, Instance* value);
|
|
|
| Thread* thread() const { return thread_; }
|
| Isolate* isolate() const { return isolate_; }
|
| @@ -841,7 +852,7 @@ class Parser : public ValueObject {
|
| Script& script_;
|
| TokenStream::Iterator tokens_iterator_;
|
| Token::Kind token_kind_; // Cached token kind for current token.
|
| - intptr_t prev_token_pos_;
|
| + TokenPosition prev_token_pos_;
|
| Block* current_block_;
|
|
|
| // is_top_level_ is true if parsing the "top level" of a compilation unit,
|
|
|