public static IParsingResultExtended Parse(ParsingContext context) { IParsingResultExtended simple = SimpleOperatorName.Parse(context); if (simple != null) { return(simple); } RewindState rewind = context.RewindState; if (context.Parser.VerifyString("cv")) { IParsingResultExtended type = Type.Parse(context); if (type == null) { context.Rewind(rewind); return(null); } return(new Cast(type)); } if (context.Parser.VerifyString("li")) { IParsingResultExtended name = SourceName.Parse(context); if (name == null) { context.Rewind(rewind); return(null); } return(new Literal(name)); } if (context.Parser.VerifyString("v")) { if (!char.IsDigit(context.Parser.Peek)) { context.Rewind(rewind); return(null); } int arity = context.Parser.Peek - '0'; context.Parser.Position++; IParsingResultExtended name = SourceName.Parse(context); if (name == null) { context.Rewind(rewind); return(null); } return(new VendorExtension(arity, name)); } return(null); }
public static IParsingResultExtended Parse(ParsingContext context) { RewindState rewind = context.RewindState; if (!context.Parser.VerifyString("N")) { return(null); } CvQualifiers cvQualifiers = CvQualifiers.Parse(context); RefQualifier refQualifier = RefQualifier.Parse(context); IParsingResultExtended prefix = Parsers.Prefix.Parse(context); if (prefix == null) { context.Rewind(rewind); return(null); } if (!(prefix is Parsers.Prefix.NestedName) && !(prefix is Parsers.Prefix.Template)) { context.Rewind(rewind); return(null); } if (!context.Parser.VerifyString("E")) { context.Rewind(rewind); return(null); } return(new NestedName(prefix, cvQualifiers, refQualifier)); }
public static IParsingResultExtended Parse(ParsingContext context) { IParsingResultExtended name = UnscopedName.Parse(context); if (name != null) { context.SubstitutionTable.Add(name); return(name); } return(Substitution.Parse(context)); }
public static IParsingResultExtended Parse(ParsingContext context) { RewindState rewind = context.RewindState; IParsingResultExtended name = NestedName.Parse(context); if (name != null) { return(name); } name = UnscopedName.Parse(context); if (name != null) { if (context.Parser.Peek == 'I') { context.SubstitutionTable.Add(name); TemplateArgs args = TemplateArgs.Parse(context); if (args == null) { context.Rewind(rewind); return(null); } return(new UnscopedTemplate(name, args)); } else { return(name); } } name = UnscopedTemplateName.Parse(context); if (name != null) { TemplateArgs args = TemplateArgs.Parse(context); if (args == null) { context.Rewind(rewind); return(null); } return(new UnscopedTemplate(name, args)); } return(LocalName.Parse(context)); }
public static IParsingResult Parse(ParsingContext context) { IParsingResultExtended name = Name.Parse(context); if (name != null) { BareFunctionType type = BareFunctionType.Parse(context); if (type != null) { return(new Function(name, type)); } return(name); } return(SpecialName.Parse(context)); }
public static IParsingResultExtended Parse(ParsingContext context) { RewindState rewind = context.RewindState; if (context.Parser.VerifyString("St")) { IParsingResultExtended name = UnqualifiedName.Parse(context); if (name == null) { context.Rewind(rewind); return(null); } return(new Std(name)); } return(UnqualifiedName.Parse(context)); }
public static IParsingResultExtended Parse(ParsingContext context) { IParsingResultExtended substitution = Substitution.Parse(context); if (substitution != null) { return(substitution); } IParsingResultExtended parameter = TemplateParam.Parse(context); if (parameter != null) { IParsingResultExtended result = new TemplateTemplateParam(parameter); context.SubstitutionTable.Add(result); return(result); } return(null); }
public static IParsingResultExtended Parse(ParsingContext context) { IParsingResultExtended name = Name.Parse(context); if (name != null) { return(name); } RewindState rewind = context.RewindState; if (context.Parser.VerifyString("T")) { if (context.Parser.VerifyString("s")) { name = Name.Parse(context); if (name != null) { return(new ElaboratedStruct(name)); } } else if (context.Parser.VerifyString("u")) { name = Name.Parse(context); if (name != null) { return(new ElaboratedUnion(name)); } } else if (context.Parser.VerifyString("e")) { name = Name.Parse(context); if (name != null) { return(new ElaboratedEnum(name)); } } } context.Rewind(rewind); return(null); }
public static IParsingResultExtended Parse(ParsingContext context) { IParsingResultExtended type = StandardBuiltinType.Parse(context); if (type != null) { return(type); } RewindState rewind = context.RewindState; if (context.Parser.VerifyString("u")) { IParsingResultExtended name = SourceName.Parse(context); return(new Extension(name)); } context.Rewind(rewind); return(null); }
public static IParsingResultExtended Parse(ParsingContext context) { IParsingResultExtended wellKnown = WellKnownComponent.Parse(context); if (wellKnown != null) { return(wellKnown); } RewindState rewind = context.RewindState; if (!context.Parser.VerifyString("S")) { return(null); } int number; if (!context.Parser.ParseNumberBase36(out number)) { number = -1; } number++; if (!context.Parser.VerifyString("_") || !context.SubstitutionTable.Contains(number)) { context.Rewind(rewind); return(null); } Substitution substitution = new Substitution(number); substitution.resolvedReference = context.SubstitutionTable.Substitutions[number]; return(substitution); }
public static IParsingResultExtended Parse(ParsingContext context) { RewindState rewind = context.RewindState; IParsingResultExtended result = null; bool isResultTemplatePrefix = false; while (!context.Parser.IsEnd) { bool isResultTemplatePrefixNext = false; switch (context.Parser.Peek) { case 'S': { IParsingResultExtended substitution = Substitution.Parse(context); if (substitution == null) { context.Rewind(rewind); return(null); } result = substitution; } break; case 'T': { IParsingResultExtended param = TemplateParam.Parse(context); if (param == null) { context.Rewind(rewind); return(null); } result = AddToSubstitutionTable(context, param); isResultTemplatePrefixNext = true; } break; case 'D': { IParsingResultExtended decltype = Decltype.Parse(context); if (decltype != null) { result = AddToSubstitutionTable(context, decltype); } else { IParsingResultExtended name = UnqualifiedName.Parse(context); if (name == null) { context.Rewind(rewind); return(null); } if (result != null) { result = AddToSubstitutionTable(context, new NestedName(result, name)); } else { result = AddToSubstitutionTable(context, name); } isResultTemplatePrefixNext = true; } } break; default: if (context.Parser.Peek == 'I' && result != null && isResultTemplatePrefix) { TemplateArgs arguments = TemplateArgs.Parse(context); if (arguments == null) { context.Rewind(rewind); return(null); } result = AddToSubstitutionTable(context, new Template(result, arguments)); } else if (result != null && SourceName.StartsWith(context)) { Debug.Assert(UnqualifiedName.StartsWith(context)); Debug.Assert(DataMemberPrefix.StartsWith(context)); IParsingResultExtended name = SourceName.Parse(context); if (name == null) { context.Rewind(rewind); return(null); } if (context.Parser.VerifyString("M")) { result = AddToSubstitutionTable(context, new DataMember(result, name)); } else { if (result != null) { result = AddToSubstitutionTable(context, new NestedName(result, name)); } else { result = AddToSubstitutionTable(context, name); } isResultTemplatePrefixNext = true; } } else if (UnqualifiedName.StartsWith(context)) { IParsingResultExtended name = UnqualifiedName.Parse(context); if (name == null) { context.Rewind(rewind); return(null); } if (result != null) { result = AddToSubstitutionTable(context, new NestedName(result, name)); } else { result = AddToSubstitutionTable(context, name); } isResultTemplatePrefixNext = true; } else { if (result != null) { return(result); } context.Rewind(rewind); return(null); } break; } isResultTemplatePrefix = isResultTemplatePrefixNext; } return(result); }
public Std(IParsingResultExtended name) { Name = name; }
public ElaboratedUnion(IParsingResultExtended name) { Name = name; }
public VendorExtension(int arity, IParsingResultExtended name) { Arity = arity; Name = name; }
public static IParsingResultExtended Parse(ParsingContext context) { IParsingResultExtended type = BuiltinType.Parse(context); if (type != null) { return(type); } type = ClassEnumType.Parse(context); if (type != null) { return(AddToSubstitutionTable(context, type)); } RewindState rewind = context.RewindState; type = Substitution.Parse(context); if (type != null) { if (context.Parser.Peek != 'I') { return(type); } context.Rewind(rewind); } type = FunctionType.Parse(context) ?? ArrayType.Parse(context) ?? PointerToMemberType.Parse(context); if (type != null) { return(AddToSubstitutionTable(context, type)); } type = TemplateParam.Parse(context); if (type != null) { if (context.Parser.Peek != 'I') { return(AddToSubstitutionTable(context, type)); } context.Rewind(rewind); } type = TemplateTemplateParam.Parse(context); if (type != null) { TemplateArgs arguments = TemplateArgs.Parse(context); if (arguments == null) { context.Rewind(rewind); return(null); } return(AddToSubstitutionTable(context, new TemplateTemplate(type, arguments))); } type = Decltype.Parse(context); if (type != null) { return(type); } CvQualifiers qualifiers = CvQualifiers.Parse(context); if (qualifiers != null) { type = Parse(context); if (type == null) { context.Rewind(rewind); return(null); } if (type is BuiltinType) { return(new QualifiedBuiltin(qualifiers, type)); } return(AddToSubstitutionTable(context, new Qualified(qualifiers, type))); } if (context.Parser.VerifyString("P")) { type = Parse(context); if (type == null) { context.Rewind(rewind); return(null); } return(AddToSubstitutionTable(context, new PointerTo(type))); } if (context.Parser.VerifyString("R")) { type = Parse(context); if (type == null) { context.Rewind(rewind); return(null); } return(AddToSubstitutionTable(context, new LvalueRef(type))); } if (context.Parser.VerifyString("O")) { type = Parse(context); if (type == null) { context.Rewind(rewind); return(null); } return(AddToSubstitutionTable(context, new RvalueRef(type))); } if (context.Parser.VerifyString("C")) { type = Parse(context); if (type == null) { context.Rewind(rewind); return(null); } return(AddToSubstitutionTable(context, new Complex(type))); } if (context.Parser.VerifyString("G")) { type = Parse(context); if (type == null) { context.Rewind(rewind); return(null); } return(AddToSubstitutionTable(context, new Imaginary(type))); } if (context.Parser.VerifyString("U")) { IParsingResult name = SourceName.Parse(context); if (name == null) { context.Rewind(rewind); return(null); } TemplateArgs arguments = TemplateArgs.Parse(context); type = Parse(context); return(AddToSubstitutionTable(context, new VendorExtension(name, arguments, type))); } if (context.Parser.VerifyString("Dp")) { type = Parse(context); if (type == null) { context.Rewind(rewind); return(null); } return(AddToSubstitutionTable(context, new PackExtension(type))); } return(null); }
public NestedName(IParsingResultExtended previous, IParsingResultExtended name) { Previous = previous; Name = name; }
public RvalueRef(IParsingResultExtended type) { Type = type; }
public Complex(IParsingResultExtended type) { Type = type; }
public Extension(IParsingResultExtended name) { Name = name; }
public Imaginary(IParsingResultExtended type) { Type = type; }
public NestedName(IParsingResultExtended prefix, CvQualifiers cvQualifiers, RefQualifier refQualifier) { Prefix = prefix; CvQualifiers = cvQualifiers; RefQualifier = refQualifier; }
public PackExtension(IParsingResultExtended type) { Type = type; }
public TemplateTemplate(IParsingResultExtended type, TemplateArgs arguments) { Type = type; Arguments = arguments; }
public Qualified(CvQualifiers qualifiers, IParsingResultExtended type) { CvQualifiers = qualifiers; Type = type; }
private static IParsingResultExtended AddToSubstitutionTable(ParsingContext context, IParsingResultExtended result) { context.SubstitutionTable.Add(result); return(result); }
public Cast(IParsingResultExtended type) { Type = type; }
public DataMember(IParsingResultExtended name, IParsingResult member) { Name = name; Member = member; }
public Literal(IParsingResultExtended name) { Name = name; }
public Template(IParsingResultExtended name, TemplateArgs arguments) { Name = name; Arguments = arguments; }
public PointerTo(IParsingResultExtended type) { Type = type; }