public STObject GetWordArrayLiteral(Node literal)
{
// word_array = '#' '('
// ( IDENT | STRING | NUM | CHAR | '#' ( IDENT | word_array ) )
// ')' ;
List<object> values = new List<object>();
for (int i = 2, max = literal.GetChildCount() - 1; i < max; ++i) {
Node child = literal.GetChildAt(i);
if (child.Name == "IDENT")
values.Add (STSymbol.Get((child as Token).Image));
else if (child.Name == "STRING")
values.Add (GetStringLiteral(child as Token));
else if (child.Name == "NUM")
values.Add (GetNumberLiteral(child as Token));
else if (child.Name == "CHAR")
values.Add (GetCharLiteral(child as Token));
else if (child.Name == "HASH") {
child = literal.GetChildAt(++i);
if (child.Name == "IDENT")
values.Add (STSymbol.Get((child as Token).Image));
else if (child.Name == "word_array")
values.Add (GetWordArrayLiteral(child));
else
throw new Exception ("Unhandled path in grammar");
} else
throw new Exception ("Unhandled path in grammar");
}
return new Irontalk.Array(values.ToArray());
}