diff --git a/src/Lean/PrettyPrinter/Delaborator/Builtins.lean b/src/Lean/PrettyPrinter/Delaborator/Builtins.lean index ad442a1512..195b34b73a 100644 --- a/src/Lean/PrettyPrinter/Delaborator/Builtins.lean +++ b/src/Lean/PrettyPrinter/Delaborator/Builtins.lean @@ -248,20 +248,22 @@ def unexpandStructureInstance (stx : Syntax) : Delab := whenPPOption getPPStruct guard $ fieldNames.size == stx[1].getNumArgs let args := e.getAppArgs let fieldVals := args.extract s.numParams args.size - for idx in [:fieldNames.size] do - let fieldName := fieldNames.get! idx + let fieldName := fieldNames[idx] let fieldId := mkIdent fieldName let fieldPos ← nextExtraPos let fieldId := annotatePos fieldPos fieldId addFieldInfo fieldPos (s.induct ++ fieldName) fieldName fieldId fieldVals[idx] let field ← `(structInstField|$fieldId:ident := $(stx[1][idx]):term) fields := fields.push field - let lastField := fields.back - fields := fields.pop let tyStx ← withType do if (← getPPOption getPPStructureInstanceType) then delab >>= pure ∘ some else pure none - `({ $[$fields, ]* $lastField $[: $tyStx]? }) + if fields.isEmpty then + `({ $[: $tyStx]? }) + else + let lastField := fields.back + fields := fields.pop + `({ $[$fields, ]* $lastField $[: $tyStx]? }) @[builtinDelab app] def delabAppImplicit : Delab := do diff --git a/tests/lean/653.lean b/tests/lean/653.lean new file mode 100644 index 0000000000..da3249b7fe --- /dev/null +++ b/tests/lean/653.lean @@ -0,0 +1,4 @@ +structure Color + (red : Nat) (green : Nat) (blue : Nat) + +def yellow := Color.mk 255 255 0 diff --git a/tests/lean/653.lean.expected.out b/tests/lean/653.lean.expected.out new file mode 100644 index 0000000000..3bb31809f7 --- /dev/null +++ b/tests/lean/653.lean.expected.out @@ -0,0 +1,4 @@ +653.lean:4:14-4:32: error: function expected at + { } +term has type + Color ?m ?m ?m