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); }