]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/utils/ModuleBuilder.java
(refs #7250) CHR rules modularization (first working version)
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / utils / ModuleBuilder.java
index e9d808c8c5eda034a40548e65aa7536e5ce96569..32d4283392bc093b9b083735488284bb73b71e95 100644 (file)
@@ -93,7 +93,7 @@ public class ModuleBuilder {
             // Create fields
             CodeBuilderUtils.makeRecord(classBuilder, functionValue.toString(), Opcodes.ACC_PRIVATE | Opcodes.ACC_FINAL, "p",
                     Arrays.copyOf(parameterTypes, knownParametersCount),
-                    false);
+                    true);
             
             // Create apply
             {
@@ -124,14 +124,14 @@ public class ModuleBuilder {
             
             // Create constructor
             {
-                MethodBuilderBase mb = classBuilder.addConstructor(Opcodes.ACC_PUBLIC, Arrays.copyOf(parameterTypes, knownParametersCount));
+                MethodBuilderBase mb = classBuilder.addConstructorBase(Opcodes.ACC_PUBLIC, Arrays.copyOf(parameterTypes, knownParametersCount));
                 mb.loadThis();
                 mb.loadConstant(remainingArity);
                 mb.invokeConstructor(MethodBuilderBase.getClassName(Constants.FUNCTION_N_IMPL), new TypeDesc[] { TypeDesc.INT });
                 for(int i=0;i<knownParametersCount;++i) {
                     mb.loadThis();
                     mb.loadLocal(mb.getParameter(i));
-                    mb.storeField(className, "p"+i, parameterTypes[i]);            
+                    mb.storeField(className, "p"+i, parameterTypes[i]);
                 }
                 mb.returnVoid();
                 mb.finish();
@@ -160,7 +160,9 @@ public class ModuleBuilder {
                 functionValue.applyExact(mb, parameters);
                 mb.box(functionValue.getReturnType());
                 mb.returnValue(TypeDesc.OBJECT);
-            }      
+            }
+            
+            CodeBuilderUtils.implementHashCodeAndEquals(classBuilder, functionValue.toString(), "p", parameterTypes);
         }
             
         // Finish