
{ Clp$evaluate_real_expression is intended to be an INLINE procedure but
{ cannot be at present because of a CYBIL problem.

  PROCEDURE clp$evaluate_real_expression
    (    min_real_result: longreal;
         max_real_result: longreal;
     VAR work_area {input} : ^clt$work_area;
     VAR parse {input, output} : clt$parse_state;
     VAR result: clt$real;
     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;
    type_description.kinds := $clt$type_kinds [clc$real_type];
    type_description.kind := clc$real_type;
    #UNCHECKED_CONVERSION (min_real_result,
          type_description.min_real_value.long_real);
    #UNCHECKED_CONVERSION (max_real_result,
          type_description.max_real_value.long_real);

    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^.real_value;
      IFEND;
    IFEND;

  PROCEND clp$evaluate_real_expression;

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