1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/*
* =====================================================================================
*
* Filename: Constructor.cpp
*
* Description:
*
* Version: 1.0
* Created: 23.08.2009 21:03:42
* Revision: none
* Compiler: gcc
*
* Author: Dominik 'domachine' Burgdoerfer (-), dominik.burgdoerfer@gmail.com
* Company:
*
* =====================================================================================
*/
#define __DMCC_PCC
# include "../dmcc/pcc/PccConstructor.hpp"
#undef __DMCC_PCC
using namespace std;
namespace dmcc {
namespace pcc {
/*
* =====================================
* dmcc::pcc::PccConstructor Implementation
* =====================================
*/
/*
* ============
* Constructors
* ============
*/
PccConstructor::PccConstructor(const std::string & name,
vector<const Argument *> * arguments,
const std::string & str)
: _name(name), _string(str), _arguments(arguments) {
}
/*
* ===========
* Destructors
* ===========
*/
PccConstructor::~PccConstructor() {
unsigned int i;
for(i = 0; i < _arguments->size(); i++) {
delete _arguments->at(i);
}
delete _arguments;
}
/*
* ==============
* Public Methods
* ==============
*/
boost::any PccConstructor::newInstance(const std::vector<boost::any> & params) {
typedef boost::any (*Constr)(const std::vector<boost::any> &);
Constr pConstr;
boost::any pObject;
pConstr = (Constr)mDeclaringClass->context()->symbol(mSymbolName);
if(pConstr == 0)
throw LoadException(mDeclaringClass->context()->lastError());
pObject = (*pConstr)(params);
return pObject;
}
void PccConstructor::setSymbolName(const std::string & symbolName) {
this->mSymbolName = symbolName;
}
string PccConstructor::name() const {
return _name;
}
string PccConstructor::string() const {
return _string;
}
vector<const Argument *> * PccConstructor::arguments() const {
return _arguments;
}
dmcc::Class * PccConstructor::declaringClass() const {
return mDeclaringClass;
}
void PccConstructor::setDeclaringClass(Class * clazz) {
mDeclaringClass = clazz;
}
}
}
|