diff --git a/src/Example.hs b/src/Example.hs index 4cded26..c1ce6bf 100644 --- a/src/Example.hs +++ b/src/Example.hs @@ -72,6 +72,24 @@ exampleBlockResolutionFail = Block [ StatementExpressionStatement (MethodCall (Reference "bob") "setAge" [IntegerLiteral 30]) ] +exampleMethodCallAndAssignment :: Statement +exampleMethodCallAndAssignment = Block [ + LocalVariableDeclaration (VariableDeclaration "Person" "bob" (Just (StatementExpressionExpression (ConstructorCall "Person" [IntegerLiteral 30])))), + LocalVariableDeclaration (VariableDeclaration "int" "age" (Just (StatementExpressionExpression (MethodCall (Reference "bob") "getAge" [])))), + StatementExpressionStatement (MethodCall (Reference "bob") "setAge" [IntegerLiteral 30]), + LocalVariableDeclaration (VariableDeclaration "int" "a" Nothing), + StatementExpressionStatement (Assignment "a" (Reference "age")) + ] + + +exampleMethodCallAndAssignmentFail :: Statement +exampleMethodCallAndAssignmentFail = Block [ + LocalVariableDeclaration (VariableDeclaration "Person" "bob" (Just (StatementExpressionExpression (ConstructorCall "Person" [IntegerLiteral 30])))), + LocalVariableDeclaration (VariableDeclaration "int" "age" (Just (StatementExpressionExpression (MethodCall (Reference "bob") "getAge" [])))), + StatementExpressionStatement (MethodCall (Reference "bob") "setAge" [IntegerLiteral 30]), + StatementExpressionStatement (Assignment "a" (Reference "age")) + ] + runTypeCheck :: IO () runTypeCheck = do catch (do @@ -80,7 +98,7 @@ runTypeCheck = do printSuccess "Type checking of expression completed successfully" printResult "Result Expression:" evaluatedExpression ) handleError - + catch (do print "=====================================================================================" evaluatedAssignment <- evaluate (typeCheckExpression exampleAssignment [("a", "int")] sampleClasses) @@ -123,3 +141,17 @@ runTypeCheck = do printResult "Result Block Resolution:" evaluatedBlockResolutionFail ) handleError + catch (do + print "=====================================================================================" + evaluatedMethodCallAndAssignment <- evaluate (typeCheckStatement exampleMethodCallAndAssignment [] sampleClasses) + printSuccess "Type checking of method call and assignment completed successfully" + printResult "Result Method Call and Assignment:" evaluatedMethodCallAndAssignment + ) handleError + + catch (do + print "=====================================================================================" + evaluatedMethodCallAndAssignmentFail <- evaluate (typeCheckStatement exampleMethodCallAndAssignmentFail [] sampleClasses) + printSuccess "Type checking of method call and assignment failed" + printResult "Result Method Call and Assignment:" evaluatedMethodCallAndAssignmentFail + ) handleError +