<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/cff7ba05966e1ed9926605388589521e75f5d6b8">https://github.com/macports/macports-base/commit/cff7ba05966e1ed9926605388589521e75f5d6b8</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new cff7ba059 port.tcl: adopt dict through to action_info
</span>cff7ba059 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit cff7ba05966e1ed9926605388589521e75f5d6b8
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Fri Feb 2 08:51:05 2024 +1100

<span style='display:block; white-space:pre;color:#404040;'>    port.tcl: adopt dict through to action_info
</span>---
 src/port/port.tcl | 278 ++++++++++++++++++++++--------------------------------
 1 file changed, 112 insertions(+), 166 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port/port.tcl b/src/port/port.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 269841b35..b4cd843ac 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port/port.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port/port.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -203,8 +203,7 @@ proc url_to_portname { url {quiet 0} } {
</span>             ui_msg "Please verify that the directory and portfile syntax are correct."
         }
     } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set portinfo [mportinfo $ctx]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portname $portinfo(name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set portname [dict get [mportinfo $ctx] name]
</span>         mportclose $ctx
     }
     cd $savedir
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -246,17 +245,15 @@ proc require_portlist { nameportlist {is_upgrade "no"} } {
</span> # sort portlist so dependents come before their dependencies
 proc portlist_sortdependents { portlist } {
     foreach p $portlist {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set pvals $p
</span>         # normalise port name to lower case
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set norm_name [string tolower $pvals(name)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set norm_name [string tolower [dict get $p name]]
</span>         lappend entries($norm_name) $p
         if {![info exists dependents($norm_name)]} {
             set dependents($norm_name) [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach result [registry::list_dependents $pvals(name)] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach result [registry::list_dependents [dict get $p name]] {
</span>                 lappend dependents($norm_name) [string tolower [lindex $result 2]]
             }
         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array unset pvals
</span>     }
     set ret [list]
     foreach p $portlist {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -270,8 +267,7 @@ proc portlist_sortdependents_helper {p up_entries up_dependents up_seen up_retli
</span>     if {![info exists seen($p)]} {
         set seen($p) 1
         upvar $up_entries entries $up_dependents dependents $up_retlist retlist
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set pvals $p
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach dependent $dependents([string tolower $pvals(name)]) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach dependent $dependents([string tolower [dict get $p name]]) {
</span>             if {[info exists entries($dependent)]} {
                 foreach entry $entries($dependent) {
                     portlist_sortdependents_helper $entry entries dependents seen retlist
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -404,23 +400,14 @@ proc wraplabel {label string maxlen {indent ""}} {
</span> # Port selection
 ##########################################
 proc unique_results_to_portlist {infos} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set result [list]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array unset unique
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach {name info} $infos {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        array unset portinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set portinfo $info
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portentry [entry_for_portlist [list url $portinfo(porturl) name $name options [array get ::global_options]]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set unique [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach {name portinfo} $infos {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set portentry [entry_for_portlist [list url [dict get $portinfo porturl] name $name options [array get ::global_options]]]
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array unset entry
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set entry $portentry
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists unique($entry(fullname))]} continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set unique($entry(fullname)) 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend result $portentry
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[dict exists $unique [dict get $portentry fullname]]} continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set unique [dict get $portentry fullname] $portentry
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $result
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [dict values $unique]
</span> }
 
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -467,7 +454,7 @@ proc get_current_port {} {
</span>     }
 
     set results [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    add_to_portlist_with_defaults results [list url $url name $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    add_to_portlist_with_defaults results [dict create url $url name $portname]
</span>     return $results
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -490,7 +477,7 @@ proc get_installed_ports { {ignore_active yes} {active yes} } {
</span>         set iactive [lindex $i 4]
 
         if { ${ignore_active} eq "yes" || (${active} eq "yes") == (${iactive} != 0) } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            add_to_portlist_with_defaults results [list name $iname version "${iversion}_${irevision}" variants $ivariants]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            add_to_portlist_with_defaults results [dict create name $iname version "${iversion}_${irevision}" variants $ivariants]
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -521,22 +508,18 @@ proc get_actinact_ports {} {
</span>     set active_ports [get_active_ports]
     set results [list]
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    set inact [dict create]
</span>     foreach port $inactive_ports {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set portspec $port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portname $portspec(name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend inact($portname) $port
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict lappend inact [dict get $port name] $port
</span>     }
 
     foreach port $active_ports {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set portspec $port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portname $portspec(name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists inact($portname)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {![info exists added_inact($portname)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                foreach inact_spec $inact($portname) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    lappend results $inact_spec
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set added_inact($portname) 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set portname [dict get $port name]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[dict exists $inact $portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set inact_ports [dict get $inact $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$inact_ports ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend results {*}$inact_ports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                dict set inact $portname ""
</span>             }
             lappend results $port
         }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -630,7 +613,7 @@ proc get_outdated_ports {} {
</span> 
             # Add outdated ports to our results list
             if { $comp_result < 0 } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                add_to_portlist_with_defaults results [list name $portname version $installed_compound variants [split_variants $installed_variants]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                add_to_portlist_with_defaults results [dict create name $portname version $installed_compound variants [split_variants $installed_variants]]
</span>             }
         }
     }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -644,9 +627,7 @@ proc get_obsolete_ports {} {
</span>     set results [list]
 
     foreach i $ilist {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set port $i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {mportlookup $port(name)} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[catch {mportlookup [dict get $i name]} result]} {
</span>             ui_debug "$::errorInfo"
             break_softcontinue "lookup of portname $portname failed: $result" 1 status
         }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -679,7 +660,7 @@ proc get_ports_with_prop {propname propval} {
</span>         set iepoch [lindex $i 5]
         set regref [registry::open_entry $iname $iversion $irevision $ivariants $iepoch]
         if {[registry::property_retrieve $regref $propname] eq $propval} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            add_to_portlist_with_defaults results [list name $iname version "${iversion}_${irevision}" variants [split_variants $ivariants]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            add_to_portlist_with_defaults results [dict create name $iname version "${iversion}_${irevision}" variants [split_variants $ivariants]]
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -708,7 +689,7 @@ proc get_leaves_ports {} {
</span>     foreach i $ilist {
         set iname [lindex $i 0]
         if {[registry::list_dependents $iname] eq ""} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            add_to_portlist_with_defaults results [list name $iname version "[lindex $i 1]_[lindex $i 2]" variants [split_variants [lindex $i 3]]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            add_to_portlist_with_defaults results [dict create name $iname version "[lindex $i 1]_[lindex $i 2]" variants [split_variants [lindex $i 3]]]
</span>         }
     }
     return [portlist_sort [opIntersection $results [get_unrequested_ports]]]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -740,7 +721,7 @@ proc get_dependent_ports {portname recursive} {
</span>     # could return specific versions here using registry2.0 features
     set results [list]
     foreach dep $deplist {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        add_to_portlist_with_defaults results [list name [lindex $dep 2]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        add_to_portlist_with_defaults results [dict create name [lindex $dep 2]]
</span>     }
 
     # actually do this iteratively to avoid hitting Tcl's recursion limit
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -755,7 +736,7 @@ proc get_dependent_ports {portname recursive} {
</span>                     set rdeplist [registry::list_dependents $depname]
                     foreach rdep $rdeplist {
                         lappend newlist $rdep
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        add_to_portlist_with_defaults rportlist [list name [lindex $rdep 2]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        add_to_portlist_with_defaults rportlist [dict create name [lindex $rdep 2]]
</span>                     }
                 }
             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -773,17 +754,16 @@ proc get_dependent_ports {portname recursive} {
</span> 
 
 proc get_rdepends_ports {portname} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![info exists ::portDependenciesArray]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # make an associative array of all the port names and their (reverse) dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists ::portDependenciesDict]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # make a dictionary of all the port names and their (reverse) dependencies
</span>         # much faster to build this once than to call mportsearch thousands of times
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set deptypes {depends_fetch depends_extract depends_patch depends_build depends_lib depends_run depends_test}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach {pname pinfolist} [mportlistall] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            array unset pinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            array set pinfo $pinfolist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set ::portDependenciesDict [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set deptypes [list depends_fetch depends_extract depends_patch depends_build depends_lib depends_run depends_test]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach {pname pinfo} [mportlistall] {
</span>             foreach dtype $deptypes {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[info exists pinfo($dtype)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    foreach depspec $pinfo($dtype) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        lappend ::portDependenciesArray([string tolower [lindex [split $depspec :] end]]) $pname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[dict exists $pinfo $dtype]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    foreach depspec [dict get $pinfo $dtype] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        dict lappend ::portDependenciesDict [string tolower [lindex [split $depspec :] end]] $pname
</span>                     }
                 }
             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -795,13 +775,13 @@ proc get_rdepends_ports {portname} {
</span>     while {[llength $portList] > 0} {
         set aPort [lindex $portList 0]
         set portList [lreplace $portList 0 0]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists ::portDependenciesArray($aPort)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach possiblyNewPort $::portDependenciesArray($aPort) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[dict exists $::portDependenciesDict $aPort]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach possiblyNewPort [dict get $::portDependenciesDict $aPort] {
</span>                 set lcport [string tolower $possiblyNewPort]
                 if {![info exists seen($lcport)]} {
                     set seen($lcport) 1
                     lappend portList $lcport
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    add_to_portlist_with_defaults results [list name $possiblyNewPort]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    add_to_portlist_with_defaults results [dict create name $possiblyNewPort]
</span>                 }
             }
         }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -831,22 +811,20 @@ proc get_dep_ports {portname recursive} {
</span>             return -code error "Port $portname not found"
         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    array unset portinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set portinfo [lindex $result 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set porturl $portinfo(porturl)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set portinfo [lindex $result 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set porturl [dict get $portinfo porturl]
</span> 
     # open portfile
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[catch {set mport [mportopen $porturl [list subport $portinfo(name)] [array get global_variations]]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {set mport [mportopen $porturl [dict create subport [dict get $portinfo name]] [array get global_variations]]} result]} {
</span>         ui_debug $::errorInfo
         if {[macports::ui_isset ports_processall]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_error "Unable to open port $portinfo(name): $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_error "Unable to open port [dict get $portinfo name]: $result"
</span>             return [list]
         } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            return -code error "Unable to open port $portinfo(name): $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return -code error "Unable to open port [dict get $portinfo name]: $result"
</span>         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    array unset portinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set portinfo [mportinfo $mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set portinfo [dict merge $portinfo [mportinfo $mport]]
</span>     mportclose $mport
 
     # gather its deps
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -855,9 +833,9 @@ proc get_dep_ports {portname recursive} {
</span> 
     set deplist [list]
     foreach type $deptypes {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists portinfo($type)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach dep $portinfo($type) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                add_to_portlist_with_defaults results [list name [lindex [split $dep :] end]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[dict exists $portinfo $type]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach dep [dict get $portinfo $type] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                add_to_portlist_with_defaults results [dict create name [lindex [split $dep :] end]]
</span>                 lappend deplist $dep
             }
         }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -882,26 +860,24 @@ proc get_dep_ports {portname recursive} {
</span>                         ui_error "Port $depname not found"
                         continue
                     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    array unset portinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    array set portinfo [lindex $result 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set porturl $portinfo(porturl)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set portinfo [lindex $result 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set porturl [dict get $portinfo porturl]
</span> 
                     # open its portfile
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[catch {set mport [mportopen $porturl [list subport $portinfo(name)] [array get global_variations]]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[catch {set mport [mportopen $porturl [dict create subport [dict get $portinfo name]] [array get global_variations]]} result]} {
</span>                         ui_debug $::errorInfo
                         ui_error "Unable to open port $depname: $result"
                         continue
                     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    array unset portinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    array set portinfo [mportinfo $mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set portinfo [dict merge $portinfo [mportinfo $mport]]
</span>                     mportclose $mport
 
                     # collect its deps
                     set rdeplist [list]
                     foreach type $deptypes {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        if {[info exists portinfo($type)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            foreach rdep $portinfo($type) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                add_to_portlist_with_defaults results [list name [lindex [split $rdep :] end]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        if {[dict exists $portinfo $type]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            foreach rdep [dict get $portinfo $type] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                add_to_portlist_with_defaults results [dict create name [lindex [split $rdep :] end]]
</span>                                 lappend rdeplist $rdep
                             }
                         }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -910,7 +886,7 @@ proc get_dep_ports {portname recursive} {
</span>                     # add them to the lists
                     foreach rdep $rdeplist {
                         lappend newlist $rdep
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        add_to_portlist_with_defaults rportlist [list name [lindex [split $rdep :] end]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        add_to_portlist_with_defaults rportlist [dict create name [lindex [split $rdep :] end]]
</span>                     }
                 }
             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -946,30 +922,28 @@ proc get_subports {portname} {
</span>             return -code error "Port $portname not found"
         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    array unset portinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set portinfo [lindex $result 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set porturl $portinfo(porturl)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lassign $result portname portinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set porturl [dict get $portinfo porturl]
</span> 
     # open portfile
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[catch {set mport [mportopen $porturl [list subport $portinfo(name)] [array get global_variations]]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {set mport [mportopen $porturl [dict create subport $portname] [array get global_variations]]} result]} {
</span>         ui_debug $::errorInfo
         if {[macports::ui_isset ports_processall]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_error "Unable to open port $portinfo(name): $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_error "Unable to open port $portname: $result"
</span>             return [list]
         } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            return -code error "Unable to open port $portinfo(name): $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return -code error "Unable to open port $portname: $result"
</span>         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    array unset portinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set portinfo [mportinfo $mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set portinfo [array merge $portinfo [mportinfo $mport]]
</span>     mportclose $mport
 
     # gather its subports
     set results [list]
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists portinfo(subports)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach subport $portinfo(subports) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            add_to_portlist_with_defaults results [list name $subport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[dict exists $portinfo subports]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach subport [dict get $portinfo subports] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            add_to_portlist_with_defaults results [dict create name $subport]
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1637,11 +1611,9 @@ proc action_log { action portlist opts } {
</span>             if {[llength $result] < 2} {
                 break_softcontinue "Port $portname not found" 1 status
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            array unset portinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            array set portinfo [lindex $result 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set porturl $portinfo(porturl)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set portdir $portinfo(portdir)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set portname $portinfo(name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lassign $result portname portinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set porturl [dict get $portinfo porturl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set portdir [dict get $portinfo portdir]
</span>         } elseif {$porturl ne "file://."} {
             # Extract the portdir from porturl and use it to search PortIndex.
             # Only the last two elements of the path (porturl) make up the
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1658,15 +1630,14 @@ proc action_log { action portlist opts } {
</span>             if {[llength $result] < 2} {
                 break_softcontinue "Portdir $portdir not found" 1 status
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            array unset portinfo
</span>             set matchindex [lsearch -exact -nocase $result $portname]
             if {$matchindex != -1} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                array set portinfo [lindex $result [incr matchindex]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set portinfo [lindex $result [incr matchindex]]
</span>             } else {
                 ui_warn "Portdir $portdir doesn't seem to belong to portname $portname"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                array set portinfo [lindex $result 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set portinfo [lindex $result 1]
</span>             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set portname $portinfo(name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set portname [dict get $portinfo name]
</span>         }
         set portpath [macports::getportdir $porturl]
         set logfile [file join [macports::getportlogpath $portpath $portname] "main.log"]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1724,7 +1695,6 @@ proc action_info { action portlist opts } {
</span>             set index_only 1
         }
         puts -nonewline $separator
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array unset portinfo
</span>         # If we have a url, use that, since it's most specific
         # otherwise try to map the portname to a url
         if {$porturl eq "" || $index_only} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1736,40 +1706,26 @@ proc action_info { action portlist opts } {
</span>             if {[llength $result] < 2} {
                 break_softcontinue "Port $portname not found" 1 status
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            array set portinfo [lindex $result 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set porturl $portinfo(porturl)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set portdir $portinfo(portdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lassign $result portname portinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set porturl [dict get $portinfo porturl]
</span>         }
 
         if {!$index_only} {
             # Add any global_variations to the variations
             # specified for the port (so we get e.g. dependencies right)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            array unset merged_variations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            array set merged_variations $variations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach { variation value } [array get global_variations] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if { ![info exists merged_variations($variation)] } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set merged_variations($variation) $value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set merged_variations [dict merge [array get global_variations] $variations]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>             if {![dict exists $options subport]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[info exists portinfo(name)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    dict set options subport $portinfo(name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    dict set options subport $portname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                dict set options subport $portname
</span>             }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[catch {set mport [mportopen $porturl $options [array get merged_variations]]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[catch {set mport [mportopen $porturl $options $merged_variations]} result]} {
</span>                 ui_debug "$::errorInfo"
                 break_softcontinue "Unable to open port: $result" 1 status
             }
             dict unset options subport
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            array unset portinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            array set portinfo [mportinfo $mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set portinfo [dict merge $portinfo [mportinfo $mport]]
</span>             mportclose $mport
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[info exists portdir]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set portinfo(portdir) $portdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span>         } elseif {![info exists portinfo]} {
             ui_warn "no PortIndex entry found for $portname"
             continue
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1779,7 +1735,7 @@ proc action_info { action portlist opts } {
</span>         # Understand which info items are actually lists by specifying
         # separators for the output. The list items correspond to the
         # normal, --pretty, and --line output formats.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set list_map {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set list_map [dict create {*}{
</span>             categories      {", "  ", "  ","}
             depends_fetch   {", "  ", "  ","}
             depends_extract {", "  ", "  ","}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1794,10 +1750,10 @@ proc action_info { action portlist opts } {
</span>             conflicts       {", "  ", "  ","}
             subports        {", "  ", "  ","}
             patchfiles      {", "  ", "  ","}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }]
</span> 
         # Label map for pretty printing
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set pretty_label {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set pretty_label [dict create {*}{
</span>             heading     ""
             variants    Variants
             depends_fetch "Fetch Dependencies"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1818,10 +1774,10 @@ proc action_info { action portlist opts } {
</span>             replaced_by "Replaced by"
             subports    "Sub-ports"
             patchfiles  "Patchfiles"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }]
</span> 
         # Wrap-length map for pretty printing
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set pretty_wrap {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set pretty_wrap [dict create {*}{
</span>             heading 0
             replaced_by 22
             variants 22
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1841,7 +1797,7 @@ proc action_info { action portlist opts } {
</span>             maintainers 22
             subports 22
             patchfiles 22
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }]
</span> 
         # Interpret a convenient field abbreviation
         if {[dict exists $options ports_info_depends] && [dict get $options ports_info_depends] eq "yes"} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1916,7 +1872,8 @@ proc action_info { action portlist opts } {
</span> 
         set fields_tried [list]
         if {![llength $opts_todo]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set opts_todo {ports_info_heading
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set opts_todo {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ports_info_heading
</span>                 ports_info_replaced_by
                 ports_info_subports
                 ports_info_variants
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1942,35 +1899,35 @@ proc action_info { action portlist opts } {
</span>             }
             # Artificial field names to reproduce prettyprinted summary
             if {$opt eq "heading"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                set inf "$portinfo(name) @$portinfo(version)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set inf "[dict get $portinfo name] @[dict get $portinfo version]"
</span>                 set ropt "heading"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[info exists portinfo(revision)] && $portinfo(revision) > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    append inf "_$portinfo(revision)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[dict exists $portinfo revision] && [dict get $portinfo revision] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    append inf "_[dict get $portinfo revision]"
</span>                 }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[info exists portinfo(categories)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    append inf " ([join $portinfo(categories) ", "])"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[dict exists $portinfo categories]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    append inf " ([join [dict get $portinfo categories] ", "])"
</span>                 }
             } elseif {$opt eq "fullname"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                set inf "$portinfo(name) @"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                append inf [composite_version $portinfo(version) $portinfo(active_variants)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set inf "[dict get $portinfo name] @"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                append inf [composite_version [dict get $portinfo version] [dict get $portinfo active_variants]]
</span>                 set ropt "fullname"
             } else {
                 # Map from friendly name
                 set ropt [map_friendly_field_names $opt]
 
                 # If there's no such info, move on
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {![info exists portinfo($ropt)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {![dict exists $portinfo $ropt]} {
</span>                     set inf ""
                 } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set inf $portinfo($ropt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set inf [dict get $portinfo $ropt]
</span>                 }
             }
 
             # Calculate field label
             set label ""
             if {$pretty_print} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[info exists pretty_label($ropt)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set label $pretty_label($ropt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[dict exists $pretty_label $ropt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set label [dict get $pretty_label $ropt]
</span>                 } else {
                     set label $opt
                 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2006,22 +1963,21 @@ proc action_info { action portlist opts } {
</span>             # Format list of maintainers
             if {$ropt eq "maintainers"} {
                 set infresult [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                foreach serialized [macports::unobscure_maintainers $inf] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                foreach maintainer [macports::unobscure_maintainers $inf] {
</span>                     set parts [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    array set maintainer $serialized
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[info exists maintainer(email)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[dict exists $maintainer email]} {
</span>                         set item [expr {$pretty_print ? "Email: " : ""}]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        append item $maintainer(email)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        append item [dict get $maintainer email]
</span>                         lappend parts $item
                     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[info exists maintainer(github)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[dict exists $maintainer github]} {
</span>                         set item [expr {$pretty_print ? "GitHub: " : ""}]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        append item $maintainer(github)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        append item [dict get $maintainer github]
</span>                         lappend parts $item
                     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[info exists maintainer(keyword)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        switch $maintainer(keyword) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[dict exists $maintainer keyword]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        switch [dict get $maintainer keyword] {
</span>                             nomaintainer {
                                 lappend parts [expr {$pretty_print ? "none" : ""}]
                             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2033,7 +1989,6 @@ proc action_info { action portlist opts } {
</span>                         }
                     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    array unset maintainer
</span>                     lappend infresult [join $parts [expr {$pretty_print ? ", " : " "}]]
                 }
                 set inf $infresult
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2041,11 +1996,6 @@ proc action_info { action portlist opts } {
</span> 
             # Format variants
             if {$pretty_print && $ropt eq "variants"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                array unset vinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[info exists portinfo(vinfo)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    array set vinfo $portinfo(vinfo)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>                 set pi_vars $inf
                 set inf [list]
                 foreach v [lsort $pi_vars] {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2057,12 +2007,8 @@ proc action_info { action portlist opts } {
</span>                         # selected by variants.conf, prefixed with (+)/(-)
                         set varmodifier "($global_variations($v))"
                         # Retrieve additional information from the new key.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    } elseif {[info exists vinfo]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        array unset variant
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        array set variant $vinfo($v)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        if {[info exists variant(is_default)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            set varmodifier "\[$variant(is_default)]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    } elseif {[dict exists $portinfo vinfo $v is_default]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set varmodifier "\[[dict get $portinfo vinfo $v is_default]]"
</span>                     }
                     lappend inf "$varmodifier$v"
                 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2080,8 +2026,8 @@ proc action_info { action portlist opts } {
</span> 
             # End of special pretty-print formatting for certain fields
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[info exists list_map($ropt)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set field [join $inf [lindex $list_map($ropt) $list_map_index]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[dict exists $list_map $ropt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set field [join $inf [lindex [dict get $list_map $ropt] $list_map_index]]
</span>             } else {
                 set field $inf
             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2103,14 +2049,14 @@ proc action_info { action portlist opts } {
</span>                 }
                 if {$label eq ""} {
                     set wrap_len 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[info exists pretty_wrap($ropt)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set wrap_len $pretty_wrap($ropt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[dict exists $pretty_wrap $ropt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set wrap_len [dict get $pretty_wrap $ropt]
</span>                     }
                     lappend fields [wrap $field 0 [string repeat " " $wrap_len]]
                 } else {
                     set wrap_len [string length $label]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[info exists pretty_wrap($ropt)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set wrap_len $pretty_wrap($ropt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[dict exists $pretty_wrap $ropt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set wrap_len [dict get $pretty_wrap $ropt]
</span>                     }
                     lappend fields [wraplabel $label $field 0 [string repeat " " $wrap_len]]
                 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3582,7 +3528,7 @@ proc action_search { action portlist opts } {
</span> 
             set tmp [list]
             foreach {name info} $matches {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                add_to_portlist_with_defaults tmp [concat [list name $name] $info]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                add_to_portlist_with_defaults tmp [dict create name $name {*}$info]
</span>             }
             set res [opUnion $res $tmp]
         }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3662,7 +3608,7 @@ proc action_list { action portlist opts } {
</span> 
     # Default to list all ports if no portnames are supplied
     if { ![llength $portlist] && [info exists private_options(ports_no_args)] && $private_options(ports_no_args) eq "yes"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        add_to_portlist_with_defaults portlist [list name "-all-"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        add_to_portlist_with_defaults portlist [dict create name "-all-"]
</span>     }
 
     foreachport $portlist {
</pre><pre style='margin:0'>

</pre>