Skip to content

Commit

Permalink
Merge pull request #296 from tiffany1618/fix-cppdoc-helpers
Browse files Browse the repository at this point in the history
Add cpp file parameter to utilities for creating CppDoc members
  • Loading branch information
bocchino authored Jul 27, 2023
2 parents c0d144c + 2a6f8d1 commit 00c54e0
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 35 deletions.
8 changes: 4 additions & 4 deletions compiler/lib/src/main/scala/codegen/CppWriter/CppDoc.scala
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ object CppDoc {
params: List[Function.Param],
initializers: List[String],
body: List[Line],
cppFile: Option[String] = None,
cppFileNameBaseOpt: Option[String] = None,
)
case class Destructor(
comment: Option[String],
body: List[Line],
virtualQualifier: Destructor.VirtualQualifier = Destructor.NonVirtual,
cppFile: Option[String] = None,
cppFileNameBaseOpt: Option[String] = None,
)
object Destructor {
sealed trait VirtualQualifier
Expand All @@ -82,7 +82,7 @@ object CppDoc {
/** The const qualifier */
constQualifier: Function.ConstQualifier = Function.NonConst,
/** The cpp file to write to */
cppFile: Option[String] = None,
cppFileNameBaseOpt: Option[String] = None,
)
case object Function {
case class Param(
Expand Down Expand Up @@ -133,7 +133,7 @@ object CppDoc {
case class Lines(
content: List[Line],
output: Lines.Output = Lines.Hpp,
cppFile: Option[String] = None,
cppFileNameBaseOpt: Option[String] = None,
)
object Lines {
sealed trait Output
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ object CppDocCppWriter extends CppDocWriter {
}

override def visitConstructor(in: Input, constructor: CppDoc.Class.Constructor) =
writeSelectedLines(in, constructor.cppFile,
writeSelectedLines(in, constructor.cppFileNameBaseOpt,
{
val unqualifiedClassName = in.getEnclosingClassUnqualified
val qualifiedClassName = in.getEnclosingClassQualified
Expand Down Expand Up @@ -79,8 +79,8 @@ object CppDocCppWriter extends CppDocWriter {
}
)

override def visitCppDoc(cppDoc: CppDoc, cppFile: Option[String] = None) = {
val in = Input(cppDoc.hppFile, cppDoc.cppFileName, cppFile)
override def visitCppDoc(cppDoc: CppDoc, cppFileNameBaseOpt: Option[String] = None) = {
val in = Input(cppDoc.hppFile, cppDoc.cppFileName, cppFileNameBaseOpt)
List(
CppDocWriter.writeBanner(
in.getOutputCppFileName,
Expand All @@ -92,7 +92,7 @@ object CppDocCppWriter extends CppDocWriter {
}

override def visitDestructor(in: Input, destructor: CppDoc.Class.Destructor) =
writeSelectedLines(in, destructor.cppFile,
writeSelectedLines(in, destructor.cppFileNameBaseOpt,
{
val unqualifiedClassName = in.getEnclosingClassUnqualified
val qualifiedClassName = in.getEnclosingClassQualified
Expand All @@ -107,7 +107,7 @@ object CppDocCppWriter extends CppDocWriter {
)

override def visitFunction(in: Input, function: CppDoc.Function) =
writeSelectedLines(in, function.cppFile,
writeSelectedLines(in, function.cppFileNameBaseOpt,
(function.svQualifier, function.body) match {
// If the function is pure virtual, and the function body is empty,
// then there is no implementation, so don't write one out.
Expand Down Expand Up @@ -152,7 +152,7 @@ object CppDocCppWriter extends CppDocWriter {
override def visitLines(in: Input, lines: CppDoc.Lines) =
lines.output match {
case CppDoc.Lines.Hpp => Nil
case _ => writeSelectedLines(in, lines.cppFile, lines.content)
case _ => writeSelectedLines(in, lines.cppFileNameBaseOpt, lines.content)
}

override def visitNamespace(in: Input, namespace: CppDoc.Namespace) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ object CppDocHppWriter extends CppDocWriter {
outputLines
}

override def visitCppDoc(cppDoc: CppDoc, cppFile: Option[String] = None) = {
override def visitCppDoc(cppDoc: CppDoc, cppFileNameBaseOpt: Option[String] = None) = {
val hppFile = cppDoc.hppFile
val cppFileName = cppDoc.cppFileName
val in = Input(hppFile, cppFileName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ trait CppDocWriter extends CppDocVisitor with LineUtils {
def default(in: Input) = Nil

/** Visit a CppDoc */
def visitCppDoc(cppDoc: CppDoc, cppFile: Option[String]): Output
def visitCppDoc(cppDoc: CppDoc, cppFileNameBaseOpt: Option[String]): Output

type Output = List[Line]

Expand Down
20 changes: 12 additions & 8 deletions compiler/lib/src/main/scala/codegen/CppWriter/CppWriter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ object CppWriter extends LineUtils{

def createCppDoc(
description: String,
fileName: String,
fileNameBase: String,
includeGuard: String,
members: List[CppDoc.Member],
toolName: Option[String],
hppFileExtension: String = "hpp",
cppFileExtension: String = "cpp",
): CppDoc = {
val hppFile = CppDoc.HppFile(s"$fileName.$hppFileExtension", includeGuard)
CppDoc(description, hppFile, s"$fileName.$cppFileExtension", members, toolName)
val hppFile = CppDoc.HppFile(s"$fileNameBase.$hppFileExtension", includeGuard)
CppDoc(description, hppFile, s"$fileNameBase.$cppFileExtension", members, toolName)
}

def headerString(s: String): String = {
Expand All @@ -47,21 +47,25 @@ object CppWriter extends LineUtils{
def writeCppDoc(
s: CppWriterState,
cppDoc: CppDoc,
cppFile: Option[String] = None
cppFileNameBaseOpt: Option[String] = None
): Result.Result[CppWriterState] =
for {
_ <- writeHppFile(s, cppDoc)
_ <- writeCppFile(s, cppDoc, cppFile)
_ <- writeCppFile(s, cppDoc, cppFileNameBaseOpt)
}
yield s

def writeCppFile(
s: CppWriterState,
cppDoc: CppDoc,
cppFile: Option[String] = None
cppFileNameBaseOpt: Option[String] = None
) = {
val lines = CppDocCppWriter.visitCppDoc(cppDoc, cppFile)
writeLinesToFile(s, cppDoc.cppFileName, lines)
val lines = CppDocCppWriter.visitCppDoc(cppDoc, cppFileNameBaseOpt)
val cppFileName = cppFileNameBaseOpt match {
case Some(base) => s"$base.cpp"
case None => cppDoc.cppFileName
}
writeLinesToFile(s, cppFileName, lines)
}

def writeHppFile(s: CppWriterState, cppDoc: CppDoc) = {
Expand Down
38 changes: 25 additions & 13 deletions compiler/lib/src/main/scala/codegen/CppWriter/CppWriterUtils.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ trait CppWriterUtils extends LineUtils {
accessTag: String,
comment: String,
members: List[CppDoc.Class.Member],
output: CppDoc.Lines.Output = CppDoc.Lines.Both
output: CppDoc.Lines.Output = CppDoc.Lines.Both,
cppFileNameBaseOpt: Option[String] = None
): List[CppDoc.Class.Member] = members match {
case Nil => Nil
case _ =>
linesClassMember(CppDocHppWriter.writeAccessTag(accessTag)) ::
linesClassMember(CppDocWriter.writeBannerComment(comment), output) ::
linesClassMember(CppDocWriter.writeBannerComment(comment), output, cppFileNameBaseOpt) ::
members
}

Expand Down Expand Up @@ -238,6 +239,7 @@ trait CppWriterUtils extends LineUtils {
body: List[Line],
svQualifier: CppDoc.Function.SVQualifier = CppDoc.Function.NonSV,
constQualifier: CppDoc.Function.ConstQualifier = CppDoc.Function.NonConst,
cppFileNameBaseOpt: Option[String] = None
): CppDoc.Member.Function =
CppDoc.Member.Function(
CppDoc.Function(
Expand All @@ -247,14 +249,16 @@ trait CppWriterUtils extends LineUtils {
retType,
body,
svQualifier,
constQualifier
constQualifier,
cppFileNameBaseOpt
)
)

def linesMember(
content: List[Line],
output: CppDoc.Lines.Output = CppDoc.Lines.Hpp
): CppDoc.Member.Lines = CppDoc.Member.Lines(CppDoc.Lines(content, output))
output: CppDoc.Lines.Output = CppDoc.Lines.Hpp,
cppFileNameBaseOpt: Option[String] = None
): CppDoc.Member.Lines = CppDoc.Member.Lines(CppDoc.Lines(content, output, cppFileNameBaseOpt))

def namespaceMember(
name: String,
Expand All @@ -265,27 +269,31 @@ trait CppWriterUtils extends LineUtils {
comment: Option[String],
params: List[CppDoc.Function.Param],
initializers: List[String],
body: List[Line]
body: List[Line],
cppFileNameBaseOpt: Option[String] = None
): CppDoc.Class.Member.Constructor =
CppDoc.Class.Member.Constructor(
CppDoc.Class.Constructor(
comment,
params,
initializers,
body
body,
cppFileNameBaseOpt
)
)

def destructorClassMember(
comment: Option[String],
body: List[Line],
virtualQualifier: CppDoc.Class.Destructor.VirtualQualifier = CppDoc.Class.Destructor.NonVirtual
virtualQualifier: CppDoc.Class.Destructor.VirtualQualifier = CppDoc.Class.Destructor.NonVirtual,
cppFileNameBaseOpt: Option[String] = None
): CppDoc.Class.Member.Destructor =
CppDoc.Class.Member.Destructor(
CppDoc.Class.Destructor(
comment,
body,
virtualQualifier
virtualQualifier,
cppFileNameBaseOpt
)
)

Expand All @@ -296,7 +304,8 @@ trait CppWriterUtils extends LineUtils {
retType: CppDoc.Type,
body: List[Line],
svQualifier: CppDoc.Function.SVQualifier = CppDoc.Function.NonSV,
constQualifier: CppDoc.Function.ConstQualifier = CppDoc.Function.NonConst
constQualifier: CppDoc.Function.ConstQualifier = CppDoc.Function.NonConst,
cppFileNameBaseOpt: Option[String] = None
): CppDoc.Class.Member.Function =
CppDoc.Class.Member.Function(
CppDoc.Function(
Expand All @@ -306,18 +315,21 @@ trait CppWriterUtils extends LineUtils {
retType,
body,
svQualifier,
constQualifier
constQualifier,
cppFileNameBaseOpt
)
)

def linesClassMember(
content: List[Line],
output: CppDoc.Lines.Output = CppDoc.Lines.Hpp
output: CppDoc.Lines.Output = CppDoc.Lines.Hpp,
cppFileNameBaseOpt: Option[String] = None
): CppDoc.Class.Member.Lines =
CppDoc.Class.Member.Lines(
CppDoc.Lines(
content,
output
output,
cppFileNameBaseOpt
)
)

Expand Down
4 changes: 2 additions & 2 deletions compiler/lib/test/codegen/CppWriter/Main.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ object Program extends LineUtils {
lines = Lines(
content = includeHeader,
output = Lines.Cpp,
cppFile = Some("Other")
cppFileNameBaseOpt = Some("Other")
)
),
Member.Namespace(
Expand Down Expand Up @@ -89,7 +89,7 @@ object Program extends LineUtils {
),
retType = Type("void"),
body = Nil,
cppFile = Some("Other")
cppFileNameBaseOpt = Some("Other")
)
),
)
Expand Down

0 comments on commit 00c54e0

Please sign in to comment.