Cthulhu  0.2.10
Cthulhu compiler collection
query_ast.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-only
2 
3 #pragma once
4 #include <ctu_json_api.h>
5 
6 #include "core/text.h"
7 
8 #include <gmp.h>
9 
10 typedef struct scan_t scan_t;
11 typedef struct node_t node_t;
12 typedef struct query_ast_t query_ast_t;
13 
14 typedef enum query_ast_type_t
15 {
16  eQueryObject, // object
17  eQueryField, // field.name
18  eQueryMap, // field["name"]
19  eQueryIndex, // field[0]
20 
23 
24 typedef struct query_ast_t
25 {
27 
28  union {
29  struct {
31  union {
32  /* eQueryField, eQueryMap */
34 
35  /* eQueryIndex */
36  mpz_t index;
37  };
38  };
39 
40  /* eQueryObject */
42  };
43 } query_ast_t;
44 
46 
48 query_ast_t *query_ast_field(scan_t *scan, query_ast_t *object, text_t field);
49 query_ast_t *query_ast_map(scan_t *scan, query_ast_t *object, text_t field);
50 query_ast_t *query_ast_index(scan_t *scan, query_ast_t *object, mpz_t index);
#define CT_BEGIN_API
Definition: compiler.h:129
query_ast_t * query_ast_field(scan_t *scan, query_ast_t *object, text_t field)
Definition: query_ast.c:29
query_ast_type_t
Definition: query_ast.h:15
@ eQueryObject
Definition: query_ast.h:16
@ eQueryIndex
Definition: query_ast.h:19
@ eQueryCount
Definition: query_ast.h:21
@ eQueryField
Definition: query_ast.h:17
@ eQueryMap
Definition: query_ast.h:18
CT_BEGIN_API query_ast_t * query_ast_object(scan_t *scan, text_t name)
Definition: query_ast.c:19
query_ast_t * query_ast_index(scan_t *scan, query_ast_t *object, mpz_t index)
Definition: query_ast.c:41
query_ast_t * query_ast_map(scan_t *scan, query_ast_t *object, text_t field)
Definition: query_ast.c:49
a position in a source file
Definition: node.h:23
query_ast_type_t kind
Definition: query_ast.h:26
text_t name
Definition: query_ast.h:41
mpz_t index
Definition: query_ast.h:36
text_t field
Definition: query_ast.h:33
query_ast_t * object
Definition: query_ast.h:30
a source file scanner
Definition: scan.h:24
a range of text
Definition: text.h:14