diff --git a/.gitignore b/.gitignore index c421cd2..e2d3527 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ node_modules package-lock.json *.dot tmp +vcd_parser.* diff --git a/bin/build.js b/bin/build.js index e5cb784..8737c49 100755 --- a/bin/build.js +++ b/bin/build.js @@ -14,15 +14,17 @@ p.property('i8', 'type'); p.property('i32', 'size'); p.property('i32', 'time'); p.property('ptr', 'trigger'); -p.property('ptr', 'info'); p.property('ptr', 'triee'); p.property('ptr', 'lifee'); -p.property('ptr', 'hier'); +p.property('ptr', 'info'); +p.property('i32', 'stackPointer'); +p.property('ptr', 'id'); p.property('ptr', 'napi_env'); const scopeIdentifierSpan = p.span(p.code.span('scopeIdentifierSpan')); const varSizeSpan = p.span(p.code.span('varSizeSpan')); const varIdSpan = p.span(p.code.span('varIdSpan')); +const varNameSpan = p.span(p.code.span('varNameSpan')); const idSpan = p.span(p.code.span('idSpan')); const commandSpan = p.span(p.code.span('commandSpan')); const timeSpan = p.span(p.code.span('timeSpan')); @@ -45,6 +47,9 @@ const varSizeEnd = p.node('varSizeEnd'); const varId = p.node('varId'); const varIdEnd = p.node('varIdEnd'); +const varName = p.node('varName'); +const varNameEnd = p.node('varNameEnd'); + const inDeclaration = p.node('inDeclaration'); const enddefinitions = p.node('inDeclarationEnd'); const simulation = p.node('simulation'); @@ -155,9 +160,17 @@ varId .otherwise(varIdSpan.start(varIdEnd)); varIdEnd - .match(spaces, varIdSpan.end(inDeclaration)) + .match(spaces, varIdSpan.end(varName)) .skipTo(varIdEnd); +varName + .match(spaces, varName) + .otherwise(varNameSpan.start(varNameEnd)); + +varNameEnd + .match(spaces, varNameSpan.end(inDeclaration)) + .skipTo(varNameEnd); + // $end inDeclaration diff --git a/bin/find.js b/bin/find.js index 5f8e7c8..e2edea3 100755 --- a/bin/find.js +++ b/bin/find.js @@ -17,25 +17,26 @@ fs.readdir(dir).then(files => { } const t0 = Date.now(); - - let inst = lib.parser(); - + const inst = lib.parser(); const loads = lib.and(); const stores = lib.and(); const duration = lib.activity(10); inst.on('$enddefinitions', () => { - // console.log(res); - // console.log(inst.info); - inst.change.on('D7', (time, cmd) => { // mem_i_load - loads.onA(time, cmd); - stores.onNotA(time, cmd); - }); - inst.change.on('D1', (time, cmd) => { // mem_i_valid - loads.onB(time, cmd); - stores.onB(time, cmd); - duration.on(time); - }); + const _ = inst.info.wires; + inst.change.on(_.top.TestDriver.testHarness.system.tile.vpu.mem_i_load, + (time, cmd) => { + loads.onA(time, cmd); + stores.onNotA(time, cmd); + } + ); + inst.change.on(_.top.TestDriver.testHarness.system.tile.vpu.mem_i_valid, + (time, cmd) => { + loads.onB(time, cmd); + stores.onB(time, cmd); + duration.on(time); + } + ); }); inst.on('finish', () => { diff --git a/lib/parser.js b/lib/parser.js index be4a94a..bf52b77 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -6,7 +6,8 @@ let lib = require('bindings')('vcd.node'); module.exports = () => { - const info = {path: []}; + const wires = {}; + const info = {stack: [wires], wires: wires}; const s = new stream.Writable(); diff --git a/test/basic.js b/test/basic.js index 6af9d96..457fc81 100644 --- a/test/basic.js +++ b/test/basic.js @@ -50,6 +50,9 @@ $timescale 1ns $end $scope module leaf $end $var wire 64 {u counter [63:0] $end $upscope $end + $scope module fruit $end + $var wire 4 {u point [3:0] $end + $upscope $end $upscope $end $enddefinitions $end diff --git a/vcd.c b/vcd.c index aa67179..61eb7f6 100644 --- a/vcd.c +++ b/vcd.c @@ -11,7 +11,7 @@ } \ } -#define METHOD(name) napi_value name(napi_env env, napi_callback_info info) +#define METHOD(name) napi_value name(napi_env env, napi_callback_info cbInfo) #define ASSERT(val, expr) \ if (expr != napi_ok) { \ @@ -22,7 +22,7 @@ napi_value args[count]; \ { \ size_t argc = count; \ - if (napi_get_cb_info(env, info, &argc, args, 0, 0) != napi_ok) { \ + if (napi_get_cb_info(env, cbInfo, &argc, args, 0, 0) != napi_ok) { \ napi_throw_error(env, 0, "Error"); \ return 0; \ } \ @@ -120,7 +120,7 @@ METHOD(init) { ASSERT_ARGC(3) ASSERT_FUNCTION(args[0], state->lifee) ASSERT_FUNCTION(args[1], state->triee) - ASSERT_OBJECT(args[2], state->hier) + ASSERT_OBJECT(args[2], state->info) static char triggerString [4096] = " "; @@ -130,13 +130,14 @@ METHOD(init) { napi_value status; ASSERT(status, napi_create_string_latin1(env, "declaration", NAPI_AUTO_LENGTH, &status)) - ASSERT(state->hier, napi_set_named_property(env, state->hier, "status", status)) + ASSERT(state->info, napi_set_named_property(env, state->info, "status", status)) + // ASSERT(status, napi_get_named_property(env, state->info, "wires", &state->wires)) // napi_value hierObj; // ASSERT(hierObj, napi_create_object(env, &hierObj)) - // state->hier = hierObj; + // state->info = hierObj; - // ASSERT(state->hier, napi_create_object(env, &state->hier)) + // ASSERT(state->info, napi_create_object(env, &state->info)) ASSERT(res, napi_create_external(env, state, 0, 0, &res)) return res; @@ -146,11 +147,11 @@ METHOD(done) { ASSERT_ARGC(4) struct vcd_parser_s *state; // last use of all external objects - napi_value lifee, triee, hier; + napi_value lifee, triee, info; ASSERT_EXTERNAL(args[0], state) ASSERT_FUNCTION(args[1], lifee) ASSERT_FUNCTION(args[2], triee) - ASSERT_OBJECT(args[3], hier) + ASSERT_OBJECT(args[3], info) // FIXME destroy parser state @@ -166,7 +167,7 @@ METHOD(execute) { ASSERT_EXTERNAL(args[0], state) ASSERT_FUNCTION(args[1], state->lifee) ASSERT_FUNCTION(args[2], state->triee) - ASSERT_OBJECT(args[3], state->hier) + ASSERT_OBJECT(args[3], state->info) ASSERT_BUFFER(args[4], p, plen) state->napi_env = env; @@ -177,35 +178,6 @@ METHOD(execute) { return res; } -METHOD(getInfo) { - ASSERT_ARGC(1) - struct vcd_parser_s *state; - ASSERT_EXTERNAL(args[0], state) - - napi_value infObj, error, reason, command, type, size, time, trigger; - - ASSERT(infObj, napi_create_object(env, &infObj)) - ASSERT(error, napi_create_int32(env, state->error, &error)) - ASSERT(reason, napi_create_string_latin1(env, state->reason, NAPI_AUTO_LENGTH, &reason)) - ASSERT(command, napi_create_int32(env, state->command, &command)) - ASSERT(type, napi_create_int32(env, state->type, &type)) - ASSERT(size, napi_create_int32(env, state->size, &size)) - ASSERT(time, napi_create_int32(env, state->time, &time)) - ASSERT(trigger, napi_create_string_latin1(env, state->trigger, NAPI_AUTO_LENGTH, &trigger)) - - // ASSERT(state->hier, napi_create_object(env, &state->hier)) - ASSERT(infObj, napi_set_named_property(env, infObj, "hier", state->hier)) - ASSERT(infObj, napi_set_named_property(env, infObj, "error", error)) - ASSERT(infObj, napi_set_named_property(env, infObj, "reason", reason)) - ASSERT(infObj, napi_set_named_property(env, infObj, "command", command)) - ASSERT(infObj, napi_set_named_property(env, infObj, "type", type)) - ASSERT(infObj, napi_set_named_property(env, infObj, "size", size)) - ASSERT(infObj, napi_set_named_property(env, infObj, "time", time)) - ASSERT(infObj, napi_set_named_property(env, infObj, "trigger", trigger)) - - return infObj; -} - METHOD(setTrigger) { ASSERT_ARGC(2) struct vcd_parser_s *state; @@ -221,7 +193,6 @@ napi_value Init(napi_env env, napi_value exports) { DECLARE_NAPI_METHOD("init", init) DECLARE_NAPI_METHOD("done", done) DECLARE_NAPI_METHOD("execute", execute) - DECLARE_NAPI_METHOD("getInfo", getInfo) DECLARE_NAPI_METHOD("setTrigger", setTrigger) return exports; } diff --git a/vcd_parser.c b/vcd_parser.c deleted file mode 100644 index a532db3..0000000 --- a/vcd_parser.c +++ /dev/null @@ -1,2330 +0,0 @@ -#include -#include -#include - -#ifdef __SSE4_2__ - #ifdef _MSC_VER - #include - #else /* !_MSC_VER */ - #include - #endif /* _MSC_VER */ -#endif /* __SSE4_2__ */ - -#ifdef _MSC_VER - #define ALIGN(n) _declspec(align(n)) -#else /* !_MSC_VER */ - #define ALIGN(n) __attribute__((aligned(n))) -#endif /* _MSC_VER */ - -#include "vcd_parser.h" - -typedef int (*vcd_parser__span_cb)( - vcd_parser_t*, const char*, const char*); - -static const unsigned char llparse_blob0[] = { - 'o', 'm', 'm', 'e', 'n', 't' -}; -static const unsigned char llparse_blob1[] = { - '$', 'e', 'n', 'd' -}; -static const unsigned char llparse_blob2[] = { - 'a', 't', 'e' -}; -static const unsigned char llparse_blob3[] = { - 'n', 'd', 'd', 'e', 'f', 'i', 'n', 'i', 't', 'i', 'o', - 'n', 's' -}; -static const unsigned char llparse_blob4[] = { - '$', 'e', 'n', 'd' -}; -static const unsigned char llparse_blob5[] = { - 'o', 'm', 'm', 'e', 'n', 't' -}; -static const unsigned char llparse_blob6[] = { - '$', 'e', 'n', 'd' -}; -static const unsigned char llparse_blob7[] = { - 'u', 'm', 'p' -}; -static const unsigned char llparse_blob8[] = { - 'l', 'l' -}; -static const unsigned char llparse_blob9[] = { - 'a', 'r', 's' -}; -static const unsigned char llparse_blob10[] = { - 'c', 'o', 'p', 'e' -}; -static const unsigned char llparse_blob11[] = { - 'e', 'g', 'i', 'n' -}; -static const unsigned char llparse_blob12[] = { - 'r', 'k' -}; -static const unsigned char llparse_blob13[] = { - 'n', 'c', 't', 'i', 'o', 'n' -}; -static const unsigned char llparse_blob14[] = { - 'o', 'd', 'u', 'l', 'e' -}; -static const unsigned char llparse_blob15[] = { - 'a', 's', 'k' -}; -static const unsigned char llparse_blob16[] = { - 'i', 'm', 'e', 's', 'c', 'a', 'l', 'e' -}; -static const unsigned char llparse_blob17[] = { - 'p', 's', 'c', 'o', 'p', 'e' -}; -static const unsigned char llparse_blob18[] = { - 'v', 'e', 'n', 't' -}; -static const unsigned char llparse_blob19[] = { - 'n', 't', 'e', 'g', 'e', 'r' -}; -static const unsigned char llparse_blob20[] = { - 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r' -}; -static const unsigned char llparse_blob21[] = { - 'l', 't', 'i', 'm', 'e' -}; -static const unsigned char llparse_blob22[] = { - 'u', 'p', 'p', 'l', 'y' -}; -static const unsigned char llparse_blob23[] = { - 'm', 'e' -}; -static const unsigned char llparse_blob24[] = { - 'n', 'd' -}; -static const unsigned char llparse_blob25[] = { - 'e', 'g' -}; -static const unsigned char llparse_blob26[] = { - 'n', 'd' -}; -static const unsigned char llparse_blob27[] = { - 'r', 'e' -}; -static const unsigned char llparse_blob28[] = { - 'r', 's', 'i', 'o', 'n' -}; - -enum llparse_match_status_e { - kMatchComplete, - kMatchPause, - kMatchMismatch -}; -typedef enum llparse_match_status_e llparse_match_status_t; - -struct llparse_match_s { - llparse_match_status_t status; - const unsigned char* current; -}; -typedef struct llparse_match_s llparse_match_t; - -static llparse_match_t llparse__match_sequence_id( - vcd_parser_t* s, const unsigned char* p, - const unsigned char* endp, - const unsigned char* seq, uint32_t seq_len) { - uint32_t index; - llparse_match_t res; - - index = s->_index; - for (; p != endp; p++) { - unsigned char current; - - current = *p; - if (current == seq[index]) { - if (++index == seq_len) { - res.status = kMatchComplete; - goto reset; - } - } else { - res.status = kMatchMismatch; - goto reset; - } - } - s->_index = index; - res.status = kMatchPause; - res.current = p; - return res; -reset: - s->_index = 0; - res.current = p; - return res; -} - -enum llparse_state_e { - s_error, - s_n_vcd_parser__n_inDeclaration, - s_n_vcd_parser__n_span_start_commandSpan, - s_n_vcd_parser__n_declaration_2, - s_n_vcd_parser__n_declaration_3, - s_n_vcd_parser__n_simulationTime, - s_n_vcd_parser__n_span_start_timeSpan, - s_n_vcd_parser__n_inSimulation, - s_n_vcd_parser__n_span_start_commandSpan_2, - s_n_vcd_parser__n_simulation_2, - s_n_vcd_parser__n_simulation_5, - s_n_vcd_parser__n_simulation_7, - s_n_vcd_parser__n_simulation_6, - s_n_vcd_parser__n_simulation_8, - s_n_vcd_parser__n_simulation_4, - s_n_vcd_parser__n_simulation_3, - s_n_vcd_parser__n_simulation_1, - s_n_vcd_parser__n_simulationId, - s_n_vcd_parser__n_span_start_idSpan, - s_n_vcd_parser__n_simulationVector, - s_n_vcd_parser__n_span_start_vectorSpan, - s_n_vcd_parser__n_simulation, - s_n_vcd_parser__n_inDeclarationEnd, - s_n_vcd_parser__n_span_start_commandSpan_1, - s_n_vcd_parser__n_declaration_4, - s_n_vcd_parser__n_scopeIdentifierEnd, - s_n_vcd_parser__n_span_start_scopeIdentifierSpan, - s_n_vcd_parser__n_scopeIdentifier, - s_n_vcd_parser__n_scopeTypeEnd_1, - s_n_vcd_parser__n_scopeTypeEnd_3, - s_n_vcd_parser__n_scopeTypeEnd_4, - s_n_vcd_parser__n_scopeTypeEnd_2, - s_n_vcd_parser__n_scopeTypeEnd_5, - s_n_vcd_parser__n_scopeTypeEnd_6, - s_n_vcd_parser__n_scopeTypeEnd, - s_n_vcd_parser__n_scopeType, - s_n_vcd_parser__n_span_start_commandSpan_3, - s_n_vcd_parser__n_declaration_5, - s_n_vcd_parser__n_declaration_6, - s_n_vcd_parser__n_declaration_7, - s_n_vcd_parser__n_varIdEnd, - s_n_vcd_parser__n_span_start_varIdSpan, - s_n_vcd_parser__n_varId, - s_n_vcd_parser__n_varSizeEnd, - s_n_vcd_parser__n_span_start_varSizeSpan, - s_n_vcd_parser__n_varSize, - s_n_vcd_parser__n_varTypeEnd_1, - s_n_vcd_parser__n_varTypeEnd_2, - s_n_vcd_parser__n_varTypeEnd_3, - s_n_vcd_parser__n_varTypeEnd_6, - s_n_vcd_parser__n_varTypeEnd_5, - s_n_vcd_parser__n_varTypeEnd_4, - s_n_vcd_parser__n_varTypeEnd_8, - s_n_vcd_parser__n_varTypeEnd_7, - s_n_vcd_parser__n_varTypeEnd_10, - s_n_vcd_parser__n_varTypeEnd_13, - s_n_vcd_parser__n_varTypeEnd_14, - s_n_vcd_parser__n_varTypeEnd_15, - s_n_vcd_parser__n_varTypeEnd_12, - s_n_vcd_parser__n_varTypeEnd_11, - s_n_vcd_parser__n_varTypeEnd_9, - s_n_vcd_parser__n_varTypeEnd_17, - s_n_vcd_parser__n_varTypeEnd_18, - s_n_vcd_parser__n_varTypeEnd_19, - s_n_vcd_parser__n_varTypeEnd_16, - s_n_vcd_parser__n_varTypeEnd, - s_n_vcd_parser__n_varType, - s_n_vcd_parser__n_span_start_commandSpan_4, - s_n_vcd_parser__n_declaration_9, - s_n_vcd_parser__n_declaration_10, - s_n_vcd_parser__n_declaration_8, - s_n_vcd_parser__n_declaration_1, - s_n_vcd_parser__n_declaration, -}; -typedef enum llparse_state_e llparse_state_t; - -int commandSpan( - vcd_parser_t* s, const unsigned char* p, - const unsigned char* endp); - -int idSpan( - vcd_parser_t* s, const unsigned char* p, - const unsigned char* endp); - -int vectorSpan( - vcd_parser_t* s, const unsigned char* p, - const unsigned char* endp); - -int timeSpan( - vcd_parser_t* s, const unsigned char* p, - const unsigned char* endp); - -int varSizeSpan( - vcd_parser_t* s, const unsigned char* p, - const unsigned char* endp); - -int varIdSpan( - vcd_parser_t* s, const unsigned char* p, - const unsigned char* endp); - -int scopeIdentifierSpan( - vcd_parser_t* s, const unsigned char* p, - const unsigned char* endp); - -int vcd_parser__c_store_command( - vcd_parser_t* state, - const unsigned char* p, - const unsigned char* endp, - int match) { - state->command = match; - return 0; -} - -int vcd_parser__c_store_type( - vcd_parser_t* state, - const unsigned char* p, - const unsigned char* endp, - int match) { - state->type = match; - return 0; -} - -int vcd_parser_init(vcd_parser_t* state) { - memset(state, 0, sizeof(*state)); - state->_current = (void*) (intptr_t) s_n_vcd_parser__n_declaration; - return 0; -} - -static llparse_state_t vcd_parser__run( - vcd_parser_t* state, - const unsigned char* p, - const unsigned char* endp) { - int match; - switch ((llparse_state_t) (intptr_t) state->_current) { - case s_n_vcd_parser__n_inDeclaration: - s_n_vcd_parser__n_inDeclaration: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_inDeclaration; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob1, 4); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - goto s_n_vcd_parser__n_span_end_commandSpan; - } - case kMatchPause: { - return s_n_vcd_parser__n_inDeclaration; - } - case kMatchMismatch: { - p++; - goto s_n_vcd_parser__n_inDeclaration; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_commandSpan: - s_n_vcd_parser__n_span_start_commandSpan: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_commandSpan; - } - state->_span_pos0 = (void*) p; - state->_span_cb0 = commandSpan; - goto s_n_vcd_parser__n_inDeclaration; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration_2: - s_n_vcd_parser__n_declaration_2: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_declaration_2; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob0, 6); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 1; - goto s_n_vcd_parser__n_invoke_store_command; - } - case kMatchPause: { - return s_n_vcd_parser__n_declaration_2; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration_3: - s_n_vcd_parser__n_declaration_3: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_declaration_3; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob2, 3); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 2; - goto s_n_vcd_parser__n_invoke_store_command; - } - case kMatchPause: { - return s_n_vcd_parser__n_declaration_3; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulationTime: - s_n_vcd_parser__n_simulationTime: { - if (p == endp) { - return s_n_vcd_parser__n_simulationTime; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_span_end_timeSpan; - } - case 10: { - p++; - goto s_n_vcd_parser__n_span_end_timeSpan; - } - case 13: { - p++; - goto s_n_vcd_parser__n_span_end_timeSpan; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_span_end_timeSpan; - } - default: { - p++; - goto s_n_vcd_parser__n_simulationTime; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_timeSpan: - s_n_vcd_parser__n_span_start_timeSpan: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_timeSpan; - } - state->_span_pos0 = (void*) p; - state->_span_cb0 = timeSpan; - goto s_n_vcd_parser__n_simulationTime; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_inSimulation: - s_n_vcd_parser__n_inSimulation: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_inSimulation; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob6, 4); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - goto s_n_vcd_parser__n_span_end_commandSpan_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_inSimulation; - } - case kMatchMismatch: { - p++; - goto s_n_vcd_parser__n_inSimulation; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_commandSpan_2: - s_n_vcd_parser__n_span_start_commandSpan_2: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_commandSpan_2; - } - state->_span_pos0 = (void*) p; - state->_span_cb0 = commandSpan; - goto s_n_vcd_parser__n_inSimulation; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulation_2: - s_n_vcd_parser__n_simulation_2: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_simulation_2; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob5, 6); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 1; - goto s_n_vcd_parser__n_invoke_store_command_3; - } - case kMatchPause: { - return s_n_vcd_parser__n_simulation_2; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulation_5: - s_n_vcd_parser__n_simulation_5: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_simulation_5; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob8, 2); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 9; - goto s_n_vcd_parser__n_invoke_store_command_3; - } - case kMatchPause: { - return s_n_vcd_parser__n_simulation_5; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulation_7: - s_n_vcd_parser__n_simulation_7: { - if (p == endp) { - return s_n_vcd_parser__n_simulation_7; - } - switch (*p) { - case 'f': { - p++; - match = 10; - goto s_n_vcd_parser__n_invoke_store_command_3; - } - default: { - goto s_n_vcd_parser__n_error; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulation_6: - s_n_vcd_parser__n_simulation_6: { - if (p == endp) { - return s_n_vcd_parser__n_simulation_6; - } - switch (*p) { - case 'f': { - p++; - goto s_n_vcd_parser__n_simulation_7; - } - case 'n': { - p++; - match = 11; - goto s_n_vcd_parser__n_invoke_store_command_3; - } - default: { - goto s_n_vcd_parser__n_error; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulation_8: - s_n_vcd_parser__n_simulation_8: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_simulation_8; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob9, 3); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 12; - goto s_n_vcd_parser__n_invoke_store_command_3; - } - case kMatchPause: { - return s_n_vcd_parser__n_simulation_8; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulation_4: - s_n_vcd_parser__n_simulation_4: { - if (p == endp) { - return s_n_vcd_parser__n_simulation_4; - } - switch (*p) { - case 'a': { - p++; - goto s_n_vcd_parser__n_simulation_5; - } - case 'o': { - p++; - goto s_n_vcd_parser__n_simulation_6; - } - case 'v': { - p++; - goto s_n_vcd_parser__n_simulation_8; - } - default: { - goto s_n_vcd_parser__n_error; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulation_3: - s_n_vcd_parser__n_simulation_3: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_simulation_3; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob7, 3); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - goto s_n_vcd_parser__n_simulation_4; - } - case kMatchPause: { - return s_n_vcd_parser__n_simulation_3; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulation_1: - s_n_vcd_parser__n_simulation_1: { - if (p == endp) { - return s_n_vcd_parser__n_simulation_1; - } - switch (*p) { - case 'c': { - p++; - goto s_n_vcd_parser__n_simulation_2; - } - case 'd': { - p++; - goto s_n_vcd_parser__n_simulation_3; - } - default: { - goto s_n_vcd_parser__n_error; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulationId: - s_n_vcd_parser__n_simulationId: { - if (p == endp) { - return s_n_vcd_parser__n_simulationId; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_span_end_idSpan; - } - case 10: { - p++; - goto s_n_vcd_parser__n_span_end_idSpan; - } - case 13: { - p++; - goto s_n_vcd_parser__n_span_end_idSpan; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_span_end_idSpan; - } - default: { - p++; - goto s_n_vcd_parser__n_simulationId; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_idSpan: - s_n_vcd_parser__n_span_start_idSpan: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_idSpan; - } - state->_span_pos0 = (void*) p; - state->_span_cb0 = idSpan; - goto s_n_vcd_parser__n_simulationId; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulationVector: - s_n_vcd_parser__n_simulationVector: { - if (p == endp) { - return s_n_vcd_parser__n_simulationVector; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_span_end_vectorSpan; - } - case 10: { - p++; - goto s_n_vcd_parser__n_span_end_vectorSpan; - } - case 13: { - p++; - goto s_n_vcd_parser__n_span_end_vectorSpan; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_span_end_vectorSpan; - } - default: { - p++; - goto s_n_vcd_parser__n_simulationVector; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_vectorSpan: - s_n_vcd_parser__n_span_start_vectorSpan: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_vectorSpan; - } - state->_span_pos0 = (void*) p; - state->_span_cb0 = vectorSpan; - goto s_n_vcd_parser__n_simulationVector; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_simulation: - s_n_vcd_parser__n_simulation: { - if (p == endp) { - return s_n_vcd_parser__n_simulation; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_simulation; - } - case 10: { - p++; - goto s_n_vcd_parser__n_simulation; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_simulation; - } - case '#': { - p++; - match = 13; - goto s_n_vcd_parser__n_invoke_store_command_2; - } - case '$': { - p++; - goto s_n_vcd_parser__n_simulation_1; - } - case '0': { - p++; - match = 14; - goto s_n_vcd_parser__n_invoke_store_command_4; - } - case '1': { - p++; - match = 15; - goto s_n_vcd_parser__n_invoke_store_command_4; - } - case 'B': { - p++; - match = 20; - goto s_n_vcd_parser__n_invoke_store_command_5; - } - case 'R': { - p++; - match = 22; - goto s_n_vcd_parser__n_invoke_store_command_5; - } - case 'X': { - p++; - match = 17; - goto s_n_vcd_parser__n_invoke_store_command_4; - } - case 'Z': { - p++; - match = 18; - goto s_n_vcd_parser__n_invoke_store_command_4; - } - case 'b': { - p++; - match = 19; - goto s_n_vcd_parser__n_invoke_store_command_5; - } - case 'r': { - p++; - match = 21; - goto s_n_vcd_parser__n_invoke_store_command_5; - } - case 'x': { - p++; - match = 16; - goto s_n_vcd_parser__n_invoke_store_command_4; - } - default: { - goto s_n_vcd_parser__n_error; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_inDeclarationEnd: - s_n_vcd_parser__n_inDeclarationEnd: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_inDeclarationEnd; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob4, 4); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - goto s_n_vcd_parser__n_span_end_commandSpan_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_inDeclarationEnd; - } - case kMatchMismatch: { - p++; - goto s_n_vcd_parser__n_inDeclarationEnd; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_commandSpan_1: - s_n_vcd_parser__n_span_start_commandSpan_1: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_commandSpan_1; - } - state->_span_pos0 = (void*) p; - state->_span_cb0 = commandSpan; - goto s_n_vcd_parser__n_inDeclarationEnd; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration_4: - s_n_vcd_parser__n_declaration_4: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_declaration_4; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob3, 13); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 8; - goto s_n_vcd_parser__n_invoke_store_command_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_declaration_4; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_scopeIdentifierEnd: - s_n_vcd_parser__n_scopeIdentifierEnd: { - if (p == endp) { - return s_n_vcd_parser__n_scopeIdentifierEnd; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_span_end_scopeIdentifierSpan; - } - case 10: { - p++; - goto s_n_vcd_parser__n_span_end_scopeIdentifierSpan; - } - case 13: { - p++; - goto s_n_vcd_parser__n_span_end_scopeIdentifierSpan; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_span_end_scopeIdentifierSpan; - } - default: { - p++; - goto s_n_vcd_parser__n_scopeIdentifierEnd; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_scopeIdentifierSpan: - s_n_vcd_parser__n_span_start_scopeIdentifierSpan: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_scopeIdentifierSpan; - } - state->_span_pos1 = (void*) p; - state->_span_cb1 = scopeIdentifierSpan; - goto s_n_vcd_parser__n_scopeIdentifierEnd; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_scopeIdentifier: - s_n_vcd_parser__n_scopeIdentifier: { - if (p == endp) { - return s_n_vcd_parser__n_scopeIdentifier; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_scopeIdentifier; - } - case 10: { - p++; - goto s_n_vcd_parser__n_scopeIdentifier; - } - case 13: { - p++; - goto s_n_vcd_parser__n_scopeIdentifier; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_scopeIdentifier; - } - default: { - goto s_n_vcd_parser__n_span_start_scopeIdentifierSpan; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_scopeTypeEnd_1: - s_n_vcd_parser__n_scopeTypeEnd_1: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_scopeTypeEnd_1; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob11, 4); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 1; - goto s_n_vcd_parser__n_invoke_store_type; - } - case kMatchPause: { - return s_n_vcd_parser__n_scopeTypeEnd_1; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_1; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_scopeTypeEnd_3: - s_n_vcd_parser__n_scopeTypeEnd_3: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_scopeTypeEnd_3; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob12, 2); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 2; - goto s_n_vcd_parser__n_invoke_store_type; - } - case kMatchPause: { - return s_n_vcd_parser__n_scopeTypeEnd_3; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_1; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_scopeTypeEnd_4: - s_n_vcd_parser__n_scopeTypeEnd_4: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_scopeTypeEnd_4; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob13, 6); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 3; - goto s_n_vcd_parser__n_invoke_store_type; - } - case kMatchPause: { - return s_n_vcd_parser__n_scopeTypeEnd_4; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_1; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_scopeTypeEnd_2: - s_n_vcd_parser__n_scopeTypeEnd_2: { - if (p == endp) { - return s_n_vcd_parser__n_scopeTypeEnd_2; - } - switch (*p) { - case 'o': { - p++; - goto s_n_vcd_parser__n_scopeTypeEnd_3; - } - case 'u': { - p++; - goto s_n_vcd_parser__n_scopeTypeEnd_4; - } - default: { - goto s_n_vcd_parser__n_error_1; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_scopeTypeEnd_5: - s_n_vcd_parser__n_scopeTypeEnd_5: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_scopeTypeEnd_5; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob14, 5); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 4; - goto s_n_vcd_parser__n_invoke_store_type; - } - case kMatchPause: { - return s_n_vcd_parser__n_scopeTypeEnd_5; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_1; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_scopeTypeEnd_6: - s_n_vcd_parser__n_scopeTypeEnd_6: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_scopeTypeEnd_6; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob15, 3); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 5; - goto s_n_vcd_parser__n_invoke_store_type; - } - case kMatchPause: { - return s_n_vcd_parser__n_scopeTypeEnd_6; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_1; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_scopeTypeEnd: - s_n_vcd_parser__n_scopeTypeEnd: { - if (p == endp) { - return s_n_vcd_parser__n_scopeTypeEnd; - } - switch (*p) { - case 'b': { - p++; - goto s_n_vcd_parser__n_scopeTypeEnd_1; - } - case 'f': { - p++; - goto s_n_vcd_parser__n_scopeTypeEnd_2; - } - case 'm': { - p++; - goto s_n_vcd_parser__n_scopeTypeEnd_5; - } - case 't': { - p++; - goto s_n_vcd_parser__n_scopeTypeEnd_6; - } - default: { - goto s_n_vcd_parser__n_error_1; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_scopeType: - s_n_vcd_parser__n_scopeType: { - if (p == endp) { - return s_n_vcd_parser__n_scopeType; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_scopeType; - } - case 10: { - p++; - goto s_n_vcd_parser__n_scopeType; - } - case 13: { - p++; - goto s_n_vcd_parser__n_scopeType; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_scopeType; - } - default: { - goto s_n_vcd_parser__n_scopeTypeEnd; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_commandSpan_3: - s_n_vcd_parser__n_span_start_commandSpan_3: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_commandSpan_3; - } - state->_span_pos0 = (void*) p; - state->_span_cb0 = commandSpan; - goto s_n_vcd_parser__n_scopeType; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration_5: - s_n_vcd_parser__n_declaration_5: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_declaration_5; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob10, 4); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 3; - goto s_n_vcd_parser__n_invoke_store_command_6; - } - case kMatchPause: { - return s_n_vcd_parser__n_declaration_5; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration_6: - s_n_vcd_parser__n_declaration_6: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_declaration_6; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob16, 8); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 4; - goto s_n_vcd_parser__n_invoke_store_command; - } - case kMatchPause: { - return s_n_vcd_parser__n_declaration_6; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration_7: - s_n_vcd_parser__n_declaration_7: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_declaration_7; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob17, 6); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 5; - goto s_n_vcd_parser__n_invoke_store_command; - } - case kMatchPause: { - return s_n_vcd_parser__n_declaration_7; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varIdEnd: - s_n_vcd_parser__n_varIdEnd: { - if (p == endp) { - return s_n_vcd_parser__n_varIdEnd; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_span_end_varIdSpan; - } - case 10: { - p++; - goto s_n_vcd_parser__n_span_end_varIdSpan; - } - case 13: { - p++; - goto s_n_vcd_parser__n_span_end_varIdSpan; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_span_end_varIdSpan; - } - default: { - p++; - goto s_n_vcd_parser__n_varIdEnd; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_varIdSpan: - s_n_vcd_parser__n_span_start_varIdSpan: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_varIdSpan; - } - state->_span_pos1 = (void*) p; - state->_span_cb1 = varIdSpan; - goto s_n_vcd_parser__n_varIdEnd; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varId: - s_n_vcd_parser__n_varId: { - if (p == endp) { - return s_n_vcd_parser__n_varId; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_varId; - } - case 10: { - p++; - goto s_n_vcd_parser__n_varId; - } - case 13: { - p++; - goto s_n_vcd_parser__n_varId; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_varId; - } - default: { - goto s_n_vcd_parser__n_span_start_varIdSpan; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varSizeEnd: - s_n_vcd_parser__n_varSizeEnd: { - if (p == endp) { - return s_n_vcd_parser__n_varSizeEnd; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_span_end_varSizeSpan; - } - case 10: { - p++; - goto s_n_vcd_parser__n_span_end_varSizeSpan; - } - case 13: { - p++; - goto s_n_vcd_parser__n_span_end_varSizeSpan; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_span_end_varSizeSpan; - } - default: { - p++; - goto s_n_vcd_parser__n_varSizeEnd; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_varSizeSpan: - s_n_vcd_parser__n_span_start_varSizeSpan: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_varSizeSpan; - } - state->_span_pos1 = (void*) p; - state->_span_cb1 = varSizeSpan; - goto s_n_vcd_parser__n_varSizeEnd; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varSize: - s_n_vcd_parser__n_varSize: { - if (p == endp) { - return s_n_vcd_parser__n_varSize; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_varSize; - } - case 10: { - p++; - goto s_n_vcd_parser__n_varSize; - } - case 13: { - p++; - goto s_n_vcd_parser__n_varSize; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_varSize; - } - default: { - goto s_n_vcd_parser__n_span_start_varSizeSpan; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_1: - s_n_vcd_parser__n_varTypeEnd_1: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_1; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob18, 4); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 1; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_varTypeEnd_1; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_2: - s_n_vcd_parser__n_varTypeEnd_2: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_2; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob19, 6); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 2; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_varTypeEnd_2; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_3: - s_n_vcd_parser__n_varTypeEnd_3: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_3; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob20, 8); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 3; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_varTypeEnd_3; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_6: - s_n_vcd_parser__n_varTypeEnd_6: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_6; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob21, 5); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 5; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_varTypeEnd_6; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_5: - s_n_vcd_parser__n_varTypeEnd_5: { - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_5; - } - switch (*p) { - case 'a': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_6; - } - case 'g': { - p++; - match = 6; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - default: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_4: - s_n_vcd_parser__n_varTypeEnd_4: { - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_4; - } - switch (*p) { - case 'e': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_5; - } - default: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_8: - s_n_vcd_parser__n_varTypeEnd_8: { - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_8; - } - switch (*p) { - case '0': { - p++; - match = 7; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case '1': { - p++; - match = 8; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - default: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_7: - s_n_vcd_parser__n_varTypeEnd_7: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_7; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob22, 5); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - goto s_n_vcd_parser__n_varTypeEnd_8; - } - case kMatchPause: { - return s_n_vcd_parser__n_varTypeEnd_7; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_10: - s_n_vcd_parser__n_varTypeEnd_10: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_10; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob23, 2); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 9; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_varTypeEnd_10; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_13: - s_n_vcd_parser__n_varTypeEnd_13: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_13; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob24, 2); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 11; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_varTypeEnd_13; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_14: - s_n_vcd_parser__n_varTypeEnd_14: { - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_14; - } - switch (*p) { - case 'r': { - p++; - match = 12; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - default: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_15: - s_n_vcd_parser__n_varTypeEnd_15: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_15; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob25, 2); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 13; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_varTypeEnd_15; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_12: - s_n_vcd_parser__n_varTypeEnd_12: { - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_12; - } - switch (*p) { - case '0': { - p++; - match = 14; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case '1': { - p++; - match = 15; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case 'a': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_13; - } - case 'o': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_14; - } - case 'r': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_15; - } - default: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_11: - s_n_vcd_parser__n_varTypeEnd_11: { - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_11; - } - switch (*p) { - case 'i': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_12; - } - default: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_9: - s_n_vcd_parser__n_varTypeEnd_9: { - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_9; - } - switch (*p) { - case 'i': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_10; - } - case 'r': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_11; - } - default: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_17: - s_n_vcd_parser__n_varTypeEnd_17: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_17; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob26, 2); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 16; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_varTypeEnd_17; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_18: - s_n_vcd_parser__n_varTypeEnd_18: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_18; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob27, 2); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 17; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - case kMatchPause: { - return s_n_vcd_parser__n_varTypeEnd_18; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_19: - s_n_vcd_parser__n_varTypeEnd_19: { - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_19; - } - switch (*p) { - case 'r': { - p++; - match = 18; - goto s_n_vcd_parser__n_invoke_store_type_1; - } - default: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd_16: - s_n_vcd_parser__n_varTypeEnd_16: { - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd_16; - } - switch (*p) { - case 'a': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_17; - } - case 'i': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_18; - } - case 'o': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_19; - } - default: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varTypeEnd: - s_n_vcd_parser__n_varTypeEnd: { - if (p == endp) { - return s_n_vcd_parser__n_varTypeEnd; - } - switch (*p) { - case 'e': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_1; - } - case 'i': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_2; - } - case 'p': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_3; - } - case 'r': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_4; - } - case 's': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_7; - } - case 't': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_9; - } - case 'w': { - p++; - goto s_n_vcd_parser__n_varTypeEnd_16; - } - default: { - goto s_n_vcd_parser__n_error_2; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_varType: - s_n_vcd_parser__n_varType: { - if (p == endp) { - return s_n_vcd_parser__n_varType; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_varType; - } - case 10: { - p++; - goto s_n_vcd_parser__n_varType; - } - case 13: { - p++; - goto s_n_vcd_parser__n_varType; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_varType; - } - default: { - goto s_n_vcd_parser__n_varTypeEnd; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_span_start_commandSpan_4: - s_n_vcd_parser__n_span_start_commandSpan_4: { - if (p == endp) { - return s_n_vcd_parser__n_span_start_commandSpan_4; - } - state->_span_pos0 = (void*) p; - state->_span_cb0 = commandSpan; - goto s_n_vcd_parser__n_varType; - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration_9: - s_n_vcd_parser__n_declaration_9: { - if (p == endp) { - return s_n_vcd_parser__n_declaration_9; - } - switch (*p) { - case 'r': { - p++; - match = 6; - goto s_n_vcd_parser__n_invoke_store_command_7; - } - default: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration_10: - s_n_vcd_parser__n_declaration_10: { - llparse_match_t match_seq; - - if (p == endp) { - return s_n_vcd_parser__n_declaration_10; - } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob28, 5); - p = match_seq.current; - switch (match_seq.status) { - case kMatchComplete: { - p++; - match = 7; - goto s_n_vcd_parser__n_invoke_store_command; - } - case kMatchPause: { - return s_n_vcd_parser__n_declaration_10; - } - case kMatchMismatch: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration_8: - s_n_vcd_parser__n_declaration_8: { - if (p == endp) { - return s_n_vcd_parser__n_declaration_8; - } - switch (*p) { - case 'a': { - p++; - goto s_n_vcd_parser__n_declaration_9; - } - case 'e': { - p++; - goto s_n_vcd_parser__n_declaration_10; - } - default: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration_1: - s_n_vcd_parser__n_declaration_1: { - if (p == endp) { - return s_n_vcd_parser__n_declaration_1; - } - switch (*p) { - case 'c': { - p++; - goto s_n_vcd_parser__n_declaration_2; - } - case 'd': { - p++; - goto s_n_vcd_parser__n_declaration_3; - } - case 'e': { - p++; - goto s_n_vcd_parser__n_declaration_4; - } - case 's': { - p++; - goto s_n_vcd_parser__n_declaration_5; - } - case 't': { - p++; - goto s_n_vcd_parser__n_declaration_6; - } - case 'u': { - p++; - goto s_n_vcd_parser__n_declaration_7; - } - case 'v': { - p++; - goto s_n_vcd_parser__n_declaration_8; - } - default: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - case s_n_vcd_parser__n_declaration: - s_n_vcd_parser__n_declaration: { - if (p == endp) { - return s_n_vcd_parser__n_declaration; - } - switch (*p) { - case 9: { - p++; - goto s_n_vcd_parser__n_declaration; - } - case 10: { - p++; - goto s_n_vcd_parser__n_declaration; - } - case 13: { - p++; - goto s_n_vcd_parser__n_declaration; - } - case ' ': { - p++; - goto s_n_vcd_parser__n_declaration; - } - case '$': { - p++; - goto s_n_vcd_parser__n_declaration_1; - } - default: { - goto s_n_vcd_parser__n_error_3; - } - } - /* UNREACHABLE */; - abort(); - } - default: - /* UNREACHABLE */ - abort(); - } - s_n_vcd_parser__n_span_end_commandSpan: { - const unsigned char* start; - int err; - - start = state->_span_pos0; - state->_span_pos0 = NULL; - err = commandSpan(state, start, p); - if (err != 0) { - state->error = err; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_vcd_parser__n_declaration; - return s_error; - } - goto s_n_vcd_parser__n_declaration; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_invoke_store_command: { - switch (vcd_parser__c_store_command(state, p, endp, match)) { - default: - goto s_n_vcd_parser__n_span_start_commandSpan; - } - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_error_3: { - state->error = 0x1; - state->reason = "Expected declaration command"; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_error; - return s_error; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_span_end_timeSpan: { - const unsigned char* start; - int err; - - start = state->_span_pos0; - state->_span_pos0 = NULL; - err = timeSpan(state, start, p); - if (err != 0) { - state->error = err; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_vcd_parser__n_simulation; - return s_error; - } - goto s_n_vcd_parser__n_simulation; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_invoke_store_command_2: { - switch (vcd_parser__c_store_command(state, p, endp, match)) { - default: - goto s_n_vcd_parser__n_span_start_timeSpan; - } - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_invoke_store_command_3: { - switch (vcd_parser__c_store_command(state, p, endp, match)) { - default: - goto s_n_vcd_parser__n_span_start_commandSpan_2; - } - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_error: { - state->error = 0x4; - state->reason = "Expected simulation command"; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_error; - return s_error; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_span_end_idSpan: { - const unsigned char* start; - int err; - - start = state->_span_pos0; - state->_span_pos0 = NULL; - err = idSpan(state, start, p); - if (err != 0) { - state->error = err; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_vcd_parser__n_simulation; - return s_error; - } - goto s_n_vcd_parser__n_simulation; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_invoke_store_command_4: { - switch (vcd_parser__c_store_command(state, p, endp, match)) { - default: - goto s_n_vcd_parser__n_span_start_idSpan; - } - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_span_end_vectorSpan: { - const unsigned char* start; - int err; - - start = state->_span_pos0; - state->_span_pos0 = NULL; - err = vectorSpan(state, start, p); - if (err != 0) { - state->error = err; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_vcd_parser__n_span_start_idSpan; - return s_error; - } - goto s_n_vcd_parser__n_span_start_idSpan; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_invoke_store_command_5: { - switch (vcd_parser__c_store_command(state, p, endp, match)) { - default: - goto s_n_vcd_parser__n_span_start_vectorSpan; - } - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_span_end_commandSpan_1: { - const unsigned char* start; - int err; - - start = state->_span_pos0; - state->_span_pos0 = NULL; - err = commandSpan(state, start, p); - if (err != 0) { - state->error = err; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_vcd_parser__n_simulation; - return s_error; - } - goto s_n_vcd_parser__n_simulation; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_invoke_store_command_1: { - switch (vcd_parser__c_store_command(state, p, endp, match)) { - default: - goto s_n_vcd_parser__n_span_start_commandSpan_1; - } - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_span_end_scopeIdentifierSpan: { - const unsigned char* start; - int err; - - start = state->_span_pos1; - state->_span_pos1 = NULL; - err = scopeIdentifierSpan(state, start, p); - if (err != 0) { - state->error = err; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_vcd_parser__n_inDeclaration; - return s_error; - } - goto s_n_vcd_parser__n_inDeclaration; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_invoke_store_type: { - switch (vcd_parser__c_store_type(state, p, endp, match)) { - default: - goto s_n_vcd_parser__n_scopeIdentifier; - } - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_error_1: { - state->error = 0x2; - state->reason = "Expected scope type"; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_error; - return s_error; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_invoke_store_command_6: { - switch (vcd_parser__c_store_command(state, p, endp, match)) { - default: - goto s_n_vcd_parser__n_span_start_commandSpan_3; - } - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_span_end_varIdSpan: { - const unsigned char* start; - int err; - - start = state->_span_pos1; - state->_span_pos1 = NULL; - err = varIdSpan(state, start, p); - if (err != 0) { - state->error = err; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_vcd_parser__n_inDeclaration; - return s_error; - } - goto s_n_vcd_parser__n_inDeclaration; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_span_end_varSizeSpan: { - const unsigned char* start; - int err; - - start = state->_span_pos1; - state->_span_pos1 = NULL; - err = varSizeSpan(state, start, p); - if (err != 0) { - state->error = err; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_vcd_parser__n_varId; - return s_error; - } - goto s_n_vcd_parser__n_varId; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_invoke_store_type_1: { - switch (vcd_parser__c_store_type(state, p, endp, match)) { - default: - goto s_n_vcd_parser__n_varSize; - } - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_error_2: { - state->error = 0x3; - state->reason = "Expected var type"; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_error; - return s_error; - /* UNREACHABLE */; - abort(); - } - s_n_vcd_parser__n_invoke_store_command_7: { - switch (vcd_parser__c_store_command(state, p, endp, match)) { - default: - goto s_n_vcd_parser__n_span_start_commandSpan_4; - } - /* UNREACHABLE */; - abort(); - } -} - -int vcd_parser_execute(vcd_parser_t* state, const char* p, const char* endp) { - llparse_state_t next; - - /* check lingering errors */ - if (state->error != 0) { - return state->error; - } - - /* restart spans */ - if (state->_span_pos0 != NULL) { - state->_span_pos0 = (void*) p; - } - if (state->_span_pos1 != NULL) { - state->_span_pos1 = (void*) p; - } - - next = vcd_parser__run(state, (const unsigned char*) p, (const unsigned char*) endp); - if (next == s_error) { - return state->error; - } - state->_current = (void*) (intptr_t) next; - - /* execute spans */ - if (state->_span_pos0 != NULL) { - int error; - - error = ((vcd_parser__span_cb) state->_span_cb0)(state, state->_span_pos0, (const char*) endp); - if (error != 0) { - state->error = error; - state->error_pos = endp; - return error; - } - } - if (state->_span_pos1 != NULL) { - int error; - - error = ((vcd_parser__span_cb) state->_span_cb1)(state, state->_span_pos1, (const char*) endp); - if (error != 0) { - state->error = error; - state->error_pos = endp; - return error; - } - } - - return 0; -} \ No newline at end of file diff --git a/vcd_parser.h b/vcd_parser.h deleted file mode 100644 index 80b3b23..0000000 --- a/vcd_parser.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef INCLUDE_VCD_PARSER_H_ -#define INCLUDE_VCD_PARSER_H_ -#ifdef __cplusplus -extern "C" { -#endif - -#include - -typedef struct vcd_parser_s vcd_parser_t; -struct vcd_parser_s { - int32_t _index; - void* _span_pos0; - void* _span_cb0; - void* _span_pos1; - void* _span_cb1; - int32_t error; - const char* reason; - const char* error_pos; - void* data; - void* _current; - uint8_t command; - uint8_t type; - uint32_t size; - uint32_t time; - void* trigger; - void* info; - void* triee; - void* lifee; - void* hier; - void* napi_env; -}; - -int vcd_parser_init(vcd_parser_t* s); -int vcd_parser_execute(vcd_parser_t* s, const char* p, const char* endp); - -#ifdef __cplusplus -} /* extern "C" */ -#endif -#endif /* INCLUDE_VCD_PARSER_H_ */ diff --git a/vcd_spans.c b/vcd_spans.c index 0c63542..45e47ba 100644 --- a/vcd_spans.c +++ b/vcd_spans.c @@ -8,6 +8,7 @@ napi_throw(env, val); \ } +// FIXME use a better structure to match strings int stringEq ( const unsigned char* gold, // search pattern const unsigned char* p, @@ -39,17 +40,15 @@ int stringEq ( int commandSpan(vcd_parser_t* state, const unsigned char* p, const unsigned char* endp) { napi_env env = state->napi_env; - if (state->command == 5) { - // printf(")"); + if (state->command == 5) { // $upscope + state->stackPointer -= 1; return 0; } if (state->command == 8) { // $enddefinitions - napi_value status; + napi_value status, undefined, eventName, eventPayload, return_val; ASSERT(status, napi_create_string_latin1(env, "simulation", NAPI_AUTO_LENGTH, &status)) - ASSERT(state->hier, napi_set_named_property(env, state->hier, "status", status)) - - napi_value undefined, eventName, eventPayload, return_val; + ASSERT(state->info, napi_set_named_property(env, state->info, "status", status)) ASSERT(undefined, napi_get_undefined(env, &undefined)) ASSERT(eventName, napi_create_string_latin1(env, "$enddefinitions", NAPI_AUTO_LENGTH, &eventName)) // ASSERT(eventPayload, napi_create_string_latin1(env, "payload", NAPI_AUTO_LENGTH, &eventPayload)) @@ -61,8 +60,17 @@ int commandSpan(vcd_parser_t* state, const unsigned char* p, const unsigned char return 0; } -int scopeIdentifierSpan(vcd_parser_t* state, const unsigned char* p, const unsigned char* endp) { - // printf("(%d:%d", state->type, state->size); +int scopeIdentifierSpan(vcd_parser_t* state, const unsigned char* p, /* FIXME const */ unsigned char* endp) { + napi_env env = state->napi_env; + *(endp - 1) = 0; // FIXME NULL termination of ASCII string + napi_value name, obj, stack, top; + ASSERT(name, napi_create_string_latin1(env, (char*)p, (endp - p - 1), &name)) + ASSERT(obj, napi_create_object(env, &obj)) + ASSERT(state->info, napi_get_named_property(env, state->info, "stack", &stack)) + ASSERT(top, napi_get_element(env, stack, state->stackPointer, &top)) + ASSERT(top, napi_set_named_property(env, top, p, obj)) + state->stackPointer += 1; + ASSERT(top, napi_set_element(env, stack, state->stackPointer, obj)) return 0; } @@ -72,7 +80,19 @@ int varSizeSpan(vcd_parser_t* state, const unsigned char* p, const unsigned char } int varIdSpan(vcd_parser_t* state, const unsigned char* p, const unsigned char* endp) { - // printf(" %d", state->type); + napi_env env = state->napi_env; + napi_value val; + ASSERT(state->id, napi_create_string_latin1(env, (char*)p, (endp - p - 1), &state->id)) + return 0; +} + +int varNameSpan(vcd_parser_t* state, const unsigned char* p, /* FIXME const */ unsigned char* endp) { + napi_env env = state->napi_env; + *(endp - 1) = 0; // FIXME NULL termination of ASCII string + napi_value stack, top; + ASSERT(state->info, napi_get_named_property(env, state->info, "stack", &stack)) + ASSERT(top, napi_get_element(env, stack, state->stackPointer, &top)) + ASSERT(state->info, napi_set_named_property(env, top, p, state->id)) return 0; } @@ -86,13 +106,11 @@ int idSpan(vcd_parser_t* state, const unsigned char* p, const unsigned char* end ASSERT(eventPayload2, napi_create_int32(env, state->command, &eventPayload2)) napi_value* argv[] = { &eventName, &eventPayload1, &eventPayload2 }; ASSERT(state->triee, napi_call_function(env, undefined, state->triee, 3, *argv, &return_val)) - // printf("{%.*s}", (int)(endp - p - 1), p); } return 0; } int vectorSpan(vcd_parser_t* state, const unsigned char* p, const unsigned char* endp) { - // printf("{%.*s}", (int)(endp - p - 1), p); return 0; }