- # Current knowledge about escapable blocks
- readable writable var _escapable_ctx: EscapableContext = new EscapableContext(self)
+ # Mark a local variable as set
+ fun mark_is_set(va: Variable)
+ do
+ if flow_ctx.is_set(va) then return
+ flow_ctx = flow_ctx.sub_setvariable(va)
+ end
+
+ # Mark the flow context as unreashable
+ fun mark_unreash(n: ANode)
+ do
+ flow_ctx = flow_ctx.sub_unreash(n)
+ end
+
+ # Enter in an expression as inside a new local variable scope
+ fun enter_visit_block(node: nullable AExpr)
+ do
+ if node == null then return
+ scope_ctx.push(node)
+ enter_visit(node)
+ scope_ctx.pop
+ end
+
+ # Non-bypassable knowledge about variables names and types
+ fun base_flow_ctx: FlowContext do return _base_flow_ctx.as(not null)
+ writable var _base_flow_ctx: nullable FlowContext