Annotation of parser3/src/types/pa_vmethod_frame.C, revision 1.3
1.2 paf 1: /** @file
2: Parser: method frame class.
3:
4: Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
6: */
7:
1.3 ! paf 8: static const char * const IDENT_VSTATELESS_CLASS_C="$Date: 2003/07/24 11:31:26 $";
1.2 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:
19: const String result_var_name(RESULT_VAR_NAME);
20:
21: // MethodParams: methods
22:
23: Value& MethodParams::get_processed(int index, const char* msg, Request& r) {
24: return r.process_to_value(as_junction(index, msg), 0/*no name*/);
25: }
26:
27: // VMethodFrame: methods
28:
29: VMethodFrame::VMethodFrame(
30: const Junction& ajunction/*info: always method-junction*/,
31: VMethodFrame *acaller) :
32: WContext(0/*empty*/, 0 /* no parent, junctions can be reattached only up to VMethodFrame */),
33:
34: junction(ajunction), fcaller(acaller),
35:
36: store_param_index(0),
37: my(0), fnumbered_params(0),
38: fself(0),
39:
40: fresult_initial_void(0) {
41:
42: if(junction.method->max_numbered_params_count) // this method uses numbered params?
43: fnumbered_params=new MethodParams;
44: else {
45: my=new HashStringValue;
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(Array_iterator<const String*> i(*method.locals_names); i.has_next(); ) {
52: // speedup: not checking for clash with "result" fname
53: const String& fname=*i.next();
54: set_my_variable(fname, *new VVoid);
55: }
56: }
57: { // always there is one local: $result
58: fresult_initial_void=new VVoid;
59: set_my_variable(result_var_name, *fresult_initial_void);
60: }
61: }
62: }
63:
64: Value* VMethodFrame::get_result_variable() {
65: Value* result=my?my->get(result_var_name):0;
66: return result!=fresult_initial_void ? result : 0;
67: }
E-mail: