annotate runtime/object.h @ 177:e57c151f351e

Get bytecode engine working well enough for naive fib
author Mike Pavone <pavone@retrodev.com>
date Sun, 12 Jun 2011 03:49:51 -0700
parents 9fab36cc706b
children ba35ab624ec2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
31f8182f3433 Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents: 10
diff changeset
1 #ifndef OBJECT_H_
31f8182f3433 Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents: 10
diff changeset
2 #define OBJECT_H_
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include "plat_types.h"
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 #include "thread.h"
8
8d74ef7fa357 Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
6 #include "func.h"
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8 typedef struct{
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 rhope_func *method_lookup;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 rhope_func *getter_lookup;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 rhope_func *setter_lookup;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 rhope_func *convert_to;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 rhope_func *convert_from;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 special_func init;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 special_func copy;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 special_func cleanup;
41
1b86a1ee500a Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents: 40
diff changeset
17 special_func free;
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 struct object *name;
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
19 uint32_t type_id;
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 uint32_t first_methodid;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 uint32_t last_methodid;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 uint32_t first_getfieldid;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 uint32_t last_getfieldid;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 uint32_t first_setfieldid;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 uint32_t last_setfieldid;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 uint32_t first_convertto;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 uint32_t last_convertto;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28 uint32_t first_convertfrom;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29 uint32_t last_convertfrom;
163
9fab36cc706b Add Raw Size method to blueprint to allow code to query the raw size of a type in bytes
Mike Pavone <pavone@retrodev.com>
parents: 139
diff changeset
30 int32_t size;
9fab36cc706b Add Raw Size method to blueprint to allow code to query the raw size of a type in bytes
Mike Pavone <pavone@retrodev.com>
parents: 139
diff changeset
31 int32_t boxed_size;
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 } blueprint;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33
53
70af7fa155d0 Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
34 struct object {
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 rh_atomic32(refcount);
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 blueprint *bprint;
53
70af7fa155d0 Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
37 };
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 typedef struct {
10
0f2c4ee070fe Changes to calldata struct for stack unwind
Mike Pavone <pavone@retrodev.com>
parents: 8
diff changeset
40 object base;
0f2c4ee070fe Changes to calldata struct for stack unwind
Mike Pavone <pavone@retrodev.com>
parents: 8
diff changeset
41 uint32_t size;
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 } multisize;
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
44 #pragma pack(push,1)
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
45 struct calldata {
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
46 struct calldata *lastframe;
71
c40c3d399133 Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
47 void *vars;
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 89
diff changeset
48 #ifdef ENABLE_PROFILING
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 89
diff changeset
49 uint64_t start;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 89
diff changeset
50 uint64_t accum;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 89
diff changeset
51 uint64_t self_start;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 89
diff changeset
52 uint64_t self_accum;
116
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
53 uint64_t *myactivationlevel;
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 89
diff changeset
54 #endif
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 89
diff changeset
55 uint32_t func;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 89
diff changeset
56 uint16_t num_params;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 89
diff changeset
57 uint16_t callspace;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 89
diff changeset
58 object *params[1];
53
70af7fa155d0 Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
59 };
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
60 #pragma pack(pop)
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61
42
aabda74c7a88 Fields can now be defined to have naked primitive types
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
62 #define OBegin typedef struct {
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
63 #define Object(name) } nt_ ## name; typedef struct { object SP_header; nt_ ## name payload; } t_ ## name;
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
64 #define MObject(name) } nt_ ## name; typedef struct { multisize SP_header; nt_ ## name payload; } t_ ## name;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
65 #define Box(nakedtype,fieldname,objectname) typedef struct{ object SP_header; nakedtype fieldname; } t_ ## objectname;
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
66
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
67 #define get_blueprint(object) (object)->bprint
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
68
12
31f8182f3433 Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents: 10
diff changeset
69 #define add_ref(object) (rh_atomic_add((object), refcount, 1),object)
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
70
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
71 returntype call_method(uint32_t methodid, calldata * params);
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
72 returntype set_field(uint32_t setfieldid, calldata * params);
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
73 returntype get_field(uint32_t getfieldid, calldata * params);
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
74 object * alloc_object(blueprint * bp);
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
75 void * alloc_variable(uint32_t size);
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
76 object * new_object(uint32_t type);
36
495dddadd058 User defined types work in the compiler now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
77 object * new_object_bp(blueprint * bp);
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
78 multisize * new_multisize(uint32_t type, uint32_t size);
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
79 void release_ref(object * obj);
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
80 blueprint * register_type_byid(uint32_t type, int32_t size, special_func init, special_func copy, special_func cleanup);
139
a68e6828d896 Global stores and transactions are working. Definately leaks memory on retries. Probably a fair number of bugs to work out. However, a basic test program works.
Mike Pavone <pavone@retrodev.com>
parents: 116
diff changeset
81 blueprint * register_type(int32_t size, special_func init, special_func copy, special_func cleanup);
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 42
diff changeset
82 blueprint * new_blueprint(uint32_t type, int32_t size, special_func init, special_func copy, special_func cleanup);
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
83 void add_method(blueprint * bp, uint32_t methodid, rhope_func impl);
34
df038cef648b More work on supporting user defined types in the C backend
Mike Pavone <pavone@retrodev.com>
parents: 30
diff changeset
84 void add_getter(blueprint * bp, uint32_t fieldid, rhope_func impl);
df038cef648b More work on supporting user defined types in the C backend
Mike Pavone <pavone@retrodev.com>
parents: 30
diff changeset
85 void add_setter(blueprint * bp, uint32_t fieldid, rhope_func impl);
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
86 returntype convert_to(uint32_t convertto, calldata * params);
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 returntype convert_from(uint32_t convertfrom, calldata * params);
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 object * copy_object(object * tocopy);
40
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
89 object * naked_to_boxed(uint32_t type, void * rawdata);
789a146a48e1 Started adding support for naked values in user defined objects
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
90 void boxed_to_naked(object * src, void * dest);
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
91 returntype coerce_value(uint32_t type, calldata * params);
30
914ad38f9b59 Compiler now works for some simple programs
Mike Pavone <pavone@retrodev.com>
parents: 12
diff changeset
92 blueprint * get_blueprint_byid(uint32_t type);
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
93
87
3c4325e6298f Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents: 71
diff changeset
94 extern blueprint ** registered_types;
3c4325e6298f Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents: 71
diff changeset
95 extern uint32_t max_registered_type;
89
5a195ee08eac Fix memory leak and bug that was preventing First@Dictionary from working properly
Mike Pavone <pavone@retrodev.com>
parents: 87
diff changeset
96 #include "fixed_alloc.h"
5a195ee08eac Fix memory leak and bug that was preventing First@Dictionary from working properly
Mike Pavone <pavone@retrodev.com>
parents: 87
diff changeset
97 extern mem_manager * manager;
87
3c4325e6298f Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents: 71
diff changeset
98
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
99 #define INITIAL_TYPE_STORAGE 32
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
100 #define INITIAL_METHOD_LOOKUP 8
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
101 #define BELOW_INITIAL_METHOD 3
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
102
12
31f8182f3433 Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents: 10
diff changeset
103 #endif //OBJECT_H_