/* %Z%%M% %I% %E% */

/*
 * Copyright (c) 1990, 1991, 1992, 1993, 1995 by Wayne C. Gramlich.
 * All rights reserved.
 *
 * Permission to use, copy, modify, distribute, and sell this software
 * for any purpose is hereby granted without fee provided that the above
 * copyright notice and this permission are retained.  The author makes
 * no representations about the suitability of this software for any purpose.
 * It is provided "as is" without express or implied warranty.
 */

/* This file defines all of the type definitions need for call objects: */

#ifndef CALL_TYPES_H
#define CALL_TYPES_H

typedef struct Call_struct		*Call;
typedef struct Call_assign_struct	*Call_assign;
typedef struct Call_binary_struct	*Call_binary;
typedef struct Call_cast_struct		*Call_cast;
typedef struct Call_if_struct		*Call_if;
typedef struct Call_invoke_struct	*Call_invoke;
typedef struct Call_multi_struct	*Call_multi;
typedef struct Call_routine_struct	*Call_routine;
typedef struct Call_routine_param_struct *Call_routine_param;
typedef struct Call_temp_struct		*Call_temp;
typedef struct Call_var_struct		*Call_var;
typedef union Call_value_union		Call_value;
typedef struct Convert_struct		*Convert;

/* Defining the enum here shuts alint up! */
enum Call_type_enum {
	Call_type_and_if,		/* <call> && <call> */
	Call_type_assign,		/* var := <call>( */
	Call_type_cast,			/* (type_ref) <call> */
	Call_type_error,		/* error */
	Call_type_if,			/* <call> ? <call> : <call> */
	Call_type_integer,		/* <integer> */
	Call_type_invoke,		/* <call>(... */
	Call_type_multi,		/* temp1, ..., tempN := <call>(... */
	Call_type_not,			/* !<call> */
	Call_type_object,		/* contant object reference */
	Call_type_or_if,		/* <call> && <call> */
	Call_type_routine,		/* <type_ref>@<routine_name> */
	Call_type_routine_param,	/* Routine parameter block */
	Call_type_string,		/* "String" */
	Call_type_temp,			/* Temporary variable */
	Call_type_text,			/* 'text' */
	Call_type_var			/* <var> */
};

typedef enum Call_type_enum		Call_type;

#endif /* CALL_TYPES_H */
