예제 #1
0
        public AstTypedef SubType(string ident, AstType super)
        {
            var cols = new DataColumn[] { DataColumn.Create("super", super.DataType) };
            var ut   = DataTypeUser.Get(ident, cols);

            Symbols.AddUserType(ident, ut);
            return(new AstSubType {
                DataType = DataTypes.Void
            });
        }
예제 #2
0
        public AstTypedef UserType(string ident, AstField[] fields)
        {
            var ff = fields.Select(a => DataColumn.Create(a.Name, a.DataType)).ToArray();
            var ut = DataTypeUser.Get(ident, ff);

            Symbols.AddUserType(ident, ut);
            Symbols.AddCatalog(Symbols.FindIdent(ident));
            return(new AstUserType {
                DataType = DataTypes.Void
            });
        }
예제 #3
0
        ///-------------------------------------------------------------------

        // Make symbols that can be user-defined
        internal static Symbol MakeUserType(string name, DataTypeUser datatype)
        {
            var callinfo = CallInfo.Create(name, datatype, datatype.Heading.Columns.ToArray());

            return(new Symbol {
                Name = name,
                Kind = SymKinds.SELECTOR,
                CallKind = CallKinds.SFUNC,
                NumArgs = callinfo.NumArgs,
                DataType = datatype,
                CallInfo = callinfo,
            });
        }
예제 #4
0
 public void AddUserType(string name, DataTypeUser datatype)
 {
     CurrentScope.Add(MakeUserType(name, datatype));
 }