Exemple #1
0
        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();
        }
Exemple #2
0
 bool HasRankGreaterThan(CBasicType otherBasicType, CompilerContext context)
 {
     return(false);
 }