/// <summary> /// Used by the compiler. /// </summary> internal PhpRoutine(DRoutineDesc/*!*/ functionDesc, Signature astSignature, TypeSignature astTypeSignature) : base(functionDesc) { this.signature = null; // to be written up this.builder = new PhpRoutineBuilder(this, astSignature, astTypeSignature); }
/// <summary> /// To be used by compiler. /// </summary> internal PhpFunction(QualifiedName qualifiedName, PhpMemberAttributes memberAttributes, Signature astSignature, TypeSignature astTypeSignature, bool isConditional, Scope scope, SourceUnit/*!*/ sourceUnit, Position position) : base(new PhpRoutineDesc(sourceUnit.CompilationUnit.Module, memberAttributes), astSignature, astTypeSignature) { Debug.Assert(sourceUnit != null && position.IsValid); this.declaration = new Declaration(sourceUnit, this, false, isConditional, scope, position); this.qualifiedName = qualifiedName; this.version = new VersionInfo(); this.signature = null; // to be written up }
/// <summary> /// Used by the compiler. /// </summary> internal PhpMethod(PhpType/*!*/ declaringType, Name name, PhpMemberAttributes memberAttributes, bool hasBody, Signature astSignature, TypeSignature astTypeSignature, SourceUnit/*!*/ sourceUnit, Position position) : base(new PhpRoutineDesc(declaringType.TypeDesc, memberAttributes), astSignature, astTypeSignature) { Debug.Assert(declaringType != null && sourceUnit != null && position.IsValid); this.name = name; this.position = position; this.hasBody = hasBody; this.sourceUnit = sourceUnit; }
public FunctionDecl(SourceUnit/*!*/ sourceUnit, Position position, Position entireDeclarationPosition, ShortPosition headingEndPosition, ShortPosition declarationBodyPosition, bool isConditional, Scope scope, PhpMemberAttributes memberAttributes, string/*!*/ name, NamespaceDecl ns, bool aliasReturn, List<FormalParam>/*!*/ formalParams, List<FormalTypeParam>/*!*/ genericParams, List<Statement>/*!*/ body, List<CustomAttribute> attributes) : base(position) { Debug.Assert(genericParams != null && name != null && formalParams != null && body != null); this.name = new Name(name); this.ns = ns; this.signature = new Signature(aliasReturn, formalParams); this.typeSignature = new TypeSignature(genericParams); this.attributes = new CustomAttributes(attributes); this.body = body; this.entireDeclarationPosition = entireDeclarationPosition; this.headingEndPosition = headingEndPosition; this.declarationBodyPosition = declarationBodyPosition; QualifiedName qn = (ns != null) ? new QualifiedName(this.name, ns.QualifiedName) : new QualifiedName(this.name); function = new PhpFunction(qn, memberAttributes, signature, typeSignature, isConditional, scope, sourceUnit, position); function.WriteUp(typeSignature.ToPhpRoutineSignature(function)); function.Declaration.Node = this; }
internal PhpRoutineBuilder(PhpRoutine/*!*/ routine, Signature signature, TypeSignature typeSignature) { this.routine = routine; this.signature = signature; this.typeSignature = typeSignature; this.localVariables = new VariablesTable(10); this.labels = new Dictionary<VariableName, Statement>(1); }
public MethodDecl(Text.Span span, Text.Span entireDeclarationPosition, int headingEndPosition, int declarationBodyPosition, string name, bool aliasReturn, IList<FormalParam>/*!*/ formalParams, IList<FormalTypeParam>/*!*/ genericParams, IList<Statement> body, PhpMemberAttributes modifiers, IList<ActualParam> baseCtorParams, List<CustomAttribute> attributes) : base(span, attributes) { Debug.Assert(genericParams != null && formalParams != null); this.modifiers = modifiers; this.name = new Name(name); this.signature = new Signature(aliasReturn, formalParams); this.typeSignature = new TypeSignature(genericParams); this.body = (body != null) ? body.AsArray() : null; this.baseCtorParams = (baseCtorParams != null) ? baseCtorParams.AsArray() : null; this.entireDeclarationSpan = entireDeclarationPosition; this.headingEndPosition = headingEndPosition; this.declarationBodyPosition = declarationBodyPosition; }
public FunctionDecl(SourceUnit/*!*/ sourceUnit, Text.Span span, Text.Span entireDeclarationPosition, int headingEndPosition, int declarationBodyPosition, bool isConditional, Scope scope, PhpMemberAttributes memberAttributes, string/*!*/ name, NamespaceDecl ns, bool aliasReturn, List<FormalParam>/*!*/ formalParams, List<FormalTypeParam>/*!*/ genericParams, IList<Statement>/*!*/ body, List<CustomAttribute> attributes) : base(span) { Debug.Assert(genericParams != null && name != null && formalParams != null && body != null); this.name = new Name(name); this.ns = ns; this.signature = new Signature(aliasReturn, formalParams); this.typeSignature = new TypeSignature(genericParams); if (attributes != null && attributes.Count != 0) this.Attributes = new CustomAttributes(attributes); this.body = body.AsArray(); this.entireDeclarationPosition = entireDeclarationPosition; this.headingEndPosition = headingEndPosition; this.declarationBodyPosition = declarationBodyPosition; this.IsConditional = isConditional; this.MemberAttributes = memberAttributes; this.Scope = scope; this.SourceUnit = sourceUnit; }
public TypeDecl(SourceUnit/*!*/ sourceUnit, Text.Span span, Text.Span entireDeclarationPosition, int headingEndPosition, int declarationBodyPosition, bool isConditional, Scope scope, PhpMemberAttributes memberAttributes, bool isPartial, Name className, Text.Span classNamePosition, NamespaceDecl ns, List<FormalTypeParam>/*!*/ genericParams, Tuple<GenericQualifiedName, Text.Span> baseClassName, List<Tuple<GenericQualifiedName, Text.Span>>/*!*/ implementsList, List<TypeMemberDecl>/*!*/ elements, List<CustomAttribute> attributes) : base(span) { Debug.Assert(genericParams != null && implementsList != null && elements != null); Debug.Assert((memberAttributes & PhpMemberAttributes.Trait) == 0 || (memberAttributes & PhpMemberAttributes.Interface) == 0, "Interface cannot be a trait"); this.name = className; this.NamePosition = classNamePosition; this.ns = ns; this.typeSignature = new TypeSignature(genericParams); if (baseClassName != null) { this.baseClassName = baseClassName.Item1; this.BaseClassNamePosition = baseClassName.Item2; } this.MemberAttributes = memberAttributes; this.Scope = scope; this.SourceUnit = sourceUnit; this.IsConditional = isConditional; if (implementsList == null || implementsList.Count == 0) { this.ImplementsList = EmptyArray<GenericQualifiedName>.Instance; this.ImplementsListPosition = EmptyArray<Text.Span>.Instance; } else { this.ImplementsList = implementsList.Select(x => x.Item1).ToArray(); this.ImplementsListPosition = implementsList.Select(x => x.Item2).ToArray(); } this.members = elements; this.members.TrimExcess(); if (attributes != null && attributes.Count != 0) this.Attributes = new CustomAttributes(attributes); this.entireDeclarationSpan = entireDeclarationPosition; this.headingEndPosition = headingEndPosition; this.declarationBodyPosition = declarationBodyPosition; this.partialKeyword = isPartial; }
public MethodDecl(Position position, Position entireDeclarationPosition, ShortPosition headingEndPosition, ShortPosition declarationBodyPosition, string name, bool aliasReturn, List<FormalParam>/*!*/ formalParams, List<FormalTypeParam>/*!*/ genericParams, List<Statement> body, PhpMemberAttributes modifiers, List<ActualParam> baseCtorParams, List<CustomAttribute> attributes) : base(position, attributes) { Debug.Assert(genericParams != null && formalParams != null); this.modifiers = modifiers; this.name = new Name(name); this.signature = new Signature(aliasReturn, formalParams); this.typeSignature = new TypeSignature(genericParams); this.body = body; this.baseCtorParams = baseCtorParams; this.entireDeclarationPosition = entireDeclarationPosition; this.headingEndPosition = headingEndPosition; this.declarationBodyPosition = declarationBodyPosition; }
public TypeDecl(SourceUnit/*!*/ sourceUnit, Position position, Position entireDeclarationPosition, ShortPosition headingEndPosition, ShortPosition declarationBodyPosition, bool isConditional, Scope scope, PhpMemberAttributes memberAttributes, bool isPartial, Name className, Position classNamePosition, NamespaceDecl ns, List<FormalTypeParam>/*!*/ genericParams, Tuple<GenericQualifiedName, Position> baseClassName, List<KeyValuePair<GenericQualifiedName, Position>>/*!*/ implementsList, List<TypeMemberDecl>/*!*/ members, List<CustomAttribute> attributes) : base(position) { Debug.Assert(genericParams != null && implementsList != null && members != null); Debug.Assert((memberAttributes & PhpMemberAttributes.Trait) == 0 || (memberAttributes & PhpMemberAttributes.Interface) == 0, "Interface cannot be a trait"); this.name = className; this.NamePosition = classNamePosition; this.ns = ns; this.typeSignature = new TypeSignature(genericParams); if (baseClassName != null) { this.baseClassName = baseClassName.Item1; this.BaseClassNamePosition = baseClassName.Item2; } this.MemberAttributes = memberAttributes; this.Scope = scope; this.SourceUnit = sourceUnit; this.IsConditional = isConditional; this.implementsList = implementsList; this.members = members; if (attributes != null && attributes.Count != 0) this.Attributes = new CustomAttributes(attributes); this.entireDeclarationPosition = entireDeclarationPosition; this.headingEndPosition = headingEndPosition; this.declarationBodyPosition = declarationBodyPosition; this.partialKeyword = isPartial; // remember current aliases: var aliases = (ns != null) ? ns.Aliases : sourceUnit.Aliases; if (aliases.Count > 0) validAliases = new Dictionary<string, QualifiedName>(aliases); }
public TypeDecl(SourceUnit/*!*/ sourceUnit, Position position, Position entireDeclarationPosition, ShortPosition headingEndPosition, ShortPosition declarationBodyPosition, bool isConditional, Scope scope, PhpMemberAttributes memberAttributes, bool isPartial, Name className, Position classNamePosition, NamespaceDecl ns, List<FormalTypeParam>/*!*/ genericParams, Tuple<GenericQualifiedName, Position> baseClassName, List<KeyValuePair<GenericQualifiedName, Position>>/*!*/ implementsList, List<TypeMemberDecl>/*!*/ members, List<CustomAttribute> attributes) : base(position) { Debug.Assert(genericParams != null && implementsList != null && members != null); Debug.Assert((memberAttributes & PhpMemberAttributes.Trait) == 0 || (memberAttributes & PhpMemberAttributes.Interface) == 0, "Interface cannot be a trait"); this.name = className; this.NamePosition = classNamePosition; this.ns = ns; this.typeSignature = new TypeSignature(genericParams); if (baseClassName != null) { this.baseClassName = baseClassName.Item1; this.BaseClassNamePosition = baseClassName.Item2; } this.implementsList = implementsList; this.members = members; this.attributes = new CustomAttributes(attributes); this.entireDeclarationPosition = entireDeclarationPosition; this.headingEndPosition = headingEndPosition; this.declarationBodyPosition = declarationBodyPosition; this.partialKeyword = isPartial; // remember current aliases: var aliases = (ns != null) ? ns.Aliases : sourceUnit.Aliases; if (aliases.Count > 0) validAliases = new Dictionary<string, QualifiedName>(aliases); // create stuff necessary for inclusion resolving process, other structures are created duirng analysis: QualifiedName qn = (ns != null) ? new QualifiedName(name, ns.QualifiedName) : new QualifiedName(name); type = new PhpType(qn, memberAttributes, isPartial, typeSignature, isConditional, scope, sourceUnit, position); //// add alias for private classes (if not added yet by partial declaration): //if (type.IsPrivate) // sourceUnit.AddTypeAlias(qn, this.name); // member-analysis needs the node: type.Declaration.Node = this; }
internal bool Merge(ErrorSink/*!*/ errors, PhpType/*!*/ declaringType, TypeSignature other) { if (typeParams.Count != other.typeParams.Count) { errors.Add(Errors.PartialDeclarationsDifferInTypeParameterCount, declaringType.Declaration.SourceUnit, declaringType.Declaration.Position, declaringType.FullName); return false; } bool result = true; for (int i = 0; i < typeParams.Count; i++) result &= typeParams[i].Merge(errors, other.typeParams[i]); return result; }