aboutsummaryrefslogtreecommitdiff
path: root/backendC/CleanCompilerSources/instructions.c
diff options
context:
space:
mode:
authorjohnvg2006-11-03 13:00:41 +0000
committerjohnvg2006-11-03 13:00:41 +0000
commit07bcce9ac1173600a10425bf30346ea1ee5a05db (patch)
tree637147432ea01e22cb5dece8869df5d45bab9565 /backendC/CleanCompilerSources/instructions.c
parentallow TC to be used in the context of a class definition (e.g. class C a | TC a) (diff)
generate ea entry for boxed records, fixes jmp_eval_upd in lazy selectors
for fields (in other records) with this record type git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1620 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'backendC/CleanCompilerSources/instructions.c')
-rw-r--r--backendC/CleanCompilerSources/instructions.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/backendC/CleanCompilerSources/instructions.c b/backendC/CleanCompilerSources/instructions.c
index 00d422d..00acba7 100644
--- a/backendC/CleanCompilerSources/instructions.c
+++ b/backendC/CleanCompilerSources/instructions.c
@@ -643,6 +643,8 @@ enum {
#define Ijmp_eval "jmp_eval"
#define Ijmp_eval_upd "jmp_eval_upd"
#define Ijmp_ap "jmp_ap"
+#define Ijmp_ap_upd "jmp_ap_upd"
+#define Ijmp_upd "jmp_upd"
#define Ihalt "halt"
@@ -2211,6 +2213,18 @@ void GenJmpAp (int n_args)
put_arguments_n_b (n_args);
}
+void GenJmpApUpd (int n_args)
+{
+ put_instruction_b (jmp_ap_upd);
+ put_arguments_n_b (n_args);
+}
+
+void GenJmpUpd (Label tolab)
+{
+ put_instruction_b (jmp_upd);
+ GenLabel (tolab);
+}
+
void GenPopA (int nr)
{
if (nr > 0){
@@ -2660,7 +2674,7 @@ void GenApplyEntryDirective (int arity,Label label)
}
#endif
-void GenLazyRecordNodeEntryDirective (int arity,Label label)
+void GenLazyRecordNodeEntryDirective (int arity,Label label,Label label2)
{
if (DoStackLayout){
put_directive_b (n);
@@ -2671,6 +2685,11 @@ void GenLazyRecordNodeEntryDirective (int arity,Label label)
else
FPutS (empty_lab.lab_name, OutFile);
+ if (label2){
+ FPutC (' ', OutFile);
+ GenLabel (label2);
+ }
+
#ifdef MEMORY_PROFILING_WITH_N_STRING
if (DoProfiling && arity>=0 && !DoParallel){
put_directive_ (Dn_string);