xref: /Universal-ctags/dsl/optscript.h (revision 8cfef1a879a18aa3d2417e7a8fa3303e056b2db7)
1 /*
2 *   Copyright (c) 2020, Masatake YAMATO
3 *   Copyright (c) 2020, Red Hat, Inc.
4 *
5 *   This source code is released for free distribution under the terms of the
6 *   GNU General Public License version 2 or (at your option) any later version.
7 */
8 
9 #ifndef OPTSCRIPT_H
10 #define OPTSCRIPT_H
11 
12 #include "general.h"
13 
14 #include "es.h"
15 #include "mio.h"
16 #include "ptrarray.h"
17 
18 typedef struct sOptVM OptVM;
19 typedef EsObject* (* OptOperatorFn) (OptVM *, EsObject *);
20 
21 struct OptHelpExtender {
22 	void        (* add)          (ptrArray *, void *);
23 	const char* (* get_help_str) (EsObject *, void *);
24 };
25 
26 int       opt_init (void);
27 
28 OptVM    *opt_vm_new          (MIO *in, MIO *out, MIO *err);
29 void      opt_vm_delete       (OptVM *vm);
30 
31 EsObject *opt_vm_read         (OptVM *vm, MIO *in);
32 EsObject *opt_vm_eval         (OptVM *vm, EsObject *obj);
33 void      opt_vm_report_error (OptVM *vm, EsObject *eobj, MIO *err);
34 
35 void     *opt_vm_set_app_data (OptVM *vm, void *app_data);
36 void     *opt_vm_get_app_data (OptVM *vm);
37 
38 char     *opt_vm_set_prompt   (OptVM *vm, char *prompt);
39 void      opt_vm_print_prompt (OptVM *vm);
40 
41 int       opt_vm_help         (OptVM *vm, MIO *out,
42 							   struct OptHelpExtender *extop, void *data);
43 
44 void      opt_vm_clear       (OptVM *vm);
45 void      opt_vm_dstack_push (OptVM *vm, EsObject *dict);
46 void      opt_vm_dstack_pop  (OptVM *vm);
47 
48 EsObject*  opt_vm_ostack_top  (OptVM *vm);
49 EsObject*  opt_vm_ostack_peek  (OptVM *vm, int index_from_top);
50 EsObject*  opt_vm_ostack_pop  (OptVM *vm);
51 void       opt_vm_ostack_push (OptVM *vm, EsObject *obj);
52 unsigned int opt_vm_ostack_count (OptVM *vm);
53 
54 EsObject *opt_dict_new       (unsigned int size);
55 bool      opt_dict_known_and_get_cstr (EsObject *dict, const char* name, EsObject **val);
56 bool      opt_dict_foreach   (EsObject *dict, bool (* fn) (EsObject *, EsObject *, void*), void *data);
57 void      opt_dict_def       (EsObject *dict, EsObject *sym, EsObject *val);
58 bool      opt_dict_undef     (EsObject *dict, EsObject *sym);
59 void      opt_dict_clear     (EsObject *dict);
60 
61 EsObject *opt_array_new      (void);
62 EsObject *opt_array_get      (const EsObject *array, unsigned int index);
63 void      opt_array_put      (EsObject *array, unsigned int index, EsObject *obj);
64 void      opt_array_add      (EsObject *array, EsObject *elt);
65 
66 unsigned int opt_array_length(const EsObject *array);
67 
68 EsObject *opt_operator_new   (OptOperatorFn op, const char *name, int arity, const char *help_str);
69 
70 EsObject *opt_string_new_from_cstr (const char *cstr);
71 const char* opt_string_get_cstr (const EsObject *str);
72 
73 EsObject *opt_name_new_from_cstr (const char *cstr);
74 const char* opt_name_get_cstr (const EsObject *name);
75 
76 extern EsObject *OPT_ERR_TYPECHECK;
77 extern EsObject *OPT_ERR_QUIT;
78 extern EsObject *OPT_ERR_RANGECHECK;
79 extern EsObject *OPT_ERR_UNDERFLOW;
80 
81 extern int OPT_TYPE_ARRAY;
82 extern int OPT_TYPE_DICT;
83 extern int OPT_TYPE_OPERATOR;
84 extern int OPT_TYPE_STRING;
85 extern int OPT_TYPE_NAME;
86 extern int OPT_TYPE_MARK;
87 
88 #endif
89