microlisp 0.1.0
A small Scheme-subset interpreter in modern C.
Loading...
Searching...
No Matches
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
primitives.c File Reference
#include "microlisp_internal.h"
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Include dependency graph for primitives.c:

Data Structures

struct  prim_decl
 

Macros

#define EXPECT_FIX(state, v, what)
 
#define DEFINE_PREDICATE(name, expr)
 

Typedefs

typedef struct prim_decl prim_decl
 

Enumerations

enum  cmp_op {
  CMP_EQ , CMP_LT , CMP_GT , CMP_LE ,
  CMP_GE
}
 

Functions

static int fits_fixnum (int64_t v)
 
static microlisp_status prim_add (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_sub (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_mul (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_div (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_quotient (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_remainder (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_modulo (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status cmp_chain (ml_state *s, size_t argc, const mvalue *argv, cmp_op op, const char *name, mvalue *out)
 
static microlisp_status prim_num_eq (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_num_lt (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_num_gt (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_num_le (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_num_ge (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_cons (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_car (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_cdr (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_list (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_length (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_eq_p (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_eqv_p (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_equal_p (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_not (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status state_output_sink (const void *bytes, size_t len, void *user)
 
static microlisp_status state_output_flush (ml_state *s)
 
static microlisp_status prim_display (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_write (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_newline (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
static microlisp_status prim_error (ml_state *s, size_t argc, const mvalue *argv, mvalue *out)
 
microlisp_status ml_primitives_install (ml_state *s, mvalue env)
 

Variables

static const prim_decl k_primitives []
 

Macro Definition Documentation

◆ DEFINE_PREDICATE

#define DEFINE_PREDICATE (   name,
  expr 
)
Value:
static microlisp_status prim_##name(ml_state *s, size_t argc, const mvalue *argv, \
mvalue *out) { \
(void)s; \
(void)argc; \
*out = ml_make_bool(expr); \
return MICROLISP_OK; \
}
microlisp_status
Error and status codes returned by every fallible API entry point.
Definition microlisp.h:71
@ MICROLISP_OK
Success.
Definition microlisp.h:73
static mvalue ml_make_bool(int b)
Definition microlisp_internal.h:113
uintptr_t mvalue
Definition microlisp_internal.h:43
Definition microlisp_internal.h:267

◆ EXPECT_FIX

#define EXPECT_FIX (   state,
  v,
  what 
)
Value:
do { \
if (!ml_is_fix(v)) { \
ml_set_error((state), 0, 0, "%s: expected number", (what)); \
} \
} while (0)
@ MICROLISP_ERR_TYPE
Evaluator received a value of the wrong type – e.g.
Definition microlisp.h:99
static int ml_is_fix(mvalue v)
Definition microlisp_internal.h:94

Typedef Documentation

◆ prim_decl

typedef struct prim_decl prim_decl

Enumeration Type Documentation

◆ cmp_op

enum cmp_op
Enumerator
CMP_EQ 
CMP_LT 
CMP_GT 
CMP_LE 
CMP_GE 

Function Documentation

◆ cmp_chain()

static microlisp_status cmp_chain ( ml_state s,
size_t  argc,
const mvalue argv,
cmp_op  op,
const char *  name,
mvalue out 
)
static

◆ fits_fixnum()

static int fits_fixnum ( int64_t  v)
static

◆ ml_primitives_install()

microlisp_status ml_primitives_install ( ml_state s,
mvalue  env 
)

◆ prim_add()

static microlisp_status prim_add ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_car()

static microlisp_status prim_car ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_cdr()

static microlisp_status prim_cdr ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_cons()

static microlisp_status prim_cons ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_display()

static microlisp_status prim_display ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_div()

static microlisp_status prim_div ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_eq_p()

static microlisp_status prim_eq_p ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_equal_p()

static microlisp_status prim_equal_p ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_eqv_p()

static microlisp_status prim_eqv_p ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_error()

static microlisp_status prim_error ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_length()

static microlisp_status prim_length ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_list()

static microlisp_status prim_list ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_modulo()

static microlisp_status prim_modulo ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_mul()

static microlisp_status prim_mul ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_newline()

static microlisp_status prim_newline ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_not()

static microlisp_status prim_not ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_num_eq()

static microlisp_status prim_num_eq ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_num_ge()

static microlisp_status prim_num_ge ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_num_gt()

static microlisp_status prim_num_gt ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_num_le()

static microlisp_status prim_num_le ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_num_lt()

static microlisp_status prim_num_lt ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_quotient()

static microlisp_status prim_quotient ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_remainder()

static microlisp_status prim_remainder ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_sub()

static microlisp_status prim_sub ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ prim_write()

static microlisp_status prim_write ( ml_state s,
size_t  argc,
const mvalue argv,
mvalue out 
)
static

◆ state_output_flush()

static microlisp_status state_output_flush ( ml_state s)
static

◆ state_output_sink()

static microlisp_status state_output_sink ( const void *  bytes,
size_t  len,
void *  user 
)
static

Variable Documentation

◆ k_primitives

const prim_decl k_primitives[]
static