Сценарий: Инициализация переменной - тип string

Этот коммит содержится в:
Softonik 2024-02-12 19:42:31 +03:00 коммит произвёл Nobody
родитель bcfa576806
коммит 9fb0182784
2 изменённых файлов: 44 добавлений и 5 удалений

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

@ -103,4 +103,20 @@ void foo();
void foo() { void foo() {
auto a=NewDevice(1,b,"stroka"); auto a=NewDevice(1,b,"stroka");
} }
```
Сценарий: Инициализация переменной - тип string
* Исходник:
```
package test
func foo() {
a := "stroka"
}
```
* Результат:
```
void foo();
void foo() {
std::string a="stroka";
}
``` ```

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

@ -61,18 +61,41 @@ func handleStmt(stmt ast.Stmt, standaloneAssignment bool) string {
return code return code
} }
func handleAssignStmt(as *ast.AssignStmt) (code string) { func handleAssignStmt(a *ast.AssignStmt) (code string) {
tkn, new := handleToken(as.Tok) // println()
// spew.Dump(a)
tkn, new := handleToken(a.Tok)
if new { if new {
code += "auto " t := "auto"
if isExpr0String(a.Rhs) {
t = "std::string"
} }
code += handleAssignStmtExpr(as.Lhs) code += t + " "
}
code += handleAssignStmtExpr(a.Lhs)
code += tkn code += tkn
code += handleAssignStmtExpr(as.Rhs) code += handleAssignStmtExpr(a.Rhs)
return return
} }
func isExpr0String(ee []ast.Expr) bool {
if len(ee) == 0 {
return false
}
e0 := ee[0]
switch e := e0.(type) {
case *ast.BasicLit:
return e.Kind == token.STRING
}
return false
}
func handleAssignStmtExpr(e []ast.Expr) string { func handleAssignStmtExpr(e []ast.Expr) string {
ops := make([]string, 0) ops := make([]string, 0)
code := "" code := ""