void REPL(bool verbose){ Context *globalContext = context_new(); context_enterScope(globalContext); fillOpTable(globalContext); int ext_num = loadExtensions(EXT_LOCATION, globalContext); printf("Loaded %d extensions\n", ext_num); import(globalContext, "stl.x"); int n_bytes = 100; char *source = malloc(n_bytes + 1); for(int i = 0;i < n_bytes + 1;i++) source[i] = 0; while (1){ getline(&source, &n_bytes, stdin); //printf("%s\n", source); TokenStream ts; fillTokenStream(&ts, source); while(!isEndOfStream(&ts)){ Node head = parse(&ts, 0); if(verbose) printTree(head, 0); ObjectNode *node = execute(globalContext, &head); printf("res>"); printObjectNode(node); printf("\n"); } } // closeExtensions(lib_handle, ext_num); context_leaveScope(globalContext); }
void testExecute(const char *source, bool verbose){ LOG("testExecuteSecond", "begin"); Context *globalContext = context_new(); context_enterScope(globalContext); LOG("testExecuteSecond", "filling op table"); fillOpTable(globalContext); LOG("testExecuteSecond", "loading extensions"); int ext_num = loadExtensions(EXT_LOCATION, globalContext); printf("Loaded %d extensions\n", ext_num); LOG("testExecuteSecond", "op table filled"); import(globalContext, "stl.x"); TokenStream ts; LOG("testExecuteSecond", "starting fill token stream"); fillTokenStream(&ts, source); LOG("testExecuteSecond", "token stream filled"); while(!isEndOfStream(&ts)){ LOG("testExecuteSecond", "calling parse"); Node head = parse(&ts, 0); LOG("testExecuteSecond", "returning form parse"); LOG("TestExecuteSecond", "calling execute"); if(verbose) printTree(head, 0); LOG("testExecuteSecond", "calling execute"); ObjectNode *node = execute(globalContext, &head); if(verbose){ printf("res>"); printObjectNode(node); printf("\n"); } } // closeExtensions(lib_handle, ext_num); context_leaveScope(globalContext); }
FFmpegFrame::~FFmpegFrame() { LOGNS(Omm::AvStream, avstream, trace, "frame dtor ..."); if (isEndOfStream()) { LOG(ffmpeg, trace, "video frame dtor, end of stream frame"); } else if (_pAvPacket) { // called for non-decoded packets LOG(ffmpeg, trace, "delete " + getName() + " dtor, ffmpeg::av_free_packet() ..."); av_free_packet(_pAvPacket); LOG(ffmpeg, trace, "delete " + getName() + " dtor, ffmpeg::av_free() ..."); av_free(_pAvPacket); _pAvPacket = 0; _data = 0; _size = 0; } else if (_pAvFrame) { // called for Stream::_pDecodedVideoFrame LOG(ffmpeg, trace, "video frame dtor, delete _pAvFrame"); av_free(_pAvFrame); _pAvFrame = 0; } else if (_data) { // called for Stream::_pDecodedAudioFrame LOGNS(Omm::AvStream, avstream, trace, "audio frame dtor, delete _data, size " + Poco::NumberFormatter::format(size())); delete _data; _data = 0; _size = 0; } LOGNS(Omm::AvStream, avstream, trace, "frame dtor finished."); }
void import(Context *context, const char *fname){ LOG("import", "begin"); const char *source = readFileAsLine(fname); LOG("import", "file read"); TokenStream ts; LOG("import", "filling token stream"); //printf(">[%s] [%s]\n",fname, source); fillTokenStream(&ts, source); LOG("import", "token stream filled"); while(!isEndOfStream(&ts)){ LOG("import", "calling parse"); Node head = parse(&ts, 0); LOG("import", "returned from parse"); LOG("import", "calling execute"); ObjectNode *node = execute(context, &head); LOG("import", "returned from execute"); } }
char* skipLine(char* it, char* end, std::size_t& num) { std::size_t cnt = 0; while (!isEndOfStream(it, end) && !isNewLine(*it)) { ++it; ++cnt; } while (it != end && isNewLine(*it)) { ++it; ++cnt; } num = cnt; return it; }