Сценарий: Обращение к полю-массиву динамически созданного класса: в функции и методе
Этот коммит содержится в:
родитель
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))
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче