git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed bug in test case
[swftools.git]
/
lib
/
as3
/
compiler.c
diff --git
a/lib/as3/compiler.c
b/lib/as3/compiler.c
index
aac60c7
..
89b746e
100644
(file)
--- a/
lib/as3/compiler.c
+++ b/
lib/as3/compiler.c
@@
-27,6
+27,9
@@
#include "parser.tab.h"
#include "compiler.h"
#include "../os.h"
#include "parser.tab.h"
#include "compiler.h"
#include "../os.h"
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif
@@
-50,6
+53,9
@@
static char parser_initialized = 0;
//#define STORE_TOKENS
//#define STORE_TOKENS
+//#define DEBUG
+#define DEBUG if(0)
+
#ifdef STORE_TOKENS
static mem_t tokens;
#endif
#ifdef STORE_TOKENS
static mem_t tokens;
#endif
@@
-96,11
+102,11
@@
static void as3_parse_file_or_array(int pass, const char*name, const char*filena
FILE*fi = 0;
if(filename) {
FILE*fi = 0;
if(filename) {
- //printf("[pass %d] parse file %s %s\n", pass, name, filename);
+ DEBUG printf("[pass %d] parse file %s %s\n", pass, name, filename);
fi = enter_file2(name, filename, 0);
as3_file_input(fi);
} else {
fi = enter_file2(name, filename, 0);
as3_file_input(fi);
} else {
- //printf("[pass %d] parse bytearray %s (%d bytes)\n", pass, name, length);
+ DEBUG printf("[pass %d] parse bytearray %s (%d bytes)\n", pass, name, length);
enter_file(name, name, 0);
as3_buffer_input(mem, length);
}
enter_file(name, name, 0);
as3_buffer_input(mem, length);
}
@@
-123,7
+129,7
@@
dict_t*scheduled_dict=0;
void as3_parse_scheduled(int pass)
{
void as3_parse_scheduled(int pass)
{
- //printf("[pass %d] parse scheduled\n", pass);
+ DEBUG printf("[pass %d] parse scheduled\n", pass);
while(scheduled) {
scheduled_file_t*s = scheduled;
while(scheduled) {
scheduled_file_t*s = scheduled;
@@
-144,17
+150,21
@@
void as3_parse_scheduled(int pass)
scheduled_dict=0;
}
}
scheduled_dict=0;
}
}
+
void as3_schedule_file(const char*name, const char*filename)
{
void as3_schedule_file(const char*name, const char*filename)
{
- if(!scheduled_dict)
+ if(!scheduled_dict) {
scheduled_dict = dict_new();
scheduled_dict = dict_new();
+ }
+
+ filename = normalize_path(filename);
if(dict_contains(scheduled_dict, filename)) {
return; //already processed
} else {
dict_put(scheduled_dict, filename, 0);
}
if(dict_contains(scheduled_dict, filename)) {
return; //already processed
} else {
dict_put(scheduled_dict, filename, 0);
}
- //printf("[pass %d] schedule %s %s\n", as3_pass, name, filename);
+ DEBUG printf("[pass %d] schedule %s %s\n", as3_pass, name, filename);
NEW(scheduled_file_t, f);
f->name = strdup(name);
NEW(scheduled_file_t, f);
f->name = strdup(name);
@@
-191,6
+201,8
@@
void as3_parse_directory(const char*dir)
{
as3_pass=1;
as3_schedule_directory(dir);
{
as3_pass=1;
as3_schedule_directory(dir);
+ if(!scheduled)
+ as3_warning("Directory %s doesn't contain any ActionScript files", dir);
as3_parse_scheduled(1);
as3_pass=2;
as3_schedule_directory(dir);
as3_parse_scheduled(1);
as3_pass=2;
as3_schedule_directory(dir);
@@
-199,12
+211,14
@@
void as3_parse_directory(const char*dir)
char as3_schedule_directory(const char*dirname)
{
char as3_schedule_directory(const char*dirname)
{
+ DEBUG printf("[pass %d] schedule directory %s\n", as3_pass, dirname);
char ok=0;
#ifdef HAVE_DIRENT_H
include_dir_t*i = current_include_dirs;
while(i) {
char ok=0;
#ifdef HAVE_DIRENT_H
include_dir_t*i = current_include_dirs;
while(i) {
- char*fulldirname = concatPaths(i->path, dirname);
- DIR*dir = opendir(dirname);
+ char*fulldirname = concat_paths(i->path, dirname);
+ DEBUG printf("[pass %d] ... %s\n", as3_pass, fulldirname);
+ DIR*dir = opendir(fulldirname);
if(dir) {
ok = 1;
struct dirent*ent;
if(dir) {
ok = 1;
struct dirent*ent;
@@
-220,7
+234,7
@@
char as3_schedule_directory(const char*dirname)
continue;
if(strncasecmp(&name[l-3], ".as", 3))
continue;
continue;
if(strncasecmp(&name[l-3], ".as", 3))
continue;
- char*fullfilename = concatPaths(dirname, name);
+ char*fullfilename = concatPaths(fulldirname, name);
as3_schedule_file(name, fullfilename);
free(fullfilename);
}
as3_schedule_file(name, fullfilename);
free(fullfilename);
}
@@
-234,6
+248,7
@@
char as3_schedule_directory(const char*dirname)
void as3_schedule_package(const char*package)
{
void as3_schedule_package(const char*package)
{
+ DEBUG printf("[pass %d] schedule package %s\n", as3_pass, package);
char*dirname = strdup(package);
int s=0;
while(dirname[s]) {
char*dirname = strdup(package);
int s=0;
while(dirname[s]) {
@@
-246,6
+261,7
@@
void as3_schedule_package(const char*package)
void as3_schedule_class(const char*package, const char*cls)
{
void as3_schedule_class(const char*package, const char*cls)
{
+ DEBUG printf("[pass %d] schedule class %s.%s\n", as3_pass, package, cls);
if(!cls) {
as3_schedule_package(package);
return;
if(!cls) {
as3_schedule_package(package);
return;