Annotation of parser3/src/types/pa_vclass.C, revision 1.4
1.1 paf 1: /*
2: Parser
3: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
1.2 paf 4: Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
1.1 paf 5:
1.4 ! paf 6: $Id: pa_vclass.C,v 1.3 2001/03/11 08:44:42 paf Exp $
1.1 paf 7: */
8:
9: #include "pa_vclass.h"
10: #include "pa_vstring.h"
11:
12: Value *VClass::get_element(const String& aname) {
13: // $NAME=my name
14: if(aname==NAME_NAME)
15: return NEW VString(fclass_alias->name());
16: // $CLASS=my class=myself
17: if(aname==CLASS_NAME)
18: return fclass_alias;
19: // $BASE=my parent
20: if(aname==BASE_NAME)
21: return fclass_alias->base();
22: // $method=junction(self+class+method)
23: if(Junction *junction=get_junction(*this, aname))
24: return NEW VJunction(*junction);
25: // $field=static field
26: return get_field(aname);
27: }
28:
29: // object_class, operator_class: (field)=value - static values only
1.4 ! paf 30: void VClass::put_element(const String& aname, Value *avalue) {
! 31: if(read_only)
! 32: THROW(0, 0,
! 33: &aname,
! 34: "can not put element into read-only '%s' class",
! 35: name().cstr());
! 36:
! 37: set_field(aname, avalue);
1.1 paf 38: }
1.3 paf 39:
40: void VClass::add_native_method(
41: const char *cstr_name,
42: Native_code_ptr native_code,
43: int min_numbered_params_count, int max_numbered_params_count) {
44:
45: String& name=*NEW String(pool()); name.APPEND_CONST(cstr_name);
46:
47: Method& method=*NEW Method(pool(),
48: name,
49: min_numbered_params_count, max_numbered_params_count,
50: 0/*params_names*/, 0/*locals_names*/,
51: 0/*parser_code*/, native_code
52: );
53: add_method(name, method);
1.4 ! paf 54: }
! 55:
! 56: void VClass::put_method(const String& aname, Method *amethod) {
! 57: if(read_only)
! 58: THROW(0, 0,
! 59: &aname,
! 60: "can not add method to read-only '%s' class",
! 61: name().cstr());
! 62:
! 63: fmethods.put(aname, amethod);
1.3 paf 64: }
E-mail: