Expand Gotlin language and tooling
This commit is contained in:
parent
8f4f858d86
commit
de1262b4cf
41 changed files with 6059 additions and 379 deletions
|
|
@ -42,13 +42,13 @@ func runBuild(args []string) {
|
|||
if err := fs.Parse(normalizedArgs); err != nil {
|
||||
fail(err)
|
||||
}
|
||||
if fs.NArg() != 1 {
|
||||
if fs.NArg() < 1 {
|
||||
fs.Usage()
|
||||
os.Exit(2)
|
||||
}
|
||||
|
||||
inputPath := fs.Arg(0)
|
||||
goSrc := compileFile(inputPath, !*srcOnly)
|
||||
goSrc := compileFiles(fs.Args(), !*srcOnly)
|
||||
|
||||
if *srcOnly {
|
||||
if *outPath == "" {
|
||||
|
|
@ -113,17 +113,42 @@ func runRun(args []string) {
|
|||
}
|
||||
|
||||
func compileFile(inputPath string, forceMain bool) string {
|
||||
src, err := os.ReadFile(inputPath)
|
||||
if err != nil {
|
||||
fail(err)
|
||||
}
|
||||
return compileFiles([]string{inputPath}, forceMain)
|
||||
}
|
||||
|
||||
program, err := lang.Parse(string(src))
|
||||
if err != nil {
|
||||
fail(err)
|
||||
}
|
||||
func compileFiles(inputPaths []string, forceMain bool) string {
|
||||
program := &lang.Program{}
|
||||
var firstSource string
|
||||
for _, inputPath := range inputPaths {
|
||||
src, err := os.ReadFile(inputPath)
|
||||
if err != nil {
|
||||
fail(err)
|
||||
}
|
||||
|
||||
parsed, err := lang.Parse(string(src))
|
||||
if err != nil {
|
||||
fail(err)
|
||||
}
|
||||
|
||||
if program.PackagePath == "" {
|
||||
program.PackagePath = parsed.PackagePath
|
||||
}
|
||||
if parsed.PackagePath != program.PackagePath {
|
||||
fail(fmt.Errorf("Gotlin files must use the same package"))
|
||||
}
|
||||
program.Imports = append(program.Imports, parsed.Imports...)
|
||||
program.Interfaces = append(program.Interfaces, parsed.Interfaces...)
|
||||
program.Enums = append(program.Enums, parsed.Enums...)
|
||||
program.Classes = append(program.Classes, parsed.Classes...)
|
||||
program.Workers = append(program.Workers, parsed.Workers...)
|
||||
program.Functions = append(program.Functions, parsed.Functions...)
|
||||
program.Embeds = append(program.Embeds, parsed.Embeds...)
|
||||
if firstSource == "" {
|
||||
firstSource = string(src)
|
||||
}
|
||||
}
|
||||
var goSrc []byte
|
||||
var err error
|
||||
if forceMain {
|
||||
goSrc, err = lang.GenerateGoMain(program)
|
||||
} else {
|
||||
|
|
@ -133,7 +158,7 @@ func compileFile(inputPath string, forceMain bool) string {
|
|||
fail(err)
|
||||
}
|
||||
if forceMain {
|
||||
return addBestEffortLineDirectives(string(goSrc), inputPath, string(src))
|
||||
return addBestEffortLineDirectives(string(goSrc), inputPaths[0], firstSource)
|
||||
}
|
||||
return string(goSrc)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue