Skip to content

Commit fb9cbe2

Browse files
committed
Assembler: initial command line API.
1 parent 6f60d36 commit fb9cbe2

File tree

3 files changed

+67
-4
lines changed

3 files changed

+67
-4
lines changed

Naggum.Assembler/Assembler.fs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module Naggum.Assembler.Assembler
2+
3+
open System.Reflection.Emit
4+
5+
open Naggum.Compiler
6+
7+
/// Prepares the source file for assembling. Returns the intermediate
8+
/// representation of the source code.
9+
let prepare fileName stream =
10+
let forms = Reader.parse fileName stream
11+
()
12+
13+
/// Assembles the source code. Returns a list of assemblies ready for saving.
14+
let assemble repr : AssemblyBuilder seq =
15+
Seq.empty

Naggum.Assembler/Naggum.Assembler.fsproj

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,17 @@
4848
<Reference Include="System.Numerics" />
4949
</ItemGroup>
5050
<ItemGroup>
51+
<None Include="App.config" />
5152
<Compile Include="AssemblyInfo.fs" />
53+
<Compile Include="Assembler.fs" />
5254
<Compile Include="Program.fs" />
53-
<None Include="App.config" />
55+
</ItemGroup>
56+
<ItemGroup>
57+
<ProjectReference Include="..\Naggum.Compiler\Naggum.Compiler.fsproj">
58+
<Name>Naggum.Compiler</Name>
59+
<Project>{a4269c5e-e4ac-44bf-a06e-1b45248910ad}</Project>
60+
<Private>True</Private>
61+
</ProjectReference>
5462
</ItemGroup>
5563
<PropertyGroup>
5664
<MinimumVisualStudioVersion Condition="'$(MinimumVisualStudioVersion)' == ''">11</MinimumVisualStudioVersion>

Naggum.Assembler/Program.fs

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,52 @@
11
module Naggum.Assembler.Program
22

3+
open System
4+
open System.IO
35
open System.Reflection
6+
open System.Reflection.Emit
7+
8+
type ReturnCode =
9+
| Success = 0
10+
| Error = 1
11+
| InvalidArguments = 2
412

513
let printUsage () =
614
let version = Assembly.GetExecutingAssembly().GetName().Version
715
printfn "Naggum Assembler %A" version
16+
printfn "Usage: Naggum.Assembler [one or more file names]"
17+
18+
let printError (error : Exception) =
19+
printfn "Error: %s" (error.ToString ())
20+
21+
let save (assembly : AssemblyBuilder) =
22+
let name = assembly.FullName
23+
assembly.Save name
24+
printfn "Assembly %s saved" name
25+
26+
let assemble fileName =
27+
use stream = File.OpenRead fileName
28+
let repr = Assembler.prepare fileName stream
29+
let assemblies = Assembler.assemble repr
30+
assemblies |> Seq.iter save
31+
32+
let nga =
33+
function
34+
| [| "--help" |] ->
35+
printUsage ()
36+
ReturnCode.Success
37+
| fileNames when fileNames.Length > 0 ->
38+
try
39+
fileNames |> Array.iter assemble
40+
ReturnCode.Success
41+
with
42+
| error ->
43+
printError error
44+
ReturnCode.Error
45+
| _ ->
46+
printUsage ()
47+
ReturnCode.InvalidArguments
848

949
[<EntryPoint>]
10-
let main _ =
11-
printUsage ()
12-
0
50+
let main args =
51+
let result = nga args
52+
int result

0 commit comments

Comments
 (0)