public void CheckBodySemantics(TigerScope scope, Report report) { //If CheckSemantics failed (FunctionInfo was not created) return if (!IsOK) { return; } IsOK = false; //Create function scope FunctionBodyNode.CheckSemantics(FunctionScope, report); if (!FunctionBodyNode.IsOK) { return; } IsOK = true; if (ReturnTypeNode != null && !ReturnTypeNode.TigerType.Assignable(FunctionBodyNode.TigerType)) { report.AddError(SemanticErrors.IncompatibleFunctionReturnTypeBody(FunctionBodyNode, ReturnTypeNode.TigerType, FunctionBodyNode.TigerType)); } else if (ReturnTypeNode == null && !TigerType.AreOfSameType(TigerType.Void, FunctionBodyNode.TigerType)) { report.AddError(SemanticErrors.IncompatibleFunctionReturnTypeBody(FunctionBodyNode, TigerType.Void, FunctionBodyNode.TigerType)); } }