public Void visitUnit(UnitTree tree) {
		ClassWriter clz = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
		String name = options.getOutputName();
		if (name == null) {
			name = tree.getSource();
			int dot = name.lastIndexOf('.');
			if (dot > 0) name = name.substring(0, dot);
		}
		clz.visit(JAVA_1_5, ACC_PUBLIC | ACC_FINAL, name, null, "java/lang/Object", null);
		if (options.needDebugInfo()) clz.visitSource(tree.getSource(), null);
		main = clz.visitMethod(
				ACC_STATIC | ACC_PUBLIC,
				"main",
				"([Ljava/lang/String;)V",
				null,
				new String[] {"java/io/IOException"});
		visitIntConst(options.getRange());
		main.visitIntInsn(NEWARRAY, T_BYTE);
		main.visitVarInsn(ASTORE, varArray);
		main.visitInsn(ICONST_0);
		main.visitVarInsn(ISTORE, varPosition);
		Label startVars = new Label();
		main.visitLabel(startVars);
		for (Tree t : tree.getChildren()) {
			t.accept(this, null);
		}
		Label endVars = new Label();
		main.visitLabel(endVars);
		if (options.needDebugInfo()) {
			main.visitLocalVariable("array", "[B", null, startVars, endVars, varArray);
			main.visitLocalVariable("position", "I", null, startVars, endVars, varPosition);
		}
		main.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
		main.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "flush", "()V");
		main.visitInsn(RETURN);
		main.visitMaxs(0, 0);
		main.visitEnd();
		clz.visitEnd();
		//writing
		try {
			File outfile = new File(options.getOutputDir(), name+".class");
			OutputStream out = new FileOutputStream(outfile);
			out.write(clz.toByteArray());
			out.flush();
			out.close();
			System.err.println("File "+name+".class written");
		} catch (IOException ioe) {
			//cry like a baby
		}
		return null;
	}