aboutsummaryrefslogtreecommitdiff
path: root/backendC/CleanCompilerSources/comprehensions.h
diff options
context:
space:
mode:
Diffstat (limited to 'backendC/CleanCompilerSources/comprehensions.h')
-rw-r--r--backendC/CleanCompilerSources/comprehensions.h42
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);