Сценарий: Структура с полем

Этот коммит содержится в:
Softonik 2024-01-22 04:02:35 +03:00 коммит произвёл Nobody
родитель 3b400bccbb
коммит b8b3698514
3 изменённых файлов: 60 добавлений и 2 удалений

Просмотреть файл

@ -22,6 +22,8 @@ func handleExpr(expr ast.Expr) string {
code += handleParenExpr(e) code += handleParenExpr(e)
case *ast.SelectorExpr: case *ast.SelectorExpr:
code += handleSelectorExpr(e) code += handleSelectorExpr(e)
case *ast.StructType:
code += handleStructType(e)
} }
return code return code
} }

Просмотреть файл

@ -22,5 +22,24 @@ type device struct {}
``` ```
* Результат: * Результат:
``` ```
class device {} class device {
public:
};
```
Сценарий: Структура с полем
* Исходник:
```
package test
type device struct {
a int
}
```
* Результат:
```
class device {
public:
int a;
};
``` ```

Просмотреть файл

@ -10,6 +10,43 @@ func handleTypeSpec(spec ast.Spec) string {
code += " " code += " "
code += s.Name.String() code += s.Name.String()
code += " " code += " "
code += "{}" code += "{\n"
code += handleClass(s.Type)
// spew.Dump(s.TypeParams)
code += "};\n"
return code
}
func handleClass(e ast.Expr) string {
code := ""
code += "public:\n"
code += handleExpr(e)
// spew.Dump(e)
return code
}
func handleStructType(s *ast.StructType) string {
code := ""
code += handleFieldList(s.Fields)
return code
}
func handleFieldList(l *ast.FieldList) string {
code := ""
for _, f := range l.List {
code += handleField(f)
}
return code
}
func handleField(f *ast.Field) string {
code := ""
code += " "
code += handleIdentExpr(f.Type)
code += " "
for _, n := range f.Names {
code += handleIdentExpr(n)
}
code += ";\n"
return code return code
} }