2 ** @file mruby/variable.h - mruby variables
4 ** See Copyright Notice in mruby.h
7 #ifndef MRUBY_VARIABLE_H
8 #define MRUBY_VARIABLE_H
13 * Functions to access mruby variables.
17 typedef struct global_variable {
20 mrb_value (*getter)(void);
22 /* void (*marker)(); */
23 /* int block_trace; */
24 /* struct trace_var *trace; */
32 mrb_value mrb_vm_special_get(mrb_state*, mrb_sym);
33 void mrb_vm_special_set(mrb_state*, mrb_sym, mrb_value);
34 mrb_value mrb_vm_cv_get(mrb_state*, mrb_sym);
35 void mrb_vm_cv_set(mrb_state*, mrb_sym, mrb_value);
36 mrb_value mrb_vm_const_get(mrb_state*, mrb_sym);
37 void mrb_vm_const_set(mrb_state*, mrb_sym, mrb_value);
38 MRB_API mrb_value mrb_const_get(mrb_state*, mrb_value, mrb_sym);
39 MRB_API void mrb_const_set(mrb_state*, mrb_value, mrb_sym, mrb_value);
40 MRB_API mrb_bool mrb_const_defined(mrb_state*, mrb_value, mrb_sym);
41 MRB_API void mrb_const_remove(mrb_state*, mrb_value, mrb_sym);
43 MRB_API mrb_bool mrb_iv_name_sym_p(mrb_state *mrb, mrb_sym sym);
44 MRB_API void mrb_iv_name_sym_check(mrb_state *mrb, mrb_sym sym);
45 MRB_API mrb_value mrb_obj_iv_get(mrb_state *mrb, struct RObject *obj, mrb_sym sym);
46 MRB_API void mrb_obj_iv_set(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v);
47 MRB_API mrb_bool mrb_obj_iv_defined(mrb_state *mrb, struct RObject *obj, mrb_sym sym);
48 MRB_API mrb_value mrb_iv_get(mrb_state *mrb, mrb_value obj, mrb_sym sym);
49 MRB_API void mrb_iv_set(mrb_state *mrb, mrb_value obj, mrb_sym sym, mrb_value v);
50 MRB_API mrb_bool mrb_iv_defined(mrb_state*, mrb_value, mrb_sym);
51 MRB_API mrb_value mrb_iv_remove(mrb_state *mrb, mrb_value obj, mrb_sym sym);
52 MRB_API void mrb_iv_copy(mrb_state *mrb, mrb_value dst, mrb_value src);
53 MRB_API mrb_bool mrb_const_defined_at(mrb_state *mrb, mrb_value mod, mrb_sym id);
56 * Get a global variable. Will return nil if the var does not exist
66 * mrb_sym sym = mrb_intern_lit(mrb, "$value");
67 * mrb_value var = mrb_gv_get(mrb, sym);
69 * @param mrb The mruby state reference
70 * @param sym The name of the global variable
71 * @return The value of that global variable. May be nil
73 MRB_API mrb_value mrb_gv_get(mrb_state *mrb, mrb_sym sym);
76 * Set a global variable
86 * mrb_sym sym = mrb_intern_lit(mrb, "$value");
87 * mrb_gv_set(mrb, sym, mrb_str_new_lit("foo"));
89 * @param mrb The mruby state reference
90 * @param sym The name of the global variable
91 * @param val The value of the global variable
93 MRB_API void mrb_gv_set(mrb_state *mrb, mrb_sym sym, mrb_value val);
96 * Remove a global variable.
104 * mrb_sym sym = mrb_intern_lit(mrb, "$value");
105 * mrb_gv_remove(mrb, sym);
107 * @param mrb The mruby state reference
108 * @param sym The name of the global variable
110 MRB_API void mrb_gv_remove(mrb_state *mrb, mrb_sym sym);
112 MRB_API mrb_value mrb_cv_get(mrb_state *mrb, mrb_value mod, mrb_sym sym);
113 MRB_API void mrb_mod_cv_set(mrb_state *mrb, struct RClass * c, mrb_sym sym, mrb_value v);
114 MRB_API void mrb_cv_set(mrb_state *mrb, mrb_value mod, mrb_sym sym, mrb_value v);
115 MRB_API mrb_bool mrb_cv_defined(mrb_state *mrb, mrb_value mod, mrb_sym sym);
116 mrb_value mrb_obj_iv_inspect(mrb_state*, struct RObject*);
117 void mrb_obj_iv_set_force(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v);
118 mrb_value mrb_mod_constants(mrb_state *mrb, mrb_value mod);
119 mrb_value mrb_f_global_variables(mrb_state *mrb, mrb_value self);
120 mrb_value mrb_obj_instance_variables(mrb_state*, mrb_value);
121 mrb_value mrb_mod_class_variables(mrb_state*, mrb_value);
122 mrb_value mrb_mod_cv_get(mrb_state *mrb, struct RClass * c, mrb_sym sym);
123 mrb_bool mrb_mod_cv_defined(mrb_state *mrb, struct RClass * c, mrb_sym sym);
124 mrb_bool mrb_ident_p(const char *s, mrb_int len);
127 void mrb_gc_mark_gv(mrb_state*);
128 void mrb_gc_free_gv(mrb_state*);
129 void mrb_gc_mark_iv(mrb_state*, struct RObject*);
130 size_t mrb_gc_mark_iv_size(mrb_state*, struct RObject*);
131 void mrb_gc_free_iv(mrb_state*, struct RObject*);
133 /* return non zero to break the loop */
134 typedef int (mrb_iv_foreach_func)(mrb_state*,mrb_sym,mrb_value,void*);
135 MRB_API void mrb_iv_foreach(mrb_state *mrb, mrb_value obj, mrb_iv_foreach_func *func, void *p);
139 #endif /* MRUBY_VARIABLE_H */