next up previous index
Next: Application hooks Up: Miscellaneous Previous: System operations   Index

Reflection

In msg.cecil:

method send(msg_name@:string, num_params@:int,
            args@:ordered_collection[dynamic]):dynamic;
method send(msg_name@:string, num_params@:int,
            args@:ordered_collection[dynamic], if_error:&():dynamic):dynamic;
method send(msg_name@:vstring, num_params@:int,
            args@:vector[dynamic], if_error:&():dynamic):dynamic;
method field_init_send(msg_name@:string, num_params@:int,
                       args@:ordered_collection[dynamic],
                       if_error:&():dynamic):dynamic;
method field_init_send(msg_name@:vstring, num_params@:int,
                       args@:vector[dynamic], if_error:&():dynamic):dynamic;
method prim_resend(msg_name@:string, num_params@:int,
                   args@:ordered_collection[dynamic],
                   dirs@:ordered_collection[dynamic],
                   is_undirected:bool, if_error:&():dynamic):dynamic;
method prim_resend(msg_name@:vstring, num_params@:int,
                   args@:vector[dynamic], dirs@:vector[dynamic],
                   is_undirected:bool, if_error:&():dynamic):dynamic;
method directed_field_init_send(msg_name@:string, num_params@:int,
                                args@:ordered_collection[dynamic],
                                dirs@:ordered_collection[dynamic],
                                if_error:&():dynamic):dynamic;
method directed_field_init_send(msg_name@:vstring, num_params@:int,
                                args@:vector[dynamic], dirs@:vector[dynamic],
                                if_error:&():dynamic):dynamic;
method type_id(t:any):int;
method set_breakpoint(msg_name@:string):void;
method set_breakpoint(msg_name_oop@:vstring):void;
method show_breakpoints():void;
This file includes primitives allowing the Cecil program access to the run-time system's compiled code and method lookup tables, thus supporting reflection. In env.cecil:

abstract object evaluation_env;
  method is_global_env(@:evaluation_env):bool;
  method lexically_enclosing_env(e@:evaluation_env):evaluation_env;
  signature lexically_enclosing_env(evaluation_env,
                                    if_none:&():evaluation_env):evaluation_env;
  method lookup(e@:evaluation_env, s:string, num_params:int,
                if_absent:&():dynamic, if_error:&(string):dynamic):dynamic;
  method lookup_assign(e@:evaluation_env, s:string, num_params:int,
                       value:dynamic,
                       if_absent:&():void, if_error:&(string):void):void;
  method find_defining_env(e@:evaluation_env, s:string, num_params:int,
                           if_absent:&():evaluation_env,
                           if_error:&(string):evaluation_env):evaluation_env;
  signature fetch(evaluation_env, s:string, num_params:int,
                  if_absent:&():dynamic, if_error:&(string):dynamic):dynamic;
  signature fetch_object(evaluation_env, s:string, num_params:int,
                         if_absent:&():dynamic, if_error:&(string):dynamic
                         ):dynamic;
  signature assign(evaluation_env, s:string, num_params:int, value:dynamic,
                   if_absent:&():void, if_error:&(string):void):void;
  signature defines_var(evaluation_env, s:string, num_params:int,
                        if_error:&(string):bool):bool;
  method add_var_decl(e@:evaluation_env, name:string, is_constant:bool,
                      type_annotation:string, value:dynamic,
                      if_error:&(string):none):void;
  method add_var_decl(e@:evaluation_env, name:string, num_params:int,
                      is_constant:bool, is_abstract:bool,
                      type_annotation:string, value:dynamic,
                      if_error:&(string):none):void;
  method local_vars_do(@:evaluation_env,
                       cl:&(name:string, is_constant:bool,
                            type_annotation:string):void):void;
  method decl_context_string(@:evaluation_env):string;
concrete object empty_env isa evaluation_env;
  method lexically_enclosing_env(@:empty_env,
                                 if_none:&():evaluation_env):evaluation_env;
  method fetch(r@:empty_env, s:string, num_params:int,
               if_absent:&():dynamic, if_error:&(string):dynamic):dynamic;
  method fetch_object(r@:empty_env, s:string, num_params:int,
                      if_absent:&():dynamic, if_error:&(string):dynamic
                      ):dynamic;
  method assign(r@:empty_env, s:string, num_params:int, value:dynamic,
                if_absent:&():void, if_error:&(string):void):void;
  method defines_var(r@:empty_env, s:string, num_params:int,
                     if_error:&(string):bool):bool;
abstract object debuggable_env isa evaluation_env;
  method debugger(env@:debuggable_env, print_frame@:bool):void;
concrete representation global_env isa debuggable_env;
  method print_string(e@:global_env):string;
  method is_global_env(@:global_env):bool;
  method lexically_enclosing_env(@:global_env,
                                 if_none:&():evaluation_env):evaluation_env;
  var field extensions(e@:global_env):evaluation_env;
  method add_var_decl(e@:global_env, name:string, num_params:int,
                      is_constant:bool, is_abstract:bool,
                      type_annotation:string, value:dynamic,
                      if_error:&(string):none):void;
method fetch(r@:global_env, s:string, num_params:int,
             if_absent:&():dynamic, if_error:&(string):dynamic):dynamic;
method fetch_internal(r@:global_env, s:string, num_params:int,
                      if_absent:&():dynamic,
                      if_error:&(string):dynamic):dynamic;
method fetch_internal(r@:global_env, s@:vstring, num_params@:int,
                      if_absent:&():dynamic,
                      if_error:&(string):dynamic):dynamic
                      (** sends(r1 = eval([if_absent]),
                                r2 = eval([if_error],[i_vstring])),
                          return_type(r1,r2,unknown),
                          formals_escape(f,f,f,f,f)**);
method fetch_object(r@:global_env, s@:string, num_params@:int,
                    if_absent:&():dynamic, if_error:&(string):dynamic):dynamic;
method fetch_object_internal(r@:global_env, s@:string, num_params@:int,
                             if_absent:&():dynamic, if_error:&(string):dynamic
                             ):dynamic;
method fetch_object_internal(r@:global_env, s@:vstring, num_params@:int,
                             if_absent:&():dynamic, if_error:&(string):dynamic
                             ):dynamic;
method assign(r@:global_env, s:string, num_params:int, value:dynamic,
              if_absent:&():void, if_error:&(string):void):void;
method assign_internal(r@:global_env, s:string, num_params:int, value:dynamic,
                       if_absent:&():void, if_error:&(string):void):void;
method assign_internal(r@:global_env, s@:vstring, num_params@:int,
                       value:dynamic,
                       if_absent:&():void, if_error:&(string):void):void
                       (** return_type(void),
                           sends(eval([if_absent]),
                                 eval([if_error],[i_vstring])),
                           formals_escape(f,f,f,t,f,f) **);
method defines_var(r@:global_env, s:string, num_params:int,
                   if_error:&(string):bool):bool;
method defines_var_internal(r@:global_env, s:string, num_params:int,
                            if_error:&(string):bool):bool;
method defines_var_internal(r@:global_env, s@:vstring, num_params@:int,
                            if_error:&(string):bool):bool;
method create_anon_object(r@:global_env, parent:dynamic,
                           if_error:&(string):dynamic):dynamic;
method create_named_object(r@:global_env, s@:string, num_params@:int,
                           is_abstract@:bool,
                           parents@:indexed[dynamic],
                           if_present:&():dynamic,
                           if_error:&(string):dynamic):dynamic;
method create_named_object(r@:global_env, s@:vstring, num_params@:int,
                           is_abstract@:bool,
                           parents_oop@:vector[dynamic],
                           if_present:&():dynamic, if_error:&(string):dynamic
                           ):dynamic
        (** sends(r1 = eval([if_present]),
                  r2 = eval([if_error],[i_vstring]),
                  add_var_decl([global_env],[s],[num_params],[true],
                               [is_abstract],[i_vstring],[unknown],
                               [if_error])),
            return_type(r1, r2, unknown),
            formals_escape(f,f,f,f,f,f,f) **);
extend runtime_env isa debuggable_env;
method current_env():runtime_env;
method my_caller(if_none:&():`T):runtime_env|T;
method my_caller():runtime_env|global_env;
method caller(r@:runtime_env, if_none:&():`T):runtime_env|T;
method lexically_enclosing_env(r@:runtime_env,
                               if_none:&():evaluation_env):evaluation_env;
method fetch(r@:runtime_env, s:string, num_params:int,
             if_absent:&():dynamic, if_error:&(string):dynamic):dynamic;
method fetch(r@:runtime_env, s@:vstring, num_params@:int,
             if_absent:&():dynamic, if_error:&(string):dynamic):dynamic;
method fetch_object(r@:runtime_env, s:string, num_params:int,
                    if_absent:&():dynamic, if_error:&(string):dynamic):dynamic;
method fetch_object(r@:runtime_env, s@:vstring, num_params@:int,
                    if_absent:&():dynamic, if_error:&(string):dynamic):dynamic;
method assign(r@:runtime_env, s:string, num_params:int, value:dynamic,
              if_absent:&():void, if_error:&(string):void):void;
method assign(r@:runtime_env, s@:vstring, num_params@:int, value:dynamic,
              if_absent:&():void, if_error:&(string):void):void;
method defines_var(r@:runtime_env, s:string, num_params:int,
                   if_error:&(string):bool):bool;
method defines_var(r@:runtime_env, s@:vstring, num_params@:int,
                   if_error:&(string):bool):bool;
method local_vars_do(r@:runtime_env,
                     cl:&(name:string, is_constant:bool,
                          type_annotation:string):void):void
                      (** sends(eval([cl],[i_vstring],[true,false],
                                     [i_vstring])),
                          return_type(void),
                          formals_escape(f,f)**);
method decl_context_string(r@:runtime_env):string;
method is_global_env(r@:runtime_env):bool;
abstract object extension_evaluation_env isa debuggable_env;
  signature calling_env(extension_evaluation_env):evaluation_env;
  signature procedure_name(extension_evaluation_env):vstring;
  signature is_anonymous_env(extension_evaluation_env):bool;
  signature source_file_name(extension_evaluation_env):vstring;
  signature line_num(extension_evaluation_env):int;
  signature num_params(extension_evaluation_env):int;
  signature num_formals(extension_evaluation_env):int;
  signature num_locals(extension_evaluation_env):int;
  signature num_results(extension_evaluation_env):int;
  signature var_name(extension_evaluation_env, int):vstring;
  signature print_short_var_value(extension_evaluation_env, int):void;
  signature print_full_var_value(extension_evaluation_env, int):void;
abstract object runtime_extension_method;
  signature runtime_extension(meth:runtime_extension_method,
                              args:vector[dynamic],
                              interrupt_flag:int):void;
method extend_method_table(meth_name_oop:string, num_params@:int,
                           specializers:ordered_collection[dynamic],
                           method_object:runtime_extension_method,
                           interpret_interrupts:bool,
                           if_error:&():bool):bool;
method extend_method_table(meth_name_oop@:vstring, num_params@:int,
                           specializers@:vector[dynamic],
                           method_object:runtime_extension_method,
                           interpret_interrupts:bool,
                           if_error:&():bool
                           ):bool;

evaluation_envs support Cecil program access to its runtime state, for debugging and fast expression evaluation purposes.


next up previous index
Next: Application hooks Up: Miscellaneous Previous: System operations   Index

Cecil/Vortex Project