-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathEnvironmentClass.java
More file actions
130 lines (106 loc) · 3.17 KB
/
EnvironmentClass.java
File metadata and controls
130 lines (106 loc) · 3.17 KB
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package stanhebben.zenscript.compiler;
import org.objectweb.asm.ClassVisitor;
import stanhebben.zenscript.*;
import stanhebben.zenscript.expression.partial.IPartialExpression;
import stanhebben.zenscript.symbols.IZenSymbol;
import stanhebben.zenscript.type.ZenType;
import stanhebben.zenscript.util.ZenPosition;
import java.lang.reflect.Type;
import java.util.*;
/**
* @author Stan
*/
public class EnvironmentClass implements IEnvironmentClass {
private final ClassVisitor output;
private final IEnvironmentGlobal global;
private final Map<String, IZenSymbol> local;
public EnvironmentClass(ClassVisitor output, IEnvironmentGlobal global) {
this.output = output;
this.global = global;
this.local = new HashMap<>();
}
@Override
public ClassVisitor getClassOutput() {
return output;
}
@Override
public ZenType getType(Type type) {
return global.getType(type);
}
@Override
public IZenCompileEnvironment getEnvironment() {
return global.getEnvironment();
}
@Override
public TypeExpansion getExpansion(String name) {
return global.getExpansion(name);
}
@Override
public String makeClassName() {
return global.makeClassName();
}
@Override
public String makeClassNameWithMiddleName(String middleName) {
return global.makeClassNameWithMiddleName(middleName);
}
@Override
public boolean containsClass(String name) {
return global.containsClass(name);
}
@Override
public void putClass(String name, byte[] data) {
global.putClass(name, data);
}
@Override
public IPartialExpression getValue(String name, ZenPosition position) {
if(local.containsKey(name)) {
return local.get(name).instance(position);
} else {
return global.getValue(name, position);
}
}
@Override
public void putValue(String name, IZenSymbol value, ZenPosition position) {
if(local.containsKey(name)) {
error(position, "Value already defined in this scope: " + name);
} else {
local.put(name, value);
}
}
@Override
public void error(ZenPosition position, String message) {
global.error(position, message);
}
@Override
public void warning(ZenPosition position, String message) {
global.warning(position, message);
}
@Override
public void info(ZenPosition position, String message) {
global.info(position, message);
}
@Override
public Set<String> getClassNames() {
return global.getClassNames();
}
@Override
public byte[] getClass(String name) {
return global.getClass(name);
}
@Override
public void error(String message) {
global.error(message);
}
@Override
public void error(String message, Throwable e) {
global.error(message, e);
}
@Override
public void warning(String message) {
global.warning(message);
}
@Override
public void info(String message) {
global.info(message);
}
}