diff options
Diffstat (limited to 'backendC/CleanCompilerSources/comprehensions.h')
-rw-r--r-- | backendC/CleanCompilerSources/comprehensions.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/backendC/CleanCompilerSources/comprehensions.h b/backendC/CleanCompilerSources/comprehensions.h new file mode 100644 index 0000000..9bb7c9c --- /dev/null +++ b/backendC/CleanCompilerSources/comprehensions.h @@ -0,0 +1,42 @@ +#define FASTER_ARRAY_COMPREHENSIONS + +typedef enum { + kGeneratorList,kGeneratorFrom,kGeneratorFromTo,kGeneratorFromThen,kGeneratorFromThenTo,kGeneratorArrayOnly +} GeneratorKind; + +extern int gGeneratorNumber; +extern int gListFunctionNumber; + +STRUCT (generator, Generator) +{ + GeneratorKind gen_kind; + Bool gen_arrayCombined; + int gen_array_index_n; + NodeP gen_array; + NodeP *gen_array_size_node_h; + NodeP gen_pattern; + union + { + NodeP val_list; + struct + { + ArgP fbt_from; + ArgP fbt_by; + ArgP fbt_to; + } val_fbt; + } val; +}; + +# define gen_list val.val_list +# define gen_from val.val_fbt.fbt_from +# define gen_by val.val_fbt.fbt_by +# define gen_to val.val_fbt.fbt_to + +# define kMaxParallelGenerators 16 + +extern unsigned ConvertGenerators (unsigned n, GeneratorS generators[],IdentP updatedArrayIdent,NodeP *arrayNodePtr, + int *const array_index_generator_n_p,NodeP result_node_p,NodeP guard_p,ScopeP scope); +extern void GenerateComprehensionFunction (ImpRules impRule, unsigned n, GeneratorS djennereeturs [], NodeP guard, + NodeP result_node_p,int array_index_generator_n, + NodeP *begin, NodeP end, NodeP **successP, unsigned line, NodeP *array); +extern NodeP ComputeNewArrayLength (unsigned n, GeneratorS generators [], ScopeP scope); |