public override CodeExpression GetReaderExpression(CodeExpression reader) { CodeExpression refExpr; if (_magicParser) { List <CodeExpression> args = new List <CodeExpression>(); args.Add(reader); foreach (SequenceChoice choice in _choices) { if (choice.SequenceType != null) { args.Add(CodeGen.GetTypeOf(new CodeTypeReference(choice.SequenceType.Name))); } } if (DefaultType != null) { args.Add(CodeGen.GetTypeOf(new CodeTypeReference(DefaultType.Name))); } return(CodeGen.CallMethod(CodeGen.GetThis(), "RSC", args.ToArray())); } else { if (_reference.IsValid()) { refExpr = CodeGen.GetField(CodeGen.GetThis(), _reference.GetNames()); } else { refExpr = CodeGen.GetPrimitive(null); } List <CodeExpression> args = new List <CodeExpression>(); args.Add(reader); args.Add(refExpr); foreach (SequenceChoice choice in _choices) { if ((choice.BooleanExpression.IsValid) && (choice.SequenceType != null)) { args.Add(CodeGen.GetPrimitive(choice.BooleanExpression.Expression)); args.Add(CodeGen.GetTypeOf(new CodeTypeReference(choice.SequenceType.Name))); } } if (DefaultType != null) { args.Add(CodeGen.GetPrimitive("true")); args.Add(CodeGen.GetTypeOf(new CodeTypeReference(DefaultType.Name))); } return(CodeGen.CallMethod(CodeGen.GetThis(), "RSC", args.ToArray())); } }