public override bool VisitArrayDeclaration(ArrayDeclarationAST arrayDeclaration) { arrayDeclaration.CurrentScope = _scope; //la clase base chequea q el id sea valido if (VisitTypeDeclaration(arrayDeclaration)) { TigerType tt; if (_scope.HasType(arrayDeclaration.BaseTypeID, out tt) != ScopeLocation.NotDeclared) { var at = new ArrayType(tt, arrayDeclaration.TypeId); _scope.AddType(arrayDeclaration.TypeId, at); return(true); } int savedErrorPos = _errorListener.Count; _scope.TypeAdded += (sender, args) => { if (args.TypeName == arrayDeclaration.BaseTypeID) { _scope.AddType(arrayDeclaration.TypeId, new ArrayType(args.NewType, arrayDeclaration.TypeId)); } }; _scope.FinalizeScope += (sender, args) => { if (sender.HasType(arrayDeclaration.BaseTypeID) == ScopeLocation.NotDeclared) { _errorListener.Insert(savedErrorPos, AnalysisError.TypeIsNotDefined(arrayDeclaration, arrayDeclaration.BaseTypeID)); arrayDeclaration.ReturnType = TigerType.GetType <ErrorType>(); } }; return(true); } return(false); }
public override bool VisitArrayDeclaration(ArrayDeclarationAST arrayDeclaration) { var other = _other as ArrayDeclarationAST; if (other == null) { return(false); } return(other.TypeId == arrayDeclaration.TypeId && other.BaseTypeID == arrayDeclaration.BaseTypeID); }
public override Unit VisitArrayDeclaration(ArrayDeclarationAST arrayDeclaration) { //quedandome con el TypeInfo de tipo base del array. TypeInfo t = arrayDeclaration.CurrentScope.GetTypeInfo(arrayDeclaration.BaseTypeID); //en este momento es posible que el tipo del array no halla sido creado en el codigo il. //este tipo puede ser un array ,un alias o un record ,incluso una clase si se quiere extender esto un poco mas //creando el tipo del array Type arrayType = CreateTypeNotFounded(arrayDeclaration, t.TypeId).MakeArrayType(); //annadir el tipo si es necesario. string arrayCodeName = arrayDeclaration.CurrentScope.GetTypeInfo(arrayDeclaration.TypeId).CodeName; if (!code.DefinedType.ContainsKey(arrayCodeName)) { code.DefinedType.Add(arrayCodeName, arrayType); } return(Unit.Create()); }
public abstract T VisitArrayDeclaration(ArrayDeclarationAST arrayDeclaration);