
    WHILE current_block <> NIL DO
      IF (inherited_input_block <> NIL) AND (#OFFSET (inherited_input_block) = #OFFSET (current_block)) AND
            NOT associated_utility THEN
        allowed_classes := inherited_input_allowed_classes;
        inherited_input_block := NIL;
      IFEND;

      CASE current_block^.kind OF

      = clc$command_proc_block, clc$function_proc_block, clc$utility_block, clc$when_block =
        RETURN;

      = clc$input_block =
        IF current_block^.input.internal THEN
          ;
        ELSEIF current_block^.inherited_input.found AND (inherited_input_block = NIL) THEN
          inherited_input_block := current_block^.inherited_input.block;
          inherited_input_allowed_classes := allowed_classes;
        ELSEIF (current_block^.associated_utility <> NIL) AND (inherited_input_block = NIL) AND
              current_block^.associated_utility^.command_environment.command_level THEN
          inherited_input_block := current_block^.associated_utility;
          associated_utility := TRUE;
        IFEND;

      = clc$task_block =
        IF (NOT current_block^.synchronous_with_parent) OR
              (current_block^.task_kind = clc$task_statement_task) THEN
          RETURN;
        IFEND;

      ELSE
        ;
      CASEND;

      IF current_block^.static_link <> NIL THEN
        current_block := current_block^.static_link;
      ELSE
        current_block := current_block^.previous_block;
      IFEND;
    WHILEND;
