Example #1
0
 oop set_sic_params_prim(oop r, char* which, objVectorOop params, void* FH) {
   ResourceMark rm;
   IntBList* l = stringToList(which);
   if (!l) {
     failure(FH, SIC_PARAMS_ERROR_MSG);
     return 0;
   }
   fint len = params->length();
   fint *n= NEW_RESOURCE_ARRAY(fint, len);
   fint i;
   for (i = 0; i < len; i++) {
     oop param = params->obj_at(i);
     if (!param->is_smi() || smiOop(param)->value() < 1) {
       char msg[BUFSIZ];
       sprintf(msg, "arg2[%ld]: invalid parameter (not a positive integer)",
               long(i));
       failure(FH, msg);
       return 0;
     }
     n[i] = smiOop(param)->value();
   }
   oop res = get_sic_params_prim(r, which, NULL);
   l->clear();
   for (i = 0; i < len; i++) l->push(n[i]);
   return res;
 }
Example #2
0
oop processOopClass::TWAINS_prim(objVectorOop resultArg, 
                                 bool stepping, oop stop, void *FH) {
  if (SignalInterface::are_self_signals_blocked())
    warning("_TWAINS: signals are blocked (with _BlockSignals)");
  
  Process* proc= TWAINS_receiver_check(FH);
  if (proc == NULL) return NULL;
  if (!TWAINS_result_vector_check( resultArg, FH)) return NULL;
  vframeOop stop_vfo= TWAINS_stop_activation_check(proc, stop, FH);
  if (stop_vfo == vframeOop(badOop)) return NULL;
  if (!TWAINS_parallel_check(FH)) return NULL;

  preemptCause = cNoCause;
  twainsProcess = currentProcess;
  if (PendingSelfSignals::are_any_pending() && !SignalInterface::are_self_signals_blocked()) {
    // return immediately - have unhandled signals
    preemptCause = cSignal;
  }
  else if (proc != twainsProcess) {
    TWAINS_transfer_to_another_process(proc, resultArg, stepping, stop_vfo);
  }
  else {
    TWAINS_await_signal();
  }
  twainsProcess = NULL;
  
  oop res = get_result(resultArg);
  LOG_EVENT3("TWAINS: res = %#lx { %#lx, %#lx, ... }", res,
             resultArg->obj_at(0), resultArg->obj_at(1));
  preemptCause = cNoCause;
  return res;
}
Example #3
0
int32 LabelSet::RecordLabelVectorInfo( AbstractByteCode* b, objVectorOop labels,
                                       int32 sd, int32 bci) {
  objVectorOop pcs= labels->clone(); // want same size as labels
  for (int32 i = 0,  n = labels->length();  i < n;  ++i)
    if ( RecordLabelInfo( b, labels->obj_at(i), sd, indexedBranch, bci ) == -1)
      return -1;
  return b->GenLiteral(pcs);
}  
Example #4
0
oop ByteCode::create_block_method_prim(oop ignore,
                                       byteVectorOop bv,
                                       objVectorOop lits,
                                       stringOop file,
                                       smiOop line,
                                       stringOop source) {
  Unused(ignore);
  ResourceMark rm;

  if (bv->length() == 0)
    return ErrorCodes::general_prim_error("Error: empty byte code vector");

  smi errorIndex;
  IntBList* stack_deltas;
  const char* errorMsg = methodMap::check_byteCodes_and_literals( errorIndex, 
                                                                  stack_deltas,
                                                                  bv, lits );
  if ( errorMsg ) {
    char buf[BUFSIZ];
    (void) sprintf(buf, "Error: bad byte code at: %d <%s>",
                   errorIndex, errorMsg);
    return ErrorCodes::general_prim_error(buf);
  }
  // clone bv & lits for cheap insurance
  ByteCode b(false, new_string(bv->bytes(), bv->length()),
             lits->clone(), file, line, source);
  oop m = create_blockMethod(NULL, &b, "", stack_deltas);

  return m->as_mirror();
}
Example #5
0
static bool convertFloatObjVector( objVectorOop v, const char* prinName, void* FH, float*& floats, uint32& count) {
  count = v->length();
  floats = NEW_RESOURCE_ARRAY(float, count);
  int badI = -1;
  for (int i = 0;  i < count;  ++i) {
    oop o = v->obj_at(i);
    floats[i] = o->is_float() ? floatOop(o)->value()
              : o->is_smi()   ? smiOop(o)->value()
              : ((badI = i), (i = count), 0.0);
  }
  if (badI != -1) {
    static char buf[1000];
    sprintf(buf, "%s failed: bad oop at: %d", prinName, badI);
    failure(FH, buf);
    return false;
  }
  return true;
}
Example #6
0
bool processOopClass::TWAINS_result_vector_check(objVectorOop resultArg,
                                                 void* FH) {
  if (resultArg->length_obj_array() >= PendingSelfSignals::Self_result_size()) {
    return true;
  } else {
    prim_failure(FH, PRIMITIVEFAILEDERROR);
    return false;
  }
}
Example #7
0
oop processOopClass::NewProcess_prim(smi stackSize, oop rcvr, stringOop sel, 
                                     objVectorOop args, void *FH) {
  ResourceMark rm;
  char *selector = sel->copy_null_terminated();
  if (stackSize <= 0 || str_arg_count(selector) > args->length()) {
    prim_failure(FH, PRIMITIVEFAILEDERROR);
    return NULL;
  }
  Process* p;
  p = new Process(this, stackSize, rcvr, sel, args);
  return p->processObj();
}
Example #8
0
bool LabelSet::ResolveLabel( AbstractByteCode* b,
                             oop lbl, objVectorOop pcs, int32 i) {
  static char buf[BUFSIZ];
  LabelInfo* li = at(lbl);
  if ( li == NULL  ||  !li->isDefined) { 
      char psb[BUFSIZ];
      lbl->print_string(psb);
      b->errorMessage = buf;
      sprintf(buf, "Label %s is undefined", psb);
    return false;
  }
  pcs->obj_at_put(i, as_smiOop(li->bci));
  return true;
}