CType MakeCType(DeclarationSpecifiers specs) { // // Try for Basic. The TypeSpecifiers are recorded in reverse from what is actually declared // in code. // var basicTs = specs.TypeSpecifiers.FirstOrDefault(x => x.Kind == TypeSpecifierKind.Builtin); if (basicTs != null) { if (basicTs.Name == "void") { return(CType.Void); } else { var sign = Signedness.Signed; var size = ""; TypeSpecifier trueTs = null; foreach (var ts in specs.TypeSpecifiers) { if (ts.Name == "unsigned") { sign = Signedness.Unsigned; } else if (ts.Name == "signed") { sign = Signedness.Signed; } else if (ts.Name == "short" || ts.Name == "long") { if (size.Length == 0) { size = ts.Name; } else { size = size + " " + ts.Name; } } else { trueTs = ts; } } var type = new CBasicType(trueTs == null ? "int" : trueTs.Name, sign, size); type.TypeQualifiers = specs.TypeQualifiers; return(type); } } // // Rest // throw new NotImplementedException(); }
bool HasRankGreaterThan(CBasicType otherBasicType, CompilerContext context) { return(false); }