diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2024-12-17 11:23:22 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2024-12-17 11:23:22 -0300 |
commit | 1c40ff9faafed620aa0458b397bcbfbe19e0f663 (patch) | |
tree | edfb96022feb99244a7a6c4c9d28525e141b783e /ltable.c | |
parent | 7538f3886dfa091d661c56e48ebb1578ced8e467 (diff) | |
download | lua-1c40ff9faafed620aa0458b397bcbfbe19e0f663.tar.gz lua-1c40ff9faafed620aa0458b397bcbfbe19e0f663.tar.bz2 lua-1c40ff9faafed620aa0458b397bcbfbe19e0f663.zip |
Scanner and parser use different tables for constants
Moreover, each function being parsed has its own table.
The code is cleaner when each table is used for one specific purpose:
The scanner uses its table to anchor and unify strings, mapping strings
to themselves; the parser uses it to reuse constants in the code,
mapping constants to their indices in the constant table. A different
table for each task avoids false collisions.
Diffstat (limited to 'ltable.c')
-rw-r--r-- | ltable.c | 11 |
1 files changed, 1 insertions, 10 deletions
@@ -962,7 +962,7 @@ lu_byte luaH_getint (Table *t, lua_Integer key, TValue *res) { | |||
962 | */ | 962 | */ |
963 | const TValue *luaH_Hgetshortstr (Table *t, TString *key) { | 963 | const TValue *luaH_Hgetshortstr (Table *t, TString *key) { |
964 | Node *n = hashstr(t, key); | 964 | Node *n = hashstr(t, key); |
965 | lua_assert(key->tt == LUA_VSHRSTR); | 965 | lua_assert(strisshr(key)); |
966 | for (;;) { /* check whether 'key' is somewhere in the chain */ | 966 | for (;;) { /* check whether 'key' is somewhere in the chain */ |
967 | if (keyisshrstr(n) && eqshrstr(keystrval(n), key)) | 967 | if (keyisshrstr(n) && eqshrstr(keystrval(n), key)) |
968 | return gval(n); /* that's it */ | 968 | return gval(n); /* that's it */ |
@@ -997,15 +997,6 @@ lu_byte luaH_getstr (Table *t, TString *key, TValue *res) { | |||
997 | } | 997 | } |
998 | 998 | ||
999 | 999 | ||
1000 | TString *luaH_getstrkey (Table *t, TString *key) { | ||
1001 | const TValue *o = Hgetstr(t, key); | ||
1002 | if (!isabstkey(o)) /* string already present? */ | ||
1003 | return keystrval(nodefromval(o)); /* get saved copy */ | ||
1004 | else | ||
1005 | return NULL; | ||
1006 | } | ||
1007 | |||
1008 | |||
1009 | /* | 1000 | /* |
1010 | ** main search function | 1001 | ** main search function |
1011 | */ | 1002 | */ |