Compare commits
3 Commits
5603335736
...
c562850645
Author | SHA1 | Date | |
---|---|---|---|
c562850645 | |||
6ac6009918 | |||
3a138ec3fa |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
__pycache__
|
0
codegen/__init__.py
Normal file
0
codegen/__init__.py
Normal file
4
codegen/__main__.py
Normal file
4
codegen/__main__.py
Normal file
@ -0,0 +1,4 @@
|
||||
from .codegen import test_codegen
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_codegen()
|
82
codegen/codegen.py
Normal file
82
codegen/codegen.py
Normal 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()
|
@ -199,69 +199,6 @@ class CSource(CFile):
|
||||
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:
|
||||
type_str = ""
|
||||
if isinstance(_type, CStruct):
|
||||
@ -325,7 +262,3 @@ def get_includes_string(includes: list[CInclude]) -> str:
|
||||
output += "\n"
|
||||
|
||||
return output
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user