|
@@ -89,10 +89,12 @@ func (m *manager) Allocate(n node.Node) {
|
|
for _, o := range mod.Objects[n] {
|
|
for _, o := range mod.Objects[n] {
|
|
//fmt.Println(reflect.TypeOf(o))
|
|
//fmt.Println(reflect.TypeOf(o))
|
|
switch o.(type) {
|
|
switch o.(type) {
|
|
- case object.VariableObject:
|
|
|
|
|
|
+ case object.VariableObject, object.FieldObject:
|
|
h.heap[o] = &direct{data: def}
|
|
h.heap[o] = &direct{data: def}
|
|
case object.ParameterObject:
|
|
case object.ParameterObject:
|
|
h.heap[o] = &indirect{mgr: m}
|
|
h.heap[o] = &indirect{mgr: m}
|
|
|
|
+ default:
|
|
|
|
+ panic(fmt.Sprintln("wrong object type", reflect.TypeOf(o)))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
m.areas.PushFront(h)
|
|
m.areas.PushFront(h)
|
|
@@ -103,7 +105,7 @@ func (m *manager) set(a *area, o object.Object, val node.Node) {
|
|
switch val.(type) {
|
|
switch val.(type) {
|
|
case node.ConstantNode:
|
|
case node.ConstantNode:
|
|
switch o.(type) {
|
|
switch o.(type) {
|
|
- case object.VariableObject:
|
|
|
|
|
|
+ case object.VariableObject, object.FieldObject:
|
|
m.Update(o, func(old interface{}) interface{} {
|
|
m.Update(o, func(old interface{}) interface{} {
|
|
return val.(node.ConstantNode).Data()
|
|
return val.(node.ConstantNode).Data()
|
|
})
|
|
})
|
|
@@ -115,9 +117,9 @@ func (m *manager) set(a *area, o object.Object, val node.Node) {
|
|
default:
|
|
default:
|
|
panic("unknown value")
|
|
panic("unknown value")
|
|
}
|
|
}
|
|
- case node.VariableNode, node.ParameterNode:
|
|
|
|
|
|
+ case node.VariableNode, node.ParameterNode, node.FieldNode:
|
|
switch o.(type) {
|
|
switch o.(type) {
|
|
- case object.VariableObject:
|
|
|
|
|
|
+ case object.VariableObject, object.FieldObject:
|
|
m.Update(o, func(old interface{}) interface{} {
|
|
m.Update(o, func(old interface{}) interface{} {
|
|
return m.Select(val.Object())
|
|
return m.Select(val.Object())
|
|
})
|
|
})
|