Example #1
0
Object* Unlambda_call(Object* self, Object* other){
  if(World_getDebug(getWorld())){
      Object_print(self, "operator");
      Object_print(other, "operand");
  }
  return self->fProc(self, other);
}
Example #2
0
int Object_lookup_method_arity(Object *object, bstring name) {
  // Special case: Function#apply
  bstring special_call = bfromcstr("apply");
  if(object->type == tFunction && bstrcmp(name, special_call)==0) {
    return 2;
  }
  bdestroy(special_call);
  // end of special

  Object *fn = Object_lookup_slot(object, name);
  if(!fn) {
    printf("Undefined slot #%s for ", bdata(name));
    Object_print(object);
    printf("\n");
    die("\nCould not find slot.");
  }

  if(fn->type != tFunction) { // it is a normal attribute
    return -2;
  }

  if(fn->native) {
    NativeMethod *method = (NativeMethod*)fn->value.other;
    return method->arity;
  } else {
    VMMethod *method = (VMMethod*)fn->value.other;
    return method->arity;
  }
}
Example #3
0
char *test_print()
{
    object = Object_new();
    Object_print(object);
    Object_destroy(object);

    object = True_new();
    Object_print(object);
    Object_destroy_immortal(object);

    object = False_new();
    Object_print(object);
    Object_destroy_immortal(object);

    object = Nil_new();
    Object_print(object);
    Object_destroy_immortal(object);

    object = Integer_new(123);
    Object_print(object);
    Object_destroy(object);

    bstring hello = bfromcstr("hello");
    object = String_new(hello);
    Object_print(object);
    Object_destroy(object);

    return NULL;
}
Example #4
0
void Stack_print(Stack* stack) {
	
	int i;
	Object* elt;
	
	fprintf(stderr, "Stack at %p\n", stack);
	fprintf(stderr, "\tsize    %d\n", stack->size);
	fprintf(stderr, "\tpointer %p\n", stack->pointer);
	fprintf(stderr, "\ttop     %p (%d)\n", &stack->pointer[stack->topi], stack->topi);
	fprintf(stderr, "------------------------\n");
	Stack_TOP_DOWN(stack, i) {
		elt = stack->pointer[i];
		fprintf(stderr, "%d: ", i);
		Object_print(elt);
	}
Example #5
0
void Registers_print(Object **registers, int registers_count)
{
  int i = 0;

  printf("Register dump: \n");

  for(i=0; i < registers_count; i++) {
    printf("\t[%i]: ", i);
    if (registers[i] != NULL) {
      Object_print(registers[i]);
    } else {
      printf("(empty)");
    }
    printf("\n");
  }
}
Example #6
0
void Object_print(Object* object) {
  assert(object != NULL && "Cannot print null object");

  if(object == Lobby) {
    printf("Lobby");
    return;
  }

  switch(object->type) {
    case tInteger:
      printf("%i", object->value.integer);
      break;
    case tString:
      printf("%s", bdata(object->value.string));
      break;
    case tArray:
      printf("[");
      DArray *array = (DArray*)object->value.other;

      int i = 0, count = DArray_count(array);
      for(i=0; i < count; i++) {
        Object_print((Object*)DArray_at(array, i));
        if (i+1 != count) printf(", ");
      }

      printf("]");
      break;
    case tHash:
      printf("#<tHash:%p>", object);
      break;
    case tFunction:
      printf("#<tFunction:%p @method=\"%p\">", object, object->value.other);
      break;
    case tTrue:
      printf("true");
      break;
    case tFalse:
      printf("false");
      break;
    case tNil:
      printf("nil");
      break;
    case tObject:
      printf("#<tObject:%p>", object);
      break;
  }
}
Example #7
0
Object* Object_new(ObjectType* type) {

	Object* op = NULL;
	op = malloc(sizeof(Object));
	if (!op) {
		return NULL;
	}
	
	op->type = type;
	if (type->size == 0) {
		op->data = NULL;
		fprintf(stderr, "Object requested no space\n\t");
		Object_print(op);
	}
	else {
		op->data = malloc(type->size);
		if (!op->data) {
			// TODO: dealloc op
			return NULL;
		}
	}
	
	return op;
}