Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 16 additions & 25 deletions protoc/lisp/enum_field.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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))))))");
Expand All @@ -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))))))");
}
Expand All @@ -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(
Expand Down