From 64dfdcd78d6873a513019d54088c7ad0a63ff7d3 Mon Sep 17 00:00:00 2001 From: Sanjar Ahmadov Date: Fri, 7 May 2021 09:29:44 -0400 Subject: [PATCH] fails if actual and formal param types cant resolve --- src/main/java/chocopy/pa3/CodeGenImpl.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index 03d26b9..d286fee 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -358,7 +358,11 @@ public class CodeGenImpl extends CodeGenBase if (expr.getInferredType().equals(Type.INT_TYPE)) { - if ((functionId.name.equals("print")) &&(formalParamInfo.getVarType().equals(Type.OBJECT_TYPE) || formalParamInfo.getVarType().equals(Type.INT_TYPE))) + if (!formalParamInfo.getVarType().equals(Type.OBJECT_TYPE) && !formalParamInfo.getVarType().equals(Type.INT_TYPE)) { + backend.emitJAL(errorNI, "Passed argument does not match formal parameter"); + } + + else if ((functionId.name.equals("print")) &&(formalParamInfo.getVarType().equals(Type.OBJECT_TYPE) || formalParamInfo.getVarType().equals(Type.INT_TYPE))) { if(!(args.size() == 1 && (args.get(0) instanceof CallExpr) && (sym.get(((CallExpr) args.get(0)).function.name) instanceof ClassInfo))) @@ -366,23 +370,18 @@ public class CodeGenImpl extends CodeGenBase } - else - { - // FIXME: passed argument does not match formal parameter - } + } else if (expr.getInferredType().equals(Type.BOOL_TYPE)) { - if ((functionId.name.equals("print"))&&(formalParamInfo.getVarType().equals(Type.OBJECT_TYPE) || formalParamInfo.getVarType().equals(Type.BOOL_TYPE))) + if (!formalParamInfo.getVarType().equals(Type.OBJECT_TYPE) && !formalParamInfo.getVarType().equals(Type.BOOL_TYPE)) { + backend.emitJAL(errorNI, "Passed argument does not match formal parameter"); + } else if ((functionId.name.equals("print"))&&(formalParamInfo.getVarType().equals(Type.OBJECT_TYPE) || formalParamInfo.getVarType().equals(Type.BOOL_TYPE))) { if(!(args.size() == 1 && (args.get(0) instanceof CallExpr) && (sym.get(((CallExpr) args.get(0)).function.name) instanceof ClassInfo))) backend.emitJAL(makeboolLabel, "Box boolean"); } - else - { - // FIXME: passed argument does not match formal parameter - } } // All expressions should save their end result in A0