Ejemplo n.º 1
0
        public override bool ResolveReferencedTypes(ASTNode node, Scope scope, ErrorReporter reporter)
        {
            if (ResolutionStatus != TypeResolutionStatus.NotResolved)
            {
                return(ResolutionStatus == TypeResolutionStatus.OK);
            }

            ResolutionStatus = TypeResolutionStatus.Resolving;

            TargetType = scope.ResolveType(_targetTypeName);

            if (reporter.Assert(node, !ReferenceEquals(TargetType, null), "Unknown type in the current context: {0}", _targetTypeName))
            {
                if (TargetType.ResolutionStatus == TypeResolutionStatus.NotResolved)
                {
                    TargetType.ResolveReferencedTypes(node, scope, reporter);
                }
                switch (TargetType.ResolutionStatus)
                {
                case TypeResolutionStatus.Resolving:
                case TypeResolutionStatus.Error:
                    ResolutionStatus = TypeResolutionStatus.Error;
                    return(false);

                case TypeResolutionStatus.OK:
                    TargetType = (TargetType is AliasTypeInfo) ? ((AliasTypeInfo)TargetType).TargetType : TargetType;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                ResolutionStatus = TypeResolutionStatus.OK;
                return(true);
            }
            return(false);
        }