[Yunq] Move to using jinja for codegen.

This commit is contained in:
Drew Galbraith 2023-10-24 14:54:00 -07:00
parent 3faa19e4cb
commit 963cc0b4fa
8 changed files with 283 additions and 411 deletions

View file

@ -1,8 +1,10 @@
#! /usr/bin/python
#! python3
import os
import pathlib
import sys
from codegen_message import *
from jinja2 import Environment, FileSystemLoader
from parser import *
def main():
@ -20,11 +22,22 @@ def main():
ast = parser.parse()
type_check(ast)
messages = [m for m in ast if type(m) is Message]
interfaces = [i for i in ast if type(i) is Interface]
jinja_env = Environment(loader=FileSystemLoader(pathlib.Path(__file__).parent.resolve()))
message_header_tmpl = jinja_env.get_template("message.h.jinja")
with open(filename + '.h', mode='w') as f:
f.write(generate_message_header(ast))
message_header = message_header_tmpl.render(messages=messages)
f.write(message_header)
message_impl_tmpl = jinja_env.get_template("message.cpp.jinja")
message_impl_tmpl.globals['Type'] = Type
with open(filename + '.cpp', mode='w') as f:
f.write(generate_message_impl(filename, ast))
message_impl = message_impl_tmpl.render(file=filename, messages=messages)
f.write(message_impl)
if __name__ == "__main__":
main()