X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibspiderscript.so_src%2Fmain.c;h=bd2928050835948f05e243b60cfde63afc1193ae;hb=a01827f4eeade250266325ce61f829175de2dba8;hp=d6cd722e2ea0773e7ac894d816db9095e2789a9a;hpb=239f2374299c1471a40b1087725b32f3f163d9b3;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libspiderscript.so_src/main.c b/Usermode/Libraries/libspiderscript.so_src/main.c index d6cd722e..bd292805 100644 --- a/Usermode/Libraries/libspiderscript.so_src/main.c +++ b/Usermode/Libraries/libspiderscript.so_src/main.c @@ -30,15 +30,11 @@ int SoMain() */ tSpiderScript *SpiderScript_ParseFile(tSpiderVariant *Variant, const char *Filename) { - char cacheFilename[strlen(Filename)+6+1]; char *data; int fLen; FILE *fp; tSpiderScript *ret; - strcpy(cacheFilename, Filename); - strcat(cacheFilename, ".cache"); - fp = fopen(Filename, "r"); if( !fp ) { return NULL; @@ -77,29 +73,53 @@ tSpiderScript *SpiderScript_ParseFile(tSpiderVariant *Variant, const char *Filen // HACK!! + #if 1 + // - Save AST to a file { - size_t size; - - printf("Total Size: "); fflush(stdout); - size = AST_WriteScript(NULL, ret); - printf("0x%x bytes\n", (unsigned)size); - - fp = fopen(cacheFilename, "wb"); - if(!fp) return ret; - - data = malloc(size); - size = AST_WriteScript(data, ret); - fwrite(data, size, 1, fp); - free(data); - fclose(fp); + char cacheFilename[strlen(Filename)+6+1]; + strcpy(cacheFilename, Filename); + strcat(cacheFilename, ".ast"); + + SpiderScript_SaveAST(ret, cacheFilename); + } + #endif + // - Save Bytecode too + { + char cacheFilename[strlen(Filename)+6+1]; + strcpy(cacheFilename, Filename); + strcat(cacheFilename, ".bc"); + + SpiderScript_SaveBytecode(ret, cacheFilename); } return ret; } -int SpiderScript_SaveBytecode(tSpiderScript *Script, const char *DestFile) +int SpiderScript_SaveAST(tSpiderScript *Script, const char *Filename) { - return Bytecode_ConvertScript(Script, DestFile); + size_t size; + FILE *fp; + void *data; + printf("Total Size: "); + fflush(stdout); + size = AST_WriteScript(NULL, Script); + printf("0x%x bytes\n", (unsigned)size); + + fp = fopen(Filename, "wb"); + if(!fp) return 1; + + data = malloc(size); + if(!data) { + fclose(fp); + return -1; + } + + size = AST_WriteScript(data, Script); + fwrite(data, size, 1, fp); + free(data); + + fclose(fp); + return 0; } /**