示例#1
0
        public override bool VisitAlias(TypeAliasAST alias)
        {
            var other = _other as TypeAliasAST;

            if (other == null)
            {
                return(false);
            }

            return(other.TypeId == alias.TypeId &&
                   other.AliasToWho == alias.AliasToWho);
        }
示例#2
0
        public override bool VisitAlias(TypeAliasAST alias)
        {
            //se asume que no habra problema
            alias.ReturnType = TigerType.GetType <NoType>();
            //la clase base verifica q el id del type sea valido
            //aqui si se ve q el return true hace falta
            if (VisitTypeDeclaration(alias))
            {
                TigerType tt;
                //se verifica que exista el tipo del cual se esta creando un alias
                if (_scope.HasType(alias.AliasToWho, out tt) != ScopeLocation.NotDeclared)
                {
                    //se anade una nueva entrada del mismo type, lo q con otro id
                    _scope.AddAlias(alias.TypeId, alias.AliasToWho);
                    return(true);
                }
                int savedErrorPos = _errorListener.Count;
                //manejador de evento
                _scope.TypeAdded += (sender, args) =>
                {
                    if (args.TypeName == alias.AliasToWho)
                    {
                        _scope.AddType(alias.TypeId, args.NewType);
                    }
                };

                //manejador de evento
                _scope.FinalizeScope += (sender, args) =>
                {
                    if (sender.HasType(alias.AliasToWho) == ScopeLocation.NotDeclared)
                    {
                        _errorListener.Insert(savedErrorPos, AnalysisError.TypeIsNotDefined(alias, alias.AliasToWho));
                        alias.ReturnType = TigerType.GetType <ErrorType>();
                    }
                };
                return(true);
            }
            return(false);
        }
示例#3
0
 public abstract T VisitAlias(TypeAliasAST alias);
示例#4
0
 public override Unit VisitAlias(TypeAliasAST alias)
 {
     throw new System.NotImplementedException();
 }