Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
        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;
        }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
 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;
        }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
 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;
 }
Ejemplo n.º 11
0
        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())));
        }