Search in sources :

Example 1 with ExpressionThis

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);
}
Also used : ExpressionThis(stanhebben.zenscript.expression.ExpressionThis) ClassWriter(org.objectweb.asm.ClassWriter)

Example 2 with ExpressionThis

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));
        }
    }
}
Also used : ParsedFunction(stanhebben.zenscript.definitions.ParsedFunction) ExpressionThis(stanhebben.zenscript.expression.ExpressionThis) ZenNativeMember(stanhebben.zenscript.type.natives.ZenNativeMember) ParsedFunctionArgument(stanhebben.zenscript.definitions.ParsedFunctionArgument)

Aggregations

ExpressionThis (stanhebben.zenscript.expression.ExpressionThis)2 ClassWriter (org.objectweb.asm.ClassWriter)1 ParsedFunction (stanhebben.zenscript.definitions.ParsedFunction)1 ParsedFunctionArgument (stanhebben.zenscript.definitions.ParsedFunctionArgument)1 ZenNativeMember (stanhebben.zenscript.type.natives.ZenNativeMember)1