
  PROCEDURE [INLINE] clp$evaluate_status_expression
    (VAR work_area {input} : ^clt$work_area;
     VAR parse {input, output} : clt$parse_state;
     VAR result: ost$status;
     VAR status: ost$status);

?? PUSH (LISTEXT := ON) ??

    VAR
      ignore_result_type_description: ^clt$type_description,
      original_work_area: ^clt$work_area,
      type_description: clt$type_description,
      value: ^clt$data_value;


    type_description.specification := NIL;
    type_description.name := NIL;
    type_description.derived_from_value_kind_spec := FALSE;
    type_description.advanced_keywords_present := FALSE;
*IF NOT $true(osv$unix)
    type_description.kinds := $clt$type_kinds [clc$status_type];
*ELSE
    type_description.kinds := $clt$type_kinds_v2 [clc$status_type];
*IFEND
    type_description.kind := clc$status_type;

    original_work_area := work_area;
    clp$internal_evaluate_expr (parse, ^type_description, work_area,
          ignore_result_type_description, value, status);
    work_area := original_work_area;

    IF status.normal THEN
      IF value^.kind = clc$unspecified THEN
        osp$set_status_abnormal ('CL', cle$unspecified_value_for_req,
              'clp$evaluate_expression', status);
      ELSE
        result := value^.status_value^;
      IFEND;
    IFEND;

  PROCEND clp$evaluate_status_expression;

*copyc cle$ecc_parsing
*copyc clt$parse_state
*copyc clt$work_area
*copyc ost$status
?? POP ??
*copyc clp$internal_evaluate_expr
*copyc osp$set_status_abnormal
