int current_line=1;
int current_column=0;
char* current_filename=0;
+char* current_filename_short=0;
include_dir_t* current_include_dirs=0;
#define MAX_INCLUDE_DEPTH 16
int line_stack[MAX_INCLUDE_DEPTH];
int column_stack[MAX_INCLUDE_DEPTH];
char* filename_stack[MAX_INCLUDE_DEPTH];
+char* shortfilename_stack[MAX_INCLUDE_DEPTH];
include_dir_t* includedir_stack[MAX_INCLUDE_DEPTH];
int include_stack_ptr = 0;
}
return 0;
}
+ if(!i) {
+ as3_warning("Include directory stack is empty, while looking for file %s", filename);
+ }
while(i) {
char*p = concat_paths(i->path, filename);
fi = fopen(p, "rb");
char*enter_file(char*filename, void*state)
{
+ filename = strdup(filename);
+
if(include_stack_ptr >= MAX_INCLUDE_DEPTH) {
- syntaxerror("Includes nested too deeply");
+ as3_error("Includes nested too deeply");
exit(1);
}
char*fullfilename = find_file(filename);
if(!fullfilename) {
- syntaxerror("Couldn't find file %s", filename);
+ as3_error("Couldn't find file %s", filename);
include_dir_t*i = current_include_dirs;
while(i) {
fprintf(stderr, "include dir: %s\n", i->path);
include_stack[include_stack_ptr] = state;
line_stack[include_stack_ptr] = current_line;
column_stack[include_stack_ptr] = current_column;
+ shortfilename_stack[include_stack_ptr] = current_filename_short;
filename_stack[include_stack_ptr] = current_filename;
includedir_stack[include_stack_ptr] = current_include_dirs;
add_include_dir(get_path(fullfilename));
current_line=1;
current_column=0;
- current_filename=fullfilename;
+ current_filename = fullfilename;
+ current_filename_short = filename;
return fullfilename;
}
void* leave_file()
{
dbg("leaving file %s", current_filename);
- if(--include_stack_ptr<0) {
+ if(--include_stack_ptr<=0) {
return 0;
} else {
+ free(current_filename);current_filename = filename_stack[include_stack_ptr];
+ free(current_filename_short);current_filename_short = shortfilename_stack[include_stack_ptr];
current_column = column_stack[include_stack_ptr];
current_line = line_stack[include_stack_ptr];
- free(current_filename);current_filename=0;
- current_filename = filename_stack[include_stack_ptr];
current_include_dirs = includedir_stack[include_stack_ptr];
return include_stack[include_stack_ptr];
}