Ejemplo n.º 1
0
        public Function(BaseStructure Base, bool asConstructor) : base(Base.Name, Base.Modifiers, Base.AccessModifier, Base.Childs)
        {
            Directive = Base.Directive;

            CompileCache.UnknownLabelNameErrorList = new List <ConstantErrorMark>();
            CompileCache.Variables   = new List <VariableMark>();
            CompileCache.NamedConsts = new List <ConstantMark>();
            Parameters = new List <FunctionParameter>();

            if (asConstructor)
            {
                Target       = RuleTarget.Constructor;
                IsConstuctor = true;
            }
            else
            {
                Target = RuleTarget.Method;

                Modifier retModifier = GetModifier(ReturnKeyword);
                if (retModifier.Value == NoReturnableValueKeyword)
                {
                    RetType       = TypeReference.Void;
                    HasNoRetValue = true;
                }
                else
                {
                    RetType = new TypeReference(retModifier.Value, null);
                }

                if (GetModifier(OverrideKeyword) != null)
                {
                    IsStatic = true;
                }
                if (GetModifier(VirtualKeyword) != null)
                {
                    IsStatic = true;
                }
                if (GetModifier(StaticKeyword) != null)
                {
                    IsStatic = true;
                }
                if (GetModifier(EntryPointKeyword) != null)
                {
                    IsEntryPoint = true;
                }
            }

            foreach (var parameter in Modifiers.FindAll(p => p.Name == ParameterKeyword))
            {
                var parts = parameter.Value.Split(':');

                var type = parts[0];
                var name = parts[1];

                Parameters.Add(new FunctionParameter(
                                   new TypeReference(type, null), name));
            }
        }