--- parser3/src/classes/reflection.C 2009/09/18 09:16:34 1.13 +++ parser3/src/classes/reflection.C 2010/08/01 14:49:33 1.17 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_REFLECTION_C="$Date: 2009/09/18 09:16:34 $"; +static const char * const IDENT_REFLECTION_C="$Date: 2010/08/01 14:49:33 $"; #include "pa_vmethod_frame.h" #include "pa_request.h" @@ -95,7 +95,8 @@ static void _create(Request& r, MethodPa max_params_count, nparams); - VMethodFrame frame(*junction, r.get_method_frame()); + Value &object = r.construct(*class_value, *method); + VConstructorFrame frame(*method, r.get_method_frame(), object); Value* v[100]; if(nparams>0){ @@ -105,8 +106,8 @@ static void _create(Request& r, MethodPa } else { frame.empty_params(); } - r.op_call(frame, true/*constructing*/); - r.write_pass_lang(frame.result()); + r.op_call(frame); + r.write_pass_lang(object); } @@ -258,6 +259,9 @@ static void _method_info(Request& r, Met hash->put(method_call_type, call_type); } else { // parser code + const String* filespec = r.get_method_filename(method); + if( filespec ) + hash->put("file", new VString(*filespec)); if(method->params_names) for(size_t i=0; iparams_names->count(); i++) hash->put(String::Body::Format(i), new VString(*method->params_names->get(i))); @@ -301,7 +305,7 @@ MReflection::MReflection(): Methoded("re // ^reflection:fields[object or class] add_native_method("fields", Method::CT_STATIC, _fields, 1, 1); - // ^reflection:method_params[class_name;method_name] + // ^reflection:method_info[class_name;method_name] add_native_method("method_info", Method::CT_STATIC, _method_info, 2, 2); // ^reflection:dynamical[[object or class, caller if absent]]