mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 00:14:32 -08:00
This change adds a new interface DSL for specifying objects (with methods) and interfaces (that expose objects, and optionally have their own methods). Significant changes: - Add the new scripts/definitions Python module to parse the DSL - Add the new definitions directory containing DSL definition files - Use cog to generate syscall-related code in kernel and libj6 - Unify ordering of pointer + length pairs in interfaces
26 lines
764 B
C
26 lines
764 B
C
#pragma once
|
|
|
|
#include <j6/types.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
{% macro argument(type, name, first, options=False) -%}
|
|
{%- for ctype, suffix in type.c_names(options) -%}
|
|
{%- if not first or not loop.first %}, {% endif %}{{ ctype }} {{ name }}{{ suffix }}
|
|
{%- endfor -%}
|
|
{%- endmacro %}
|
|
|
|
{% for id, scope, method in interface.methods %}
|
|
j6_status_t __syscall_{% if scope %}{{ scope.name }}_{% endif %}{{ method.name }} (
|
|
{%- if not method.static -%}{{ argument(scope.reftype, "self", True) }}{% endif -%}
|
|
{%- set first = method.static -%}
|
|
{%- for param in method.params %}{{ argument(param.type, param.name, first, options=param.options) }}{% set first = False %}{% endfor -%}
|
|
);
|
|
{% endfor %}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|