rhai/tools/reserved.txt
2023-03-31 09:00:52 +08:00

109 lines
3.7 KiB
Plaintext

// This file holds a list of reserved symbols for the Rhai language.
//
// The mapped attributes are:
// - is this a reserved symbol? (bool)
// - can this keyword be called normally as a function? (bool)
// - can this keyword be called in method-call style? (bool)
//
// Generate the output table via:
// ```bash
// gperf reserved.txt
// ```
//
// Since GNU gperf does not produce Rust output, the ANSI-C output must be hand-edited and
// manually spliced into `tokenizer.rs`.
//
// This includes:
// * Rewrite the C hashing program (especially since it uses a `switch` statement with fall-through)
// into equivalent Rust as the function `is_reserved_keyword_or_symbol`.
// * Update the values for the `???_RESERVED_???` constants.
// * Copy the `asso_values` array into `RESERVED_ASSOC_VALUES`.
// * Copy the `wordlist` array into `RESERVED_LIST` with the following modifications:
// - Remove the `#line` comments
// - Change the entry wrapping `{ .. }` into tuples `( .. )`
// - Feature flags can be incorporated directly into the output via the `cfg!` macro
//
%global-table
%struct-type
%omit-struct-type
%define initializer-suffix ,false,false,false
struct reserved;
%%
# reserved under certain flags
#
?., cfg!(feature = no_object), false, false
?[, cfg!(feature = no_index), false, false
fn, cfg!(feature = no_function), false, false
private, cfg!(feature = no_function), false, false
import, cfg!(feature = no_module), false, false
export, cfg!(feature = no_module), false, false
as, cfg!(feature = no_module), false, false
#
# reserved symbols
#
===, true, false, false
!==, true, false, false
->, true, false, false
<-, true, false, false
?, true, false, false
:=, true, false, false
:;, true, false, false
~, true, false, false
!., true, false, false
::<, true, false, false
(*, true, false, false
*), true, false, false
"#", true, false, false
"#!", true, false, false
@, true, false, false
$, true, false, false
++, true, false, false
--, true, false, false
..., true, false, false
<|, true, false, false
|>, true, false, false
#
# reserved keywords
#
public, true, false, false
protected, true, false, false
super, true, false, false
new, true, false, false
use, true, false, false
module, true, false, false
package, true, false, false
var, true, false, false
static, true, false, false
shared, true, false, false
with, true, false, false
is, true, false, false
goto, true, false, false
exit, true, false, false
match, true, false, false
case, true, false, false
default, true, false, false
void, true, false, false
null, true, false, false
nil, true, false, false
spawn, true, false, false
thread, true, false, false
go, true, false, false
sync, true, false, false
async, true, false, false
await, true, false, false
yield, true, false, false
#
# keyword functions
#
print, true, true, false
debug, true, true, false
type_of, true, true, true
eval, true, true, false
Fn, true, true, false
call, true, true, true
curry, true, true, true
this, true, false, false
is_def_var, true, true, false
is_def_fn, cfg!(not(feature = no_function)), true, false
is_shared, cfg!(not(feature = no_closure)), true, true