public void Visit(DispatchExpNode node)
        {
            string @class = node.initType.Text;

            node.initDis.Accept(this);
            Visit(node, @class);
        }
Пример #2
0
        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(DispatchExpNode node)
 {
     throw new NotImplementedException();
 }