summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/reader.h
blob: 38d691817a1a5eba879135edac300e10999027a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#ifndef READER_H_
#define READER_H_

#include <gu/exn.h>
#include <gu/mem.h>
#include <gu/in.h>

// general reader interface

typedef struct {
	GuIn* in;
	GuExn* err;
	GuPool* opool;
	GuPool* tmp_pool;
	GuBuf* non_lexical_buf;
	struct PgfJitState* jit_state;
} PgfReader;

PgfReader*
pgf_new_reader(GuIn* in, GuPool* opool, GuPool* tmp_pool, GuExn* err);

uint8_t
pgf_read_tag(PgfReader* rdr);

uint32_t
pgf_read_uint(PgfReader* rdr);

int32_t
pgf_read_int(PgfReader* rdr);

GuString
pgf_read_string(PgfReader* rdr);

double
pgf_read_double(PgfReader* rdr);

size_t
pgf_read_len(PgfReader* rdr);

PgfCId
pgf_read_cid(PgfReader* rdr, GuPool* pool);

PgfPGF*
pgf_read_pgf(PgfReader* rdr);

void
pgf_reader_done(PgfReader* rdr, PgfPGF* pgf);


// JIT specific interface
#ifdef PGF_EVALUATOR_H_

typedef struct PgfJitState PgfJitState;

PgfJitState*
pgf_new_jit(PgfReader* rdr);

PgfEvalGates*
pgf_jit_gates(PgfReader* rdr);

void
pgf_jit_predicate(PgfReader* rdr, PgfAbstr* abstr,
                  PgfAbsCat* abscat);

void
pgf_jit_function(PgfReader* rdr, PgfAbstr* abstr,
                 PgfAbsFun* absfun);

void
pgf_jit_done(PgfReader* state, PgfAbstr* abstr);

#endif
#endif // READER_H_