2 * Acess2 - SpiderScript
8 #include <spiderscript.h>
10 #include "bytecode_gen.h"
13 extern tAST_Script *Parse_Buffer(tSpiderVariant *Variant, const char *Buffer, const char *Filename);
14 extern tAST_Variable *Variable_Define(tAST_BlockState *Block, int Type, const char *Name);
15 extern void Variable_SetValue(tAST_BlockState *Block, const char *Name, tSpiderValue *Value);
16 extern void Variable_Destroy(tAST_Variable *Variable);
20 * \brief Library Entry Point
28 * \brief Parse a script
30 tSpiderScript *SpiderScript_ParseFile(tSpiderVariant *Variant, const char *Filename)
32 char cacheFilename[strlen(Filename)+6+1];
38 strcpy(cacheFilename, Filename);
39 strcat(cacheFilename, ".cache");
41 fp = fopen(Filename, "r");
46 fseek(fp, 0, SEEK_END);
48 fseek(fp, 0, SEEK_SET);
50 // Allocate and read data
51 data = malloc(fLen + 1);
52 if(!data) return NULL;
53 fLen = fread(data, 1, fLen, fp);
63 ret = malloc(sizeof(tSpiderScript));
64 ret->Variant = Variant;
66 ret->CurNamespace = NULL;
67 ret->Script = Parse_Buffer(Variant, data, Filename);
68 if( ret->Script == NULL ) {
81 printf("Total Size: "); fflush(stdout);
82 size = AST_WriteScript(NULL, ret->Script);
83 printf("0x%x bytes\n", (unsigned)size);
85 fp = fopen(cacheFilename, "wb");
89 size = AST_WriteScript(data, ret->Script);
90 fwrite(data, size, 1, fp);
98 int SpiderScript_SaveBytecode(tSpiderScript *Script, const char *DestFile)
100 return Bytecode_ConvertScript(Script, DestFile);
104 * \brief Free a script
106 void SpiderScript_Free(tSpiderScript *Script)
108 tAST_Function *fcn = Script->Script->Functions;
109 tAST_Function *nextFcn;
110 tAST_Node *var, *nextVar;
116 AST_FreeNode( fcn->Code );
118 var = fcn->Arguments;
121 nextVar = var->NextSibling;
131 // TODO: Pass this off to AST for a proper cleanup
132 free(Script->Script);