// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file implements access to gccgo-generated export data.

package main

import (
	"llvm.org/llgo/third_party/go.tools/go/gccgoimporter"
	"llvm.org/llgo/third_party/go.tools/go/types"
)

var (
	initmap = make(map[*types.Package]gccgoimporter.InitData)
)

func init() {
	incpaths := []string{"/"}

	// importer for default gccgo
	var inst gccgoimporter.GccgoInstallation
	inst.InitFromDriver("gccgo")
	register("gccgo", inst.GetImporter(incpaths, initmap))
}

// Print the extra gccgo compiler data for this package, if it exists.
func (p *printer) printGccgoExtra(pkg *types.Package) {
	if initdata, ok := initmap[pkg]; ok {
		p.printf("/*\npriority %d\n", initdata.Priority)

		p.printDecl("init", len(initdata.Inits), func() {
			for _, init := range initdata.Inits {
				p.printf("%s %s %d\n", init.Name, init.InitFunc, init.Priority)
			}
		})

		p.print("*/\n")
	}
}
