示例#1
0
static void dump_addrinfo (struct connectdata *conn, const struct addrinfo *ai)
{
  TRACE(("dump_addrinfo:\n"));
  for ( ; ai; ai = ai->ai_next) {
    char  buf [INET6_ADDRSTRLEN];

    trace_it("    fam %2d, CNAME %s, ",
             ai->ai_family, ai->ai_canonname ? ai->ai_canonname : "<none>");
    if (Curl_printable_address(ai, buf, sizeof(buf)))
      trace_it("%s\n", buf);
    else
      trace_it("failed; %s\n", Curl_strerror(conn, SOCKERRNO));
  }
}
示例#2
0
文件: vm.c 项目: benhardy/vm2
void execute(bool trace) {
  int32_t x;
  int32_t y;
  int32_t opcode;
  bool fatal = false;
  while (ip < _code_size && !fatal) {
    opcode = _code[ip];
    if (trace) {
      trace_it(ip);
    }
    ip++;
    switch(opcode) {
      case I_STOP:
        return;
      case I_PUSH:
        _stack[++sp] = _code[ip++];
        break;
      case I_POP:
        sp--;
        break;
      case I_ADD:
        if (sp < 0) {
          printf("Stack underflow");
          fatal = true;
        } else {
          y = _stack[sp--];
          x = _stack[sp];
          _stack[sp] = x + y;
        }
        break;
      case I_MUL:
        if (sp < 0) {
          printf("Stack underflow");
          fatal = true;
        } else {
          y = _stack[sp--];
          x = _stack[sp];
          _stack[sp] = x * y;
        }
        break;
      case I_DIV:
        if (sp < 0) {
          printf("Stack underflow");
          fatal = true;
        } else {
          y = _stack[sp--];
          x= _stack[sp];
          _stack[sp] = x / y;
        }
        break;
      case I_MOD:
        if (sp < 0) {
          printf("Stack underflow");
          fatal = true;
        } else {
          y = _stack[sp--];
          x = _stack[sp];
          _stack[sp] = x % y;
        }
        break;
      case I_SUB:
        if (sp < 0) {
          printf("Stack underflow");
          fatal = true;
        } else {
          y = _stack[sp--];
          x = _stack[sp];
          _stack[sp] = x / y;
        }
        break;
      case I_INC:
        _stack[sp]++;
        break;
      case I_NEG:
        _stack[sp] = - _stack[sp];;
        break;
      case I_DEC:
        _stack[sp]--;
        break;
      case I_LOADPUSH:
        _stack[++sp] = _data[_code[ip++]];
        break;
      case I_POPSTORE:
        if (sp < 0) {
          printf("Stack underflow");
          fatal = true;
        } else {
          _data[_code[ip++]] = _stack[sp--];
        }
        break;
      case I_FRPUSH:
        y = fp + _code[ip++];
        _stack[++sp] = _stack[y];
        break;
      case I_FRPOP:
        if (sp < 0) {
          printf("Stack underflow");
          fatal = true;
        } else {
          y = fp + _code[ip++];
          _stack[y] = _stack[sp--];
        }
        break;
      case I_STORE:
        if (sp < 0) {
          printf("Stack underflow");
          fatal = true;
        } else {
          _data[_code[ip++]] = _stack[sp];
        }
        break;
      case I_JNZ:
        y = _code[ip++];
        if (_stack[sp]) {
          ip += y;
        }
        break;
      case I_JZ:
        y = _code[ip++];
        if (!_stack[sp]) {
          ip += y;
        }
        break;
      case I_JMP:
        y = _code[ip++];
        ip += y;
        break;
      case I_CALL: {
        int32_t dest = _code[ip++];
        int32_t arg_count = _code[ip++];
        int32_t old_sp = sp;
        _stack[++sp] = arg_count;
        _stack[++sp] = old_sp;;
        _stack[++sp] = ip;
        _stack[++sp] = fp;
        ip = dest;
        fp = sp + 1;
        break;
      }
      case I_RETURN: {
        int32_t return_value = _stack[sp--];
        int32_t old_fp = fp;
        sp = _stack[old_fp-3] - _stack[old_fp-4];
        ip = _stack[old_fp-2];
        fp = _stack[old_fp-1];
        _stack[++sp] = return_value;
        break;
      }
      default:
        printf("Failure: Invalid opcode %d", opcode);
        return;
    }
  }
}