@@ -89,37 +89,45 @@ macro SMatrix(ex)
89
89
s2 = length (ex. args) - 1
90
90
return esc (Expr (:call , Expr (:curly , :SMatrix , s1, s2, ex. args[1 ]), Expr (:tuple , ex. args[2 : end ]. .. )))
91
91
elseif ex. head == :vcat
92
- if isa (ex. args[1 ], Expr) && ex. args[1 ]. head == :row # n x m
92
+ if isa (ex. args[1 ], Expr) && ( ex. args[1 ]:: Expr ) . head == :row # n x m
93
93
# Validate
94
94
s1 = length (ex. args)
95
- s2s = map (i -> ((isa (ex. args[i], Expr) && ex. args[i]. head == :row ) ? length (ex. args[i]. args) : 1 ), 1 : s1)
95
+ s2s = let s1= s1, ex= ex
96
+ map (i -> ((isa (ex. args[i], Expr) && (ex. args[i]:: Expr ). head == :row ) ? length ((ex. args[i]:: Expr ). args) : 1 ), 1 : s1)
97
+ end
96
98
s2 = minimum (s2s)
97
99
if maximum (s2s) != s2
98
100
throw (ArgumentError (" Rows must be of matching lengths" ))
99
101
end
100
102
101
- exprs = [ex. args[i]. args[j] for i = 1 : s1, j = 1 : s2]
103
+ exprs = let s1= s1, s2= s2, ex= ex
104
+ [ex. args[i]. args[j] for i = 1 : s1, j = 1 : s2]
105
+ end
102
106
return esc (Expr (:call , SMatrix{s1, s2}, Expr (:tuple , exprs... )))
103
107
else # n x 1
104
108
return esc (Expr (:call , SMatrix{length (ex. args), 1 }, Expr (:tuple , ex. args... )))
105
109
end
106
110
elseif ex. head == :typed_vcat
107
- if isa (ex. args[2 ], Expr) && ex. args[2 ]. head == :row # typed, n x m
111
+ if isa (ex. args[2 ], Expr) && ( ex. args[2 ]:: Expr ) . head == :row # typed, n x m
108
112
# Validate
109
113
s1 = length (ex. args) - 1
110
- s2s = map (i -> ((isa (ex. args[i+ 1 ], Expr) && ex. args[i+ 1 ]. head == :row ) ? length (ex. args[i+ 1 ]. args) : 1 ), 1 : s1)
114
+ s2s = let s1= s1, ex= ex
115
+ map (i -> ((isa (ex. args[i+ 1 ], Expr) && (ex. args[i+ 1 ]:: Expr ). head == :row ) ? length ((ex. args[i+ 1 ]:: Expr ). args) : 1 ), 1 : s1)
116
+ end
111
117
s2 = minimum (s2s)
112
118
if maximum (s2s) != s2
113
119
throw (ArgumentError (" Rows must be of matching lengths" ))
114
120
end
115
121
116
- exprs = [ex. args[i+ 1 ]. args[j] for i = 1 : s1, j = 1 : s2]
122
+ exprs = let s1= s1, s2= s2, ex= ex
123
+ [ex. args[i+ 1 ]. args[j] for i = 1 : s1, j = 1 : s2]
124
+ end
117
125
return esc (Expr (:call , Expr (:curly , :SMatrix ,s1, s2, ex. args[1 ]), Expr (:tuple , exprs... )))
118
126
else # typed, n x 1
119
127
return esc (Expr (:call , Expr (:curly , :SMatrix , length (ex. args)- 1 , 1 , ex. args[1 ]), Expr (:tuple , ex. args[2 : end ]. .. )))
120
128
end
121
129
elseif isa (ex, Expr) && ex. head == :comprehension
122
- if length (ex. args) != 1 || ! isa (ex. args[1 ], Expr) || ex. args[1 ]. head != :generator
130
+ if length (ex. args) != 1 || ! isa (ex. args[1 ], Expr) || ( ex. args[1 ]:: Expr ) . head != :generator
123
131
error (" Expected generator in comprehension, e.g. [f(i,j) for i = 1:3, j = 1:3]" )
124
132
end
125
133
ex = ex. args[1 ]
@@ -138,7 +146,7 @@ macro SMatrix(ex)
138
146
$ (esc (Expr (:call , Expr (:curly , :SMatrix , length (rng1), length (rng2)), Expr (:tuple , exprs... ))))
139
147
end
140
148
elseif isa (ex, Expr) && ex. head == :typed_comprehension
141
- if length (ex. args) != 2 || ! isa (ex. args[2 ], Expr) || ex. args[2 ]. head != :generator
149
+ if length (ex. args) != 2 || ! isa (ex. args[2 ], Expr) || ( ex. args[2 ]:: Expr ) . head != :generator
142
150
error (" Expected generator in typed comprehension, e.g. Float64[f(i,j) for i = 1:3, j = 1:3]" )
143
151
end
144
152
T = ex. args[1 ]
@@ -158,7 +166,7 @@ macro SMatrix(ex)
158
166
$ (esc (Expr (:call , Expr (:curly , :SMatrix , length (rng1), length (rng2), T), Expr (:tuple , exprs... ))))
159
167
end
160
168
elseif isa (ex, Expr) && ex. head == :call
161
- if ex. args[1 ] == :zeros || ex. args[1 ] == :ones || ex. args[1 ] == :rand || ex. args[1 ] == :randn || ex. args[1 ] == :randexp
169
+ if ex. args[1 ] === :zeros || ex. args[1 ] === :ones || ex. args[1 ] === :rand || ex. args[1 ] === :randn || ex. args[1 ] = == :randexp
162
170
if length (ex. args) == 3
163
171
return quote
164
172
$ (ex. args[1 ])(SMatrix{$ (esc (ex. args[2 ])),$ (esc (ex. args[3 ]))})
@@ -170,7 +178,7 @@ macro SMatrix(ex)
170
178
else
171
179
error (" @SMatrix expected a 2-dimensional array expression" )
172
180
end
173
- elseif ex. args[1 ] == :fill
181
+ elseif ex. args[1 ] === :fill
174
182
if length (ex. args) == 4
175
183
return quote
176
184
$ (esc (ex. args[1 ]))($ (esc (ex. args[2 ])), SMatrix{$ (esc (ex. args[3 ])), $ (esc (ex. args[4 ]))})
0 commit comments