示例#1
0
static void process_js(char *cmd) {
  s_sjp.char_processor = interrupt_char_processor;
  v7_val_t v;
  int res = v7_exec(s_sjp.v7, &v, cmd);

  if (res == V7_SYNTAX_ERROR) {
    printf("Syntax error: %s\n", v7_get_parser_error(s_sjp.v7));
  } else if (res == V7_STACK_OVERFLOW) {
    printf("Stack overflow: %s\n", v7_get_parser_error(s_sjp.v7));
  } else {
    if (res == V7_EXEC_EXCEPTION) {
      printf("Exec error:");
    }

    v7_println(s_sjp.v7, v);

#if V7_ENABLE__StackTrace
    if (res == V7_EXEC_EXCEPTION) {
      v7_fprint_stack_trace(stdout, s_sjp.v7, v);
    }
#endif
  }

  v7_gc(s_sjp.v7, 0 /* full */);
}
示例#2
0
static void process_js(char *cmd) {
  s_sjp.char_processor = interrupt_char_processor;
  char result_str[10];
  v7_val_t v;
  int res = v7_exec(s_sjp.v7, &v, cmd);

  if (res == V7_SYNTAX_ERROR) {
    printf("Syntax error: %s\n", v7_get_parser_error(s_sjp.v7));
  } else if (res == V7_STACK_OVERFLOW) {
    printf("Stack overflow: %s\n", v7_get_parser_error(s_sjp.v7));
  } else {
    char *p = v7_to_json(s_sjp.v7, v, result_str, sizeof(result_str));

    if (res == V7_EXEC_EXCEPTION) {
      printf("Exec error:");
    }

    printf("%s\n", p);

    if (p != result_str) {
      free(p);
    }
  }

  v7_gc(s_sjp.v7, 0 /* full */);
}
示例#3
0
static void server_eval(struct espconn *c, void *body, unsigned short size) {
  char *buf, *resp, *j;
  enum v7_err err;
  v7_val_t v;
  const char *code;

  buf = malloc(size + 1);
  snprintf(buf, size + 1, "%.*s", (int) size, body);
  err = v7_exec(v7, &v, buf);

  switch (err) {
    case V7_SYNTAX_ERROR:
    case V7_EXEC_EXCEPTION:
      code = "500 Eval error";
      break;
    case V7_OK:
      code = "200 OK";
      break;
  }

  switch (err) {
    case V7_SYNTAX_ERROR:
      j = malloc(512);
      strncpy(j, v7_get_parser_error(v7), 512);
      break;
    case V7_EXEC_EXCEPTION:
    case V7_OK:
      j = v7_to_json(v7, v, buf, sizeof(buf));
      break;
  }

  int resp_len = strlen(code) + 13 + strlen(j) + 1;
  resp = malloc(resp_len);
  snprintf(resp, resp_len, "HTTP/1.1 %s\r\n\r\n%s", code, j);

  if (j != buf) free(j);
  free(buf);

  espconn_sent(c, resp, strlen(resp));
  free(resp);
}