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

Side by Side Diff: lib/generated_message.dart

Issue 25634007: Update the protocol buffer library to use Int64 from the fixnum package (Closed) Base URL: https://github.com/dart-lang/dart-protobuf.git@master
Patch Set: Minor fixes Created 7 years, 2 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 | « lib/coded_buffer_writer.dart ('k') | lib/pb_list.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) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 part of protobuf; 5 part of protobuf;
6 6
7 typedef GeneratedMessage CreateBuilderFunc(); 7 typedef GeneratedMessage CreateBuilderFunc();
8 typedef Object MakeDefaultFunc(); 8 typedef Object MakeDefaultFunc();
9 typedef ProtobufEnum ValueOfFunc(int value); 9 typedef ProtobufEnum ValueOfFunc(int value);
10 10
11 _inRange(min, value, max) => (min <= value) && (value <= max); 11 _inRange(min, value, max) => (min <= value) && (value <= max);
12 12
13 _isSigned32(int value) => _inRange(-2147483648, value, 2147483647); 13 _isSigned32(int value) => _inRange(-2147483648, value, 2147483647);
14 _isUnsigned32(int value) => _inRange(0, value, 4294967295); 14 _isUnsigned32(int value) => _inRange(0, value, 4294967295);
15 _isSigned64(ByteData value) => _isUnsigned64(value); 15 _isSigned64(Int64 value) => _isUnsigned64(value);
16 _isUnsigned64(ByteData value) => value is ByteData && value.lengthInBytes == 8; 16 _isUnsigned64(Int64 value) => value is Int64;
17 _isFloat32(double value) => value.isNaN || value.isInfinite || 17 _isFloat32(double value) => value.isNaN || value.isInfinite ||
18 _inRange(-3.4028234663852886E38, value, 3.4028234663852886E38); 18 _inRange(-3.4028234663852886E38, value, 3.4028234663852886E38);
19 19
20 class GeneratedMessage { 20 class GeneratedMessage {
21 static const int _REQUIRED_BIT = 0x1; 21 static const int _REQUIRED_BIT = 0x1;
22 static const int _REPEATED_BIT = 0x2; 22 static const int _REPEATED_BIT = 0x2;
23 static const int _PACKED_BIT = 0x4; 23 static const int _PACKED_BIT = 0x4;
24 24
25 static const int _BOOL_BIT = 0x10; 25 static const int _BOOL_BIT = 0x10;
26 static const int _BYTES_BIT = 0x20; 26 static const int _BYTES_BIT = 0x20;
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 static const int K6 = _PACKED_INT64; 186 static const int K6 = _PACKED_INT64;
187 static const int KS3 = _PACKED_SINT32; 187 static const int KS3 = _PACKED_SINT32;
188 static const int KS6 = _PACKED_SINT64; 188 static const int KS6 = _PACKED_SINT64;
189 static const int KU3 = _PACKED_UINT32; 189 static const int KU3 = _PACKED_UINT32;
190 static const int KU6 = _PACKED_UINT64; 190 static const int KU6 = _PACKED_UINT64;
191 static const int KF3 = _PACKED_FIXED32; 191 static const int KF3 = _PACKED_FIXED32;
192 static const int KF6 = _PACKED_FIXED64; 192 static const int KF6 = _PACKED_FIXED64;
193 static const int KSF3 = _PACKED_SFIXED32; 193 static const int KSF3 = _PACKED_SFIXED32;
194 static const int KSF6 = _PACKED_SFIXED64; 194 static const int KSF6 = _PACKED_SFIXED64;
195 195
196 // Range of integers in JSON (53-bit integers).
197 static Int64 MAX_JSON_INT = new Int64.fromInts(0x200000, 0);
198 static Int64 MIN_JSON_INT = -MAX_JSON_INT;
199
196 // Closures commonly used by initializers. 200 // Closures commonly used by initializers.
197 static String _STRING_EMPTY() => ''; 201 static String _STRING_EMPTY() => '';
198 static List<int> _BYTES_EMPTY() => new PbList<int>(); 202 static List<int> _BYTES_EMPTY() => new PbList<int>();
199 static bool _BOOL_FALSE() => false; 203 static bool _BOOL_FALSE() => false;
200 static int _INT_ZERO() => 0; 204 static int _INT_ZERO() => 0;
201 static double _DOUBLE_ZERO() => 0.0; 205 static double _DOUBLE_ZERO() => 0.0;
202 206
203 static MakeDefaultFunc _defaultForType(int type) { 207 static MakeDefaultFunc _defaultForType(int type) {
204 switch (type) { 208 switch (type) {
205 case _OPTIONAL_BOOL: case _REQUIRED_BOOL: 209 case _OPTIONAL_BOOL: case _REQUIRED_BOOL:
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 case _BYTES_BIT: 618 case _BYTES_BIT:
615 // Encode 'bytes' as a base64-encoded string. 619 // Encode 'bytes' as a base64-encoded string.
616 return CryptoUtils.bytesToBase64(fieldValue); 620 return CryptoUtils.bytesToBase64(fieldValue);
617 case _ENUM_BIT: 621 case _ENUM_BIT:
618 return fieldValue.value; // assume |value| < 2^52 622 return fieldValue.value; // assume |value| < 2^52
619 case _INT64_BIT: 623 case _INT64_BIT:
620 case _SINT64_BIT: 624 case _SINT64_BIT:
621 case _UINT64_BIT: 625 case _UINT64_BIT:
622 case _FIXED64_BIT: 626 case _FIXED64_BIT:
623 case _SFIXED64_BIT: 627 case _SFIXED64_BIT:
624 // TODO(antonm): fix for longs. 628 // Use strings for 64-bit integers which cannot fit in doubles.
625 final asInt = scalarType == _UINT64_BIT ? 629 if (MIN_JSON_INT <= fieldValue && fieldValue <= MAX_JSON_INT) {
626 fieldValue.getUint64(0, Endianness.LITTLE_ENDIAN) : 630 return fieldValue.toInt();
627 fieldValue.getInt64(0, Endianness.LITTLE_ENDIAN); 631 } else {
628 return "$asInt"; 632 return fieldValue.toString();
633 }
629 case _GROUP_BIT: 634 case _GROUP_BIT:
630 case _MESSAGE_BIT: 635 case _MESSAGE_BIT:
631 return fieldValue._toMap(); 636 return fieldValue._toMap();
632 default: 637 default:
633 throw 'Unknown type $fieldType'; 638 throw 'Unknown type $fieldType';
634 } 639 }
635 } 640 }
636 641
637 var result = <String, dynamic>{}; 642 var result = <String, dynamic>{};
638 for (int tagNumber in sorted(_fieldValues.keys)) { 643 for (int tagNumber in sorted(_fieldValues.keys)) {
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 } 735 }
731 expectedType = 'int or stringified int'; 736 expectedType = 'int or stringified int';
732 break; 737 break;
733 case _INT64_BIT: 738 case _INT64_BIT:
734 case _SINT64_BIT: 739 case _SINT64_BIT:
735 case _UINT64_BIT: 740 case _UINT64_BIT:
736 case _FIXED64_BIT: 741 case _FIXED64_BIT:
737 case _SFIXED64_BIT: 742 case _SFIXED64_BIT:
738 // Allow quoted values, although we don't emit them. 743 // Allow quoted values, although we don't emit them.
739 if (value is String) { 744 if (value is String) {
740 value = int.parse(value); 745 return Int64.parseRadix(value, 10);
741 } 746 }
742 if (value is int) { 747 if (value is int) {
743 const lowPart = ((1 << 31) * 2); // 2^32 which works in dart2js. 748 return new Int64.fromInt(value);
744 return new ByteData(8)
745 ..setUint32(0, value % lowPart, Endianness.LITTLE_ENDIAN)
746 ..setUint32(4, value ~/ lowPart, Endianness.LITTLE_ENDIAN);
747 } 749 }
748 expectedType = 'int or stringified int'; 750 expectedType = 'int or stringified int';
749 break; 751 break;
750 case _GROUP_BIT: 752 case _GROUP_BIT:
751 case _MESSAGE_BIT: 753 case _MESSAGE_BIT:
752 if (value is Map<String, Object>) { 754 if (value is Map<String, Object>) {
753 GeneratedMessage subMessage = 755 GeneratedMessage subMessage =
754 _getEmptyMessage(tagNumber, extensionRegistry); 756 _getEmptyMessage(tagNumber, extensionRegistry);
755 subMessage._mergeFromJson(value, extensionRegistry); 757 subMessage._mergeFromJson(value, extensionRegistry);
756 return subMessage; 758 return subMessage;
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 if (value is !int) { 1080 if (value is !int) {
1079 throw new ArgumentError( 1081 throw new ArgumentError(
1080 _generateMessage(tagNumber, value, 'not type int')); 1082 _generateMessage(tagNumber, value, 'not type int'));
1081 } 1083 }
1082 if (!_isSigned32(value)) { 1084 if (!_isSigned32(value)) {
1083 throw new ArgumentError(_generateMessage(tagNumber, value, 1085 throw new ArgumentError(_generateMessage(tagNumber, value,
1084 'out of range for int32')); 1086 'out of range for int32'));
1085 } 1087 }
1086 break; 1088 break;
1087 case _INT64_BIT: 1089 case _INT64_BIT:
1088 if (value is !ByteData) { 1090 if (value is !Int64) {
1089 throw new ArgumentError( 1091 throw new ArgumentError(
1090 _generateMessage(tagNumber, value, 'not ByteData')); 1092 _generateMessage(tagNumber, value, 'not Int64'));
1091 } 1093 }
1092 if (!_isSigned64(value)) { 1094 if (!_isSigned64(value)) {
1093 throw new ArgumentError(_generateMessage(tagNumber, value, 1095 throw new ArgumentError(_generateMessage(tagNumber, value,
1094 'out of range for int64')); 1096 'out of range for int64'));
1095 } 1097 }
1096 break; 1098 break;
1097 case _SINT32_BIT: 1099 case _SINT32_BIT:
1098 if (value is !int) { 1100 if (value is !int) {
1099 throw new ArgumentError( 1101 throw new ArgumentError(
1100 _generateMessage(tagNumber, value, 'not type int')); 1102 _generateMessage(tagNumber, value, 'not type int'));
1101 } 1103 }
1102 if (!_isSigned32(value)) { 1104 if (!_isSigned32(value)) {
1103 throw new ArgumentError(_generateMessage(tagNumber, value, 1105 throw new ArgumentError(_generateMessage(tagNumber, value,
1104 'out of range for sint32')); 1106 'out of range for sint32'));
1105 } 1107 }
1106 break; 1108 break;
1107 case _SINT64_BIT: 1109 case _SINT64_BIT:
1108 if (value is !ByteData) { 1110 if (value is !Int64) {
1109 throw new ArgumentError( 1111 throw new ArgumentError(
1110 _generateMessage(tagNumber, value, 'not ByteData')); 1112 _generateMessage(tagNumber, value, 'not Int64'));
1111 } 1113 }
1112 if (!_isSigned64(value)) { 1114 if (!_isSigned64(value)) {
1113 throw new ArgumentError(_generateMessage(tagNumber, value, 1115 throw new ArgumentError(_generateMessage(tagNumber, value,
1114 'out of range for sint64')); 1116 'out of range for sint64'));
1115 } 1117 }
1116 break; 1118 break;
1117 case _UINT32_BIT: 1119 case _UINT32_BIT:
1118 if (value is !int) { 1120 if (value is !int) {
1119 throw new ArgumentError( 1121 throw new ArgumentError(
1120 _generateMessage(tagNumber, value, 'not type int')); 1122 _generateMessage(tagNumber, value, 'not type int'));
1121 } 1123 }
1122 if (!_isUnsigned32(value)) { 1124 if (!_isUnsigned32(value)) {
1123 throw new ArgumentError(_generateMessage(tagNumber, value, 1125 throw new ArgumentError(_generateMessage(tagNumber, value,
1124 'out of range for uint32')); 1126 'out of range for uint32'));
1125 } 1127 }
1126 break; 1128 break;
1127 case _UINT64_BIT: 1129 case _UINT64_BIT:
1128 if (value is !ByteData) { 1130 if (value is !Int64) {
1129 throw new ArgumentError( 1131 throw new ArgumentError(
1130 _generateMessage(tagNumber, value, 'not ByteData')); 1132 _generateMessage(tagNumber, value, 'not Int64'));
1131 } 1133 }
1132 if (!_isUnsigned64(value)) { 1134 if (!_isUnsigned64(value)) {
1133 throw new ArgumentError(_generateMessage(tagNumber, value, 1135 throw new ArgumentError(_generateMessage(tagNumber, value,
1134 'out of range for uint64')); 1136 'out of range for uint64'));
1135 } 1137 }
1136 break; 1138 break;
1137 case _FIXED32_BIT: 1139 case _FIXED32_BIT:
1138 if (value is !int) { 1140 if (value is !int) {
1139 throw new ArgumentError( 1141 throw new ArgumentError(
1140 _generateMessage(tagNumber, value, 'not type int')); 1142 _generateMessage(tagNumber, value, 'not type int'));
1141 } 1143 }
1142 if (!_isUnsigned32(value)) { 1144 if (!_isUnsigned32(value)) {
1143 throw new ArgumentError(_generateMessage(tagNumber, value, 1145 throw new ArgumentError(_generateMessage(tagNumber, value,
1144 'out of range for fixed32')); 1146 'out of range for fixed32'));
1145 } 1147 }
1146 break; 1148 break;
1147 case _FIXED64_BIT: 1149 case _FIXED64_BIT:
1148 if (value is !ByteData) { 1150 if (value is !Int64) {
1149 throw new ArgumentError( 1151 throw new ArgumentError(
1150 _generateMessage(tagNumber, value, 'not ByteData')); 1152 _generateMessage(tagNumber, value, 'not Int64'));
1151 } 1153 }
1152 if (!_isUnsigned64(value)) { 1154 if (!_isUnsigned64(value)) {
1153 throw new ArgumentError(_generateMessage(tagNumber, value, 1155 throw new ArgumentError(_generateMessage(tagNumber, value,
1154 'out of range for fixed64')); 1156 'out of range for fixed64'));
1155 } 1157 }
1156 break; 1158 break;
1157 case _SFIXED32_BIT: 1159 case _SFIXED32_BIT:
1158 if (value is !int) { 1160 if (value is !int) {
1159 throw new ArgumentError( 1161 throw new ArgumentError(
1160 _generateMessage(tagNumber, value, 'not type int')); 1162 _generateMessage(tagNumber, value, 'not type int'));
1161 } 1163 }
1162 if (!_isSigned32(value)) { 1164 if (!_isSigned32(value)) {
1163 throw new ArgumentError(_generateMessage(tagNumber, value, 1165 throw new ArgumentError(_generateMessage(tagNumber, value,
1164 'out of range for sfixed32')); 1166 'out of range for sfixed32'));
1165 } 1167 }
1166 break; 1168 break;
1167 case _SFIXED64_BIT: 1169 case _SFIXED64_BIT:
1168 if (value is !ByteData) { 1170 if (value is !Int64) {
1169 throw new ArgumentError( 1171 throw new ArgumentError(
1170 _generateMessage(tagNumber, value, 'not ByteData')); 1172 _generateMessage(tagNumber, value, 'not Int64'));
1171 } 1173 }
1172 if (!_isSigned64(value)) { 1174 if (!_isSigned64(value)) {
1173 throw new ArgumentError(_generateMessage(tagNumber, value, 1175 throw new ArgumentError(_generateMessage(tagNumber, value,
1174 'out of range for sfixed64')); 1176 'out of range for sfixed64'));
1175 } 1177 }
1176 break; 1178 break;
1177 case _GROUP_BIT: 1179 case _GROUP_BIT:
1178 case _MESSAGE_BIT: 1180 case _MESSAGE_BIT:
1179 if (value is !GeneratedMessage) { 1181 if (value is !GeneratedMessage) {
1180 throw new ArgumentError( 1182 throw new ArgumentError(
1181 _generateMessage(tagNumber, value, 'not a GeneratedMessage')); 1183 _generateMessage(tagNumber, value, 'not a GeneratedMessage'));
1182 } 1184 }
1183 break; 1185 break;
1184 default: 1186 default:
1185 throw new ArgumentError( 1187 throw new ArgumentError(
1186 _generateMessage(tagNumber, value, 'field has unknown type ' 1188 _generateMessage(tagNumber, value, 'field has unknown type '
1187 '$fieldType')); 1189 '$fieldType'));
1188 } 1190 }
1189 } 1191 }
1190 } 1192 }
OLDNEW
« no previous file with comments | « lib/coded_buffer_writer.dart ('k') | lib/pb_list.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698