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)); } }