// Path: src/org/jglrxavpok/jlsl/fragments/MethodCallFragment.java
// public static enum InvokeTypes
// {
// 	STATIC, VIRTUAL, SPECIAL
// }


import java.io.*;
import java.util.*;
import org.jglrxavpok.jlsl.*;
import org.jglrxavpok.jlsl.fragments.*;
import org.jglrxavpok.jlsl.fragments.MethodCallFragment.InvokeTypes;
import org.jglrxavpok.jlsl.glsl.GLSL.Attribute;
import org.jglrxavpok.jlsl.glsl.GLSL.Extensions;
import org.jglrxavpok.jlsl.glsl.GLSL.In;
import org.jglrxavpok.jlsl.glsl.GLSL.Layout;
import org.jglrxavpok.jlsl.glsl.GLSL.Out;
import org.jglrxavpok.jlsl.glsl.GLSL.Substitute;
import org.jglrxavpok.jlsl.glsl.GLSL.Uniform;
import org.jglrxavpok.jlsl.glsl.GLSL.Varying;
import org.jglrxavpok.jlsl.glsl.fragments.*;
		else
			stack.push("(" + toGLSL(fragment.to) + ")" + toCast);
	}

	private void handleModFragment(ModFragment fragment, List<CodeFragment> in, int index, PrintWriter out)
	{
		String a = stack.pop();
		String b = stack.pop();
		stack.push("mod(" + b + ", " + a + ")");
	}

	private void handleMethodCallFragment(MethodCallFragment fragment, List<CodeFragment> in, int index, PrintWriter out)
	{
		String s = "";
		String n = fragment.methodName;
		boolean isConstructor = false;
		if(n.equals("<init>"))
		{
			n = toGLSL(fragment.methodOwner);
			isConstructor = true;
			if(!newInstances.isEmpty()) newInstances.pop();
		}
		String key = fragment.methodName;
		if(toGLSL(fragment.methodOwner) != null && !toGLSL(fragment.methodOwner).equals("null") && !toGLSL(fragment.methodOwner).trim().equals("")) key = toGLSL(fragment.methodOwner) + "." + key;
		if(methodReplacements.containsKey(key))
		{
			String nold = key;
			n = methodReplacements.get(key);
			if(DEBUG) System.out.println("GLSLEncoder > Replacing " + nold + " by " + n);
		}
// Path: src/org/jglrxavpok/jlsl/fragments/MethodCallFragment.java
// public static enum InvokeTypes
// {
// 	STATIC, VIRTUAL, SPECIAL
// }


// Path: src/org/jglrxavpok/jlsl/glsl/GLSLEncoder.java
import java.io.*;
import java.util.*;
import org.jglrxavpok.jlsl.*;
import org.jglrxavpok.jlsl.fragments.*;
import org.jglrxavpok.jlsl.fragments.MethodCallFragment.InvokeTypes;
import org.jglrxavpok.jlsl.glsl.GLSL.Attribute;
import org.jglrxavpok.jlsl.glsl.GLSL.Extensions;
import org.jglrxavpok.jlsl.glsl.GLSL.In;
import org.jglrxavpok.jlsl.glsl.GLSL.Layout;
import org.jglrxavpok.jlsl.glsl.GLSL.Out;
import org.jglrxavpok.jlsl.glsl.GLSL.Substitute;
import org.jglrxavpok.jlsl.glsl.GLSL.Uniform;
import org.jglrxavpok.jlsl.glsl.GLSL.Varying;
import org.jglrxavpok.jlsl.glsl.fragments.*;

		else
			stack.push("(" + toGLSL(fragment.to) + ")" + toCast);
	}

	private void handleModFragment(ModFragment fragment, List<CodeFragment> in, int index, PrintWriter out)
	{
		String a = stack.pop();
		String b = stack.pop();
		stack.push("mod(" + b + ", " + a + ")");
	}

	private void handleMethodCallFragment(MethodCallFragment fragment, List<CodeFragment> in, int index, PrintWriter out)
	{
		String s = "";
		String n = fragment.methodName;
		boolean isConstructor = false;
		if(n.equals("<init>"))
		{
			n = toGLSL(fragment.methodOwner);
			isConstructor = true;
			if(!newInstances.isEmpty()) newInstances.pop();
		}
		String key = fragment.methodName;
		if(toGLSL(fragment.methodOwner) != null && !toGLSL(fragment.methodOwner).equals("null") && !toGLSL(fragment.methodOwner).trim().equals("")) key = toGLSL(fragment.methodOwner) + "." + key;
		if(methodReplacements.containsKey(key))
		{
			String nold = key;
			n = methodReplacements.get(key);
			if(DEBUG) System.out.println("GLSLEncoder > Replacing " + nold + " by " + n);
		}
		if(fragment.invokeType == InvokeTypes.SPECIAL && currentMethod.name.equals("<init>") && fragment.methodOwner.equals(currentClass.superclass))