diff --git a/protoc/lisp/enum_field.cc b/protoc/lisp/enum_field.cc index aa1e413..f2f1dc6 100644 --- a/protoc/lisp/enum_field.cc +++ b/protoc/lisp/enum_field.cc @@ -168,7 +168,7 @@ void RepeatedEnumFieldGenerator::GenerateOctetSize(io::Printer* printer) variables_, "(cl:let* ((x (cl:slot-value self '$name$))\n" " (length (cl:length x)))\n" - " (cl:incf size (cl:* $tag_size$ length))\n" + " (cl:incf size (cl:* $tag_size$ 2))\n" " (cl:dotimes (i length)\n" " (cl:incf size" " (varint:length32 (cl:ldb (cl:byte 32 0) (cl:aref x i))))))"); @@ -184,9 +184,10 @@ void RepeatedEnumFieldGenerator::GenerateSerializeWithCachedSizes( variables_, "(cl:let* ((v (cl:slot-value self '$name$))\n" " (length (cl:length v)))\n" - " (cl:loop for i from 0 below length do\n" - " (cl:setf index" + " (cl:setf index" " (varint:encode-uint32-carefully buffer index limit $tag$))\n" + " (cl:setf index (varint:encode-uint32-carefully buffer index limit length))\n" + " (cl:loop for i from 0 below length do\n" " (cl:setf index (varint:encode-uint64-carefully buffer index limit\n" " (cl:ldb (cl:byte 64 0) (cl:aref v i))))))"); } @@ -197,28 +198,18 @@ void RepeatedEnumFieldGenerator::GenerateSerializeWithCachedSizes( void RepeatedEnumFieldGenerator::GenerateMergeFromArray( io::Printer* printer) const { - if (!descriptor_->options().packed()) { - printer->Print( - variables_, - "(cl:multiple-value-bind (value new-index)\n" - " (varint:parse-int32-carefully buffer index limit)\n" - " ;; XXXXX: when valid, set field, else add to unknown fields\n" - " (cl:vector-push-extend value (cl:slot-value self '$name$))\n" - " (cl:setf index new-index))"); - } else { - printer->Print( - variables_, - "(cl:multiple-value-bind (length new-index)\n" - " (varint:parse-uint32-carefully buffer index limit)\n" - " (cl:setf index new-index)\n" - " (cl:let ((end (cl:+ index length)))\n" - " (cl:loop while (cl:< index end) do\n" - " (cl:multiple-value-bind (value new-index)\n" - " (varint:parse-int32-carefully buffer index limit)\n" - " ;; XXXXX: when valid, set field, else add to unknown fields\n" - " (cl:vector-push-extend value (cl:slot-value self '$name$))\n" - " (cl:setf index new-index)))))"); - } + printer->Print( + variables_, + "(cl:multiple-value-bind (length new-index)\n" + " (varint:parse-uint32-carefully buffer index limit)\n" + " (cl:setf index new-index)\n" + " (cl:let ((end (cl:+ index length)))\n" + " (cl:loop while (cl:< index end) do\n" + " (cl:multiple-value-bind (value new-index)\n" + " (varint:parse-int32-carefully buffer index limit)\n" + " ;; XXXXX: when valid, set field, else add to unknown fields\n" + " (cl:vector-push-extend value (cl:slot-value self '$name$))\n" + " (cl:setf index new-index)))))"); } void RepeatedEnumFieldGenerator::GenerateMergingCode(