aboutsummaryrefslogtreecommitdiffstats
path: root/prism_compile.h
blob: 7f45ddd1d2d6ebab36605265ae459a1023afbccf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "prism/prism.h"

// ScopeNodes are helper nodes, and will never be part of the AST. We manually
// declare them here to avoid generating them.
typedef struct pm_scope_node {
    pm_node_t base;
    struct pm_scope_node *previous;
    pm_node_t *ast_node;
    struct pm_parameters_node *parameters;
    pm_node_t *body;
    pm_constant_id_list_t locals;
    pm_parser_t *parser;

    // There are sometimes when we need to track
    // hidden variables that we have put on
    // the local table for the stack to use, so
    // that we properly account for them when giving
    // local indexes. We do this with the
    // hidden_variable_count
    int hidden_variable_count;

    ID *constants;
    st_table *index_lookup_table;

    // Some locals are defined at higher scopes than they are used. We can use
    // this offset to control which parent scopes local table we should be
    // referencing from the current scope.
    unsigned int local_depth_offset;
} pm_scope_node_t;

void pm_scope_node_init(const pm_node_t *node, pm_scope_node_t *scope, pm_scope_node_t *previous, pm_parser_t *parser);