Split code to smaller modules

This commit is contained in:
Abdelrahman Said 2025-02-07 22:40:41 +00:00
parent 3a138ec3fa
commit 6ac6009918
4 changed files with 86 additions and 67 deletions

0
codegen/__init__.py Normal file
View File

4
codegen/__main__.py Normal file
View File

@ -0,0 +1,4 @@
from .codegen import test_codegen
if __name__ == "__main__":
test_codegen()

82
codegen/codegen.py Normal file
View File

@ -0,0 +1,82 @@
from pathlib import Path
from .datatypes import (
CStruct,
CEnum,
CEnumVal,
CFunc,
CHeader,
CSource,
CArg,
CType,
CPointer,
CPointerType,
CQualifier,
CInclude,
)
def test_codegen():
struct = CStruct(
name="Str8",
cargs=[
CArg(name="size", _type=CType.U64),
CArg(name="capacity", _type=CType.U64),
CArg(name="buf", _type=CType.U8, pointer=CPointer(_type=CPointerType.SINGLE)),
],
)
cenum = CEnum(
name="OS",
values=[
CEnumVal(name="OS_LINUX"),
CEnumVal(name="OS_WINDOWS"),
CEnumVal(name="OS_MACOS"),
]
)
typed_enum = CEnum(
name="Compiler",
values=[
CEnumVal(name="COMPILER_GCC"),
CEnumVal(name="COMPILER_CLANG"),
CEnumVal(name="COMPILER_MSVC"),
],
typedef=True,
)
main_func = CFunc(
name="my_custom_func",
ret_type=CType.I32,
args=[
CArg(name="argc", _type=CType.I32),
CArg(name="argv", _type=CType.CHAR, pointer=CPointer(_type=CPointerType.DOUBLE), qualifier=CQualifier.CONST),
],
body=" return 0;"
)
header = CHeader(
name="str.h",
includes=[
CInclude(header="aliases.h", local=True),
],
types=[struct, cenum, typed_enum],
funcs=[main_func],
)
source = CSource(
name="str.c",
includes=[
CInclude(header=header, local=True),
CInclude(header="aliases.h", local=True),
],
types=[],
internal_funcs=[],
funcs=[main_func]
)
header.save(Path("."))
source.save(Path("."))
if __name__ == "__main__":
test_codegen()

View File

@ -199,69 +199,6 @@ class CSource(CFile):
return includes + types + internal_funcs_decl + funcs + internal_funcs_def return includes + types + internal_funcs_decl + funcs + internal_funcs_def
def main():
struct = CStruct(
name="Str8",
cargs=[
CArg(name="size", _type=CType.U64),
CArg(name="capacity", _type=CType.U64),
CArg(name="buf", _type=CType.U8, pointer=CPointer(_type=CPointerType.SINGLE)),
],
)
cenum = CEnum(
name="OS",
values=[
CEnumVal(name="OS_LINUX"),
CEnumVal(name="OS_WINDOWS"),
CEnumVal(name="OS_MACOS"),
]
)
typed_enum = CEnum(
name="Compiler",
values=[
CEnumVal(name="COMPILER_GCC"),
CEnumVal(name="COMPILER_CLANG"),
CEnumVal(name="COMPILER_MSVC"),
],
typedef=True,
)
main_func = CFunc(
name="my_custom_func",
ret_type=CType.I32,
args=[
CArg(name="argc", _type=CType.I32),
CArg(name="argv", _type=CType.CHAR, pointer=CPointer(_type=CPointerType.DOUBLE), qualifier=CQualifier.CONST),
],
body=" return 0;"
)
header = CHeader(
name="str.h",
includes=[
CInclude(header="aliases.h", local=True),
],
types=[struct, cenum, typed_enum],
funcs=[main_func],
)
source = CSource(
name="str.c",
includes=[
CInclude(header=header, local=True),
CInclude(header="aliases.h", local=True),
],
types=[],
internal_funcs=[],
funcs=[main_func]
)
header.save(Path("."))
source.save(Path("."))
def get_user_type_string(_type: Union[CStruct, CEnum]) -> str: def get_user_type_string(_type: Union[CStruct, CEnum]) -> str:
type_str = "" type_str = ""
if isinstance(_type, CStruct): if isinstance(_type, CStruct):
@ -325,7 +262,3 @@ def get_includes_string(includes: list[CInclude]) -> str:
output += "\n" output += "\n"
return output return output
if __name__ == "__main__":
main()