_lanes = {} _stacks = {} _last_name = {} _being_towed = {} _reset_last_name(block_type=null) if block_type == null block_type = called-from[1] if block_type in _last_name remove(_last_name, block_type) _set_last_name(name, block_type=null) if block_type == null block_type = called-from[1] _last_name[block_type] = name _get_last_name(block_type) if block_type == null block_type = called-from[1] if block_type in _last_name return _last_name[block_type] else return null _current_block_type() return called-from[1] _call_stack_till_first(block_type) striped = slice(called-from, 2) block_index = (index(striped, block_type)) if block_index == null if length(striped) <= 1 return (striped ()) return slice(striped, 1) stack = () for i in (0..block_index) push(stack, striped[i]) return stack _push_onto_stack(block, block_type=null) if block_type == null block_type = called-from[1] if block_type in _stacks stack = _stacks[block_type] else stack = () push(stack, block) _stacks[block_type] = stack _pop_from_stack(block_type=null) if block_type == null block_type = called-from[1] if block_type in _stacks stack = _stacks[block_type] b = pop(stack) if length(stack) > 0 _stacks[block_type] else remove(_stacks, block_type) return b return null _pop_stack(block_type=null) if block_type == null block_type = called-from[1] if block_type in _stacks stack = _stacks[block_type] remove(_stacks, block_type) return stack else return () _add_to_lane(key, value, block_type=null) if block_type == null block_type = called-from[1] if block_type in _lanes lane = _lanes[block_type] else lane = {} if key in lane stack = lane[key] else stack = () push(stack, value) lane[key] = stack _lanes[block_type] = lane _put_into_lane(key, value, block_type=null) if block_type == null block_type = called-from[1] if block_type in _lanes lane = _lanes[block_type] else lane = {} lane[key] = value _lanes[block_type] = lane _pop_lane(block_type=null) if block_type == null block_type = called-from[1] if block_type in _lanes lane = _lanes[block_type] remove(_lanes, block_type) return lane else return {} attach(parent_type, suffix, block) _being_towed[_current_block_type()] = true call_stack = _call_stack_till_first(parent_type) if parent_type in call_stack // We are called inside a block _push_onto_stack(block) //Detect if the selector will be generated //by an earlier call of RV-Element if not _current_block_type() in (call_stack) block_list = _pop_stack() _put_into_lane(suffix, block_list, parent_type) else // We are not called inside a block // Is there a block to attach to _last_parent_name = _get_last_name(parent_type) if _last_parent_name != null & .{_last_parent_name} .{_last_parent_name}{suffix} {block} tow(name, block, block_type=null) if block_type == null // Determining if we are inside a block or after a block block_type = called-from[0] .{name} {block} if block_type in _lanes for suffix, block_list in _pop_lane(block_type) p(name suffix selector()) &{name}{suffix} for current_block in block_list {current_block} _set_last_name(name, block_type)