summaryrefslogtreecommitdiffstats
path: root/filter.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-11-12 11:24:08 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-11-12 11:24:08 -0800
commitf1507e43b0c05178deca7af610d18de5dbc269d7 (patch)
tree10fbed916d9cdfc5caa6277e1086a256c4f4e4fb /filter.c
parentd70e7b808cb61af565fe0fbf0e5211e8a3c5352b (diff)
downloadtxr-f1507e43b0c05178deca7af610d18de5dbc269d7.tar.gz
txr-f1507e43b0c05178deca7af610d18de5dbc269d7.tar.bz2
txr-f1507e43b0c05178deca7af610d18de5dbc269d7.zip
Infrastructure for storing line number information
outside of the code, in hash tables. * filter.c (make_trie, trie_add): Update to three-argument make_hash. * hash.c (struct hash): New members, hash_fun, assoc_fun acons_new_l_fun. (ll_hash): Renamed to equal_hash. (eql_hash): New static function. (cobj_hash_op): Follows ll_hash rename. (hash_grow): Use new function indirection to call hashing function. (make_hash): New argument to specify type of hashing. Initialize new members of struct hash. (gethash_l, gethash, remhash): Use function indirection for hashing and chain search and update. (pushhash): New function. * hash.h (make_hash): Declaration updated with new parameter. (pushhash): Declared. * lib.c (eql_f): New global variable. (eql, assq, aconsq_new, aconsq_new_l): New functions. (make_package): Updated to new three-argument make_hash. (obj_init): gc-protect and initialize new variable eql_f. * lib.h (eql, assq, aconsq_new, aconsq_new_l): Declared. * match.c (dir_tables_init): Updated to there-argument make_hash. * parser.h (form_to_ln_hash, ln_to_forms_hash): Global variables declared. * parser.l (form_to_ln_hash, ln_to_forms_hash): New global variables. (grammar): Set yylval.lineno for tokens that are classified to that type in parser.y. (parse_init): Initialize and gc-protect new global variables. * parser.y (rl): New static helper function. (%union): New member, lineno. (ALL, SOME, NONE, MAYBE, CASES, CHOOSE, GATHER, AND, OR, END, COLLECT, UNTIL, COLL, OUTPUT, REPEAT, REP, SINGLE, FIRST, LAST, EMPTY, DEFINE, TRY, CATCH, FINALLY, ERRTOK, '('): Reclassified as lineno type. In the grammar, these keywords can thus provide a stable line number from the lexer. (grammar): Numerous rules updated to add constructs to the line number hash tables via the rl helper. * dep.mk: Updated. * Makefile (depend): Use the installed, stable txr in the system path to update dependencies rather than locally built ./txr, to prevent the problem that txr is broken because out out-of-date dependencies, and thus cannot regenerate dependencies.
Diffstat (limited to 'filter.c')
-rw-r--r--filter.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/filter.c b/filter.c
index 770a4b4e..29378f48 100644
--- a/filter.c
+++ b/filter.c
@@ -42,7 +42,7 @@ val upcase_k, downcase_k, fun_k;
static val make_trie(void)
{
- return make_hash(nil, nil);
+ return make_hash(nil, nil, nil);
}
static val trie_add(val trie, val key, val value)
@@ -54,7 +54,7 @@ static val trie_add(val trie, val key, val value)
val newnode_p;
val *loc = gethash_l(node, ch, &newnode_p);
if (newnode_p)
- *loc = make_hash(nil, nil);
+ *loc = make_hash(nil, nil, nil);
node = *loc;
}
@@ -577,7 +577,7 @@ void filter_init(void)
{
protect(&filters, (val *) 0);
- filters = make_hash(nil, nil);
+ filters = make_hash(nil, nil, nil);
filter_k = intern(lit("filter"), keyword_package);
lfilt_k = intern(lit("lfilt"), keyword_package);
rfilt_k = intern(lit("rfilt"), keyword_package);