aboutsummaryrefslogtreecommitdiff
path: root/src/google/protobuf/compiler/csharp/csharp_enum_field.cc
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2015-06-11 21:15:36 +0100
committerJon Skeet <skeet@pobox.com>2015-06-11 21:15:36 +0100
commit39aaf21d5194fdc07c296847def8e7795279e041 (patch)
tree174c362717574e13047c4d590b5f9609405aed84 /src/google/protobuf/compiler/csharp/csharp_enum_field.cc
parentce0e348ded9cb7e180588476ebb5a8f3e0460f4e (diff)
downloadprotobuf-39aaf21d5194fdc07c296847def8e7795279e041.tar.gz
protobuf-39aaf21d5194fdc07c296847def8e7795279e041.tar.bz2
protobuf-39aaf21d5194fdc07c296847def8e7795279e041.zip
Reimplement enums as int values, and get rid of EnumHelper.
This makes repeated fields really awkward at the moment - but when we reimplement RepeatedField<T> to be backed by an array, we can cast the array directly...
Diffstat (limited to 'src/google/protobuf/compiler/csharp/csharp_enum_field.cc')
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_enum_field.cc15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/google/protobuf/compiler/csharp/csharp_enum_field.cc b/src/google/protobuf/compiler/csharp/csharp_enum_field.cc
index ee9d6a1d..3494b228 100644
--- a/src/google/protobuf/compiler/csharp/csharp_enum_field.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_enum_field.cc
@@ -54,14 +54,17 @@ EnumFieldGenerator::~EnumFieldGenerator() {
}
void EnumFieldGenerator::GenerateParsingCode(io::Printer* printer) {
+ // TODO(jonskeet): Get rid of the temporary variable when we sanitize CodedInputStream not to use ref.
printer->Print(variables_,
- "input.ReadEnum(ref $name$_);\n");
+ "int tmp = 0;\n"
+ "input.ReadEnum(ref tmp);\n"
+ "$name$_ = ($type_name$) tmp;");
}
void EnumFieldGenerator::GenerateSerializationCode(io::Printer* printer) {
printer->Print(variables_,
"if ($has_property_check$) {\n"
- " output.WriteEnum($number$, fieldNames[$field_ordinal$], $property_name$);\n"
+ " output.WriteEnum($number$, fieldNames[$field_ordinal$], (int) $property_name$);\n"
"}\n");
}
@@ -69,7 +72,7 @@ void EnumFieldGenerator::GenerateSerializedSizeCode(io::Printer* printer) {
printer->Print(
variables_,
"if ($has_property_check$) {\n"
- " size += pb::CodedOutputStream.ComputeEnumSize($number$, $property_name$);\n"
+ " size += pb::CodedOutputStream.ComputeEnumSize($number$, (int) $property_name$);\n"
"}\n");
}
@@ -85,7 +88,7 @@ void EnumOneofFieldGenerator::GenerateParsingCode(io::Printer* printer) {
// TODO(jonskeet): What about if we read the default value?
printer->Print(
variables_,
- "$type_name$ enumValue = $default_value$;\n"
+ "int enumValue = 0;\n"
"if(input.ReadEnum(ref enumValue)) {\n"
" $oneof_name$_ = enumValue;\n"
" $oneof_name$Case_ = $oneof_property_name$OneofCase.$property_name$;\n"
@@ -96,7 +99,7 @@ void EnumOneofFieldGenerator::GenerateSerializationCode(io::Printer* printer) {
printer->Print(
variables_,
"if ($has_property_check$) {\n"
- " output.WriteEnum($number$, fieldNames[$field_ordinal$], (long) $property_name$, $property_name$);\n"
+ " output.WriteEnum($number$, fieldNames[$field_ordinal$], (int) $property_name$);\n"
"}\n");
}
@@ -104,7 +107,7 @@ void EnumOneofFieldGenerator::GenerateSerializedSizeCode(io::Printer* printer) {
printer->Print(
variables_,
"if ($has_property_check$) {\n"
- " size += pb::CodedOutputStream.ComputeEnumSize($number$, (long) $property_name$);\n"
+ " size += pb::CodedOutputStream.ComputeEnumSize($number$, (int) $property_name$);\n"
"}\n");
}