aboutsummaryrefslogtreecommitdiffstats
path: root/bfd/codegen.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xbfd/codegen.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/bfd/codegen.py b/bfd/codegen.py
new file mode 100755
index 0000000..fbac4a8
--- /dev/null
+++ b/bfd/codegen.py
@@ -0,0 +1,81 @@
+#!/bin/python3
+
+import argparse
+import code
+import readline
+
+default_header="#include <stdint.h>\n"
+main_sig="int main(int argc, char** argv)>"
+def_kw="#define "
+def_name = []
+separator="fff"
+def_value = []
+
+class Argparser(object):
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--arglist", nargs="+", type=str, help="list of args")
+ parser.add_argument("--hex", action="store_true", help="generate hex(string) code, otherwise generate int", default=False)
+ self.args = parser.parse_args()
+ self.code = {}
+
+class CodeGen_Arg(object):
+ def __init__(self, arglist):
+ self.arglist = arglist
+ self.def_name = []
+ self.def_value = []
+
+ def get_ret_type(self, type):
+ pass
+
+ def gen_cast(self):
+ for argtype in self.arglist:
+ if argtype == "int8": self.def_name.append("i8")
+ elif argtype == "uint8":self.def_name.append("u8")
+ elif argtype == "uchar":self.def_name.append("c")
+ elif argtype == "char":self.def_name.append("c")
+ elif argtype == "lightuserdata":self.def_name.append("p")
+ elif argtype == "bool":self.def_name.append("b")
+ elif argtype == "int16":self.def_name.append("i16")
+ elif argtype == "uint16":self.def_name.append("u16")
+ elif argtype == "int32":self.def_name.append("i32")
+ elif argtype == "uint32":self.def_name.append("u32")
+ elif argtype == "int64":self.def_name.append("i64")
+ elif argtype == "uint64":self.def_name.append("u64")
+ elif argtype == "int128":self.def_name.append("i128")
+ elif argtype == "uint128":self.def_name.append("u128")
+ elif argtype == "float":self.def_name.append("f")
+ elif argtype == "double":self.def_name.append("d")
+ elif argtype == "long double":self.def_name.append("ld")
+ elif argtype == "string":self.def_name.append("s")
+ elif argtype == "custom":self.def_name.append("x")
+ else:
+ raise Exception("codegen : unknown type")
+
+ def debugdump(self):
+ for argtype in self.arglist:
+ print(argtype)
+
+ def genhex():
+ pass
+
+ def genint():
+ pass
+
+# write code here
+def premain():
+ argparser = Argparser()
+ codegen = CodeGen_Arg(argparser.args.arglist)
+ codegen.debugdump()
+
+def main():
+ try:
+ premain()
+ except:
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+
+if __name__ == "__main__":
+ main()