#ifndef _DPAS_SCOPE_H
#define _DPAS_SCOPE_H
#ifdef __cplusplus
extern "C" {
#endif
#define DPAS_ITEM_TYPE 1
#define DPAS_ITEM_VARIABLE 2
#define DPAS_ITEM_GLOBAL_VARIABLE 3
#define DPAS_ITEM_CONSTANT 4
#define DPAS_ITEM_PROCEDURE 5
#define DPAS_ITEM_WITH 6
#define DPAS_ITEM_FUNC_RETURN 7
typedef struct dpas_scope *dpas_scope_t;
typedef struct dpas_scope_item *dpas_scope_item_t;
dpas_scope_t dpas_scope_create(dpas_scope_t parent);
void dpas_scope_destroy(dpas_scope_t scope);
dpas_scope_item_t dpas_scope_lookup(dpas_scope_t scope,
const char *name, int up);
void dpas_scope_add(dpas_scope_t scope, const char *name, jit_type_t type,
int kind, void *info, jit_meta_free_func free_info,
char *filename, long linenum);
void dpas_scope_add_with(dpas_scope_t scope, jit_type_t type,
void *with_info, jit_meta_free_func free_info);
void dpas_scope_add_const(dpas_scope_t scope, const char *name,
jit_constant_t *value, char *filename, long linenum);
void dpas_scope_check_undefined(dpas_scope_t scope);
const char *dpas_scope_item_name(dpas_scope_item_t item);
int dpas_scope_item_kind(dpas_scope_item_t item);
jit_type_t dpas_scope_item_type(dpas_scope_item_t item);
void *dpas_scope_item_info(dpas_scope_item_t item);
void dpas_scope_item_set_info(dpas_scope_item_t item, void *info);
const char *dpas_scope_item_filename(dpas_scope_item_t item);
long dpas_scope_item_linenum(dpas_scope_item_t item);
int dpas_scope_level(dpas_scope_t scope);
dpas_scope_t dpas_scope_current(void);
dpas_scope_t dpas_scope_global(void);
dpas_scope_t dpas_scope_push(void);
void dpas_scope_pop(void);
int dpas_scope_is_module(void);
#ifdef __cplusplus
};
#endif
#endif