| OLD | NEW | 
|---|
| 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 library fasta.outline_builder; | 5 library fasta.outline_builder; | 
| 6 | 6 | 
| 7 import 'package:kernel/ast.dart' show ProcedureKind; | 7 import 'package:kernel/ast.dart' show ProcedureKind; | 
| 8 | 8 | 
| 9 import '../fasta_codes.dart' show FastaMessage, codeExpectedBlockToSkip; | 9 import '../fasta_codes.dart' show FastaMessage, codeExpectedBlockToSkip; | 
| 10 | 10 | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 43   Abstract, | 43   Abstract, | 
| 44   Regular, | 44   Regular, | 
| 45   RedirectingFactoryBody, | 45   RedirectingFactoryBody, | 
| 46 } | 46 } | 
| 47 | 47 | 
| 48 class OutlineBuilder extends UnhandledListener { | 48 class OutlineBuilder extends UnhandledListener { | 
| 49   final SourceLibraryBuilder library; | 49   final SourceLibraryBuilder library; | 
| 50 | 50 | 
| 51   final bool enableNative; | 51   final bool enableNative; | 
| 52 | 52 | 
|  | 53   /// When true, recoverable parser errors are silently ignored. This is | 
|  | 54   /// because they will be reported by the BodyBuilder later. However, typedefs | 
|  | 55   /// are fully compiled by the outline builder, so parser errors are turned on | 
|  | 56   /// when parsing typedefs. | 
|  | 57   bool silenceParserErrors = true; | 
|  | 58 | 
| 53   String nativeMethodName; | 59   String nativeMethodName; | 
| 54 | 60 | 
| 55   OutlineBuilder(SourceLibraryBuilder library) | 61   OutlineBuilder(SourceLibraryBuilder library) | 
| 56       : library = library, | 62       : library = library, | 
| 57         enableNative = library.loader.target.enableNative(library); | 63         enableNative = library.loader.target.enableNative(library); | 
| 58 | 64 | 
| 59   @override | 65   @override | 
| 60   Uri get uri => library.fileUri; | 66   Uri get uri => library.fileUri; | 
| 61 | 67 | 
| 62   @override | 68   @override | 
| (...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 590     String name = pop(); | 596     String name = pop(); | 
| 591     List<MetadataBuilder> metadata = pop(); | 597     List<MetadataBuilder> metadata = pop(); | 
| 592     library.addEnum(metadata, name, constantNamesAndOffsets, charOffset, | 598     library.addEnum(metadata, name, constantNamesAndOffsets, charOffset, | 
| 593         endBrace.charOffset); | 599         endBrace.charOffset); | 
| 594     checkEmpty(enumKeyword.charOffset); | 600     checkEmpty(enumKeyword.charOffset); | 
| 595   } | 601   } | 
| 596 | 602 | 
| 597   @override | 603   @override | 
| 598   void beginFunctionTypeAlias(Token token) { | 604   void beginFunctionTypeAlias(Token token) { | 
| 599     library.beginNestedDeclaration(null, hasMembers: false); | 605     library.beginNestedDeclaration(null, hasMembers: false); | 
|  | 606     silenceParserErrors = false; | 
| 600   } | 607   } | 
| 601 | 608 | 
| 602   @override | 609   @override | 
| 603   void handleFunctionType(Token functionToken, Token endToken) { | 610   void handleFunctionType(Token functionToken, Token endToken) { | 
| 604     debugEvent("FunctionType"); | 611     debugEvent("FunctionType"); | 
| 605     List<FormalParameterBuilder> formals = pop(); | 612     List<FormalParameterBuilder> formals = pop(); | 
| 606     pop(); // formals offset | 613     pop(); // formals offset | 
| 607     List<TypeVariableBuilder> typeVariables = pop(); | 614     List<TypeVariableBuilder> typeVariables = pop(); | 
| 608     TypeBuilder returnType = pop(); | 615     TypeBuilder returnType = pop(); | 
| 609     push(library.addFunctionType( | 616     push(library.addFunctionType( | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 642       } else { | 649       } else { | 
| 643         // TODO(ahe): Improve this error message. | 650         // TODO(ahe): Improve this error message. | 
| 644         library.addCompileTimeError( | 651         library.addCompileTimeError( | 
| 645             equals.charOffset, "Can't create typedef from non-function type."); | 652             equals.charOffset, "Can't create typedef from non-function type."); | 
| 646       } | 653       } | 
| 647     } | 654     } | 
| 648     List<MetadataBuilder> metadata = pop(); | 655     List<MetadataBuilder> metadata = pop(); | 
| 649     library.addFunctionTypeAlias( | 656     library.addFunctionTypeAlias( | 
| 650         metadata, returnType, name, typeVariables, formals, charOffset); | 657         metadata, returnType, name, typeVariables, formals, charOffset); | 
| 651     checkEmpty(typedefKeyword.charOffset); | 658     checkEmpty(typedefKeyword.charOffset); | 
|  | 659     silenceParserErrors = true; | 
| 652   } | 660   } | 
| 653 | 661 | 
| 654   @override | 662   @override | 
| 655   void endTopLevelFields(int count, Token beginToken, Token endToken) { | 663   void endTopLevelFields(int count, Token beginToken, Token endToken) { | 
| 656     debugEvent("endTopLevelFields"); | 664     debugEvent("endTopLevelFields"); | 
| 657     List fieldsInfo = popList(count * 4); | 665     List fieldsInfo = popList(count * 4); | 
| 658     TypeBuilder type = pop(); | 666     TypeBuilder type = pop(); | 
| 659     int modifiers = Modifier.validate(pop()); | 667     int modifiers = Modifier.validate(pop()); | 
| 660     List<MetadataBuilder> metadata = pop(); | 668     List<MetadataBuilder> metadata = pop(); | 
| 661     library.addFields(metadata, modifiers, type, fieldsInfo); | 669     library.addFields(metadata, modifiers, type, fieldsInfo); | 
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 808     push(new Modifier.fromString(token.stringValue)); | 816     push(new Modifier.fromString(token.stringValue)); | 
| 809   } | 817   } | 
| 810 | 818 | 
| 811   @override | 819   @override | 
| 812   void handleModifiers(int count) { | 820   void handleModifiers(int count) { | 
| 813     debugEvent("Modifiers"); | 821     debugEvent("Modifiers"); | 
| 814     push(popList(count) ?? NullValue.Modifiers); | 822     push(popList(count) ?? NullValue.Modifiers); | 
| 815   } | 823   } | 
| 816 | 824 | 
| 817   @override | 825   @override | 
|  | 826   void handleRecoverableError(Token token, FastaMessage message) { | 
|  | 827     if (silenceParserErrors) { | 
|  | 828       debugEvent("RecoverableError"); | 
|  | 829     } else { | 
|  | 830       super.handleRecoverableError(token, message); | 
|  | 831     } | 
|  | 832   } | 
|  | 833 | 
|  | 834   @override | 
| 818   Token handleUnrecoverableError(Token token, FastaMessage message) { | 835   Token handleUnrecoverableError(Token token, FastaMessage message) { | 
| 819     if (enableNative && message.code == codeExpectedBlockToSkip) { | 836     if (enableNative && message.code == codeExpectedBlockToSkip) { | 
| 820       var target = library.loader.target; | 837       var target = library.loader.target; | 
| 821       Token recover = target.skipNativeClause(token); | 838       Token recover = target.skipNativeClause(token); | 
| 822       if (recover != null) { | 839       if (recover != null) { | 
| 823         nativeMethodName = target.extractNativeMethodName(token); | 840         nativeMethodName = target.extractNativeMethodName(token); | 
| 824         return recover; | 841         return recover; | 
| 825       } | 842       } | 
| 826     } | 843     } | 
| 827     return super.handleUnrecoverableError(token, message); | 844     return super.handleUnrecoverableError(token, message); | 
| 828   } | 845   } | 
| 829 | 846 | 
| 830   @override | 847   @override | 
| 831   void addCompileTimeErrorFromMessage(FastaMessage message) { | 848   void addCompileTimeErrorFromMessage(FastaMessage message) { | 
| 832     library.addCompileTimeError(message.charOffset, message.message, | 849     library.addCompileTimeError(message.charOffset, message.message, | 
| 833         fileUri: message.uri); | 850         fileUri: message.uri); | 
| 834   } | 851   } | 
| 835 | 852 | 
| 836   @override | 853   @override | 
| 837   Link<Token> handleMemberName(Link<Token> identifiers) { | 854   Link<Token> handleMemberName(Link<Token> identifiers) { | 
| 838     if (!enableNative || identifiers.isEmpty) return identifiers; | 855     if (!enableNative || identifiers.isEmpty) return identifiers; | 
| 839     return removeNativeClause(identifiers); | 856     return removeNativeClause(identifiers); | 
| 840   } | 857   } | 
| 841 | 858 | 
| 842   @override | 859   @override | 
| 843   void debugEvent(String name) { | 860   void debugEvent(String name) { | 
| 844     // printEvent(name); | 861     // printEvent(name); | 
| 845   } | 862   } | 
| 846 } | 863 } | 
| OLD | NEW | 
|---|