for (Pair<Access, Token> pair : this.methods)
methods.add(new Pair<>(pair.getX(), pair.getY().clone()));
for (Pair<Access, Token> pair : this.variables)
variables.add(new Pair<>(pair.getX(), pair.getY().clone()));
ObjectFrame[] frames = new ObjectFrame[4];
frames[0] = new ObjectFrame(this.frames[0].getPrevious(), this.frames[0].getInterpreter(), this.frames[0]);
frames[1] = new ObjectFrame(frames[0], this.frames[1].getInterpreter(), this.frames[1]);
frames[2] = new ObjectFrame(frames[1], this.frames[2].getInterpreter(), this.frames[2]);
frames[3] = new ObjectFrame(frames[2], this.frames[3].getInterpreter(), this.frames[3]);
construct(objects, methods, variables, frames);
String name = getName().substring(getName().lastIndexOf('.') + 1); //This works because it returns -1 if there is no match, and -1 + 1 = 0 = complete String
ArrayList<Token> arguments = Interpreter.evalFunctionArguments(caller, parameters, frame);
name = Interpreter.evalFunctionName(name, arguments);
InterpreterConstructor constructor = (InterpreterConstructor) frames[access.intValue()].readVariable(name).getCar();