/* This file is machine generated by stheaders: */

#ifndef STHEADERS_H
#define STHEADERS_H

#ifndef ROUTINE_INFO_TYPES
#include "routine_info_types.h"
#endif

enum type__tag__enum {
    type__tag__enumeration,
    type__tag__record,
    type__tag__variant
};

enum variable__flavor__enum {
    variable__flavor__unparam,
    variable__flavor__static,
    variable__flavor__block
};

enum variable__kind__enum {
    variable__kind__argument,
    variable__kind__variable,
    variable__kind__return
};

#define break___point(number) \
	activation__object.breakpoint = number; \
	if ((activation__object.breakpoints[number>>3] & (1 << (number & 7))) != 0) \
		run__time__breakpoint()

typedef struct activation__object__struct activation___object;
typedef struct enumeration__object__struct enumeration___object;
typedef struct instantiation__object__struct instantiation___object;
typedef struct module__object__struct module___object;
typedef struct object__object__struct object___object;
typedef struct object__use__struct object___use;
typedef struct need__entry__struct need___entry;
typedef void (*print__param__routine)(void *, void *, void *);
typedef struct print__proc__var__struct print__proc__var;
typedef void (*print__unparam__routine)(void *, void *);
typedef struct proc__var__type__struct proc__var__type;
typedef struct record__object__struct record___object;
typedef struct routine__object__struct routine___object;
typedef struct routine__params__struct routine___params;
typedef struct routine__use__struct routine___use;
typedef struct run__time__struct *run___time;
typedef struct signal__object__struct signal___object;
typedef struct type__reference__struct type___reference;
typedef enum type__tag__enum type___tag;
typedef struct type__object__struct type___object;
typedef enum variable__flavor__enum variable___flavor;
typedef enum variable__kind__enum variable___kind;
typedef struct variant__object__struct variant___object;
typedef struct variable__object__struct variable___object;
typedef union which__object__union which___object;

struct activation__object__struct {
    int breakpoint;
    char *breakpoints;
    void *frame;
    activation___object *previous;
    routine___object *routine;
};

struct enumeration__object__struct {
    int item_count;
    char **item_names;
};

struct instantiation__object__struct {
    int parameters_count;
    type___reference **parameters;
    void *object_or_routine;
    instantiation___object *next;
};

struct need__entry__struct {
    char *name;
    char *type_name;
    int parameter_count;
    type___reference **parameters;
    int is_routine;
    int offset;
};

struct module__object__struct {
    char *package_name;
    char *module_name;
    char *file_name;
    char *generate_name;
    int generate_boundary;
    int object_count;
    object___object **objects;
    int type_count;
    type___object **types;
    int routine_count;
    routine___object **routines;
    int routine_uses_count;
    routine___use **routine_uses;
    int object_uses_count;
    object___use **object_uses;
    int initial_object_uses_count;
    type___reference **initial_object_uses;
    void **initial_object_addresses;
};

struct object__object__struct {
    char *package_name;
    char *type_name;
    char *object_name;
    type___reference *object_type;
    int *bytes;
    int static_needs_count;
    need___entry *static_needs;
    int parameter_needs_count;
    need___entry *parameter_needs;
    void **object_pointer;
    instantiation___object *instantiations;
};

struct object__use__struct {
    char *package_name;
    char *type_name;
    char *routine_name;
    type___reference *type;
};

struct print__proc__var__struct {
    print__param__routine routine;
    void *block;
};

struct proc__var__type__struct {
    void *(*routine)(void);
    void *block;
};

struct record__object__struct {
    int field_count;
    char **field_names;
    type___reference **field_types;
};

struct routine__object__struct {
    char *info;
    int *counts;
    routine__info__type routine_info;
    module___object *module;
    int variables_count;
    variable___object *variables;
    void *routine_address;
    routine___params *routine_params;
};

struct routine__params__struct {
    int static_needs_count;
    need___entry *static_needs;
    void *static_need_object;
    int parameter_needs_count;
    need___entry *parameter_needs;
    int parameter_need_object_size;
};

struct routine__use__struct {
    char *package_name;
    char *type_name;
    char *routine_name;
    int signature;
};

struct signal__object__struct {
    char *name;
    int count;
    type___reference **value_types;
};

struct type__reference__struct {
    char *name;
    int count;
    type___reference **parameters;
};

struct variable__object__struct {
    variable___kind kind;
    char *name;
    int offset;
    variable___flavor flavor;
    void *print_routine;
};

struct variant__object__struct {
    char *tag_name;
    type___reference *tag_type;
    int field_count;
    char **field_names;
    type___reference **field_types;
};

union which__object__union {
    enumeration___object *enumeration;
    record___object *record;
    variant___object *variant;
};

struct type__object__struct {
    char *package_name;
    char *type_name;
    int parameter_count;
    char **parameter_names;
    type___tag type_tag;
    which___object which;
    int routine_count;
    routine___object *routines;
    module___object *module;
};

#endif /* STHEADERS_H */
