Skip to content

Commit 9fb6344

Browse files
committed
fixed list quoting issues
1 parent 352aae4 commit 9fb6344

2 files changed

Lines changed: 19 additions & 7 deletions

File tree

Naggum.Runtime/Symbol.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,13 @@ bool IEquatable<Symbol>.Equals(Symbol other)
2121
{
2222
return Name.Equals(other.Name);
2323
}
24+
25+
/// <summary>
26+
/// </summary>
27+
/// <returns>Returns symbol's name as string.</returns>
28+
public override string ToString()
29+
{
30+
return Name;
31+
}
2432
}
2533
}

ngc/FormGenerator.fs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -217,15 +217,19 @@ type QuoteGenerator(context:Context,typeBuilder:TypeBuilder,quotedExp:SExp,gf:IG
217217
ilGen.Emit(OpCodes.Ldstr,name)
218218
ilGen.Emit(OpCodes.Newobj,cons)
219219
let rec generate_list (ilGen:ILGenerator) (elements:SExp list) =
220+
let generate_list_element e =
221+
match e with
222+
| List l -> generate_list ilGen l
223+
| Atom (Object o) -> generate_object ilGen o
224+
| Atom (Symbol s) -> generate_symbol ilGen s
225+
| other -> failwithf "Error: Unexpected form in quoted expression: %A" other
220226
let cons = (typeof<Naggum.Runtime.Cons>).GetConstructor(Array.create 2 typeof<obj>)
227+
List.rev elements |> List.head |> generate_list_element //last element
221228
ilGen.Emit(OpCodes.Ldnull) //list terminator
222-
List.iter (fun (e) ->
223-
match e with
224-
|List l -> ignore (generate_list ilGen l)
225-
|Atom (Object o) -> ignore (generate_object ilGen o)
226-
|Atom (Symbol s) -> ignore (generate_symbol ilGen s)
227-
ilGen.Emit(OpCodes.Newobj,cons))
228-
(List.rev elements)
229+
ilGen.Emit(OpCodes.Newobj,cons)
230+
List.rev elements |> List.tail |> List.iter (fun (e) ->
231+
generate_list_element e
232+
ilGen.Emit(OpCodes.Newobj,cons))
229233
interface IGenerator with
230234
member this.Generate ilGen =
231235
match quotedExp with

0 commit comments

Comments
 (0)