2023-03-15 10:22:11 +01:00
|
|
|
// 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
|
2023-03-31 03:00:52 +02:00
|
|
|
// gperf reserved.txt
|
2023-03-15 10:22:11 +01:00
|
|
|
// ```
|
|
|
|
//
|
|
|
|
// 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
|
|
|
|
//
|
2023-03-31 03:00:52 +02:00
|
|
|
%global-table
|
|
|
|
%struct-type
|
|
|
|
%omit-struct-type
|
|
|
|
%define initializer-suffix ,false,false,false
|
2023-03-15 10:22:11 +01:00
|
|
|
struct reserved;
|
|
|
|
%%
|
2023-03-31 03:00:52 +02:00
|
|
|
# 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
|
2023-03-15 10:22:11 +01:00
|
|
|
"#", true, false, false
|
|
|
|
"#!", true, false, false
|
2023-03-31 03:00:52 +02:00
|
|
|
@, 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
|