FlowControl.pxd 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. from __future__ import absolute_import
  2. cimport cython
  3. from .Visitor cimport CythonTransform, TreeVisitor
  4. cdef class ControlBlock:
  5. cdef public set children
  6. cdef public set parents
  7. cdef public set positions
  8. cdef public list stats
  9. cdef public dict gen
  10. cdef public set bounded
  11. cdef public dict input
  12. cdef public dict output
  13. # Big integer it bitsets
  14. cdef public object i_input
  15. cdef public object i_output
  16. cdef public object i_gen
  17. cdef public object i_kill
  18. cdef public object i_state
  19. cpdef bint empty(self)
  20. cpdef detach(self)
  21. cpdef add_child(self, block)
  22. cdef class ExitBlock(ControlBlock):
  23. cpdef bint empty(self)
  24. cdef class NameAssignment:
  25. cdef public bint is_arg
  26. cdef public bint is_deletion
  27. cdef public object lhs
  28. cdef public object rhs
  29. cdef public object entry
  30. cdef public object pos
  31. cdef public set refs
  32. cdef public object bit
  33. cdef public object inferred_type
  34. cdef class AssignmentList:
  35. cdef public object bit
  36. cdef public object mask
  37. cdef public list stats
  38. cdef class AssignmentCollector(TreeVisitor):
  39. cdef list assignments
  40. @cython.final
  41. cdef class ControlFlow:
  42. cdef public set blocks
  43. cdef public set entries
  44. cdef public list loops
  45. cdef public list exceptions
  46. cdef public ControlBlock entry_point
  47. cdef public ExitBlock exit_point
  48. cdef public ControlBlock block
  49. cdef public dict assmts
  50. cpdef newblock(self, ControlBlock parent=*)
  51. cpdef nextblock(self, ControlBlock parent=*)
  52. cpdef bint is_tracked(self, entry)
  53. cpdef bint is_statically_assigned(self, entry)
  54. cpdef mark_position(self, node)
  55. cpdef mark_assignment(self, lhs, rhs, entry)
  56. cpdef mark_argument(self, lhs, rhs, entry)
  57. cpdef mark_deletion(self, node, entry)
  58. cpdef mark_reference(self, node, entry)
  59. @cython.locals(block=ControlBlock, parent=ControlBlock, unreachable=set)
  60. cpdef normalize(self)
  61. @cython.locals(bit=object, assmts=AssignmentList,
  62. block=ControlBlock)
  63. cpdef initialize(self)
  64. @cython.locals(assmts=AssignmentList, assmt=NameAssignment)
  65. cpdef set map_one(self, istate, entry)
  66. @cython.locals(block=ControlBlock, parent=ControlBlock)
  67. cdef reaching_definitions(self)
  68. cdef class Uninitialized:
  69. pass
  70. cdef class Unknown:
  71. pass
  72. cdef class MessageCollection:
  73. cdef set messages
  74. @cython.locals(dirty=bint, block=ControlBlock, parent=ControlBlock,
  75. assmt=NameAssignment)
  76. cdef check_definitions(ControlFlow flow, dict compiler_directives)
  77. @cython.final
  78. cdef class ControlFlowAnalysis(CythonTransform):
  79. cdef object gv_ctx
  80. cdef object constant_folder
  81. cdef set reductions
  82. cdef list env_stack
  83. cdef list stack
  84. cdef object env
  85. cdef ControlFlow flow
  86. cdef bint in_inplace_assignment
  87. cpdef mark_assignment(self, lhs, rhs=*)
  88. cpdef mark_position(self, node)