1
0

stack.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package data
  2. import (
  3. "fw/cp"
  4. "fw/cp/node"
  5. "fw/cp/object"
  6. "fw/rt2/context"
  7. "fw/rt2/scope"
  8. "reflect"
  9. "ypk/halt"
  10. )
  11. type area struct {
  12. d context.Domain
  13. all scope.Allocator
  14. }
  15. type salloc struct {
  16. area *area
  17. }
  18. func (a *area) Select(id cp.ID, val scope.ValueOf) {}
  19. func (a *salloc) Join(m scope.Manager) { a.area = m.(*area) }
  20. func (a *area) Target(all ...scope.Allocator) scope.Allocator {
  21. if len(all) > 0 {
  22. a.all = all[0]
  23. }
  24. if a.all == nil {
  25. return &salloc{area: a}
  26. } else {
  27. a.all.Join(a)
  28. return a.all
  29. }
  30. }
  31. func (a *area) String() string { return "fixme" }
  32. func (a *area) Provide(x interface{}) scope.Value {
  33. switch z := x.(type) {
  34. case node.ConstantNode:
  35. return newConst(z)
  36. case object.ProcedureObject:
  37. return newProc(z)
  38. default:
  39. halt.As(100, reflect.TypeOf(z))
  40. }
  41. panic(0)
  42. }
  43. func (a *area) Init(d context.Domain) { a.d = d }
  44. func (a *area) Domain() context.Domain { return a.d }
  45. func (a *area) Handle(msg interface{}) {}
  46. func nn(role string) scope.Manager {
  47. if role == context.SCOPE {
  48. return &area{all: &salloc{}}
  49. } else if role == context.HEAP {
  50. //return &area{all: &halloc{}}
  51. panic(0)
  52. } else {
  53. panic(0)
  54. }
  55. }
  56. func init() {
  57. scope.New = nn
  58. //scope.FindObjByName = fn
  59. }