# Copyright 2018 Steven Watanabe # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) # Named parameters are represented as a list which has the # argument name as the first element and the value as the # remaining elements. This function sorts the parameters # into the correct variables and removes the parameter names. # # Example:: # # rule exe ( name : sources * : requirements * ) # { # param.handle-named-params sources requirements ; # # At this point $(sources) is test.cpp # } # exe test : requirements shared : sources test.cpp ; # rule handle-named-params ( parameter-names * ) { module [ CALLER_MODULE ] { # Uglify the variable names, because we're executing in an unknown module. local found-8bef5c096d06a1b0 ; local tmp-8bef5c096d06a1b0.$(1) ; for local v-8bef5c096d06a1b0 in $(1) { if $($(v-8bef5c096d06a1b0)[1]) && $($(v-8bef5c096d06a1b0)[1]) in $(1) { if $(tmp-8bef5c096d06a1b0.$($(v-8bef5c096d06a1b0)[1])) { import errors ; errors.error Parameter '$($(v-8bef5c096d06a1b0)[1])' passed more than once. ; } found-8bef5c096d06a1b0 = true ; tmp-8bef5c096d06a1b0.$($(v-8bef5c096d06a1b0)[1]) = $($(v-8bef5c096d06a1b0)[2-]) ; } else if $($(v-8bef5c096d06a1b0))-is-defined { if $(found-8bef5c096d06a1b0) { import errors ; errors.error "Positional arguments must appear first." ; } tmp-8bef5c096d06a1b0.$(v-8bef5c096d06a1b0) = $($(v-8bef5c096d06a1b0)) ; } } for local v-8bef5c096d06a1b0 in $(1) { $(v-8bef5c096d06a1b0) = $(tmp-8bef5c096d06a1b0.$(v-8bef5c096d06a1b0)) ; } } }