Allow keywords in more places (fix #1868)

This commit is contained in:
Nicolas Williams committed 2019-03-24 23:19:09 -05:00
1 parent 3ea0199e03
commit c72ed135e4
6 files changed
+2037 -1374

No files matched your search

+491 -283
View File
File diff suppressed because it is too large. Load diff
+434 -61
View File
@@ -13,11 +13,245 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 6
#define YY_FLEX_SUBMINOR_VERSION 0
#define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
#ifdef yy_create_buffer
#define jq_yy_create_buffer_ALREADY_DEFINED
#else
#define yy_create_buffer jq_yy_create_buffer
#endif
#ifdef yy_delete_buffer
#define jq_yy_delete_buffer_ALREADY_DEFINED
#else
#define yy_delete_buffer jq_yy_delete_buffer
#endif
#ifdef yy_scan_buffer
#define jq_yy_scan_buffer_ALREADY_DEFINED
#else
#define yy_scan_buffer jq_yy_scan_buffer
#endif
#ifdef yy_scan_string
#define jq_yy_scan_string_ALREADY_DEFINED
#else
#define yy_scan_string jq_yy_scan_string
#endif
#ifdef yy_scan_bytes
#define jq_yy_scan_bytes_ALREADY_DEFINED
#else
#define yy_scan_bytes jq_yy_scan_bytes
#endif
#ifdef yy_init_buffer
#define jq_yy_init_buffer_ALREADY_DEFINED
#else
#define yy_init_buffer jq_yy_init_buffer
#endif
#ifdef yy_flush_buffer
#define jq_yy_flush_buffer_ALREADY_DEFINED
#else
#define yy_flush_buffer jq_yy_flush_buffer
#endif
#ifdef yy_load_buffer_state
#define jq_yy_load_buffer_state_ALREADY_DEFINED
#else
#define yy_load_buffer_state jq_yy_load_buffer_state
#endif
#ifdef yy_switch_to_buffer
#define jq_yy_switch_to_buffer_ALREADY_DEFINED
#else
#define yy_switch_to_buffer jq_yy_switch_to_buffer
#endif
#ifdef yypush_buffer_state
#define jq_yypush_buffer_state_ALREADY_DEFINED
#else
#define yypush_buffer_state jq_yypush_buffer_state
#endif
#ifdef yypop_buffer_state
#define jq_yypop_buffer_state_ALREADY_DEFINED
#else
#define yypop_buffer_state jq_yypop_buffer_state
#endif
#ifdef yyensure_buffer_stack
#define jq_yyensure_buffer_stack_ALREADY_DEFINED
#else
#define yyensure_buffer_stack jq_yyensure_buffer_stack
#endif
#ifdef yylex
#define jq_yylex_ALREADY_DEFINED
#else
#define yylex jq_yylex
#endif
#ifdef yyrestart
#define jq_yyrestart_ALREADY_DEFINED
#else
#define yyrestart jq_yyrestart
#endif
#ifdef yylex_init
#define jq_yylex_init_ALREADY_DEFINED
#else
#define yylex_init jq_yylex_init
#endif
#ifdef yylex_init_extra
#define jq_yylex_init_extra_ALREADY_DEFINED
#else
#define yylex_init_extra jq_yylex_init_extra
#endif
#ifdef yylex_destroy
#define jq_yylex_destroy_ALREADY_DEFINED
#else
#define yylex_destroy jq_yylex_destroy
#endif
#ifdef yyget_debug
#define jq_yyget_debug_ALREADY_DEFINED
#else
#define yyget_debug jq_yyget_debug
#endif
#ifdef yyset_debug
#define jq_yyset_debug_ALREADY_DEFINED
#else
#define yyset_debug jq_yyset_debug
#endif
#ifdef yyget_extra
#define jq_yyget_extra_ALREADY_DEFINED
#else
#define yyget_extra jq_yyget_extra
#endif
#ifdef yyset_extra
#define jq_yyset_extra_ALREADY_DEFINED
#else
#define yyset_extra jq_yyset_extra
#endif
#ifdef yyget_in
#define jq_yyget_in_ALREADY_DEFINED
#else
#define yyget_in jq_yyget_in
#endif
#ifdef yyset_in
#define jq_yyset_in_ALREADY_DEFINED
#else
#define yyset_in jq_yyset_in
#endif
#ifdef yyget_out
#define jq_yyget_out_ALREADY_DEFINED
#else
#define yyget_out jq_yyget_out
#endif
#ifdef yyset_out
#define jq_yyset_out_ALREADY_DEFINED
#else
#define yyset_out jq_yyset_out
#endif
#ifdef yyget_leng
#define jq_yyget_leng_ALREADY_DEFINED
#else
#define yyget_leng jq_yyget_leng
#endif
#ifdef yyget_text
#define jq_yyget_text_ALREADY_DEFINED
#else
#define yyget_text jq_yyget_text
#endif
#ifdef yyget_lineno
#define jq_yyget_lineno_ALREADY_DEFINED
#else
#define yyget_lineno jq_yyget_lineno
#endif
#ifdef yyset_lineno
#define jq_yyset_lineno_ALREADY_DEFINED
#else
#define yyset_lineno jq_yyset_lineno
#endif
#ifdef yyget_column
#define jq_yyget_column_ALREADY_DEFINED
#else
#define yyget_column jq_yyget_column
#endif
#ifdef yyset_column
#define jq_yyset_column_ALREADY_DEFINED
#else
#define yyset_column jq_yyset_column
#endif
#ifdef yywrap
#define jq_yywrap_ALREADY_DEFINED
#else
#define yywrap jq_yywrap
#endif
#ifdef yyget_lval
#define jq_yyget_lval_ALREADY_DEFINED
#else
#define yyget_lval jq_yyget_lval
#endif
#ifdef yyset_lval
#define jq_yyset_lval_ALREADY_DEFINED
#else
#define yyset_lval jq_yyset_lval
#endif
#ifdef yyget_lloc
#define jq_yyget_lloc_ALREADY_DEFINED
#else
#define yyget_lloc jq_yyget_lloc
#endif
#ifdef yyset_lloc
#define jq_yyset_lloc_ALREADY_DEFINED
#else
#define yyset_lloc jq_yyset_lloc
#endif
#ifdef yyalloc
#define jq_yyalloc_ALREADY_DEFINED
#else
#define yyalloc jq_yyalloc
#endif
#ifdef yyrealloc
#define jq_yyrealloc_ALREADY_DEFINED
#else
#define yyrealloc jq_yyrealloc
#endif
#ifdef yyfree
#define jq_yyfree_ALREADY_DEFINED
#else
#define yyfree jq_yyfree
#endif
/* First, we deal with platform-specific or compiler-specific issues. */
/* begin standard C headers. */
@@ -88,29 +322,23 @@ typedef unsigned int flex_uint32_t;
#define UINT32_MAX (4294967295U)
#endif
#ifndef SIZE_MAX
#define SIZE_MAX (~(size_t)0)
#endif
#endif /* ! C99 */
#endif /* ! FLEXINT_H */
#ifdef __cplusplus
/* begin standard C++ headers. */
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
#else /* ! __cplusplus */
/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)
#define YY_USE_CONST
#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
#ifdef YY_USE_CONST
/* TODO: this is always defined, so inline it */
#define yyconst const
#if defined(__GNUC__) && __GNUC__ >= 3
#define yynoreturn __attribute__((__noreturn__))
#else
#define yyconst
#define yynoreturn
#endif
/* An opaque pointer. */
@@ -165,7 +393,7 @@ struct yy_buffer_state
/* Size of input buffer in bytes, not including room for EOB
* characters.
*/
yy_size_t yy_buf_size;
int yy_buf_size;
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
@@ -193,7 +421,7 @@ struct yy_buffer_state
int yy_bs_lineno; /**< The line count. */
int yy_bs_column; /**< The column count. */
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
@@ -204,21 +432,21 @@ struct yy_buffer_state
};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */
void jq_yyrestart (FILE *input_file ,yyscan_t yyscanner );
void jq_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
YY_BUFFER_STATE jq_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
void jq_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
void jq_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
void jq_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
void jq_yypop_buffer_state (yyscan_t yyscanner );
void yyrestart ( FILE *input_file , yyscan_t yyscanner );
void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
void yypop_buffer_state ( yyscan_t yyscanner );
YY_BUFFER_STATE jq_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
YY_BUFFER_STATE jq_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
YY_BUFFER_STATE jq_yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
void *jq_yyalloc (yy_size_t ,yyscan_t yyscanner );
void *jq_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
void jq_yyfree (void * ,yyscan_t yyscanner );
void *yyalloc ( yy_size_t , yyscan_t yyscanner );
void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
void yyfree ( void * , yyscan_t yyscanner );
/* Begin user sect3 */
@@ -247,50 +475,50 @@ void jq_yyfree (void * ,yyscan_t yyscanner );
#define YY_EXTRA_TYPE int
int jq_yylex_init (yyscan_t* scanner);
int yylex_init (yyscan_t* scanner);
int jq_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
/* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */
int jq_yylex_destroy (yyscan_t yyscanner );
int yylex_destroy ( yyscan_t yyscanner );
int jq_yyget_debug (yyscan_t yyscanner );
int yyget_debug ( yyscan_t yyscanner );
void jq_yyset_debug (int debug_flag ,yyscan_t yyscanner );
void yyset_debug ( int debug_flag , yyscan_t yyscanner );
YY_EXTRA_TYPE jq_yyget_extra (yyscan_t yyscanner );
YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner );
void jq_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
FILE *jq_yyget_in (yyscan_t yyscanner );
FILE *yyget_in ( yyscan_t yyscanner );
void jq_yyset_in (FILE * _in_str ,yyscan_t yyscanner );
void yyset_in ( FILE * _in_str , yyscan_t yyscanner );
FILE *jq_yyget_out (yyscan_t yyscanner );
FILE *yyget_out ( yyscan_t yyscanner );
void jq_yyset_out (FILE * _out_str ,yyscan_t yyscanner );
void yyset_out ( FILE * _out_str , yyscan_t yyscanner );
yy_size_t jq_yyget_leng (yyscan_t yyscanner );
int yyget_leng ( yyscan_t yyscanner );
char *jq_yyget_text (yyscan_t yyscanner );
char *yyget_text ( yyscan_t yyscanner );
int jq_yyget_lineno (yyscan_t yyscanner );
int yyget_lineno ( yyscan_t yyscanner );
void jq_yyset_lineno (int _line_number ,yyscan_t yyscanner );
void yyset_lineno ( int _line_number , yyscan_t yyscanner );
int jq_yyget_column (yyscan_t yyscanner );
int yyget_column ( yyscan_t yyscanner );
void jq_yyset_column (int _column_no ,yyscan_t yyscanner );
void yyset_column ( int _column_no , yyscan_t yyscanner );
YYSTYPE * jq_yyget_lval (yyscan_t yyscanner );
YYSTYPE * yyget_lval ( yyscan_t yyscanner );
void jq_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
YYLTYPE *jq_yyget_lloc (yyscan_t yyscanner );
YYLTYPE *yyget_lloc ( yyscan_t yyscanner );
void jq_yyset_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner );
void yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner );
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -298,18 +526,18 @@ void jq_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int jq_yywrap (yyscan_t yyscanner );
extern "C" int yywrap ( yyscan_t yyscanner );
#else
extern int jq_yywrap (yyscan_t yyscanner );
extern int yywrap ( yyscan_t yyscanner );
#endif
#endif
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner);
#endif
#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
static int yy_flex_strlen ( const char * , yyscan_t yyscanner);
#endif
#ifndef YY_NO_INPUT
@@ -337,10 +565,10 @@ static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1
extern int jq_yylex \
(YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner);
extern int yylex \
(YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner);
#define YY_DECL int jq_yylex \
#define YY_DECL int yylex \
(YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
#endif /* !YY_DECL */
@@ -358,9 +586,154 @@ extern int jq_yylex \
#undef YY_DECL
#endif
#ifndef jq_yy_create_buffer_ALREADY_DEFINED
#undef yy_create_buffer
#endif
#ifndef jq_yy_delete_buffer_ALREADY_DEFINED
#undef yy_delete_buffer
#endif
#ifndef jq_yy_scan_buffer_ALREADY_DEFINED
#undef yy_scan_buffer
#endif
#ifndef jq_yy_scan_string_ALREADY_DEFINED
#undef yy_scan_string
#endif
#ifndef jq_yy_scan_bytes_ALREADY_DEFINED
#undef yy_scan_bytes
#endif
#ifndef jq_yy_init_buffer_ALREADY_DEFINED
#undef yy_init_buffer
#endif
#ifndef jq_yy_flush_buffer_ALREADY_DEFINED
#undef yy_flush_buffer
#endif
#ifndef jq_yy_load_buffer_state_ALREADY_DEFINED
#undef yy_load_buffer_state
#endif
#ifndef jq_yy_switch_to_buffer_ALREADY_DEFINED
#undef yy_switch_to_buffer
#endif
#ifndef jq_yypush_buffer_state_ALREADY_DEFINED
#undef yypush_buffer_state
#endif
#ifndef jq_yypop_buffer_state_ALREADY_DEFINED
#undef yypop_buffer_state
#endif
#ifndef jq_yyensure_buffer_stack_ALREADY_DEFINED
#undef yyensure_buffer_stack
#endif
#ifndef jq_yylex_ALREADY_DEFINED
#undef yylex
#endif
#ifndef jq_yyrestart_ALREADY_DEFINED
#undef yyrestart
#endif
#ifndef jq_yylex_init_ALREADY_DEFINED
#undef yylex_init
#endif
#ifndef jq_yylex_init_extra_ALREADY_DEFINED
#undef yylex_init_extra
#endif
#ifndef jq_yylex_destroy_ALREADY_DEFINED
#undef yylex_destroy
#endif
#ifndef jq_yyget_debug_ALREADY_DEFINED
#undef yyget_debug
#endif
#ifndef jq_yyset_debug_ALREADY_DEFINED
#undef yyset_debug
#endif
#ifndef jq_yyget_extra_ALREADY_DEFINED
#undef yyget_extra
#endif
#ifndef jq_yyset_extra_ALREADY_DEFINED
#undef yyset_extra
#endif
#ifndef jq_yyget_in_ALREADY_DEFINED
#undef yyget_in
#endif
#ifndef jq_yyset_in_ALREADY_DEFINED
#undef yyset_in
#endif
#ifndef jq_yyget_out_ALREADY_DEFINED
#undef yyget_out
#endif
#ifndef jq_yyset_out_ALREADY_DEFINED
#undef yyset_out
#endif
#ifndef jq_yyget_leng_ALREADY_DEFINED
#undef yyget_leng
#endif
#ifndef jq_yyget_text_ALREADY_DEFINED
#undef yyget_text
#endif
#ifndef jq_yyget_lineno_ALREADY_DEFINED
#undef yyget_lineno
#endif
#ifndef jq_yyset_lineno_ALREADY_DEFINED
#undef yyset_lineno
#endif
#ifndef jq_yyget_column_ALREADY_DEFINED
#undef yyget_column
#endif
#ifndef jq_yyset_column_ALREADY_DEFINED
#undef yyset_column
#endif
#ifndef jq_yywrap_ALREADY_DEFINED
#undef yywrap
#endif
#ifndef jq_yyget_lval_ALREADY_DEFINED
#undef yyget_lval
#endif
#ifndef jq_yyset_lval_ALREADY_DEFINED
#undef yyset_lval
#endif
#ifndef jq_yyget_lloc_ALREADY_DEFINED
#undef yyget_lloc
#endif
#ifndef jq_yyset_lloc_ALREADY_DEFINED
#undef yyset_lloc
#endif
#ifndef jq_yyalloc_ALREADY_DEFINED
#undef yyalloc
#endif
#ifndef jq_yyrealloc_ALREADY_DEFINED
#undef yyrealloc
#endif
#ifndef jq_yyfree_ALREADY_DEFINED
#undef yyfree
#endif
#ifndef jq_yytext_ALREADY_DEFINED
#undef yytext
#endif
#ifndef jq_yyleng_ALREADY_DEFINED
#undef yyleng
#endif
#ifndef jq_yyin_ALREADY_DEFINED
#undef yyin
#endif
#ifndef jq_yyout_ALREADY_DEFINED
#undef yyout
#endif
#ifndef jq_yy_flex_debug_ALREADY_DEFINED
#undef yy_flex_debug
#endif
#ifndef jq_yylineno_ALREADY_DEFINED
#undef yylineno
#endif
#ifndef jq_yytables_fload_ALREADY_DEFINED
#undef yytables_fload
#endif
#ifndef jq_yytables_destroy_ALREADY_DEFINED
#undef yytables_destroy
#endif
#ifndef jq_yyTABLES_NAME_ALREADY_DEFINED
#undef yyTABLES_NAME
#endif
#line 130 "src/lexer.l"
#line 365 "src/lexer.h"
#line 738 "src/lexer.h"
#undef jq_yyIN_HEADER
#endif /* jq_yyHEADER_H */
+1074 -1019
View File
File diff suppressed because it is too large. Load diff
+6 -6
View File
@@ -1,8 +1,8 @@
/* A Bison parser, made by GNU Bison 3.0.5. */
/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -40,7 +40,7 @@
extern int yydebug;
#endif
/* "%code requires" blocks. */
#line 11 "src/parser.y" /* yacc.c:1910 */
#line 11 "src/parser.y" /* yacc.c:1909 */
#include "locfile.h"
struct lexer_param;
@@ -57,7 +57,7 @@ struct lexer_param;
} \
} while (0)
#line 61 "src/parser.h" /* yacc.c:1910 */
#line 61 "src/parser.h" /* yacc.c:1909 */
/* Token type. */
#ifndef YYTOKENTYPE
@@ -163,12 +163,12 @@ struct lexer_param;
union YYSTYPE
{
#line 31 "src/parser.y" /* yacc.c:1910 */
#line 31 "src/parser.y" /* yacc.c:1909 */
jv literal;
block blk;
#line 172 "src/parser.h" /* yacc.c:1910 */
#line 172 "src/parser.h" /* yacc.c:1909 */
};
typedef union YYSTYPE YYSTYPE;
+21 -5
View File
@@ -576,7 +576,10 @@ Param:
$$ = gen_param_regular(jv_string_value($2));
jv_free($2);
} |
'$' Keyword {
$$ = gen_param_regular(jv_string_value($2));
jv_free($2);
} |
IDENT {
$$ = gen_param(jv_string_value($1));
jv_free($1);
@@ -734,14 +737,19 @@ FORMAT {
else
$$ = BLOCK(gen_subexp(gen_const(jv_object())), $2, gen_op_simple(POP));
} |
'$' LOC {
$$ = gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname),
jv_string("line"), jv_number(locfile_get_line(locations, @$.start) + 1)));
} |
'$' IDENT {
$$ = gen_location(@$, locations, gen_op_unbound(LOADV, jv_string_value($2)));
jv_free($2);
} |
'$' Keyword {
if (strcmp(jv_string_value($2), "__loc__") == 0) {
$$ = gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname),
jv_string("line"), jv_number(locfile_get_line(locations, @$.start) + 1)));
} else {
$$ = gen_location(@$, locations, gen_op_unbound(LOADV, jv_string_value($2)));
}
jv_free($2);
} |
IDENT {
const char *s = jv_string_value($1);
if (strcmp(s, "false") == 0)
@@ -939,10 +947,18 @@ IDENT ':' ExpD {
$$ = gen_dictpair(gen_const($2),
gen_location(@$, locations, gen_op_unbound(LOADV, jv_string_value($2))));
}
| '$' Keyword {
$$ = gen_dictpair(gen_const($2),
gen_location(@$, locations, gen_op_unbound(LOADV, jv_string_value($2))));
}
| IDENT {
$$ = gen_dictpair(gen_const(jv_copy($1)),
gen_index(gen_noop(), gen_const($1)));
}
| Keyword {
$$ = gen_dictpair(gen_const(jv_copy($1)),
gen_index(gen_noop(), gen_const($1)));
}
| '(' Exp ')' ':' ExpD {
jv msg = check_object_key($2);
if (jv_is_valid(msg)) {
+11
View File
@@ -1662,3 +1662,14 @@ true
builtins|any(.[:1] == "_")
null
false
# Test ability to use keywords
(.[] as $kw | "\"{\($kw)} as $\($kw) | $\($kw) | {$\($kw)} | {\($kw):.\($kw)}\""|eval|empty),null
["as","def","module","import","include","if","then","else","elif","end","reduce","foreach","and","or","try","catch","label","break","__loc__"]
null
(.[] as $kw | "\"def f($\($kw)): $\($kw); f(.)\""|eval|empty),null
["as","def","module","import","include","if","then","else","elif","end","reduce","foreach","and","or","try","catch","label","break","__loc__"]
null