RPA Toolkit
work on RJS compile time errors
[rpatk.git] / rjs / rjscompiler.h
1 #ifndef _RJSCOMPILER_H_
2 #define _RJSCOMPILER_H_
3
4
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8
9 #include "rtypes.h"
10 #include "rarray.h"
11 #include "rvmcodegen.h"
12 #include "rvmscope.h"
13 #include "rvmcpu.h"
14 #include "rjsuids.h"
15 #include "rparecord.h"
16
17 #define RJS_COMPILER_NHANDLERS 128
18
19 #define RJS_COCTX_NONE 0
20 #define RJS_COCTX_GLOBAL (1 << 1)
21 #define RJS_COCTX_FUNCTION (1 << 2)
22 #define RJS_COCTX_FUNCTIONCALL (1 << 3)
23 #define RJS_COCTX_IFSTATEMENT (1 << 4)
24 #define RJS_COCTX_ITERATION (1 << 5)
25 #define RJS_COCTX_OPERATION (1 << 5)
26
27 #define RJS_ERROR_NONE 0
28 #define RJS_ERROR_UNDEFINED 1
29 #define RJS_ERROR_SYNTAX 2
30
31
32 typedef struct rjs_coctx_s {
33         rulong type;
34 } rjs_coctx_t;
35
36
37 typedef struct rjs_coctx_global_s {
38         rjs_coctx_t base;
39         rsize_t allocs;
40 } rjs_coctx_global_t;
41
42
43 typedef struct rjs_coctx_function_s {
44         rjs_coctx_t base;
45         rsize_t allocs;
46 } rjs_coctx_function_t;
47
48
49 typedef struct rjs_coctx_operation_s {
50         rjs_coctx_t base;
51         rlong opcode;
52 } rjs_coctx_operation_t;
53
54
55 typedef struct rjs_coctx_functioncall_s {
56         rjs_coctx_t base;
57         rsize_t arguments;
58         ruchar setthis;
59 } rjs_coctx_functioncall_t;
60
61
62 typedef struct rjs_coctx_ifstatement_s {
63         rjs_coctx_t base;
64         rlong start;
65         rlong trueidx;
66         rlong falseidx;
67         rlong endidx;
68 } rjs_coctx_ifstatement_t;
69
70
71 typedef struct rjs_coctx_iteration_s {
72         rjs_coctx_t base;
73         rlong start;
74         rlong iterationidx;
75         rlong continueidx;
76         rlong endidx;
77 } rjs_coctx_iteration_t;
78
79
80 typedef struct rjs_coerror_s {
81         rlong code;
82         const rchar *script;
83         rlong scriptsize;
84 } rjs_coerror_t;
85
86
87 typedef struct rjs_compiler_s rjs_compiler_t;
88 typedef rint (*RJS_COMPILER_RH)(rjs_compiler_t *co, rarray_t *records, rlong rec);
89
90 struct rjs_compiler_s {
91         rvmcpu_t *cpu;
92         rvm_codegen_t *cg;
93         rvm_scope_t *scope;
94         rarray_t *coctx;
95         rarray_t *errors;
96         rchar *temp;
97         rlong headoff;
98         rlong opcode;
99         rulong debug:1;
100         RJS_COMPILER_RH handlers[RJS_COMPILER_NHANDLERS];
101 };
102
103
104 rjs_compiler_t *rjs_compiler_create(rvmcpu_t *cpu);
105 void rjs_compiler_destroy(rjs_compiler_t *co);
106 rint rjs_compiler_compile(rjs_compiler_t *co, rarray_t *records);
107 rjs_coctx_t *rjs_compiler_getctx(rjs_compiler_t *co, rulong type);
108
109 #ifdef __cplusplus
110 }
111 #endif
112
113 #endif