use of stanhebben.zenscript.expression.ExpressionThis in project ZenScript by CraftTweaker.
the class ParsedZenClass method writeClass.
public void writeClass(IEnvironmentGlobal environmentGlobal) {
final ClassWriter newClass = new ZenClassWriter(ClassWriter.COMPUTE_FRAMES);
newClass.visitSource(position.getFileName(), null);
newClass.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC, className, null, "java/lang/Object", new String[0]);
final EnvironmentClass environmentNewClass = new EnvironmentClass(newClass, classEnvironment);
environmentNewClass.putValue("this", position1 -> new ExpressionThis(position1, type), position);
writeStatics(newClass, environmentNewClass);
visitNonStatics(newClass);
writeConstructors(newClass, environmentNewClass);
writeMethods(newClass, environmentNewClass);
newClass.visitEnd();
// ZS ASM STUFF
byte[] thisClassArray = newClass.toByteArray();
environmentGlobal.putClass(className, thisClassArray);
thisClass = new ClassLoader() {
private Class<?> find(byte[] array) {
return defineClass(className, array, 0, array.length);
}
}.find(thisClassArray);
}
use of stanhebben.zenscript.expression.ExpressionThis in project ZenScript by CraftTweaker.
the class ParsedZenClass method addMethod.
private void addMethod(ParsedZenClassMethod parsedMethod) {
ParsedFunction method = parsedMethod.method;
methods.add(parsedMethod);
if (!members.containsKey(method.getName())) {
members.put(method.getName(), new ZenNativeMember());
classEnvironment.putValue(method.getName(), position1 -> new ExpressionThis(position1, type).getMember(position1, classEnvironment, method.getName()), position);
}
parsedMethod.addToMember(members.get(method.getName()));
for (int i = 0; i < method.getArguments().size(); i++) {
ParsedFunctionArgument argument = method.getArguments().get(i);
if (argument.getDefaultExpression() != null) {
addField(new ParsedZenClassField(true, argument.getType(), argument.getDefaultExpression(), method.getDefaultParameterFieldName(i), className));
}
}
}
Aggregations