protected virtual ConstructorDefinition ParseConstructor( TokenStream tokens, ClassDefinition owner, ModifierCollection modifiers, AnnotationCollection annotations) { Token constructorToken = tokens.PopExpected(this.parser.Keywords.CONSTRUCTOR); ConstructorDefinition ctor = new ConstructorDefinition(constructorToken, modifiers, annotations, owner); tokens.PopExpected("("); List <AType> argTypes = new List <AType>(); List <Token> argNames = new List <Token>(); List <Expression> argValues = new List <Expression>(); this.ParseArgumentListDeclaration(tokens, ctor, argTypes, argNames, argValues); List <Expression> baseArgs = new List <Expression>(); Token baseToken = null; if (tokens.PopIfPresent(":")) { baseToken = tokens.PopExpected(this.parser.Keywords.BASE); tokens.PopExpected("("); while (!tokens.PopIfPresent(")")) { if (baseArgs.Count > 0) { tokens.PopExpected(","); } baseArgs.Add(this.parser.ExpressionParser.Parse(tokens, ctor)); } } IList <Executable> code = this.parser.ExecutableParser.ParseBlock(tokens, true, ctor); ctor.SetArgs(argNames, argValues, argTypes); ctor.SetBaseArgs(baseArgs); ctor.SetCode(code); ctor.BaseToken = baseToken; return(ctor); }