+package org.simantics.scl.compiler.constants;\r
+\r
+import org.simantics.scl.compiler.elaboration.modules.TypeClassInstance;\r
+import org.simantics.scl.compiler.internal.codegen.references.IVal;\r
+import org.simantics.scl.compiler.internal.codegen.references.Val;\r
+import org.simantics.scl.compiler.internal.codegen.references.ValRef;\r
+import org.simantics.scl.compiler.internal.codegen.ssa.statements.LetApply;\r
+import org.simantics.scl.compiler.internal.codegen.utils.SSASimplificationContext;\r
+import org.simantics.scl.compiler.types.Type;\r
+import org.simantics.scl.compiler.types.Types;\r
+\r
+public class JavaTypeClassSuper extends JavaMethod {\r
+\r
+ int superId;\r
+ \r
+ public JavaTypeClassSuper(int superId, String className, String methodName,\r
+ Type returnType, Type ... parameterTypes) {\r
+ super(false, className, methodName, Types.NO_EFFECTS, returnType, parameterTypes);\r
+ this.superId = superId;\r
+ }\r
+ \r
+ public void inline(SSASimplificationContext context, LetApply apply) {\r
+ ValRef classRef = apply.getParameters()[0];\r
+ Val class_ = classRef.getBinding();\r
+ if(class_ instanceof JavaTypeInstanceConstructor) {\r
+ JavaTypeInstanceConstructor constr = (JavaTypeInstanceConstructor)class_;\r
+ TypeClassInstance instance = constr.getInstance();\r
+ IVal newVal = instance.superExpressions[superId].getValue();\r
+ apply.getTarget().replaceBy(newVal.createOccurrence());\r
+ apply.remove();\r
+ }\r
+ }\r
+ \r
+}\r