diff --git a/compiler/filetype.go b/compiler/filetype.go index 040ea7b..5348f4e 100644 --- a/compiler/filetype.go +++ b/compiler/filetype.go @@ -10,51 +10,56 @@ type Filetype int; const ( FiletypeLibrary FiletypeAssembly FiletypeIR + FiletypeExecutable ) // FiletypeFromString returns a filetype based on the given name. func FiletypeFromString (ext string) (Filetype, bool) { switch ext { - case "": return FiletypeUnknown, true - case "obj": return FiletypeObject, true - case "lib": return FiletypeLibrary, true - case "asm": return FiletypeAssembly, true - case "ir": return FiletypeIR, true - default: return FiletypeUnknown, false + case "": return FiletypeUnknown, true + case "obj": return FiletypeObject, true + case "lib": return FiletypeLibrary, true + case "asm": return FiletypeAssembly, true + case "ir": return FiletypeIR, true + case "exe": return FiletypeExecutable, true + default: return FiletypeUnknown, false } } // FiletypeFromExt returns a filetype based on the given filename extension. func FiletypeFromExt (target generator.Target, ext string) (Filetype, bool) { switch ext { - case ".o": return FiletypeObject, true - case targetSoExt(target): return FiletypeLibrary, true - case ".s": return FiletypeAssembly, true - case ".ll": return FiletypeIR, true - default: return FiletypeUnknown, false + case ".o": return FiletypeObject, true + case targetSoExt(target): return FiletypeLibrary, true + case ".s": return FiletypeAssembly, true + case ".ll": return FiletypeIR, true + case targetExeExt(target): return FiletypeExecutable, true + default: return FiletypeUnknown, false } } // String returns a string representation of the filetype. func (filetype Filetype) String () string { switch filetype { - case FiletypeUnknown: return "" - case FiletypeObject: return "obj" - case FiletypeLibrary: return "lib" - case FiletypeAssembly: return "asm" - case FiletypeIR: return "ir" - default: return fmt.Sprintf("Filetype(%d)", filetype) + case FiletypeUnknown: return "" + case FiletypeObject: return "obj" + case FiletypeLibrary: return "lib" + case FiletypeAssembly: return "asm" + case FiletypeIR: return "ir" + case FiletypeExecutable: return "exe" + default: return fmt.Sprintf("Filetype(%d)", filetype) } } // Ext returns the standard filename extension of the filetype. func (filetype Filetype) Ext (target generator.Target) string { switch filetype { - case FiletypeUnknown: return "" - case FiletypeObject: return ".o" - case FiletypeLibrary: return targetSoExt(target) - case FiletypeAssembly: return ".s" - case FiletypeIR: return ".ll" + case FiletypeUnknown: return "" + case FiletypeObject: return ".o" + case FiletypeLibrary: return targetSoExt(target) + case FiletypeAssembly: return ".s" + case FiletypeIR: return ".ll" + case FiletypeExecutable: return targetExeExt(target) default: return "" } } @@ -71,3 +76,11 @@ func targetSoExt (target generator.Target) string { default: return ".so" } } + +func targetExeExt (target generator.Target) string { + // TODO: more research is required here + switch target.OS { + case "windows": return ".exe" + default: return "" + } +}