Irontalk.Compiler.GetWordArrayLiteral C# (CSharp) Method

GetWordArrayLiteral() public method

public GetWordArrayLiteral ( PerCederberg.Grammatica.Runtime.Node literal ) : STObject
literal PerCederberg.Grammatica.Runtime.Node
return STObject
        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());
        }