예제 #1
0
        public virtual IokeObject ConvertToSymbol(IokeObject self, IokeObject m, IokeObject context, bool signalCondition)
        {
            if (signalCondition)
            {
                IokeObject condition = IokeObject.As(IokeObject.GetCellChain(context.runtime.Condition,
                                                                             m,
                                                                             context,
                                                                             "Error",
                                                                             "Type",
                                                                             "IncorrectType"), context).Mimic(m, context);
                condition.SetCell("message", m);
                condition.SetCell("context", context);
                condition.SetCell("receiver", self);
                condition.SetCell("expectedType", context.runtime.GetSymbol("Symbol"));

                object[] newCell = new object[] { self };

                context.runtime.WithRestartReturningArguments(() => { context.runtime.ErrorCondition(condition); },
                                                              context,
                                                              new IokeObject.UseValue("symbol", newCell));
                return(IokeObject.ConvertToSymbol(newCell[0], m, context, signalCondition));
            }
            return(null);
        }