Skip to content

Commit

Permalink
refactor: simplify code #24
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Jan 6, 2024
1 parent c2249e7 commit c91caa8
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 38 deletions.
18 changes: 11 additions & 7 deletions chapi-ast-c/src/main/kotlin/chapi/ast/cast/CAstBaseListener.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@ import chapi.domain.core.*
import org.antlr.v4.runtime.ParserRuleContext

open class CAstBaseListener: CBaseListener() {
fun buildPosition(ctx: ParserRuleContext): CodePosition {
val position = CodePosition()
position.StartLine = ctx.start.line
position.StartLinePosition= ctx.start.charPositionInLine
position.StopLine = ctx.stop.line
position.StopLinePosition = ctx.stop.charPositionInLine
return position
fun buildPosition(ctx: ParserRuleContext?): CodePosition {
if (ctx == null) {
return CodePosition()
}

return CodePosition(
StartLine = ctx.start.line,
StartLinePosition= ctx.start.charPositionInLine,
StopLine = ctx.stop.line,
StopLinePosition = ctx.stop.charPositionInLine
)
}

fun buildParameters(ctx: CParser.ParameterListContext, parameters: MutableList<CParser.ParameterDeclarationContext>) {
Expand Down
56 changes: 25 additions & 31 deletions chapi-ast-c/src/main/kotlin/chapi/ast/cast/CFullIdentListener.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ open class CFullIdentListener(fileName: String) : CAstBaseListener() {
private val defaultDataStruct = CodeDataStruct()
private var currentFunction = CodeFunction()
private var structMap = mutableMapOf<String, CodeDataStruct>()
private var codeContainer: CodeContainer =
CodeContainer(FullName = fileName)

private var codeContainer: CodeContainer = CodeContainer(FullName = fileName)

override fun enterIncludeDeclaration(ctx: CParser.IncludeDeclarationContext?) {
val includeIdentifier = ctx?.includeIdentifier()
Expand All @@ -27,7 +25,7 @@ open class CFullIdentListener(fileName: String) : CAstBaseListener() {
override fun enterStructOrUnionSpecifier(ctx: CParser.StructOrUnionSpecifierContext?) {
val nodeName = ctx?.Identifier()?.text ?: ""
structMap.getOrPut(nodeName) {
CodeDataStruct(NodeName = nodeName)
CodeDataStruct(NodeName = nodeName, Position = buildPosition(ctx))
}.let {
currentDataStruct = it
}
Expand All @@ -38,33 +36,30 @@ open class CFullIdentListener(fileName: String) : CAstBaseListener() {
if (specifierQualifierList != null) {
val key = specifierQualifierList.typeSpecifier().text
val qualifierList = specifierQualifierList.specifierQualifierList()
var value = ""
if (qualifierList != null) {
value = qualifierList.text
}

val field = CodeField(
TypeType = key,
TypeValue = value
TypeValue = qualifierList?.text ?: ""
)

currentDataStruct.Fields += field
}
}
}

private fun parseDirectDeclarator(ctx: CParser.DirectDeclaratorContext) {
val directDeclaratorType = ctx::class.java.simpleName
when(directDeclaratorType) {
private fun parseDirectDeclarator(ctx: CParser.DirectDeclaratorContext?) {
val directDeclaratorType = ctx!!::class.java.simpleName
when (directDeclaratorType) {
"ParameterDirectDeclaratorContext" -> {
handleParamDirectDeclCtx(ctx)
}

"IdentifierDirectDeclaratorContext" -> {
val directDeclarator = ctx as CParser.IdentifierDirectDeclaratorContext
if (directDeclarator.Identifier().text != null) {
currentFunction.Name = directDeclarator.Identifier().text
currentFunction.Name = directDeclarator.Identifier().text
}
}

"DeclaratorDirectDeclaratorContext" -> {}
"AssignmentExpressionDirectDeclaratorContext" -> {}
"PreStaticAssignmentExpressionDirectDeclaratorContext" -> {}
Expand All @@ -82,9 +77,11 @@ open class CFullIdentListener(fileName: String) : CAstBaseListener() {
currentFunction.Parameters = listOf()
val directDeclarator = ctx as CParser.ParameterDirectDeclaratorContext
parseDirectDeclarator(ctx.directDeclarator())

val parameterTypeList = directDeclarator.parameterTypeList().parameterList()
val parameters: MutableList<CParser.ParameterDeclarationContext> = ArrayList()
this.buildParameters(parameterTypeList, parameters)

for (parameter in parameters) {
var type: String? = null
var name: String? = null
Expand Down Expand Up @@ -128,31 +125,28 @@ open class CFullIdentListener(fileName: String) : CAstBaseListener() {
}

override fun enterFunctionDefinition(ctx: CParser.FunctionDefinitionContext?) {
val codeFunction = CodeFunction()
currentFunction = codeFunction
if (ctx!!.declarationSpecifiers() != null) {
for (specifier in ctx.declarationSpecifiers().declarationSpecifier()) {
if (specifier.typeSpecifier().text != null) {
if (specifier.typeSpecifier().typedefName() != null) {
codeFunction.Name = specifier.typeSpecifier().typedefName().text
} else {
codeFunction.ReturnType = specifier.typeSpecifier().text
}
}
currentFunction = CodeFunction(Position = buildPosition(ctx))

ctx?.declarationSpecifiers()?.declarationSpecifier()?.map {
if (it.typeSpecifier().text != null) {
if (it.typeSpecifier().typedefName() != null) {
currentFunction.Name = it.typeSpecifier().typedefName().text
} else {
currentFunction.ReturnType = it.typeSpecifier().text
}
}
}

parseDirectDeclarator(ctx.declarator().directDeclarator())
parseDirectDeclarator(ctx?.declarator()?.directDeclarator())
if (currentFunction.Parameters.isNotEmpty()) {
val firstParameter = currentFunction.Parameters[0]
if(firstParameter.TypeType.endsWith('*')) {
if (firstParameter.TypeType.endsWith('*')) {
val pointerIndex = firstParameter.TypeType.length - 1
val baseType = firstParameter.TypeType.substring(0, pointerIndex)
if (structMap.get(baseType) != null) {
structMap[baseType]!!.Functions += currentFunction
} else {
defaultDataStruct.Functions += currentFunction
structMap.getOrPut(baseType) {
CodeDataStruct(NodeName = baseType)
}.let {
it.Functions += currentFunction
}
} else {
defaultDataStruct.Functions += currentFunction
Expand Down

0 comments on commit c91caa8

Please sign in to comment.