void LookupInsert(Cache_BlockCFG *cache, BlockId *id) { Assert(id->Kind() == B_Function || id->Kind() == B_Loop); String *function = id->Function(); const char *function_name = function->Value(); if (!DoLookupTransaction(BODY_DATABASE, function_name, &scratch_buf)) { id->IncRef(cache); cache->Insert(id, NULL); return; } Buffer read_buf(scratch_buf.base, scratch_buf.pos - scratch_buf.base); Vector<BlockCFG*> cfg_list; BlockCFG::ReadList(&read_buf, &cfg_list); scratch_buf.Reset(); for (size_t ind = 0; ind < cfg_list.Size(); ind++) { BlockCFG *cfg = cfg_list[ind]; BlockId *id = cfg->GetId(); id->IncRef(cache); cfg->MoveRef(NULL, cache); cache->Insert(id, cfg); } }
void LookupInsert(Cache_Initializer *cache, String *var) { if (!DoLookupTransaction(INIT_DATABASE, var->Value(), &scratch_buf)) { var->IncRef(cache); cache->Insert(var, NULL); return; } Buffer read_buf(scratch_buf.base, scratch_buf.pos - scratch_buf.base); BlockCFG *cfg = BlockCFG::Read(&read_buf); scratch_buf.Reset(); var->IncRef(cache); cfg->MoveRef(NULL, cache); cache->Insert(var, cfg); }