public void Visit(DispatchExpNode node) { node.initDis.Accept(this); if (node.initType.Text == "Object") { node.initType = new TypeNode(node.initDis.line, node.initDis.column, node.initDis.staticType.Text); } if (!scope.IsDefinedType(node.initType.Text, out TypeInfo typeSuperClass)) { errors.Add(ErrorSemantic.NotDeclaredType(node.initType)); } if (!(node.initDis.staticType <= typeSuperClass)) { errors.Add(ErrorSemantic.CannotConvert(node, node.initDis.staticType, typeSuperClass)); } node.paramFormal.ForEach(x => x.Accept(this)); var scopeSuperClass = typeSuperClass.ClassReference.Scope; if (!(scopeSuperClass.IsDefined(node.Id.text, node.paramFormal.Select(x => x.staticType).ToArray(), out node.staticType))) { errors.Add(ErrorSemantic.NotDeclareFunction(node, node.Id.text)); } }
public void Visit(DispatchImpNode node) { node.paramFormal.ForEach(expArg => expArg.Accept(this)); if (!scope.IsDefined(node.Id.text, node.paramFormal.Select(x => x.staticType).ToArray(), out node.staticType)) { errors.Add(ErrorSemantic.NotDeclareFunction(node, node.Id.text)); } }