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

Side by Side Diff: lib/binary/ast_from_binary.dart

Issue 2502343002: Store named parameters in sorted lists instead of using maps. (Closed)
Patch Set: Remove duplicates from named parameter lists to recover from erroneous inputs Created 4 years, 1 month 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 | « lib/ast.dart ('k') | lib/binary/ast_to_binary.dart » ('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) 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 library kernel.ast_from_binary; 4 library kernel.ast_from_binary;
5 5
6 import '../ast.dart'; 6 import '../ast.dart';
7 import 'tag.dart'; 7 import 'tag.dart';
8 import 'loader.dart'; 8 import 'loader.dart';
9 import 'dart:convert'; 9 import 'dart:convert';
10 import 'package:kernel/transformations/flags.dart'; 10 import 'package:kernel/transformations/flags.dart';
(...skipping 798 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 } 809 }
810 810
811 List<Supertype> readSupertypeList() { 811 List<Supertype> readSupertypeList() {
812 return new List<Supertype>.generate(readUInt(), (i) => readSupertype()); 812 return new List<Supertype>.generate(readUInt(), (i) => readSupertype());
813 } 813 }
814 814
815 List<DartType> readDartTypeList() { 815 List<DartType> readDartTypeList() {
816 return new List<DartType>.generate(readUInt(), (i) => readDartType()); 816 return new List<DartType>.generate(readUInt(), (i) => readDartType());
817 } 817 }
818 818
819 List<NamedType> readNamedTypeList() {
820 return new List<NamedType>.generate(readUInt(), (i) => readNamedType());
821 }
822
823 NamedType readNamedType() {
824 return new NamedType(readStringReference(), readDartType());
825 }
826
819 DartType readDartTypeOption() { 827 DartType readDartTypeOption() {
820 return readAndCheckOptionTag() ? readDartType() : null; 828 return readAndCheckOptionTag() ? readDartType() : null;
821 } 829 }
822 830
823 DartType readDartType() { 831 DartType readDartType() {
824 int tag = readByte(); 832 int tag = readByte();
825 switch (tag) { 833 switch (tag) {
826 case Tag.BottomType: 834 case Tag.BottomType:
827 return const BottomType(); 835 return const BottomType();
828 case Tag.InvalidType: 836 case Tag.InvalidType:
829 return const InvalidType(); 837 return const InvalidType();
830 case Tag.DynamicType: 838 case Tag.DynamicType:
831 return const DynamicType(); 839 return const DynamicType();
832 case Tag.VoidType: 840 case Tag.VoidType:
833 return const VoidType(); 841 return const VoidType();
834 case Tag.InterfaceType: 842 case Tag.InterfaceType:
835 return new InterfaceType(readClassReference(), readDartTypeList()); 843 return new InterfaceType(readClassReference(), readDartTypeList());
836 case Tag.SimpleInterfaceType: 844 case Tag.SimpleInterfaceType:
837 return new InterfaceType(readClassReference(), const <DartType>[]); 845 return new InterfaceType(readClassReference(), const <DartType>[]);
838 case Tag.FunctionType: 846 case Tag.FunctionType:
839 int typeParameterStackHeight = typeParameterStack.length; 847 int typeParameterStackHeight = typeParameterStack.length;
840 var typeParameters = readAndPushTypeParameterList(); 848 var typeParameters = readAndPushTypeParameterList();
841 var requiredParameterCount = readUInt(); 849 var requiredParameterCount = readUInt();
842 var positional = readDartTypeList(); 850 var positional = readDartTypeList();
843 int namedParameterCount = readUInt(); 851 var named = readNamedTypeList();
844 var named = <String, DartType>{};
845 for (int i = 0; i < namedParameterCount; ++i) {
846 var name = readStringReference();
847 var type = readDartType();
848 named[name] = type;
849 }
850 var returnType = readDartType(); 852 var returnType = readDartType();
851 typeParameterStack.length = typeParameterStackHeight; 853 typeParameterStack.length = typeParameterStackHeight;
852 return new FunctionType(positional, returnType, 854 return new FunctionType(positional, returnType,
853 typeParameters: typeParameters, 855 typeParameters: typeParameters,
854 requiredParameterCount: requiredParameterCount, 856 requiredParameterCount: requiredParameterCount,
855 namedParameters: named); 857 namedParameters: named);
856 case Tag.SimpleFunctionType: 858 case Tag.SimpleFunctionType:
857 var positional = readDartTypeList(); 859 var positional = readDartTypeList();
858 var returnType = readDartType(); 860 var returnType = readDartType();
859 return new FunctionType(positional, returnType); 861 return new FunctionType(positional, returnType);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 isFinal: flags & 0x1 != 0, 932 isFinal: flags & 0x1 != 0,
931 isConst: flags & 0x2 != 0); 933 isConst: flags & 0x2 != 0);
932 } 934 }
933 935
934 int readOffset() { 936 int readOffset() {
935 // Offset is saved as unsigned, 937 // Offset is saved as unsigned,
936 // but actually ranges from -1 and up (thus the -1) 938 // but actually ranges from -1 and up (thus the -1)
937 return readUInt() - 1; 939 return readUInt() - 1;
938 } 940 }
939 } 941 }
OLDNEW
« no previous file with comments | « lib/ast.dart ('k') | lib/binary/ast_to_binary.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698