static Proto* load(const char* filename) { Proto* tf; ZIO z; char source[512]; FILE* f; int c,undump; if (filename==NULL) { f=stdin; filename="(stdin)"; } else f=efopen(filename,"r"); c=ungetc(fgetc(f),f); if (ferror(f)) { fprintf(stderr,"luac: cannot read from "); perror(filename); exit(1); } undump=(c==ID_CHUNK); if (undump && f!=stdin) { fclose(f); f=efopen(filename,"rb"); } sprintf(source,"@%.*s",Sizeof(source)-2,filename); luaZ_Fopen(&z,f,source); tf = undump ? luaU_undump(L,&z) : luaY_parser(L,&z); if (f!=stdin) fclose(f); return tf; }
static void f_parser (lua_State *L, void *ud) { struct ParserS *p = (struct ParserS *)ud; Proto *tf = p->bin ? luaU_undump(L, p->z) : luaY_parser(L, p->z); luaV_Lclosure(L, tf, 0); }