limex_compile: use bytecode_ptr

This commit is contained in:
Justin Viiret 2017-03-20 15:35:50 +11:00 committed by Matthew Barr
parent befdbb781d
commit 7288da22bd

View File

@ -47,6 +47,7 @@
#include "repeatcompile.h" #include "repeatcompile.h"
#include "util/alloc.h" #include "util/alloc.h"
#include "util/bitutils.h" #include "util/bitutils.h"
#include "util/bytecode_ptr.h"
#include "util/charreach.h" #include "util/charreach.h"
#include "util/compile_context.h" #include "util/compile_context.h"
#include "util/container.h" #include "util/container.h"
@ -1782,7 +1783,7 @@ struct Factory {
static static
void buildRepeats(const build_info &args, void buildRepeats(const build_info &args,
vector<pair<aligned_unique_ptr<NFARepeatInfo>, size_t>> &out, vector<bytecode_ptr<NFARepeatInfo>> &out,
u32 *scratchStateSize, u32 *streamState) { u32 *scratchStateSize, u32 *streamState) {
out.reserve(args.repeats.size()); out.reserve(args.repeats.size());
@ -1794,7 +1795,7 @@ struct Factory {
u32 tableOffset, tugMaskOffset; u32 tableOffset, tugMaskOffset;
size_t len = repeatAllocSize(br, &tableOffset, &tugMaskOffset); size_t len = repeatAllocSize(br, &tableOffset, &tugMaskOffset);
auto info = aligned_zmalloc_unique<NFARepeatInfo>(len); auto info = make_bytecode_ptr<NFARepeatInfo>(len);
char *info_ptr = (char *)info.get(); char *info_ptr = (char *)info.get();
// Collect state space info. // Collect state space info.
@ -1848,7 +1849,7 @@ struct Factory {
*streamState += streamStateLen; *streamState += streamStateLen;
*scratchStateSize += sizeof(RepeatControl); *scratchStateSize += sizeof(RepeatControl);
out.emplace_back(move(info), len); out.emplace_back(move(info));
} }
} }
@ -2156,8 +2157,7 @@ struct Factory {
} }
static static
void writeRepeats(const vector<pair<aligned_unique_ptr<NFARepeatInfo>, void writeRepeats(const vector<bytecode_ptr<NFARepeatInfo>> &repeats,
size_t>> &repeats,
vector<u32> &repeatOffsets, implNFA_t *limex, vector<u32> &repeatOffsets, implNFA_t *limex,
const u32 repeatOffsetsOffset, const u32 repeatOffset) { const u32 repeatOffsetsOffset, const u32 repeatOffset) {
const u32 num_repeats = verify_u32(repeats.size()); const u32 num_repeats = verify_u32(repeats.size());
@ -2170,10 +2170,9 @@ struct Factory {
for (u32 i = 0; i < num_repeats; i++) { for (u32 i = 0; i < num_repeats; i++) {
repeatOffsets[i] = offset; repeatOffsets[i] = offset;
assert(repeats[i].first); assert(repeats[i]);
memcpy((char *)limex + offset, repeats[i].first.get(), memcpy((char *)limex + offset, repeats[i].get(), repeats[i].size());
repeats[i].second); offset += repeats[i].size();
offset += repeats[i].second;
} }
// Write repeat offset lookup table. // Write repeat offset lookup table.
@ -2200,13 +2199,13 @@ struct Factory {
} }
// Build bounded repeat structures. // Build bounded repeat structures.
vector<pair<aligned_unique_ptr<NFARepeatInfo>, size_t>> repeats; vector<bytecode_ptr<NFARepeatInfo>> repeats;
u32 repeats_full_state = 0; u32 repeats_full_state = 0;
u32 repeats_stream_state = 0; u32 repeats_stream_state = 0;
buildRepeats(args, repeats, &repeats_full_state, &repeats_stream_state); buildRepeats(args, repeats, &repeats_full_state, &repeats_stream_state);
size_t repeatSize = 0; size_t repeatSize = 0;
for (size_t i = 0; i < repeats.size(); i++) { for (size_t i = 0; i < repeats.size(); i++) {
repeatSize += repeats[i].second; repeatSize += repeats[i].size();
} }
// We track report lists that have already been written into the global // We track report lists that have already been written into the global