--- parser3/src/include/pa_request.h 2010/05/20 04:35:59 1.199 +++ parser3/src/include/pa_request.h 2010/08/30 10:49:05 1.204 @@ -8,7 +8,7 @@ #ifndef PA_REQUEST_H #define PA_REQUEST_H -static const char * const IDENT_REQUEST_H="$Date: 2010/05/20 04:35:59 $"; +static const char * const IDENT_REQUEST_H="$Date: 2010/08/30 10:49:05 $"; #include "pa_pool.h" #include "pa_hash.h" @@ -122,6 +122,7 @@ private: /// already used files to avoid cyclic uses HashString used_files; + HashString searched_along_class_path; /// list of all used files, Operation::file_no = index to it Array file_list; @@ -205,7 +206,8 @@ public: void execute(ArrayOperation& ops); // execute.C void op_call(VMethodFrame &frame); void op_call_write(VMethodFrame &frame); - void op_call(VMethodFrame &frame, bool constructing); + Value& construct(Value &class_value, const Method &method); + /// execute ops with anti-recoursion check void recoursion_checked_execute(/*const String& name, */ArrayOperation& ops) { // anti_endless_execute_recoursion @@ -223,21 +225,22 @@ public: void use_file_directly(VStateless_class& aclass, const String& file_spec, bool fail_on_read_problem=true, - bool fail_on_file_absence=true); // pa_request.C + bool fail_on_file_absence=true); /// compiles the file, maybe forcing it's class @a name and @a base_class. void use_file(VStateless_class& aclass, const String& file_name, - const String* use_filespec); // pa_request.C + const String* use_filespec); /// compiles a @a source buffer void use_buf(VStateless_class& aclass, const char* source, const String* main_alias, uint file_no, - int line_no_offset=0); // pa_request.C + int line_no_offset=0); /// processes any code-junction there may be inside of @a value + StringOrValue process_getter(Junction& junction); // execute.C StringOrValue process(Value& input_value, bool intercept_string=true); // execute.C void process_write(Value& input_value); // execute.C //@{ convinient helpers @@ -248,7 +251,7 @@ public: return process(input_value, intercept_string).as_value(); } //@} - const String* get_method_filename(const Method* method); + const String* get_method_filename(const Method* method); // execute.C const String* get_used_filename(uint file_no); #define DEFINE_DUAL(modification) \ @@ -365,8 +368,9 @@ public: // status read methods /// for @main[] const String* execute_virtual_method(Value& aself, const String& method_name); - /// for @postprocess[body] - StringOrValue execute_method(VMethodFrame& amethodFrame, const Method& method); + /// executes parser method, use op_call(frame) to execute native method + void execute_method(VMethodFrame& aframe); + //{ for @conf[filespec] and @auto[filespec] and parser://method/call const String* execute_method(Value& aself, const Method& method, Value* optional_param,