-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontext.h
125 lines (106 loc) · 3.19 KB
/
context.h
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**
* @brief Kontekst wystepowania zmiennych, funkcji.
* Mozna to utozsamiac ze srodowiskiem.
* @author Piotr Truszkowski
*/
#ifndef _J_CONTEXT_H_
#define _J_CONTEXT_H_
#include "types.h"
#include "funtbl.h"
#include "vartbl.h"
#include <stdlib.h>
typedef struct j_context_t {
struct j_context_t *prev;
struct j_funtbl_t *ftbl;
struct j_vartbl_t *vtbl;
struct j_def_fun_t *fun;
int returnable;
int stack;
} j_context_t;
/**
* @brief Utworzenie kontekstu.
*/
j_context_t *j_new_context(
j_context_t *prev,
j_def_fun_t *fun,
size_t hsize);
/**
* @brief Zwolnienie zasobow
*/
void j_delete_context(
j_context_t *ctx);
/**
* @brief Dodanie funkcji do zbioru zdefiniowanych funkcji w tym kontekscie.
*/
int j_context_add_fun(
j_context_t *ctx,
j_def_fun_t *df);
/**
* @brief Dodanie zmiennej do zbioru zdefiniowanych zmiennych w tym kontekscie.
*/
int j_context_add_var(
j_context_t *ctx,
j_type_t type,
j_id_t *id,
j_expr_t *expr,
int offset);
/**
* @brief Odszukanie funkcji o zadanym ID (sa unikalne), 'NULL' jak nie ma.
*/
j_def_fun_t *j_context_find_fun(
j_context_t *ctx,
size_t number);
/**
* @brief Odszukanie typu zmiennej o zadanym ID, 'J_BAD_TYPE' jak nie ma.
*/
j_type_t j_context_find_var_type(
j_context_t *ctx,
size_t number);
/**
* @brief Odszukanie informacji o zmiennej o zadanym ID, 'NULL' jaki nie ma.
*/
j_vartbl_inf_t *j_context_find_var_inf(
j_context_t *ctx,
size_t number,
size_t *depth);
/**
* @brief Odszukanie informacji o funkcji o zadanym ID, 'NULL' jak nie ma.
*/
j_funtbl_inf_t *j_context_find_fun_inf(
j_context_t *ctx,
size_t number);
/**
* @brief Rozmiar stosu przeznaczony na bierzaca funkcje.
*/
int j_context_stack_size(
j_context_t *ctx);
/**
* @brief Odszukanie kontekstu w ktorym zmienna zostala zadeklarowana.
*/
j_context_t *j_context_find_var_home(
j_context_t *ctx,
size_t number);
/**
* @brief Odszukanie informacji o zmiennej o zadanym ID, 'NULL' jak nie ma.
* home == tutaj ma sie znalezc szukana zmienna.
*/
j_vartbl_inf_t *j_context_find_var_inf_directly(
j_context_t *ctx,
j_context_t *home,
size_t number,
size_t *depth);
/**
* @brief Odszukanie kontekstu w ktorym funkcja zostala zadeklarowana.
*/
j_context_t *j_context_find_fun_home(
j_context_t *ctx,
size_t number);
/**
* @brief Odszukanie informacji o funkcji o zadanym ID, 'NULL' jak nie ma.
* home == tutaj ma sie znalezc szukana funkcja.
*/
j_funtbl_inf_t *j_context_find_fun_inf_directly(
j_context_t *ctx,
j_context_t *home,
size_t number);
#endif