Serene Runtime 1.0.0
C runtime for the Serene programming language
Loading...
Searching...
No Matches
closures.h
Go to the documentation of this file.
1/* -*- C -*-
2 * Serene programming language
3 * Copyright (C) 2019-2026 Sameer Rahmani <[email protected]>
4 *
5 * This library is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public License
16 * along with this library. If not, see <https://www.gnu.org/licenses/>.
17 */
18#pragma once
19
20#include "serene/rt/abi.h"
21#include "serene/rt/core.h"
22#include "serene/utils.h"
23
24// -----------------------------------------------------------------------------
25// Closure
26// -----------------------------------------------------------------------------
27typedef struct srn_closure_t {
28 /// Entry point on the closure, duh!
30 /// The context in which this closure is defined. Context contains the
31 /// environment for fn's free bindings too.
33 /// How many args are needed for full application. ((uint32_t) -1) means
34 /// variadic
35 uint32_t arity;
36 // TODO(lxsameer): Can we use closures to model namespaces or packages? or
37 // other constructs? For example a namespace can be represented as a closure
38 // with the dependencies added to the environmet. A type of dependency
39 // injection. But this time we can hash the closure and handle dependencies
40 // based on the hash. Like how Unison does it on syntax level.
41 // uint32_t flags;
srn_value_t *(* srn_fnptr_t)(srn_context_t *ctx, srn_value_t *argv, uint32_t argc)
Definition core.h:46
srn_fnptr_t fn
Entry point on the closure, duh!
Definition closures.h:29
uint32_t arity
How many args are needed for full application.
Definition closures.h:35
srn_context_t * ctx
The context in which this closure is defined.
Definition closures.h:32