Clean up more wuffs-c output (before clang-format)
diff --git a/internal/cgen/cgen.go b/internal/cgen/cgen.go
index b97a3e9..6d4616a 100644
--- a/internal/cgen/cgen.go
+++ b/internal/cgen/cgen.go
@@ -142,9 +142,12 @@
"// !! INSERT base/pixconv-submodule.c.\n": insertBasePixConvSubmoduleC,
"// !! INSERT base/strconv-impl.c.\n": insertBaseStrConvImplC,
"// !! INSERT vtable names.\n": func(b *buffer) error {
- for _, n := range builtin.Interfaces {
+ for i, n := range builtin.Interfaces {
+ if i > 0 {
+ buf.writeb('\n')
+ }
buf.printf("const char* wuffs_base__%s__vtable_name = "+
- "\"{vtable}wuffs_base__%s\";\n\n", n, n)
+ "\"{vtable}wuffs_base__%s\";\n", n, n)
}
return nil
@@ -306,15 +309,17 @@
buf.writes(baseImagePrivateH)
buf.writeb('\n')
buf.writes(baseStrConvPrivateH)
- buf.writeb('\n')
return nil
}
func insertBaseAllPublicH(buf *buffer) error {
if err := expandBangBangInsert(buf, baseFundamentalPublicH, map[string]func(*buffer) error{
"// !! INSERT FourCCs.\n": func(b *buffer) error {
- for _, z := range builtin.FourCCs {
- b.printf("// %s.\n#define WUFFS_BASE__FOURCC__%s 0x%02X%02X%02X%02X\n\n",
+ for i, z := range builtin.FourCCs {
+ if i != 0 {
+ b.writeb('\n')
+ }
+ b.printf("// %s.\n#define WUFFS_BASE__FOURCC__%s 0x%02X%02X%02X%02X\n",
z[1],
strings.ToUpper(strings.TrimSpace(z[0])),
z[0][0],
@@ -357,31 +362,26 @@
buf.writes(baseImagePublicH)
buf.writeb('\n')
buf.writes(baseStrConvPublicH)
- buf.writeb('\n')
return nil
}
func insertBaseCopyright(buf *buffer) error {
buf.writes(baseCopyright)
- buf.writeb('\n')
return nil
}
func insertBaseF64ConvSubmoduleC(buf *buffer) error {
buf.writes(baseF64ConvSubmoduleC)
- buf.writeb('\n')
return nil
}
func insertBasePixConvSubmoduleC(buf *buffer) error {
buf.writes(basePixConvSubmoduleC)
- buf.writeb('\n')
return nil
}
func insertBaseStrConvImplC(buf *buffer) error {
buf.writes(baseStrConvImplC)
- buf.writeb('\n')
return nil
}
@@ -400,17 +400,18 @@
buf.writes("// For modular builds that divide the base module into sub-modules, using these\n")
buf.writes("// functions require the WUFFS_CONFIG__MODULE__BASE__INTERFACES sub-module, not\n")
- buf.writes("// just WUFFS_CONFIG__MODULE__BASE__CORE.\n\n")
+ buf.writes("// just WUFFS_CONFIG__MODULE__BASE__CORE.\n")
for _, n := range builtin.Interfaces {
- buf.writes("// --------\n\n")
+ buf.writes("\n// --------\n\n")
qid := t.QID{t.IDBase, builtInTokenMap.ByName(n)}
buf.printf("extern const char* wuffs_base__%s__vtable_name;\n\n", n)
- buf.writes("typedef struct {\n\n")
+ buf.writes("typedef struct {\n")
for _, f := range builtInInterfaceMethods[qid] {
+ buf.writes(" ")
if err := g.writeFuncSignature(buf, f, wfsCFuncPtrField); err != nil {
return err
}
@@ -429,37 +430,41 @@
buf.writes("#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)\n\n")
- buf.printf("struct wuffs_base__%s__struct {", n)
- buf.writes("struct {\n")
- buf.writes("uint32_t magic;\n")
- buf.writes("uint32_t active_coroutine;\n")
- buf.writes("wuffs_base__vtable first_vtable;\n")
- buf.writes("} private_impl;\n\n")
+ buf.printf("struct wuffs_base__%s__struct {\n", n)
+ buf.writes(" struct {\n")
+ buf.writes(" uint32_t magic;\n")
+ buf.writes(" uint32_t active_coroutine;\n")
+ buf.writes(" wuffs_base__vtable first_vtable;\n")
+ buf.writes(" } private_impl;\n\n")
- buf.writes("\n#ifdef __cplusplus\n")
+ buf.writes("#ifdef __cplusplus\n")
buf.writes("#if __cplusplus >= 201103L\n")
- buf.printf("using unique_ptr = std::unique_ptr<wuffs_base__%s, decltype(&free)>;\n", n)
+ buf.printf(" using unique_ptr = std::unique_ptr<wuffs_base__%s, decltype(&free)>;\n", n)
buf.writes("#endif\n\n")
for _, f := range builtInInterfaceMethods[qid] {
if err := g.writeFuncSignature(buf, f, wfsCppDecl); err != nil {
return err
}
- buf.writes("{ return ")
+ buf.writes(" {\n return ")
buf.writes(g.funcCName(f))
- buf.writes("(this")
- for _, o := range f.In().Fields() {
- buf.writeb(',')
- buf.writes(aPrefix)
- buf.writes(o.AsField().Name().Str(g.tm))
+ if len(f.In().Fields()) == 0 {
+ buf.writes("(this")
+ } else {
+ buf.writes("(\n this")
+ for _, o := range f.In().Fields() {
+ buf.writes(", ")
+ buf.writes(aPrefix)
+ buf.writes(o.AsField().Name().Str(g.tm))
+ }
}
- buf.writes(");}\n\n")
+ buf.writes(");\n }\n\n")
}
buf.writes("#endif // __cplusplus\n\n")
buf.printf("}; // struct wuffs_base__%s__struct\n\n", n)
- buf.writes("#endif // defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)\n\n")
+ buf.writes("#endif // defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)\n")
}
return nil
}
@@ -475,10 +480,10 @@
tm: &builtInTokenMap,
}
- buf.writes("// ---------------- Interface Definitions.\n\n")
+ buf.writes("// ---------------- Interface Definitions.\n")
for i, n := range builtin.Interfaces {
if i > 0 {
- buf.writes("// --------\n\n")
+ buf.writes("// --------\n")
}
qid := t.QID{t.IDBase, builtInTokenMap.ByName(n)}
@@ -487,40 +492,44 @@
returnsStatus := f.Effect().Coroutine() ||
((f.Out() != nil) && f.Out().IsStatus())
+ buf.writeb('\n')
if err := g.writeFuncSignature(buf, f, wfsCDecl); err != nil {
return err
}
- buf.writes("{\n")
+ buf.writes(" {\n ")
if err := writeFuncImplSelfMagicCheck(buf, g.tm, f); err != nil {
return err
}
- buf.writes("\nconst wuffs_base__vtable* v = &self->private_impl.first_vtable;\n")
- buf.writes("int i;\n")
- buf.printf("for (i = 0; i < %d; i++) {\n", a.MaxImplements)
- buf.printf("if (v->vtable_name == wuffs_base__%s__vtable_name) {\n", n)
- buf.printf("const wuffs_base__%s__func_ptrs* func_ptrs = "+
- "(const wuffs_base__%s__func_ptrs*)(v->function_pointers);\n", n, n)
- buf.printf("return (*func_ptrs->%s)(self", f.FuncName().Str(g.tm))
+ buf.writes("\n const wuffs_base__vtable* v = &self->private_impl.first_vtable;\n")
+ buf.writes(" int i;\n")
+ buf.printf(" for (i = 0; i < %d; i++) {\n", a.MaxImplements)
+ buf.printf(" if (v->vtable_name == wuffs_base__%s__vtable_name) {\n", n)
+ buf.printf(" const wuffs_base__%s__func_ptrs* func_ptrs =\n"+
+ " (const wuffs_base__%s__func_ptrs*)(v->function_pointers);\n", n, n)
+ buf.printf(" return (*func_ptrs->%s)(self", f.FuncName().Str(g.tm))
for _, o := range f.In().Fields() {
- buf.writeb(',')
+ buf.writes(", ")
buf.writes(aPrefix)
buf.writes(o.AsField().Name().Str(g.tm))
}
buf.writes(");\n")
- buf.writes("} else if (v->vtable_name == NULL) {\n")
- buf.writes("break;\n")
- buf.writes("}\n")
- buf.writes("v++;\n")
- buf.writes("}\n\n")
+ buf.writes(" } else if (v->vtable_name == NULL) {\n")
+ buf.writes(" break;\n")
+ buf.writes(" }\n")
+ buf.writes(" v++;\n")
+ buf.writes(" }\n\n")
- buf.writes("return ")
+ buf.writes(" return ")
if returnsStatus {
buf.writes("wuffs_base__make_status(wuffs_base__error__bad_vtable)")
} else if err := writeOutParamZeroValue(buf, g.tm, f.Out()); err != nil {
return err
}
- buf.writes(";\n}\n\n")
+ buf.writes(";\n}\n")
+ }
+ if (i + 1) < len(builtin.Interfaces) {
+ buf.writeb('\n')
}
}
@@ -1242,7 +1251,7 @@
if err := g.writeFuncSignature(b, f, wfsCppDecl); err != nil {
return err
}
- b.writes("{ return ")
+ b.writes("{\n return ")
b.writes(g.funcCName(f))
b.writes("(this")
for _, o := range f.In().Fields() {
@@ -1250,7 +1259,7 @@
b.writes(aPrefix)
b.writes(o.AsField().Name().Str(g.tm))
}
- b.writes(");}\n\n")
+ b.writes(");\n }\n\n")
}
}
diff --git a/internal/cgen/data.go b/internal/cgen/data.go
index b841f1c..673bcee 100644
--- a/internal/cgen/data.go
+++ b/internal/cgen/data.go
@@ -470,5 +470,5 @@
""
const baseCopyright = "" +
- "// Copyright 2017 The Wuffs Authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// https://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n" +
+ "// Copyright 2017 The Wuffs Authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// https://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n" +
""
diff --git a/internal/cgen/func.go b/internal/cgen/func.go
index da83069..8920035 100644
--- a/internal/cgen/func.go
+++ b/internal/cgen/func.go
@@ -95,7 +95,7 @@
}
case wfsCppDecl:
- b.writes("inline ")
+ b.writes(" inline ")
case wfsCFuncPtrField, wfsCFuncPtrType:
// No-op.
@@ -103,9 +103,9 @@
// TODO: write n's return values.
if n.Effect().Coroutine() {
- b.writes("wuffs_base__status ")
+ b.writes("wuffs_base__status")
} else if out := n.Out(); out == nil {
- b.writes("wuffs_base__empty_struct ")
+ b.writes("wuffs_base__empty_struct")
// TODO: does writeCTypeName generate the right C if out is an array?
} else if err := g.writeCTypeName(b, out, "", ""); err != nil {
return err
@@ -113,8 +113,13 @@
// The empty // comment makes clang-format place the function name at the
// start of a line.
- if (wfs != wfsCFuncPtrField) && (wfs != wfsCFuncPtrType) {
- b.writes("//\n")
+ switch wfs {
+ case wfsCDecl:
+ b.writes(" //\n")
+ case wfsCppDecl:
+ b.writes(" //\n ")
+ case wfsCFuncPtrField:
+ b.writes(" ")
}
comma := false
@@ -123,23 +128,29 @@
b.writes(g.funcCName(n))
b.writeb('(')
if r := n.Receiver(); !r.IsZero() {
+ b.writes("\n ")
if n.Effect().Pure() {
b.writes("const ")
}
- b.printf("%s%s *self", g.pkgPrefix, r[1].Str(g.tm))
+ b.printf("%s%s* self", g.pkgPrefix, r[1].Str(g.tm))
comma = true
}
case wfsCppDecl:
b.writes(n.FuncName().Str(g.tm))
b.writeb('(')
+ if len(n.In().Fields()) > 0 {
+ b.writes("\n ")
+ }
case wfsCFuncPtrField, wfsCFuncPtrType:
b.writes("(*")
if wfs == wfsCFuncPtrField {
b.writes(n.FuncName().Str(g.tm))
+ b.writes(")(\n ")
+ } else {
+ b.writes(")(")
}
- b.writes(")(")
if n.Effect().Pure() {
b.writes("const ")
}
@@ -152,7 +163,10 @@
for _, o := range n.In().Fields() {
if comma {
- b.writeb(',')
+ b.writes(",\n ")
+ if wfs == wfsCppDecl {
+ b.writes(" ")
+ }
}
comma = true
o := o.AsField()
@@ -167,7 +181,7 @@
b.printf(")")
if (wfs == wfsCppDecl) && !n.Receiver().IsZero() && n.Effect().Pure() {
- b.writes(" const ")
+ b.writes(" const")
}
return nil
}
@@ -293,31 +307,31 @@
returnsStatus := f.Effect().Coroutine() ||
((f.Out() != nil) && f.Out().IsStatus())
- b.writes("if (!self) { return ")
+ b.writes("if (!self) {\n return ")
if returnsStatus {
b.writes("wuffs_base__make_status(wuffs_base__error__bad_receiver)")
} else if err := writeOutParamZeroValue(b, tm, f.Out()); err != nil {
return err
}
- b.writes(";}")
+ b.writes(";\n }\n")
if f.Effect().Pure() {
- b.writes("if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&")
- b.writes(" (self->private_impl.magic != WUFFS_BASE__DISABLED)) {")
+ b.writes(" if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&\n")
+ b.writes(" (self->private_impl.magic != WUFFS_BASE__DISABLED)) {\n")
} else {
- b.writes("if (self->private_impl.magic != WUFFS_BASE__MAGIC) {")
+ b.writes(" if (self->private_impl.magic != WUFFS_BASE__MAGIC) {\n")
}
- b.writes("return ")
+ b.writes(" return ")
if returnsStatus {
- b.writes("wuffs_base__make_status(" +
- "(self->private_impl.magic == WUFFS_BASE__DISABLED) " +
- "? wuffs_base__error__disabled_by_previous_error " +
- ": wuffs_base__error__initialize_not_called)")
+ b.writes("wuffs_base__make_status(\n" +
+ " (self->private_impl.magic == WUFFS_BASE__DISABLED)\n" +
+ " ? wuffs_base__error__disabled_by_previous_error\n" +
+ " : wuffs_base__error__initialize_not_called)")
} else if err := writeOutParamZeroValue(b, tm, f.Out()); err != nil {
return err
}
- b.writes(";}\n")
+ b.writes(";\n }\n")
return nil
}
diff --git a/internal/cgen/gen.go b/internal/cgen/gen.go
index 8ce09e0..58960c3 100644
--- a/internal/cgen/gen.go
+++ b/internal/cgen/gen.go
@@ -117,7 +117,8 @@
}
if i := bytes.Index(in, []byte("\n\n")); i >= 0 {
if len(copyright) == 0 {
- copyright = in[:i+2]
+ // Take only one of the two trailing '\n's.
+ copyright = in[:i+1]
}
in = in[i+2:]
}