Adding the ability of doing a dump.

This commit is contained in:
Daniel Lemire 2018-11-23 22:20:57 -05:00
parent 5e50536c06
commit 86a75462c5
2 changed files with 19 additions and 7 deletions

View File

@ -99,14 +99,19 @@ void colorfuldisplay(ParsedJson &pj, const u8 *buf) {
int main(int argc, char *argv[]) {
bool verbose = false;
bool dump = false;
int c;
while ((c = getopt (argc, argv, "v")) != -1)
while ((c = getopt (argc, argv, "vd")) != -1)
switch (c)
{
case 'v':
verbose = true;
break;
case 'd':
dump = true;
break;
default:
abort ();
}
@ -235,7 +240,7 @@ int main(int argc, char *argv[]) {
cout << "Min: " << min_result << " bytes read: " << p.second
<< " Gigabytes/second: " << (p.second) / (min_result * 1000000000.0)
<< "\n";
if(dump) pj_ptr->dump_tapes();
free(p.first);
deallocate_ParsedJson(pj_ptr);
if (!isok) {

View File

@ -67,15 +67,22 @@ really_inline bool is_valid_null_atom(const u8 * loc) {
return error == 0;
}
// Implemented using Labels as Values which works in GCC and CLANG,
// but won't work in MSVC. This would need to be reimplemented differently
// if one wants to be standard compliant.
WARN_UNUSED
bool unified_machine(const u8 *buf, size_t len, ParsedJson &pj) {
u32 i = 0;
u32 idx;
u8 c;
u32 i = 0; // index of the structural character (0,1,2,3...)
u32 idx; // location of the structural character in the input (buf)
u8 c; // used to track the (structural) character we are looking at, updated by UPDATE_CHAR macro
u32 depth = START_DEPTH; // an arbitrary starting depth
void * ret_address[MAX_DEPTH];
void * ret_address[MAX_DEPTH]; // used to store "labels as value" (non-standard compiler extension)
// a call site is the start of either an object or an array ('[' or '{')
u32 last_loc = 0; // this is the location of the previous call site
// (in the tape, at the given depth);
// we only need one.
u32 last_loc = 0; // this is the location of the previous call site; only need one
// We should also track the tape address of our containing
// scope for two reasons. First, we will need to put an
// up pointer there at each call site so we can navigate