namespaces & structs

This commit is contained in:
2024-08-20 02:11:57 +02:00
parent e99549fd97
commit 2f7cdb97cc
11 changed files with 1296 additions and 325 deletions
+33 -1
View File
@@ -65,7 +65,7 @@ func TranspileNode(node ASTNode) string {
res += fmt.Sprintf("var %s %s", TranspileNode(node.Inner[1]), TranspileNode(node.Inner[0]))
case "round_def":
fmt.Sprintf("(%s)", strings.TrimSuffix(strings.ReplaceAll(TranspileNodes(node.Inner), "var ", ""), " "))
case "asm":
case "power_keyword_call":
if node.Inner[0].Text == "map" && len(node.Inner) == 4 {
wyst_map = append(wyst_map, wmap{node.Inner[1].Text, node.Inner[2].Text})
}
@@ -84,6 +84,38 @@ func TranspileNode(node ASTNode) string {
case "round_call":
res += fmt.Sprintf("(%s)", TranspileNodes(node.Inner))
case "struct_def":
res += fmt.Sprintf("type %s struct %s\n", TranspileNode(node.Inner[0]), TranspileNode(node.Inner[1]))
case "enum_curly":
res += fmt.Sprintf("{\n %s}", strings.TrimSuffix(TranspileNodes(node.Inner), " "))
case "namespace":
namespace_name := "n" + TranspileNode(node.Inner[0])
res += fmt.Sprintf("type %s struct {\n ", namespace_name)
vals := ""
for _, c := range node.Inner {
if c.Rule == "var_def" {
res += strings.TrimPrefix(TranspileNode(c), "var ")
res += "\n "
} else if c.Rule == "var_def_set" {
res += strings.TrimPrefix(TranspileNode(c.Inner[0]), "var ")
res += "\n "
vals += fmt.Sprintf("%s: %s, ", TranspileNode(c.Inner[0].Inner[1]), TranspileNode(c.Inner[1]))
}
}
res += "}\n"
for _, c := range node.Inner {
if c.Rule == "func_def" {
res += fmt.Sprintf("func (%s) %s%s %s %s", namespace_name, TranspileNode(c.Inner[1]), TranspileNode(c.Inner[2]), TranspileNode(c.Inner[0]), TranspileNode(c.Inner[3]))
res += "\n "
}
}
res += fmt.Sprintf("var %s %s = %s{%s}", TranspileNode(node.Inner[0]), namespace_name, namespace_name, vals)
case "var_def_set":
res += fmt.Sprintf("%s = %s", TranspileNode(node.Inner[0]), TranspileNode(node.Inner[1]))
default:
fmt.Printf("\x1b[33mDEV NOTICE:\x1b[0m Missing case for '%s'\n", node.Rule)