示例#1
0
        public void AddPrimitives()
        {
            System.Func <string, H <sema.Def> > add = (name) =>
            {
                var hDef           = this.defs.Reserve();
                var hNamespaceNode = this.names.FindOrReserve(name);

                this[hDef] = new sema.Def.Structure {
                    namespaceNode = hNamespaceNode
                };
                hNamespaceNode.item = new sema.Namespace.Item.Def {
                    def = hDef
                };
                return(hDef);
            };

            this.primitiveBool    = add("Bool");
            this.primitiveInt     = add("Int");
            this.primitiveInt8    = add("Int8");
            this.primitiveInt16   = add("Int16");
            this.primitiveInt32   = add("Int32");
            this.primitiveInt64   = add("Int64");
            this.primitiveUInt    = add("UInt");
            this.primitiveUInt8   = add("UInt8");
            this.primitiveUInt16  = add("UInt16");
            this.primitiveUInt32  = add("UInt32");
            this.primitiveUInt64  = add("UInt64");
            this.primitiveFloat   = add("Float");
            this.primitiveFloat32 = add("Float32");
            this.primitiveFloat64 = add("Float64");
        }
示例#2
0
        private static void TryCollectStructureDef(Context ctx, diagn.Reporter reporter, mod.Unit unit, syn.Node.StructureDef node)
        {
            if (node == null)
            {
                return;
            }

            var hDef = ctx.defs.Reserve();

            ctx[hDef]                  = new sema.Def.Structure();
            ctx[hDef].spanDef          = node.span;
            unit.semanticMap.def[node] = hDef;

            if (node.name != null)
            {
                var identifierToken = (node.name as syn.Node.Identifier).token;
                ctx[hDef].spanDefName = identifierToken.span;

                var namespaceNode = ctx.names.FindOrReserve(identifierToken.excerpt);
                if (namespaceNode.item != null)
                {
                    ReportDuplicate(ctx, reporter, identifierToken.span, namespaceNode);
                }

                else
                {
                    namespaceNode.item = new sema.Namespace.Item.Def {
                        def = hDef
                    };
                    ctx[hDef].namespaceNode                = namespaceNode;
                    unit.semanticMap.references[node]      = namespaceNode;
                    unit.semanticMap.references[node.name] = namespaceNode;
                }
            }
        }