Skip to content

Commit

Permalink
add indents to cbuilder (#24418)
Browse files Browse the repository at this point in the history
Follows #24416

Really only shows benefits if most of ccgstmts is done as in
#24399/#24420, but the diff is entirely in cbuilder
  • Loading branch information
metagn authored Nov 12, 2024
1 parent ccb72c7 commit 1863f64
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 61 deletions.
25 changes: 25 additions & 0 deletions compiler/cbuilderbase.nim
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ type
Snippet* = string
Builder* = object
buf*: string
indents*: int

template newBuilder*(s: string): Builder =
Builder(buf: s)
Expand All @@ -17,6 +18,30 @@ proc add*(builder: var Builder, s: string) =
proc add*(builder: var Builder, s: char) =
builder.buf.add(s)

proc addNewline*(builder: var Builder) =
builder.add('\n')
for i in 0 ..< builder.indents:
builder.add('\t')

proc addLineEnd*(builder: var Builder, s: string) =
builder.add(s)
builder.addNewline()

proc addLineEndIndent*(builder: var Builder, s: string) =
inc builder.indents
builder.add(s)
builder.addNewline()

proc addDedent*(builder: var Builder, s: string) =
if builder.buf.len > 0 and builder.buf[^1] == '\t':
builder.buf.setLen(builder.buf.len - 1)
builder.add(s)
dec builder.indents

proc addLineEndDedent*(builder: var Builder, s: string) =
builder.addDedent(s)
builder.addNewline()

proc addIntValue*(builder: var Builder, val: int) =
builder.buf.addInt(val)

Expand Down
35 changes: 18 additions & 17 deletions compiler/cbuilderdecls.nim
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ proc addVar(builder: var Builder, kind: VarKind = Local, name: string, typ: Snip
if initializer.len != 0:
builder.add(" = ")
builder.add(initializer)
builder.add(";\n")
builder.addLineEnd(";")

template addVarWithType(builder: var Builder, kind: VarKind = Local, name: string, body: typed) =
## adds a variable declaration to the builder, with the `body` building the type
builder.addVarHeader(kind)
body
builder.add(" ")
builder.add(name)
builder.add(";\n")
builder.addLineEnd(";")

template addVarWithInitializer(builder: var Builder, kind: VarKind = Local, name: string,
typ: Snippet, initializerBody: typed) =
Expand All @@ -52,7 +52,7 @@ template addVarWithInitializer(builder: var Builder, kind: VarKind = Local, name
builder.add(name)
builder.add(" = ")
initializerBody
builder.add(";\n")
builder.addLineEnd(";")

template addVarWithTypeAndInitializer(builder: var Builder, kind: VarKind = Local, name: string,
typeBody, initializerBody: typed) =
Expand All @@ -64,7 +64,7 @@ template addVarWithTypeAndInitializer(builder: var Builder, kind: VarKind = Loca
builder.add(name)
builder.add(" = ")
initializerBody
builder.add(";\n")
builder.addLineEnd(";")

proc addArrayVar(builder: var Builder, kind: VarKind = Local, name: string, elementType: Snippet, len: int, initializer: Snippet = "") =
## adds an array variable declaration to the builder
Expand All @@ -78,7 +78,7 @@ proc addArrayVar(builder: var Builder, kind: VarKind = Local, name: string, elem
if initializer.len != 0:
builder.add(" = ")
builder.add(initializer)
builder.add(";\n")
builder.addLineEnd(";")

template addArrayVarWithInitializer(builder: var Builder, kind: VarKind = Local, name: string, elementType: Snippet, len: int, body: typed) =
## adds an array variable declaration to the builder with the initializer built according to `body`
Expand All @@ -90,7 +90,7 @@ template addArrayVarWithInitializer(builder: var Builder, kind: VarKind = Local,
builder.addIntValue(len)
builder.add("] = ")
body
builder.add(";\n")
builder.addLineEnd(";")

template addTypedef(builder: var Builder, name: string, typeBody: typed) =
## adds a typedef declaration to the builder with name `name` and type as
Expand All @@ -99,7 +99,7 @@ template addTypedef(builder: var Builder, name: string, typeBody: typed) =
typeBody
builder.add(" ")
builder.add(name)
builder.add(";\n")
builder.addLineEnd(";")

proc addProcTypedef(builder: var Builder, callConv: TCallingConvention, name: string, rettype, params: Snippet) =
builder.add("typedef ")
Expand All @@ -110,7 +110,7 @@ proc addProcTypedef(builder: var Builder, callConv: TCallingConvention, name: st
builder.add(name)
builder.add(")")
builder.add(params)
builder.add(";\n")
builder.addLineEnd(";")

template addArrayTypedef(builder: var Builder, name: string, len: BiggestInt, typeBody: typed) =
## adds an array typedef declaration to the builder with name `name`,
Expand All @@ -121,7 +121,7 @@ template addArrayTypedef(builder: var Builder, name: string, len: BiggestInt, ty
builder.add(name)
builder.add("[")
builder.addIntValue(len)
builder.add("];\n")
builder.addLineEnd("];")

type
StructInitializerKind = enum
Expand Down Expand Up @@ -525,12 +525,13 @@ proc addProcHeader(builder: var Builder, m: BModule, prc: PSym, name: string, pa
builder.add(" __attribute__((noreturn))")

proc finishProcHeaderAsProto(builder: var Builder) =
builder.add(";\n")
builder.addLineEnd(";")

template finishProcHeaderWithBody(builder: var Builder, body: typed) =
builder.add(" {\n")
builder.addLineEndIndent(" {")
body
builder.add("}\n\n")
builder.addLineEndDedent("}")
builder.addNewline

proc addProcVar(builder: var Builder, m: BModule, prc: PSym, name: string, params, rettype: Snippet,
isStatic = false, ignoreAttributes = false) =
Expand All @@ -556,7 +557,7 @@ proc addProcVar(builder: var Builder, m: BModule, prc: PSym, name: string, param
if noreturn and hasAttribute in extccomp.CC[m.config.cCompiler].props:
builder.add(" __attribute__((noreturn))")
# ensure we are just adding a variable:
builder.add(";\n")
builder.addLineEnd(";")

proc addProcVar(builder: var Builder, callConv: TCallingConvention,
name: string, params, rettype: Snippet, isStatic = false) =
Expand All @@ -571,7 +572,7 @@ proc addProcVar(builder: var Builder, callConv: TCallingConvention,
builder.add(")")
builder.add(params)
# ensure we are just adding a variable:
builder.add(";\n")
builder.addLineEnd(";")

type VarInitializerKind = enum
Assignment, CppConstructor
Expand All @@ -583,7 +584,7 @@ proc addVar(builder: var Builder, m: BModule, s: PSym, name: string, typ: Snippe
if initializerKind == Assignment:
builder.add(" = ")
builder.add(initializer)
builder.add(";\n")
builder.addLineEnd(";")
return
if s.kind in {skLet, skVar, skField, skForVar} and s.alignment > 0:
builder.add("NIM_ALIGN(" & $s.alignment & ") ")
Expand All @@ -606,7 +607,7 @@ proc addVar(builder: var Builder, m: BModule, s: PSym, name: string, typ: Snippe
if initializerKind == Assignment:
builder.add(" = ")
builder.add(initializer)
builder.add(";\n")
builder.addLineEnd(";")

proc addInclude(builder: var Builder, value: Snippet) =
builder.add("#include " & value & "\n")
builder.addLineEnd("#include " & value)
Loading

0 comments on commit 1863f64

Please sign in to comment.