Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104package cli
import ( "strings"
"git.urbach.dev/cli/q/src/compiler" "git.urbach.dev/cli/q/src/config" "git.urbach.dev/cli/q/src/global" "git.urbach.dev/cli/q/src/linker")
// build parses the arguments and creates a build.func build(args []string) int { b, err := newBuild(args)
if err != nil { return exit(err) }
env, err := compiler.Compile(b)
if err != nil { return exit(err) }
if b.Dry { return success }
err = linker.WriteFile(b.Executable(), env) return exit(err)}
// newBuild creates a new build with the given arguments.func newBuild(args []string) (*config.Build, error) { build := config.New()
for i := 0; i < len(args); i++ { switch args[i] { case "-arch": i++
if i >= len(args) { return nil, &ExpectedParameter{Parameter: "arch"} }
switch args[i] { case "arm": build.Arch = config.ARM case "x86": build.Arch = config.X86 default: return nil, &InvalidValue{Value: args[i], Parameter: "arch"} } case "-dry": build.Dry = true case "-no-fold": build.Fold = false case "-no-lint": build.Lint(false) case "-no-optimize": build.Optimize(false) case "-no-reorder": build.Reorder = false case "-os": i++
if i >= len(args) { return nil, &ExpectedParameter{Parameter: "os"} }
switch args[i] { case "linux": build.OS = config.Linux case "mac": build.OS = config.Mac case "windows": build.OS = config.Windows default: return nil, &InvalidValue{Value: args[i], Parameter: "os"} } default: if strings.HasPrefix(args[i], "-") { return nil, &UnknownParameter{Parameter: args[i]} }
build.Files = append(build.Files, args[i]) } }
if build.OS == config.UnknownOS { return nil, &InvalidValue{Value: global.OS, Parameter: "os"} }
if build.Arch == config.UnknownArch { return nil, &InvalidValue{Value: global.Arch, Parameter: "arch"} }
if len(build.Files) == 0 { build.Files = append(build.Files, ".") }
return build, nil}