| #ifndef SCOPE_H |
| #define SCOPE_H |
| /* |
| * Symbol scoping is pretty simple. |
| * |
| * Copyright (C) 2003 Transmeta Corp. |
| * 2003 Linus Torvalds |
| * |
| * Licensed under the Open Software License version 1.1 |
| */ |
| |
| struct scope { |
| struct token *token; /* Scope start information */ |
| struct symbol_list *symbols; /* List of symbols in this scope */ |
| struct scope *next; |
| }; |
| |
| extern struct scope |
| *block_scope, |
| *function_scope, |
| *file_scope, |
| *global_scope; |
| |
| static inline int toplevel(struct scope *scope) |
| { |
| return scope == file_scope || scope == global_scope; |
| } |
| |
| extern void start_file_scope(void); |
| extern void end_file_scope(void); |
| extern void new_file_scope(void); |
| |
| extern void start_symbol_scope(void); |
| extern void end_symbol_scope(void); |
| |
| extern void start_function_scope(void); |
| extern void end_function_scope(void); |
| |
| extern void bind_scope(struct symbol *, struct scope *); |
| |
| extern int is_outer_scope(struct scope *); |
| #endif |