diff options
| author | Kirill Volinsky <mataes2007@gmail.com> | 2016-03-11 14:41:45 +0000 | 
|---|---|---|
| committer | Kirill Volinsky <mataes2007@gmail.com> | 2016-03-11 14:41:45 +0000 | 
| commit | bb5bb4407f2578ed8d6dc3b41f6ddb8b798e560c (patch) | |
| tree | 1e21750da4e7e9a2b81993f9a5484be95e394cfc /libs/tgl/src/generate.h | |
| parent | 2d0a5026812236b19c573bbe8d08aa20df7083d9 (diff) | |
tgl compile under vc2013
git-svn-id: http://svn.miranda-ng.org/main/trunk@16457 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'libs/tgl/src/generate.h')
| -rw-r--r-- | libs/tgl/src/generate.h | 173 | 
1 files changed, 173 insertions, 0 deletions
| diff --git a/libs/tgl/src/generate.h b/libs/tgl/src/generate.h new file mode 100644 index 0000000000..5d46a6c4ec --- /dev/null +++ b/libs/tgl/src/generate.h @@ -0,0 +1,173 @@ +/* +    This file is part of tgl-libary/generate + +    Tgl-library/generate is free software: you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation, either version 2 of the License, or +    (at your option) any later version. + +    Tgl-library/generate is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +    GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this tgl-library/generate.  If not, see <http://www.gnu.org/licenses/>. + +    Copyright Vitaly Valtman 2014-2015 + +    It is derivative work of VK/KittenPHP-DB-Engine (https://github.com/vk-com/kphp-kdb/) +    Copyright 2012-2013 Vkontakte Ltd +              2012-2013 Vitaliy Valtman +*/ + +#ifndef __GENERATE_H__ +#define __GENERATE_H__ + +struct tl_combinator; + +struct tl_type {   +//  struct tl_type_methods *methods; +  char *id; +  char *print_id; +  unsigned name; +  int arity; +  int flags; +  int constructors_num; +  struct tl_combinator **constructors; +  long long params_types; +  int extra; +}; + +#define NODE_TYPE_TYPE 1 +#define NODE_TYPE_NAT_CONST 2 +#define NODE_TYPE_VAR_TYPE 3 +#define NODE_TYPE_VAR_NUM 4 +#define NODE_TYPE_ARRAY 5 + +#define MAX_COMBINATOR_VARS 64 + +#define NAME_VAR_NUM 0x70659eff +#define NAME_VAR_TYPE 0x2cecf817 +#define NAME_INT 0xa8509bda +#define NAME_LONG 0x22076cba +#define NAME_DOUBLE 0x2210c154 +#define NAME_STRING 0xb5286e24 +#define NAME_VECTOR 0x1cb5c415 +#define NAME_MAYBE_TRUE 0x3f9c8ef8 +#define NAME_MAYBE_FALSE 0x27930a7b +#define NAME_BOOL_FALSE 0xbc799737 +#define NAME_BOOL_TRUE 0x997275b5 +#define NAME_BYTES 0x0ee1379f + + +#define FLAG_OPT_VAR (1 << 17) +#define FLAG_EXCL (1 << 18) +#define FLAG_OPT_FIELD (1 << 20) +#define FLAG_NOVAR (1 << 21) +#define FLAG_BARE 1 +#define FLAGS_MASK ((1 << 16) - 1) +#define FLAG_DEFAULT_CONSTRUCTOR (1 << 25) +#define FLAG_NOCONS (1 << 1) + +extern struct tl_tree_methods tl_nat_const_methods; +extern struct tl_tree_methods tl_nat_const_full_methods; +extern struct tl_tree_methods tl_pnat_const_full_methods; +extern struct tl_tree_methods tl_array_methods; +extern struct tl_tree_methods tl_type_methods; +extern struct tl_tree_methods tl_parray_methods; +extern struct tl_tree_methods tl_ptype_methods; +extern struct tl_tree_methods tl_var_num_methods; +extern struct tl_tree_methods tl_var_type_methods; +extern struct tl_tree_methods tl_pvar_num_methods; +extern struct tl_tree_methods tl_pvar_type_methods; +#define TL_IS_NAT_VAR(x) (((long)x) & 1) +#define TL_TREE_METHODS(x) (TL_IS_NAT_VAR (x) ? &tl_nat_const_methods : ((struct tl_tree *)(x))->methods) + +#define DEC_REF(x) (TL_TREE_METHODS(x)->dec_ref ((void *)x)) +#define INC_REF(x) (TL_TREE_METHODS(x)->inc_ref ((void *)x)) +#define TYPE(x) (TL_TREE_METHODS(x)->type ((void *)x)) + +typedef unsigned long long tl_tree_hash_t; +struct tl_tree; + +struct tl_tree_methods { +  int (*type)(struct tl_tree *T); +  int (*eq)(struct tl_tree *T, struct tl_tree *U); +  void (*inc_ref)(struct tl_tree *T); +  void (*dec_ref)(struct tl_tree *T); +}; + +struct tl_tree { +  int ref_cnt; +  int flags; +  //tl_tree_hash_t hash; +  struct tl_tree_methods *methods; +}; +/* +struct tl_tree_nat_const { +  struct tl_tree self; +  int value; +};*/ + +struct tl_tree_type { +  struct tl_tree self; + +  struct tl_type *type; +  int children_num; +  struct tl_tree **children; +}; + +struct tl_tree_array { +  struct tl_tree self; + +  struct tl_tree *multiplicity; +  int args_num; +  struct arg **args; +}; + +struct tl_tree_var_type { +  struct tl_tree self; + +  int var_num; +}; + +struct tl_tree_var_num { +  struct tl_tree self; + +  int var_num; +  int dif; +}; + +struct tl_tree_nat_const { +  struct tl_tree self; + +  long long value; +}; + +struct arg { +  char *id; +  int var_num; +  int flags; +  int exist_var_num; +  int exist_var_bit; +  struct tl_tree *type; +}; + +struct tl_combinator { +  //struct tl_combinator_methods *methods; +  char *id; +  char *print_id; +  unsigned name; +  int is_fun; +  int var_num; +  int args_num; +  struct arg **args; +  struct tl_tree *result; +  void **IP; +  void **fIP; +  int IP_len; +  int fIP_len; +}; + +#endif | 
