Annotation of parser3/src/types/pa_vmethod_frame.C, revision 1.1.2.5.2.2
1.1.2.1 paf 1: /** @file
2: Parser: method frame class.
3:
1.1.2.3 paf 4: Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
1.1.2.1 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
6: */
7:
1.1.2.5.2.2! paf 8: static const char* IDENT_VSTATELESS_CLASS_C="$Date: 2003/03/18 15:14:21 $";
1.1.2.1 paf 9:
10: #include "pa_vmethod_frame.h"
11: #include "pa_request.h"
12:
13: // defines
14:
15: #define RESULT_VAR_NAME "result"
16:
17: // globals
18:
1.1.2.5.2.1 paf 19: const String& result_var_name(new String(RESULT_VAR_NAME));
1.1.2.1 paf 20:
21: // MethodParams: methods
22:
1.1.2.3 paf 23: ValuePtr MethodParams::get_processed(int index, const char* msg, Request& r) {
1.1.2.1 paf 24: return r.process_to_value(as_junction(index, msg), 0/*no name*/);
25: }
26:
27: // VMethodFrame: methods
28:
1.1.2.5.2.1 paf 29: VMethodFrame::VMethodFrame(
30: const String& aname,
1.1.2.1 paf 31: const Junction& ajunction/*info: always method-junction*/,
32: VMethodFrame *acaller) :
1.1.2.4 paf 33: WContext(ValuePtr(0)/*empty*/, 0 /* no parent, junctions can be reattached only up to VMethodFrame */),
1.1.2.1 paf 34:
1.1.2.5.2.1 paf 35: pool(),
1.1.2.5 paf 36:
1.1.2.1 paf 37: fname(aname),
1.1.2.5 paf 38: fcaller(acaller),
39: store_param_index(0),
40: junction(ajunction) {
1.1.2.1 paf 41:
42: if(junction.method->max_numbered_params_count) // this method uses numbered params?
43: fnumbered_params=MethodParamsPtr(new MethodParams(pool, fname));
44: else {
1.1.2.5.2.2! paf 45: my=HashStringValue* (new HashStringValue);
1.1.2.1 paf 46:
47: const Method &method=*junction.method;
48: if(method.locals_names) { // are there any local var names?
49: // remember them
50: // those are flags that fname is local == to be looked up in 'my'
51: for(int i=0; i<method.locals_names->count(); i++) {
52: // speedup: not checking for clash with "result" fname
53: ValuePtr value(new VVoid);
1.1.2.5.2.1 paf 54: const String& fname=method.locals_names->get(i);
1.1.2.1 paf 55: set_my_variable(fname, value);
56: }
57: }
58: { // always there is one local: $result
59: fresult_initial_void=ValuePtr(new VVoid);
60: set_my_variable(result_var_name, fresult_initial_void);
61: }
62: }
63: }
64:
65: ValuePtr VMethodFrame::get_result_variable() {
66: ValuePtr result=my?my->get(result_var_name):ValuePtr(0);
1.1.2.5 paf 67: return result && result.get()!=fresult_initial_void.get() ? result : ValuePtr(0);
1.1.2.1 paf 68: }
E-mail: