namespaces & structs
This commit is contained in:
+33
-1
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user