mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
[project] Generate syscalls from new interface DSL
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
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
#pragma once
|
||||
/// \file {{filename}}
|
||||
{% if object.super %}
|
||||
|
||||
#include <j6/{{ object.super.name }}.hh>
|
||||
{% endif %}
|
||||
|
||||
namespace j6 {
|
||||
|
||||
{% if object.desc %}
|
||||
{{ object.desc|indent('/// ', first=True) }}
|
||||
{% endif %}
|
||||
class {{ object.name }}
|
||||
{% if object.super %} : public {{ object.super.name }}
|
||||
{% endif %}
|
||||
{
|
||||
public:
|
||||
{% 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 method in object.methods %}
|
||||
{% if method.desc %} /// {{ method.desc|indent(' /// ') }}{% endif %}
|
||||
{% for param in method.params %}
|
||||
{% if param.desc %} /// \arg {{ "%-10s"|format(param.name) }} {{ param.desc }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{%+ if method.static %}static {% endif %}j6_status_t {{ method.name }} (
|
||||
{%- for param in method.params %}{{ argument(param.type, param.name, loop.first, options=param.options) }}{% endfor -%});
|
||||
|
||||
{% endfor %}
|
||||
~{{ object.name }}();
|
||||
|
||||
private:
|
||||
{{ object.name }}(j6_handle_t handle) : m_handle {handle} {}
|
||||
j6_handle_t m_handle;
|
||||
}
|
||||
|
||||
} // namespace j6
|
||||
@@ -0,0 +1,25 @@
|
||||
#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
|
||||
|
||||
Reference in New Issue
Block a user