-
Notifications
You must be signed in to change notification settings - Fork 52
/
PyCode.h
77 lines (69 loc) · 2.35 KB
/
PyCode.h
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
/*
* File: PyCode.h
* Author: Kent D. Lee
* (c) 2013
* Created on February 11, 2013, 10:53 AM
*
* License:
* Please read the LICENSE file in this distribution for details regarding
* the licensing of this code. This code is freely available for educational
* use. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
*
* Description:
* PyCode objects hold the various parts of an assembly language function. Each
* function has a name, a number of arguments, byte code, and several lists
* which are outlined below.
*
* Constants - Constant values that are used within the function.
*
* Locals - The list of local variables used in the function.
*
* FreeVars - The list of variables not initialized in this function. They are
* referenced from an enclosing scope.
*
* CellVars - The list of cell variables for local variables that are referenced
* outside of this function.
*
* Globals - The list of globals like "str" and other functions that are
* defined globally and used in this function.
*/
#ifndef PYCODE_H
#define PYCODE_H
#include "PyByteCode.h"
#include "PyObject.h"
#include <string>
#include <vector>
using namespace std;
class PyCode : public PyObject {
public:
PyCode(string name, vector<PyCode*>* nestedFunctions, vector<PyObject*>* consts,
vector<string>* locals, vector<string>* freevars, vector<string>* cellVars,
vector<string>* globals, vector<PyByteCode*>* code, int argcount);
virtual ~PyCode();
string getName() const;
vector<string>& getLocals() const;
vector<string>& getFreeVars() const;
vector<string>& getCellVars() const;
vector<string>& getGlobals() const;
vector<PyObject*>& getConsts() const;
vector<PyByteCode*>& getInstructions() const;
vector<PyCode*>& getNestedFunctions() const;
int getArgCount() const;
int numLocals() const;
string toString();
string prettyString(string indent,bool linenumbers) const;
PyType* getType();
PyObject* __str__(vector<PyObject*>* args);
PyObject* __type__(vector<PyObject*>* args);
private:
string name;
vector<PyCode*>* nestedFunctions;
vector<string>* locals;
vector<string>* freevars;
vector<string>* cellvars;
vector<string>* globals;
vector<PyObject*>* consts;
vector<PyByteCode*>* instructions;
int argcount;
};
#endif /* PYCODE_H */