Пример #1
0
void evaluator::eval_message(TokenStream* st) {
  oop receiver;
  oop result = nilObj;
  symbolOop selector;

  if (st->eos()) return;
  if (!get_oop(st, &receiver)) return;
  if (st->eos()) {
    receiver->print();
  } else if (st->is_unary()) {
    symbolOop selector = oopFactory::new_symbol(st->current());
    if (!validate_lookup(receiver, selector)) return;
    result = Delta::call(receiver, selector);
  } else if (st->is_binary()) {
    selector = oopFactory::new_symbol(st->current());
    if (!validate_lookup(receiver, selector)) return;
    oop argument;
    st->advance();
    if (!get_oop(st, &argument)) return;
    result = Delta::call(receiver, selector, argument);
  } else if (st->is_keyword()) {
    char name[100];
    oop  arguments[10];
    int  nofArgs = 0;
    name[0] = '\0';
    while (!st->eos()) {
      strcat(name, st->current());
      st->advance();
      oop arg;
      if (!get_oop(st, &arg)) return;
      arguments[nofArgs++] = arg;
    }
    selector = oopFactory::new_symbol(name);
    if (!validate_lookup(receiver, selector)) return;
    static DeltaCallCache cache;
    result = Delta::call_generic(&cache, receiver, selector, nofArgs, arguments);
  }
  result->print_value();
  std->cr();
}
Пример #2
0
btree_node *look_up_node_with_string(btree_node * n,
				     char *string_to_lookup)
{
    int i = 0;
    btree_node *nn;
    if (validate_lookup(n, string_to_lookup))
	return n;
    else {
	for (i = 0; i < n->child_count; i++) {
	    nn = look_up_node_with_string(n->childs[i], string_to_lookup);
	    if (nn)
		return nn;
	}
    }
    return 0;

}