Сценарий: Вызов вложенных методов динамически созданного объекта

Этот коммит содержится в:
Softonik 2024-02-14 15:47:33 +03:00 коммит произвёл Nobody
родитель 9b117e1676
коммит dec79ad2f3
2 изменённых файлов: 42 добавлений и 11 удалений

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

@ -105,21 +105,14 @@ func handleSelectorExpr(s *ast.SelectorExpr) (code string) {
switch x := s.X.(type) { switch x := s.X.(type) {
case *ast.Ident: case *ast.Ident:
if isInMethod { if isInMethod && x.Name == currentReceiverName {
if x.Name == currentReceiverName {
code += "this" code += "this"
} else { } else {
code += handleIdentExpr(x) code += handleIdentExpr(x)
} }
code += "->" code += "->"
} else {
code += handleIdentExpr(x)
code += "->"
}
case *ast.SelectorExpr: case *ast.SelectorExpr:
code += "this" code += handleSelectorExpr(x)
code += "->"
code += handleIdentExpr(x.Sel)
code += "->" code += "->"
} }
code += handleIdentExpr(s.Sel) code += handleIdentExpr(s.Sel)

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

@ -260,6 +260,44 @@ public:
void device::doSomething() { void device::doSomething() {
this->remote->doSomethingElse(); this->remote->doSomethingElse();
} }
```
Сценарий: Вызов вложенных методов динамически созданного объекта
* Исходник:
```
package test
type device struct {
}
func (d *device) doSomething() {
n := NewOther()
n.G.x()
n.G.x.x2.x3()
}
func main() {
n := NewOther()
n.G.x()
n.G.x.x2.x3()
}
```
* Результат:
```
class device {
public:
void doSomething();
};
void main();
void device::doSomething() {
auto n=NewOther();
n->G->x();
n->G->x->x2->x3();
}
void main() {
auto n=NewOther();
n->G->x();
n->G->x->x2->x3();
}
``` ```
Сценарий: Структура с вызовом методов со входящими и выходящими параметрами Сценарий: Структура с вызовом методов со входящими и выходящими параметрами