Make grammar rules const so the go in .text section.
This commit is contained in:
parent
4d7adce9c5
commit
df4b4f31ef
14
py/parse.c
14
py/parse.c
@ -55,9 +55,9 @@ enum {
|
|||||||
#define opt_tok(t) (RULE_ARG_OPT_TOK | PY_TOKEN_##t)
|
#define opt_tok(t) (RULE_ARG_OPT_TOK | PY_TOKEN_##t)
|
||||||
#define opt_rule(r) (RULE_ARG_OPT_RULE | RULE_##r)
|
#define opt_rule(r) (RULE_ARG_OPT_RULE | RULE_##r)
|
||||||
#ifdef USE_RULE_NAME
|
#ifdef USE_RULE_NAME
|
||||||
#define DEF_RULE(rule, comp, kind, arg...) static rule_t rule_##rule = { RULE_##rule, kind, #rule, { arg } };
|
#define DEF_RULE(rule, comp, kind, arg...) static const rule_t rule_##rule = { RULE_##rule, kind, #rule, { arg } };
|
||||||
#else
|
#else
|
||||||
#define DEF_RULE(rule, comp, kind, arg...) static rule_t rule_##rule = { RULE_##rule, kind, { arg } };
|
#define DEF_RULE(rule, comp, kind, arg...) static const rule_t rule_##rule = { RULE_##rule, kind, { arg } };
|
||||||
#endif
|
#endif
|
||||||
#include "grammar.h"
|
#include "grammar.h"
|
||||||
#undef or
|
#undef or
|
||||||
@ -71,7 +71,7 @@ enum {
|
|||||||
#undef one_or_more
|
#undef one_or_more
|
||||||
#undef DEF_RULE
|
#undef DEF_RULE
|
||||||
|
|
||||||
static rule_t *rules[] = {
|
static const rule_t *rules[] = {
|
||||||
NULL,
|
NULL,
|
||||||
#define DEF_RULE(rule, comp, kind, arg...) &rule_##rule,
|
#define DEF_RULE(rule, comp, kind, arg...) &rule_##rule,
|
||||||
#include "grammar.h"
|
#include "grammar.h"
|
||||||
@ -92,7 +92,7 @@ typedef struct _parser_t {
|
|||||||
py_parse_node_t *result_stack;
|
py_parse_node_t *result_stack;
|
||||||
} parser_t;
|
} parser_t;
|
||||||
|
|
||||||
static void push_rule(parser_t *parser, rule_t *rule, int arg_i) {
|
static void push_rule(parser_t *parser, const rule_t *rule, int arg_i) {
|
||||||
if (parser->rule_stack_top >= parser->rule_stack_alloc) {
|
if (parser->rule_stack_top >= parser->rule_stack_alloc) {
|
||||||
parser->rule_stack_alloc *= 2;
|
parser->rule_stack_alloc *= 2;
|
||||||
parser->rule_stack = m_renew(rule_stack_t, parser->rule_stack, parser->rule_stack_alloc);
|
parser->rule_stack = m_renew(rule_stack_t, parser->rule_stack, parser->rule_stack_alloc);
|
||||||
@ -109,7 +109,7 @@ static void push_rule_from_arg(parser_t *parser, uint arg) {
|
|||||||
push_rule(parser, rules[rule_id], 0);
|
push_rule(parser, rules[rule_id], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pop_rule(parser_t *parser, rule_t **rule, uint *arg_i) {
|
static void pop_rule(parser_t *parser, const rule_t **rule, uint *arg_i) {
|
||||||
parser->rule_stack_top -= 1;
|
parser->rule_stack_top -= 1;
|
||||||
*rule = rules[parser->rule_stack[parser->rule_stack_top].rule_id];
|
*rule = rules[parser->rule_stack[parser->rule_stack_top].rule_id];
|
||||||
*arg_i = parser->rule_stack[parser->rule_stack_top].arg_i;
|
*arg_i = parser->rule_stack[parser->rule_stack_top].arg_i;
|
||||||
@ -243,7 +243,7 @@ static void push_result_token(parser_t *parser, const py_lexer_t *lex) {
|
|||||||
push_result_node(parser, pn);
|
push_result_node(parser, pn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void push_result_rule(parser_t *parser, rule_t *rule, int num_args) {
|
static void push_result_rule(parser_t *parser, const rule_t *rule, int num_args) {
|
||||||
py_parse_node_struct_t *pn = parse_node_new_struct(rule->rule_id, num_args);
|
py_parse_node_struct_t *pn = parse_node_new_struct(rule->rule_id, num_args);
|
||||||
for (int i = num_args; i > 0; i--) {
|
for (int i = num_args; i > 0; i--) {
|
||||||
pn->nodes[i - 1] = pop_result(parser);
|
pn->nodes[i - 1] = pop_result(parser);
|
||||||
@ -270,7 +270,7 @@ py_parse_node_t py_parse(py_lexer_t *lex, py_parse_input_kind_t input_kind) {
|
|||||||
|
|
||||||
uint n, i;
|
uint n, i;
|
||||||
bool backtrack = false;
|
bool backtrack = false;
|
||||||
rule_t *rule;
|
const rule_t *rule;
|
||||||
py_token_kind_t tok_kind;
|
py_token_kind_t tok_kind;
|
||||||
bool emit_rule;
|
bool emit_rule;
|
||||||
bool had_trailing_sep;
|
bool had_trailing_sep;
|
||||||
|
@ -1546,7 +1546,7 @@ py_obj_t rt_iternext(py_obj_t o_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const void *const rt_fun_table[RT_F_NUMBER_OF] = {
|
void *const rt_fun_table[RT_F_NUMBER_OF] = {
|
||||||
rt_load_const_str,
|
rt_load_const_str,
|
||||||
rt_load_name,
|
rt_load_name,
|
||||||
rt_load_global,
|
rt_load_global,
|
||||||
|
@ -76,7 +76,7 @@ typedef enum {
|
|||||||
RT_F_NUMBER_OF,
|
RT_F_NUMBER_OF,
|
||||||
} rt_fun_kind_t;
|
} rt_fun_kind_t;
|
||||||
|
|
||||||
extern const void *const rt_fun_table[RT_F_NUMBER_OF];
|
extern void *const rt_fun_table[RT_F_NUMBER_OF];
|
||||||
|
|
||||||
typedef machine_ptr_t py_obj_t; // must be of pointer size
|
typedef machine_ptr_t py_obj_t; // must be of pointer size
|
||||||
typedef py_obj_t (*py_fun_0_t)();
|
typedef py_obj_t (*py_fun_0_t)();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user