Сценарий: Обращение к полю-массиву динамически созданного класса: в функции и методе
Этот коммит содержится в:
родитель
ebd8a28d56
коммит
c76f032d82
4 изменённых файлов: 109 добавлений и 48 удалений
|
@ -126,10 +126,17 @@ func handleIndexExpr(ind *ast.IndexExpr) (code string) {
|
||||||
|
|
||||||
switch x := ind.X.(type) {
|
switch x := ind.X.(type) {
|
||||||
case *ast.SelectorExpr:
|
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"
|
code += "this"
|
||||||
} else {
|
} else {
|
||||||
code += handleExpr(x.X)
|
code += object_name
|
||||||
}
|
}
|
||||||
|
|
||||||
code += "->"
|
code += "->"
|
||||||
|
|
|
@ -368,50 +368,6 @@ void device::doSomething() {
|
||||||
this->x=1;
|
this->x=1;
|
||||||
this->x=this->y;
|
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
|
package test
|
||||||
|
@ -71,19 +71,114 @@ func NewDevice() *Device {
|
||||||
d.v = 1
|
d.v = 1
|
||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *Device) something() {
|
||||||
|
d2 := &Device{}
|
||||||
|
d2.v = 1
|
||||||
|
}
|
||||||
```
|
```
|
||||||
* Результат:
|
* Результат:
|
||||||
```
|
```
|
||||||
class Device {
|
class Device {
|
||||||
public: int v;
|
public:
|
||||||
|
int v;
|
||||||
|
void something();
|
||||||
};
|
};
|
||||||
Device* NewDevice();
|
Device* NewDevice();
|
||||||
|
|
||||||
|
void Device::something() {
|
||||||
|
auto d2=new Device();
|
||||||
|
d2->v=1;
|
||||||
|
}
|
||||||
Device* NewDevice() {
|
Device* NewDevice() {
|
||||||
auto d=new Device();
|
auto d=new Device();
|
||||||
d->v=1;
|
d->v=1;
|
||||||
return d;
|
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) {
|
func handleAssignStmtExpr(e []ast.Expr) (code string) {
|
||||||
|
// println()
|
||||||
|
// spew.Dump(e)
|
||||||
|
|
||||||
ops := make([]string, 0)
|
ops := make([]string, 0)
|
||||||
for _, op := range e {
|
for _, op := range e {
|
||||||
ops = append(ops, handleExpr(op))
|
ops = append(ops, handleExpr(op))
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче