GraphQL-Houtou
view release on metacpan or search on metacpan
lib/GraphQL/Houtou.xs view on Meta::CPAN
OUTPUT:
RETVAL
SV *
load_native_runtime_xs(runtime_schema)
SV *runtime_schema
CODE:
{
gql_runtime_vm_native_runtime_t *runtime =
gql_runtime_vm_native_runtime_from_runtime_schema_sv(aTHX_ runtime_schema);
SV *inner = newSVuv(PTR2UV(runtime));
RETVAL = newRV_noinc(inner);
sv_bless(RETVAL, gv_stashpv("GraphQL::Houtou::Runtime::NativeRuntime", GV_ADD));
}
OUTPUT:
RETVAL
SV *
native_runtime_summary_xs(runtime_sv)
SV *runtime_sv
CODE:
{
gql_runtime_vm_native_runtime_t *runtime;
HV *hv;
if (!runtime_sv || !SvROK(runtime_sv) || !sv_derived_from(runtime_sv, "GraphQL::Houtou::Runtime::NativeRuntime")) {
croak("expected a GraphQL::Houtou::Runtime::NativeRuntime");
}
runtime = INT2PTR(gql_runtime_vm_native_runtime_t *, SvUV(SvRV(runtime_sv)));
if (!runtime) {
croak("native VM runtime handle is no longer valid");
}
hv = newHV();
hv_store(hv, "runtime_slot_count", 18, newSViv(runtime->runtime_slot_count), 0);
hv_store(hv, "has_slot_type_objects", 21, newSViv(runtime->callback_catalog && runtime->callback_catalog->slot_type_objects ? 1 : 0), 0);
hv_store(hv, "has_tag_dispatch_tables", 23, newSViv(runtime->callback_catalog && runtime->callback_catalog->slot_tag_entries ? 1 : 0), 0);
hv_store(hv, "has_possible_type_entries", 25, newSViv(runtime->callback_catalog && runtime->callback_catalog->slot_possible_type_entries ? 1 : 0), 0);
RETVAL = newRV_noinc((SV *)hv);
}
OUTPUT:
RETVAL
int
program_native_eligible_xs(program, has_promise = 0)
SV *program
int has_promise
CODE:
RETVAL = gql_runtime_vm_program_is_native_eligible_sv(aTHX_ program, has_promise);
OUTPUT:
RETVAL
void
resolve_runtime_type_xs(dispatch, runtime_cache, value, context, info, abstract_type)
SV *dispatch
SV *runtime_cache
SV *value
SV *context
SV *info
SV *abstract_type
PPCODE:
{
SV *error = NULL;
SV *runtime_type = gql_runtime_vm_resolve_runtime_type_sv(
aTHX_ dispatch, runtime_cache, value, context, info, abstract_type, &error
);
EXTEND(SP, 2);
PUSHs(sv_2mortal(runtime_type ? runtime_type : newSV(0)));
PUSHs(sv_2mortal(error ? error : newSV(0)));
}
void
resolve_runtime_type_for_abstract_xs(runtime_cache, abstract_name, value, context, info, abstract_type)
SV *runtime_cache
SV *abstract_name
SV *value
SV *context
SV *info
SV *abstract_type
PPCODE:
{
SV *error = NULL;
STRLEN abstract_name_len = 0;
const char *abstract_name_pv = (abstract_name && SvOK(abstract_name))
? SvPV(abstract_name, abstract_name_len)
: NULL;
SV *runtime_type = gql_runtime_vm_resolve_runtime_type_for_abstract_sv(
aTHX_ runtime_cache, abstract_name_pv, value, context, info, abstract_type, &error
);
EXTEND(SP, 2);
PUSHs(sv_2mortal(runtime_type ? runtime_type : newSV(0)));
PUSHs(sv_2mortal(error ? error : newSV(0)));
}
SV *
outcome_scalar_xs(value, error_records = &PL_sv_undef)
SV *value
SV *error_records
CODE:
RETVAL = gql_runtime_vm_new_handle_sv(
aTHX_
"GraphQL::Houtou::Runtime::Outcome",
gql_runtime_vm_new_outcome_struct(aTHX_ GQL_VM_KIND_SCALAR, value, error_records)
);
OUTPUT:
RETVAL
SV *
outcome_object_xs(value, error_records = &PL_sv_undef)
SV *value
SV *error_records
CODE:
RETVAL = gql_runtime_vm_new_handle_sv(
aTHX_
"GraphQL::Houtou::Runtime::Outcome",
gql_runtime_vm_new_outcome_struct(aTHX_ GQL_VM_KIND_OBJECT, value, error_records)
);
OUTPUT:
RETVAL
SV *
outcome_list_xs(value, error_records = &PL_sv_undef)
SV *value
SV *error_records
CODE:
RETVAL = gql_runtime_vm_new_handle_sv(
aTHX_
"GraphQL::Houtou::Runtime::Outcome",
gql_runtime_vm_new_outcome_struct(aTHX_ GQL_VM_KIND_LIST, value, error_records)
);
OUTPUT:
RETVAL
SV *
wrap_object_outcome_callback_xs(...)
CODE:
{
SV *value = items > 0 ? ST(0) : &PL_sv_undef;
RETVAL = gql_runtime_vm_new_outcome_handle_sv(
aTHX_
lib/GraphQL/Houtou.xs view on Meta::CPAN
OUTPUT:
RETVAL
SV *
promise_xs_flatten_all_callback_xs(...)
PREINIT:
AV *flattened_av;
I32 i;
CODE:
{
flattened_av = newAV();
for (i = 0; i < items; i++) {
SV *row_sv = ST(i) ? ST(i) : &PL_sv_undef;
if (row_sv && SvROK(row_sv) && SvTYPE(SvRV(row_sv)) == SVt_PVAV) {
AV *row_av = (AV *)SvRV(row_sv);
if (av_len(row_av) == 0) {
SV **item_svp = av_fetch(row_av, 0, 0);
av_push(flattened_av, newSVsv((item_svp && *item_svp) ? *item_svp : &PL_sv_undef));
} else {
av_push(flattened_av, newSVsv(row_sv));
}
} else {
av_push(flattened_av, newSVsv(row_sv));
}
}
RETVAL = newRV_noinc((SV *)flattened_av);
}
OUTPUT:
RETVAL
SV *
identity_callback_xs(...)
CODE:
{
SV *resolved_sv = items > 0 && ST(0) ? ST(0) : &PL_sv_undef;
SvREFCNT_inc_simple_NN(resolved_sv);
RETVAL = resolved_sv;
}
OUTPUT:
RETVAL
SV *
writer_new_xs(class)
SV *class
CODE:
PERL_UNUSED_ARG(class);
RETVAL = gql_runtime_vm_new_handle_sv(
aTHX_
"GraphQL::Houtou::Runtime::Writer",
gql_runtime_vm_new_writer_struct(aTHX)
);
OUTPUT:
RETVAL
void
consume_outcome_xs(writer, data, result_name, outcome)
SV *writer
SV *data
SV *result_name
SV *outcome
PPCODE:
{
HV *data_hv = NULL;
gql_runtime_vm_writer_t *writer_state = gql_runtime_vm_expect_writer(aTHX_ writer);
gql_runtime_vm_outcome_t *outcome_state = gql_runtime_vm_expect_outcome(aTHX_ outcome);
if (data && SvOK(data) && SvROK(data) && SvTYPE(SvRV(data)) == SVt_PVHV) {
data_hv = (HV *)SvRV(data);
}
gql_runtime_vm_consume_outcome_struct(aTHX_ data_hv, result_name, outcome_state, writer_state);
}
SV *
outcome_kind_xs(outcome)
SV *outcome
CODE:
RETVAL = gql_runtime_vm_outcome_kind_sv(aTHX_ gql_runtime_vm_expect_outcome(aTHX_ outcome));
OUTPUT:
RETVAL
SV *
outcome_value_xs(outcome)
SV *outcome
CODE:
{
gql_runtime_vm_outcome_t *state = gql_runtime_vm_expect_outcome(aTHX_ outcome);
RETVAL = state->value ? gql_runtime_vm_native_value_materialize_sv(aTHX_ state->value) : newSV(0);
}
OUTPUT:
RETVAL
SV *
outcome_error_records_xs(outcome)
SV *outcome
CODE:
{
gql_runtime_vm_outcome_t *state = gql_runtime_vm_expect_outcome(aTHX_ outcome);
AV *ret = newAV();
IV i;
for (i = 0; i < state->error_record_count; i++) {
gql_runtime_vm_error_record_incref(state->error_records[i]);
av_push(ret, gql_runtime_vm_new_handle_sv(aTHX_ "GraphQL::Houtou::Runtime::ErrorRecord", state->error_records[i]));
}
RETVAL = newRV_noinc((SV *)ret);
}
OUTPUT:
RETVAL
SV *
writer_error_records_xs(writer)
SV *writer
CODE:
{
gql_runtime_vm_writer_t *state = gql_runtime_vm_expect_writer(aTHX_ writer);
AV *ret = newAV();
IV i;
for (i = 0; i < state->error_record_count; i++) {
gql_runtime_vm_error_record_incref(state->error_records[i]);
av_push(ret, gql_runtime_vm_new_handle_sv(aTHX_ "GraphQL::Houtou::Runtime::ErrorRecord", state->error_records[i]));
}
RETVAL = newRV_noinc((SV *)ret);
}
lib/GraphQL/Houtou.xs view on Meta::CPAN
OUTPUT:
RETVAL
SV *
lazy_info_hashref_xs(info_sv)
SV *info_sv
CODE:
{
gql_runtime_vm_lazy_info_t *info;
if (!info_sv || !SvROK(info_sv) || !sv_derived_from(info_sv, "GraphQL::Houtou::Runtime::LazyInfo")) {
croak("expected a GraphQL::Houtou::Runtime::LazyInfo");
}
info = INT2PTR(gql_runtime_vm_lazy_info_t *, SvUV(SvRV(info_sv)));
if (!info) {
croak("lazy info handle is no longer valid");
}
RETVAL = gql_runtime_vm_lazy_info_materialize_hash_sv(aTHX_ info);
}
OUTPUT:
RETVAL
SV *
block_frame_new_xs(class, values = &PL_sv_undef, pending_names = &PL_sv_undef, pending_outcomes = &PL_sv_undef)
SV *class
SV *values
SV *pending_names
SV *pending_outcomes
CODE:
{
gql_runtime_vm_block_frame_t *frame;
const char *pkg = SvPV_nolen(class);
frame = gql_runtime_vm_new_block_frame_struct(aTHX);
if (values && SvOK(values) && SvROK(values) && SvTYPE(SvRV(values)) == SVt_PVHV) {
gql_runtime_vm_native_value_destroy(aTHX_ frame->values_value);
frame->values_value = gql_runtime_vm_native_value_from_sv(aTHX_ values);
}
if (pending_names && SvOK(pending_names) && SvROK(pending_names) && SvTYPE(SvRV(pending_names)) == SVt_PVAV &&
pending_outcomes && SvOK(pending_outcomes) && SvROK(pending_outcomes) && SvTYPE(SvRV(pending_outcomes)) == SVt_PVAV) {
AV *names_av = (AV *)SvRV(pending_names);
AV *outcomes_av = (AV *)SvRV(pending_outcomes);
SSize_t i;
for (i = 0; i <= av_len(names_av); i++) {
SV **name_svp = av_fetch(names_av, i, 0);
SV **outcome_svp = av_fetch(outcomes_av, i, 0);
if (name_svp && *name_svp && outcome_svp && *outcome_svp && SvOK(*outcome_svp)) {
gql_runtime_vm_block_frame_push_pending(aTHX_ frame, *name_svp, *outcome_svp);
}
}
}
RETVAL = gql_runtime_vm_new_handle_sv(aTHX_ pkg, frame);
}
OUTPUT:
RETVAL
void
block_frame_add_pending_xs(frame, result_name, outcome)
SV *frame
SV *result_name
SV *outcome
PPCODE:
{
gql_runtime_vm_block_frame_t *state = gql_runtime_vm_expect_block_frame(aTHX_ frame);
gql_runtime_vm_block_frame_push_pending(aTHX_ state, result_name, outcome);
}
void
block_frame_consume_outcome_xs(frame, writer, result_name, outcome)
SV *frame
SV *writer
SV *result_name
SV *outcome
CODE:
{
gql_runtime_vm_block_frame_t *state = gql_runtime_vm_expect_block_frame(aTHX_ frame);
gql_runtime_vm_writer_t *writer_state;
STRLEN result_name_len = 0;
const char *result_name_pv = NULL;
if (!outcome || !SvOK(outcome)) {
XSRETURN_EMPTY;
}
writer_state = gql_runtime_vm_expect_writer(aTHX_ writer);
result_name_pv = (result_name && SvOK(result_name)) ? SvPV(result_name, result_name_len) : "";
gql_runtime_vm_consume_outcome_native_object(
aTHX_
state->values_value,
result_name_pv,
0,
gql_runtime_vm_expect_outcome(aTHX_ outcome),
writer_state
);
}
SV *
block_frame_values_xs(frame)
SV *frame
CODE:
{
gql_runtime_vm_block_frame_t *state = gql_runtime_vm_expect_block_frame(aTHX_ frame);
RETVAL = gql_runtime_vm_native_value_materialize_sv(aTHX_ state->values_value);
}
OUTPUT:
RETVAL
SV *
block_frame_finalize_xs(frame, writer)
SV *frame
SV *writer
CODE:
{
gql_runtime_vm_block_frame_t *state = gql_runtime_vm_expect_block_frame(aTHX_ frame);
gql_runtime_vm_writer_t *writer_state = gql_runtime_vm_expect_writer(aTHX_ writer);
RETVAL = gql_runtime_vm_block_frame_finalize_sv(
aTHX_
state,
GQL_VM_PROMISE_BACKEND_PROMISE_XS,
writer_state,
&PL_sv_undef,
0
);
}
( run in 0.563 second using v1.01-cache-2.11-cpan-92ad3014f07 )