public STObject EvaluateKeywordSend(STObject receiver, Node keywordSend, Context context)
{
receiver = receiver.Dereference();
// keyword_send = ( KEYWORD receiver simple_send* )+;
string keyword = null;
STObject parm = null;
StringBuilder selectorBuffer = new StringBuilder();
List<STObject> parms = new List<STObject>();
for (int i = 0, max = keywordSend.GetChildCount(); i < max; ++i) {
var item = keywordSend.GetChildAt(i);
if (item.Name == "KEYWORD") {
if (keyword != null) {
selectorBuffer.Append(keyword);
parms.Add (parm);
}
keyword = (item as Token).Image;
parm = EvaluateReceiver(keywordSend.GetChildAt(++i), context).Dereference();
} else if (item.Name == "simple_send") {
parm = EvaluateSimpleSend(parm, item, context);
}
}
selectorBuffer.Append(keyword);
parms.Add (parm);
STSymbol selector = STSymbol.Get(selectorBuffer.ToString());
return receiver.Send(selector, parms.ToArray());
}