@@ -115,7 +115,12 @@ end function;
115
115
define method emit-reference
116
116
(back-end :: <llvm-back-end>, m :: <llvm-module>, o :: <stack-vector-temporary>)
117
117
=> (reference :: <llvm-value>);
118
- ins--bitcast(back-end, temporary-value(o), $llvm-object-pointer-type)
118
+ if (o.number-values ~= 0 )
119
+ ins--bitcast(back-end, temporary-value(o), $llvm-object-pointer-type)
120
+ else
121
+ // Return the canonical empty vector
122
+ emit-reference(back-end, m, dylan-value(# "%empty-vector" ))
123
+ end if
119
124
end method ;
120
125
121
126
// Local temporary definitions
@@ -1080,14 +1085,16 @@ end method;
1080
1085
1081
1086
define method emit-computation
1082
1087
(back-end :: <llvm-back-end>, m :: <llvm-module>, c :: <stack-vector>) => ()
1083
- let word-size = back-end-word-size(back-end);
1084
- let class :: <&class> = dylan-value(# "<simple-object-vector>" );
1085
- let tmp = temporary-value(c.temporary);
1086
- for (argument in c.arguments, i from 0 )
1087
- let ptr = op--getslotptr(back-end, tmp, class , # "vector-element" , i);
1088
- ins--store(back-end, emit-reference(back-end, m, argument), ptr,
1089
- alignment: word-size);
1090
- end for ;
1088
+ unless (c.arguments.empty? )
1089
+ let word-size = back-end-word-size(back-end);
1090
+ let class :: <&class> = dylan-value(# "<simple-object-vector>" );
1091
+ let tmp = temporary-value(c.temporary);
1092
+ for (argument in c.arguments, i from 0 )
1093
+ let ptr = op--getslotptr(back-end, tmp, class , # "vector-element" , i);
1094
+ ins--store(back-end, emit-reference(back-end, m, argument), ptr,
1095
+ alignment: word-size);
1096
+ end for ;
1097
+ end unless ;
1091
1098
end method ;
1092
1099
1093
1100
define method repeated-slot-type-alignment
0 commit comments