blob: f5100a9aeecc7fa9cc93ddddb67d317169e8ad80 (
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
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
|
/* This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#ifndef __GCC_OBJECTS_H__
#define __GCC_OBJECTS_H__
enum GPY_LIT_T { TYPE_INTEGER, TYPE_STRING, TYPE_NONE };
typedef struct gpy_rr_literal_t {
enum GPY_LIT_T type;
union {
int integer;
char * string;
/* ... */
} literal ;
} gpy_literal_t ;
#define Gpy_Lit_Init( x ) \
x = gpy_malloc( sizeof(gpy_literal_t) ); \
x->type = TYPE_NONE; \
x->literal.integer = 0;
typedef struct gpy_rr_object_state_t {
char * obj_t_ident;
signed long ref_count;
void * self;
struct gpy_type_obj_def_t * definition;
} gpy_object_state_t ;
typedef gpy_object_state_t * (*binary_op)( gpy_object_state_t *,
gpy_object_state_t * );
typedef struct gpy_number_prot_t
{
bool init;
binary_op n_add;
binary_op n_sub;
binary_op n_div;
binary_op n_mul;
binary_op n_pow;
binary_op n_let;
binary_op n_lee;
binary_op n_get;
binary_op n_gee;
binary_op n_eee;
binary_op n_nee;
binary_op n_orr;
binary_op n_and;
} gpy_num_prot_t ;
typedef struct gpy_type_obj_def_t {
char * identifier;
size_t builtin_type_size;
void * (*init_hook)( gpy_literal_t * );
void (*destroy_hook)( void * );
void (*print_hook)( void * , FILE * , bool );
const struct gpy_number_prot_t * binary_protocol;
} gpy_type_obj_def_t ;
#define Gpy_Object_State_Init( x ) \
x = gpy_malloc( sizeof(struct gpy_rr_object_state_t) ); \
debug("object created at <%p>!\n", (void*)x ); \
x->obj_t_ident = NULL; x->ref_count = 0; \
x->self = NULL; x->definition = NULL;
#define Gpy_Object_State_Init_Ctx( x,y ) \
Gpy_Object_State_Init( x ); \
gpy_vec_push( ((gpy_context_t*)(y->vector[y->length-1]))->symbols, x );
#define NULL_OBJ_STATE NULL
extern void gpy_rr_init_runtime( void );
extern gpy_object_state_t * gpy_rr_fold_integer( int );
extern void gpy_rr_init_primitives( void );
#endif //__GCC_OBJECTS_H__
|