extern tSpiderFunction *gpExports_First;
extern tAST_Variable *Variable_Define(tAST_BlockState *Block, int Type, const char *Name);
extern void Variable_SetValue(tAST_BlockState *Block, const char *Name, tSpiderValue *Value);
+extern void Variable_Destroy(tAST_Variable *Variable);
// === CODE ===
/**
*/
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;
free(data);
+
+ // HACK!!
+ {
+ size_t size;
+
+ printf("Total Size: "); fflush(stdout);
+ size = AST_WriteScript(NULL, ret->Script);
+ printf("0x%x bytes\n", (unsigned)size);
+
+ fp = fopen(cacheFilename, "wb");
+ if(!fp) return ret;
+
+ data = malloc(size);
+ AST_WriteScript(data, ret->Script);
+ fwrite(data, size, 1, fp);
+ free(data);
+ fclose(fp);
+ }
+
return ret;
}
Object_Dereference(ret);
ret = bs.RetVal;
bFound = 1;
+
+ while(bs.FirstVar)
+ {
+ tAST_Variable *nextVar = bs.FirstVar->Next;
+ Variable_Destroy( bs.FirstVar );
+ bs.FirstVar = nextVar;
+ }
}
}
tAST_Node *var, *nextVar;
// Free functions
- while(fcn) {
+ while(fcn)
+ {
+
AST_FreeNode( fcn->Code );
var = fcn->Arguments;