Сценарий: Обращение к полю-массиву динамически созданного класса: в функции и методе

Этот коммит содержится в:
Softonik 2024-02-20 21:28:13 +03:00
родитель ebd8a28d56
коммит c76f032d82
4 изменённых файлов: 109 добавлений и 48 удалений

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

@ -126,10 +126,17 @@ func handleIndexExpr(ind *ast.IndexExpr) (code string) {
switch x := ind.X.(type) {
case *ast.SelectorExpr:
if isInMethod {
// if isInMethod {
// println()
// spew.Dump(currentReceiverName)
// spew.Dump(x)
// }
object_name := handleExpr(x.X)
if isInMethod && object_name == currentReceiverName {
code += "this"
} else {
code += handleExpr(x.X)
code += object_name
}
code += "->"

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

@ -368,50 +368,6 @@ void device::doSomething() {
this->x=1;
this->x=this->y;
}
```
Сценарий: Структура с обращением к полям
* Исходник:
```
package test
type device struct {
g [8]bool
}
func (dev *device) doSomething(a *int) {
if dev.g[0] {
a:=1
}
}
func some(gs *GPIOS) {
if gs.g[0] {
a:=1
}
}
```
* Результат:
```
class device {
public:
bool g[8];
void doSomething(int* a);
};
void some(GPIOS* gs);
void device::doSomething(int* a) {
if (this->g[0]) {
auto a=1;
}
}
void some(GPIOS* gs) {
if (gs->g[0]) {
auto a=1;
}
}
```
Сценарий: Структура с вызовом метода и свойства другого объекта

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

@ -57,7 +57,7 @@ foo->Bar(1,"2",LOW);
}
```
Сценарий: Обращение к полям динамически созданного класса
Сценарий: Обращение к простому полю динамически созданного класса: в фукнции и методе
* Исходник:
```
package test
@ -71,19 +71,114 @@ func NewDevice() *Device {
d.v = 1
return d
}
func (d *Device) something() {
d2 := &Device{}
d2.v = 1
}
```
* Результат:
```
class Device {
public: int v;
public:
int v;
void something();
};
Device* NewDevice();
void Device::something() {
auto d2=new Device();
d2->v=1;
}
Device* NewDevice() {
auto d=new Device();
d->v=1;
return d;
}
```
Сценарий: Обращение к полю-массиву динамически созданного класса: в фукнции и методе
* Исходник:
```
package test
type Device struct {
va []int
}
func NewDevice() *Device {
d := &Device{}
d.va[0] = 1
return d
}
func (d *Device) something() {
d2 := &Device{}
d2.va[0] = 1
}
```
* Результат:
```
class Device {
public:
int va[];
void something();
};
Device* NewDevice();
void Device::something() {
auto d2=new Device();
d2->va[0]=1;
}
Device* NewDevice() {
auto d=new Device();
d->va[0]=1;
return d;
}
```
Сценарий: Структура с обращением к полям
* Исходник:
```
package test
type device struct {
g [8]bool
}
func (dev *device) doSomething(a *int) {
if dev.g[0] {
a:=1
}
}
func some(gs *GPIOS) {
if gs.g[0] {
a:=1
}
}
```
* Результат:
```
class device {
public:
bool g[8];
void doSomething(int* a);
};
void some(GPIOS* gs);
void device::doSomething(int* a) {
if (this->g[0]) {
auto a=1;
}
}
void some(GPIOS* gs) {
if (gs->g[0]) {
auto a=1;
}
}
```
Сценарий:

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

@ -98,6 +98,9 @@ func isExpr0String(ee []ast.Expr) bool {
}
func handleAssignStmtExpr(e []ast.Expr) (code string) {
// println()
// spew.Dump(e)
ops := make([]string, 0)
for _, op := range e {
ops = append(ops, handleExpr(op))