Commit Diff


commit - b02bcc1b1c826553fdcd0ffe6421d1d636f4665c
commit + 26ac38bf828456a0eba1d771694936a1e25871f5
blob - 6440ec0c1349aaf39fb4f74a3a0495b6cfc7cc32
blob + e234d770822dce42ec7b7c3852d6681c71db6808
--- test_nfa.c
+++ test_nfa.c
@@ -114,7 +114,7 @@ sub(int symbol, size_t state, const char *pos, void *e
 }
 
 int
-out(struct range r, size_t state, const char *pos, void *env_)
+out_print(struct range r, size_t state, const char *pos, void *env_)
 {
 	size_t i, l;
 	struct mind *env = env_;
@@ -137,7 +137,31 @@ out(struct range r, size_t state, const char *pos, voi
 		l = env->word - env->begword;
 		printf("%8s[%3zu] pos %zu\t%.*s\n", "WORD", state, i - l,
 		    (int)l, env->begword);
+		return r.base;
+	}
+
+	return -1;	/* what can i do? */
+}
+
+int
+out_bench(struct range r, size_t state, const char *pos, void *env_)
+{
+	struct mind *env = env_;
+
+	assert(env->input != NULL);
+	assert(pos >= env->input);
+
+	/* inward output - actions */
+	assert(r.n == 1);
+	switch (r.base) {
+	case ATSIGN:
+		env->atsign = pos;
 		return r.base;
+	case WORD:
+		assert(env->begword != NULL);
+		assert(env->begword < pos);
+		env->word = pos;
+		return r.base;
 	}
 
 	return -1;	/* what can i do? */
@@ -176,7 +200,7 @@ benchmark(NFA a)
 	size_t sz;
 
 	env.input = inputs[0];
-	pr = nfaprep(a, sub, out, &env);
+	pr = nfaprep(a, sub, out_bench, &env);
 
 	/* warmup */
 	sz = strlen(inputs[0]);
@@ -254,7 +278,7 @@ main(int argc, char **argv)
 		inp = argv[i];
 		sz = strlen(inp);
 		env.input = inp;
-		n = match(nfa, sub, out, &env, inp, sz);
+		n = match(nfa, sub, out_print, &env, inp, sz);
 		if (n == -1)
 			printf("no ");
 		else if (n < sz)