Ejemplo n.º 1
0
int
gen_new_default(struct value *gen)
{
    struct value tuple, code_sym;

    value_symbol_new(&code_sym, "code", 4);
    value_tuple_new(&tuple, &code_sym, 8192);
    return gen_new(gen, &tuple, 0);
}
Ejemplo n.º 2
0
int main(int argc, char **argv) {
  gen = gen_new(1);

  hello();

  printf("\n");
  compile_test();

  printf("\n");
  test();

  return 0;
}
Ejemplo n.º 3
0
void Compiler::handle_ik_obj(const JInst& jinst) {
    jtype jt = jvoid;
    bool store = false;
    switch(jinst.opcode) {
    case OPCODE_IASTORE:    store = true;
    case OPCODE_IALOAD:     jt = i32;       break;
    case OPCODE_LASTORE:    store = true;
    case OPCODE_LALOAD:     jt = i64;       break;
    case OPCODE_FASTORE:    store = true;
    case OPCODE_FALOAD:     jt = flt32;     break;
    case OPCODE_DASTORE:    store = true;
    case OPCODE_DALOAD:     jt = dbl64;     break;
    case OPCODE_AASTORE:    store = true;
    case OPCODE_AALOAD:     jt = jobj;      break;
    case OPCODE_BASTORE:    store = true;
    case OPCODE_BALOAD:     jt = i8;        break;
    case OPCODE_CASTORE:    store = true;
    case OPCODE_CALOAD:     jt = u16;       break;
    case OPCODE_SASTORE:    store = true;
    case OPCODE_SALOAD:     jt = i16;       break;
    default: break;
    }
    if (jt != jvoid) {
        // that was indeed *aload/*astore
        if (store) {
            gen_arr_store(jt);
        }
        else {
            gen_arr_load(jt);
        }
        return;
    }

    switch(jinst.opcode) {
    case OPCODE_NEW:
        gen_new(m_klass, (unsigned short)jinst.op0);
        break;
    case OPCODE_PUTSTATIC:
    case OPCODE_GETSTATIC:
    case OPCODE_PUTFIELD:
    case OPCODE_GETFIELD:
        gen_field_op(jinst.opcode, m_klass, (unsigned short)jinst.op0);
        break;
    case OPCODE_ARRAYLENGTH:
        gen_array_length();
        break;
    case OPCODE_ANEWARRAY:
        gen_new_array(m_klass, (unsigned short)jinst.op0);
        break;
    case OPCODE_NEWARRAY:
        {
        VM_Data_Type atype;
        switch(jinst.op0) {
        case 4: atype = VM_DATA_TYPE_BOOLEAN; break;
        case 5: atype = VM_DATA_TYPE_CHAR; break;
        case 6: atype = VM_DATA_TYPE_F4; break;
        case 7: atype = VM_DATA_TYPE_F8; break;
        case 8: atype = VM_DATA_TYPE_INT8; break;
        case 9: atype = VM_DATA_TYPE_INT16; break;
        case 10: atype = VM_DATA_TYPE_INT32; break;
        case 11: atype = VM_DATA_TYPE_INT64; break;
        default:    assert(false); atype = VM_DATA_TYPE_INVALID; break;
        }
        Class_Handle elem_class = class_get_class_of_primitive_type(atype);
        Class_Handle array_class = class_get_array_of_class(elem_class);
        Allocation_Handle ah = class_get_allocation_handle(array_class);
        gen_new_array(ah);
        }
        break;
    case OPCODE_MULTIANEWARRAY:
        gen_multianewarray(m_klass, (unsigned short)jinst.op0, jinst.op1);
        break;
    case OPCODE_MONITORENTER:
    case OPCODE_MONITOREXIT:
        gen_monitor_ee();
        break;
    case OPCODE_CHECKCAST:
    case OPCODE_INSTANCEOF:
        gen_instanceof_cast(jinst.opcode, m_klass, (unsigned short)jinst.op0);
        break;
    default: assert(false); break;
    }
}