コード例 #1
0
ファイル: method.c プロジェクト: tundra/neutrino
static value_t call_data_get(builtin_arguments_t *args) {
  value_t self = get_builtin_subject(args);
  CHECK_FAMILY(ofCallData, self);
  value_t needle = get_builtin_argument(args, 0);
  value_t tags = get_call_data_tags(self);
  for (int64_t i = 0; i < get_call_tags_entry_count(tags); i++) {
    value_t tag = get_call_tags_tag_at(tags, i);
    if (value_identity_compare(needle, tag))
      return get_call_data_value_at(self, i);
  }
  ESCAPE_BUILTIN(args, no_such_tag, needle);
}
コード例 #2
0
ファイル: method.c プロジェクト: tundra/neutrino
void print_invocation_on(value_t tags, frame_t *frame, string_buffer_t *buf) {
  int64_t arg_count = get_call_tags_entry_count(tags);
  string_buffer_printf(buf, "{");
  for (int64_t i = 0;  i < arg_count; i++) {
    value_t tag = get_call_tags_tag_at(tags, i);
    value_t arg = frame_get_pending_argument_at(frame, tags, i);
    if (i > 0)
      string_buffer_printf(buf, ", ");
    string_buffer_printf(buf, "%v: %v", tag, arg);
  }
  string_buffer_printf(buf, "}");
}
コード例 #3
0
ファイル: method.c プロジェクト: tundra/neutrino
void call_tags_print_on(value_t self, print_on_context_t *context) {
  string_buffer_printf(context->buf, "{");
  int64_t arg_count = get_call_tags_entry_count(self);
  for (int64_t i = 0; i < arg_count; i++) {
    if (i > 0)
      string_buffer_printf(context->buf, ", ");
    value_t tag = get_call_tags_tag_at(self, i);
    size_t offset = (size_t) get_call_tags_offset_at(self, i);
    value_print_inner_on(tag, context, -1);
    string_buffer_printf(context->buf, "@%i", offset);
  }
  string_buffer_printf(context->buf, "}");
}
コード例 #4
0
ファイル: interp.c プロジェクト: plesner/neutrino
static void log_lookup_error(value_t condition, value_t tags, frame_t *frame) {
    size_t arg_count = get_call_tags_entry_count(tags);
    string_buffer_t buf;
    string_buffer_init(&buf);
    string_buffer_printf(&buf, "%v: {", condition);
    for (size_t i = 0; i < arg_count; i++) {
        if (i > 0)
            string_buffer_printf(&buf, ", ");
        value_t tag = get_call_tags_tag_at(tags, i);
        value_t value = frame_get_pending_argument_at(frame, tags, i);
        string_buffer_printf(&buf, "%v: %v", tag, value);
    }
    string_buffer_printf(&buf, "}");
    string_t str;
    string_buffer_flush(&buf, &str);
    ERROR("%s", str.chars);
    string_buffer_dispose(&buf);
}