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"); }
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; } } }