public DogePropertyDefinition(DogeIdentifier name, DogeMemberAccessExpression type, DogeAccessibilityModifier modifier, DogeNamelessMethodDefinition?get, DogeNamelessMethodDefinition?set, DogeFile file, Range <int> tokenRange) : base(file, tokenRange) { name.Parent = this; NameIdentifier = name; Name = name.Name; type.Parent = this; TypeIdentifier = type; Type = type.ToName(); Modifier = modifier; if (get != null) { get.Parent = this; } Get = get; if (set != null) { set.Parent = this; } Set = set; }
public DogeMethodCallStatement(DogeIdentifier name, bool isSafeAccess, bool isPrintAccess, DogeNode?returnType, DogeParametersExpression callParameters, DogeFile file, Range <int> range) : base(name, isSafeAccess, isPrintAccess, file, range) { callParameters.Parent = this; CallParameters = callParameters; ReturnType = returnType; }
public DogeMemberAccessorExpression(DogeIdentifier name, bool isSafeAccess, bool isPrintAccess, DogeFile file, Range <int> tokenRange) : base(file, tokenRange) { name.Parent = this; NameIdentifier = name; Name = name.Name; IsSafeAccess = isSafeAccess; IsPrintAccess = isPrintAccess; }
public DogeParameterDefinition(DogeMemberAccessExpression type, DogeIdentifier name, DogeFile file, Range <int> tokenRange) : base(file, tokenRange) { type.Parent = this; TypeIdentifier = type; Type = type.ToName(); name.Parent = this; NameIdentifier = name; Name = name.Name; }
public DogeNamedMethodDefinition(DogeIdentifier name, DogeAccessibilityModifier modifier, DogeNamelessMethodDefinition method, DogeFile file, Range <int> tokenRange) : base(file, tokenRange) { name.Parent = this; NameIdentifier = name; Name = name.Name; Modifier = modifier; method.Parent = this; Method = method; }
public DogeLocalDeclarationStatement(DogeIdentifier name, DogeMemberAccessExpression type, DogeNode?value, DogeFile file, Range <int> range) : base(file, range) { name.Parent = this; NameIdentifier = name; Name = name.Name; type.Parent = this; TypeIdentifier = type; Type = type.ToName(); if (value != null) { value.Parent = this; } Value = value; }
public DogeFieldDefinition(DogeIdentifier name, DogeMemberAccessExpression type, DogeAccessibilityModifier modifier, bool isReadonly, DogeNode initialValue, DogeFile file, Range <int> tokenRange) : this( name, type, modifier, isReadonly, file, tokenRange) { initialValue.Parent = this; InitialValue = initialValue; }
public DogeClassDefinition(DogeAccessibilityModifier modifier, DogeIdentifier name, ICollection <DogeFieldDefinition> fieldDefinitions, ICollection <DogePropertyDefinition> propertyDefinitions, ICollection <DogeNamedMethodDefinition> methodDefinitions, DogeFile file, Range <int> tokenRange) : base(file, tokenRange) { Modifier = modifier; name.Parent = this; NameIdentifier = name; Name = name.Name; fieldDefinitions.ForEach(x => x.Parent = this); FieldDefinitions = fieldDefinitions; propertyDefinitions.ForEach(x => x.Parent = this); PropertyDefinitions = propertyDefinitions; methodDefinitions.ForEach(x => x.Parent = this); MethodDefinitions = methodDefinitions; }
public DogeFieldDefinition(DogeIdentifier name, DogeMemberAccessExpression type, DogeAccessibilityModifier modifier, bool isReadonly, DogeFile file, Range <int> tokenRange) : base(file, tokenRange) { name.Parent = this; NameIdentifier = name; Name = name.Name; type.Parent = this; TypeIdentifier = type; Type = type.ToName(); Modifier = modifier; IsReadonly = isReadonly; }
public DogePropertyDefinition(DogeIdentifier name, DogeMemberAccessExpression type, DogeAccessibilityModifier modifier, DogeNamelessMethodDefinition?get, DogeNamelessMethodDefinition?set, DogeNode?initialValue, DogeFile file, Range <int> tokenRange) : this( name, type, modifier, get, set, file, tokenRange) { if (initialValue != null) { initialValue.Parent = this; } InitialValue = initialValue; }
private DogeClassDefinition DogeParseClassDefinition() { int startIndex = Index(); Expect(DogeTokenType.ClassStart); DogeAccessibilityModifier modifier; switch (Peek().DogeTokenType) { case DogeTokenType.ModifierPublic: Step(); modifier = DogeAccessibilityModifier.Public; break; case DogeTokenType.ModifierInternal: Step(); modifier = DogeAccessibilityModifier.Internal; break; case DogeTokenType.ModifierPrivate: Step(); modifier = DogeAccessibilityModifier.Private; break; default: modifier = DogeAccessibilityModifier.Internal; break; } Expect(DogeTokenType.ClassEnd); DogeIdentifier name = DogeParseIdentifier(); Expect(DogeTokenType.LeftBraces); List <DogeFieldDefinition> fields = new List <DogeFieldDefinition>(); List <DogePropertyDefinition> properties = new List <DogePropertyDefinition>(); List <DogeNamedMethodDefinition> methods = new List <DogeNamedMethodDefinition>(); ParseLines(() => { int startIndex = Index(); Expect(DogeTokenType.Declarator); DogeIdentifier name = DogeParseIdentifier(); Expect(DogeTokenType.SymbolTypeSetter); bool isReadonly = StepIfNextTokenIs(DogeTokenType.Readonly, out DogeToken readonlyToken); DogeAccessibilityModifier memberModifier; switch (Peek().DogeTokenType) { case DogeTokenType.ModifierPublic: Step(); memberModifier = DogeAccessibilityModifier.Public; break; case DogeTokenType.ModifierInternal: Step(); memberModifier = DogeAccessibilityModifier.Internal; break; case DogeTokenType.ModifierPrivate: Step(); memberModifier = DogeAccessibilityModifier.Private; break; case DogeTokenType.Identifier: memberModifier = DogeAccessibilityModifier.Internal; break; default: throw new DogeParseUnexpectedTokenException(new List <DogeTokenType> { DogeTokenType.ModifierPublic, DogeTokenType.ModifierInternal, DogeTokenType.ModifierPrivate, DogeTokenType.Identifier }, Peek()); } DogeMemberAccessExpression type = DogeParseMemberCallExpression(false, false); switch (Peek().DogeTokenType) { case DogeTokenType.Then: if (isReadonly) { throw new DogeParseUnexpectedTokenException(DogeTokenType.Identifier, readonlyToken); } Step(); methods.Add(new DogeNamedMethodDefinition(name, memberModifier, DogeParseNamelessMethodDefinition(type), _file, new Range <int>(startIndex, Index()))); break; case DogeTokenType.NewLine: Step(); fields.Add(new DogeFieldDefinition(name, type, memberModifier, isReadonly, _file, new Range <int>(startIndex, Index()))); break; case DogeTokenType.OperatorAssign: Step(); fields.Add(new DogeFieldDefinition(name, type, memberModifier, isReadonly, DogeParseExpression(), _file, new Range <int>(startIndex, Index()))); break; case DogeTokenType.LeftBraces: if (isReadonly) { throw new DogeParseUnexpectedTokenException(DogeTokenType.Identifier, readonlyToken); } Step(); DogeNamelessMethodDefinition?get = null; DogeNamelessMethodDefinition?set = null; bool done = false; while (done) { switch (Peek().DogeTokenType) { case DogeTokenType.OperatorMemberAccess: get = DogeParseNamelessMethodDefinition(type, new List <DogeParameterDefinition>()); break; case DogeTokenType.OperatorAssign: set = DogeParseNamelessMethodDefinition( type, new List <DogeParameterDefinition> { new DogeParameterDefinition( type, new DogeIdentifier( new DogeToken( DogeTokenType.Value, "the value being assigned", -1), _file), _file, type.TokenRange) }); break; case DogeTokenType.RightBrackets: done = true; break; default: throw new DogeParseUnexpectedTokenException(new List <DogeTokenType> { DogeTokenType.OperatorAssign, DogeTokenType.OperatorMemberAccess, DogeTokenType.RightBrackets, }, Peek()); } } DogeNode?initialValue = null; if (StepIfNextTokenIs(DogeTokenType.OperatorAssign)) { initialValue = DogeParseExpression(); } properties.Add(new DogePropertyDefinition(name, type, memberModifier, get, set, initialValue, _file, new Range <int>(startIndex, Index()))); break; default: throw new DogeParseUnexpectedTokenException(new List <DogeTokenType> { DogeTokenType.LeftParenthesis, DogeTokenType.NewLine, DogeTokenType.LeftBraces, }, Peek()); } }); Expect(DogeTokenType.RightBraces); return(new DogeClassDefinition(modifier, name, fields, properties, methods, _file, new Range <int>(startIndex, Index()))); }