@@ -280,17 +280,6 @@ impl GridLayout {
280280 layout_cache_prop_v : & NamedReference ,
281281 diag : & mut BuildDiagnostics ,
282282 ) {
283- let mut get_const_value = |name : & str | {
284- item_element
285- . borrow_mut ( )
286- . bindings
287- . get ( name)
288- . and_then ( |e| eval_const_expr ( & e. borrow ( ) . expression , name, & * e. borrow ( ) , diag) )
289- } ;
290- let colspan = get_const_value ( "colspan" ) . unwrap_or ( 1 ) ;
291- let rowspan = get_const_value ( "rowspan" ) . unwrap_or ( 1 ) ;
292-
293- // TODO: use get_expr for colspan/rowspan too
294283 let mut get_expr = |name : & str | {
295284 item_element. borrow_mut ( ) . bindings . get ( name) . map ( |e| {
296285 let expr = & e. borrow ( ) . expression ;
@@ -301,12 +290,14 @@ impl GridLayout {
301290
302291 let row_expr = get_expr ( "row" ) ;
303292 let col_expr = get_expr ( "col" ) ;
293+ let rowspan_expr = get_expr ( "rowspan" ) ;
294+ let colspan_expr = get_expr ( "colspan" ) ;
304295
305296 self . add_element_with_coord_as_expr (
306297 item_element,
307298 new_row,
308299 ( & row_expr, & col_expr) ,
309- ( rowspan , colspan ) ,
300+ ( & rowspan_expr , & colspan_expr ) ,
310301 layout_cache_prop_h,
311302 layout_cache_prop_v,
312303 diag,
@@ -329,7 +320,10 @@ impl GridLayout {
329320 & Some ( Expression :: NumberLiteral ( row as _ , Unit :: None ) ) ,
330321 & Some ( Expression :: NumberLiteral ( col as _ , Unit :: None ) ) ,
331322 ) ,
332- ( rowspan, colspan) ,
323+ (
324+ & Some ( Expression :: NumberLiteral ( rowspan as _ , Unit :: None ) ) ,
325+ & Some ( Expression :: NumberLiteral ( colspan as _ , Unit :: None ) ) ,
326+ ) ,
333327 layout_cache_prop_h,
334328 layout_cache_prop_v,
335329 diag,
@@ -341,7 +335,7 @@ impl GridLayout {
341335 item_element : & ElementRc ,
342336 new_row : bool ,
343337 ( row_expr, col_expr) : ( & Option < Expression > , & Option < Expression > ) ,
344- ( rowspan , colspan ) : ( u16 , u16 ) ,
338+ ( rowspan_expr , colspan_expr ) : ( & Option < Expression > , & Option < Expression > ) ,
345339 layout_cache_prop_h : & NamedReference ,
346340 layout_cache_prop_v : & NamedReference ,
347341 diag : & mut BuildDiagnostics ,
@@ -379,8 +373,8 @@ impl GridLayout {
379373 new_row,
380374 col_expr : col_expr. clone ( ) ,
381375 row_expr : row_expr. clone ( ) ,
382- colspan ,
383- rowspan ,
376+ colspan_expr : colspan_expr . clone ( ) ,
377+ rowspan_expr : rowspan_expr . clone ( ) ,
384378 item : layout_item. item . clone ( ) ,
385379 } ) ;
386380 }
@@ -845,29 +839,6 @@ fn set_prop_from_cache(
845839 }
846840}
847841
848- fn eval_const_expr (
849- expression : & Expression ,
850- name : & str ,
851- span : & dyn crate :: diagnostics:: Spanned ,
852- diag : & mut BuildDiagnostics ,
853- ) -> Option < u16 > {
854- match super :: ignore_debug_hooks ( expression) {
855- Expression :: NumberLiteral ( v, Unit :: None ) => {
856- if * v < 0. || * v > u16:: MAX as f64 || !v. trunc ( ) . approx_eq ( v) {
857- diag. push_error ( format ! ( "'{name}' must be a positive integer" ) , span) ;
858- None
859- } else {
860- Some ( * v as u16 )
861- }
862- }
863- Expression :: Cast { from, .. } => eval_const_expr ( from, name, span, diag) ,
864- _ => {
865- diag. push_error ( format ! ( "'{name}' must be an integer literal" ) , span) ;
866- None
867- }
868- }
869- }
870-
871842// If it's a number literal, it must be a positive integer
872843// But also allow any other kind of expression
873844fn check_number_literal_is_positive_integer (
0 commit comments