|  | 
| 26 | 26 | #include <set> | 
| 27 | 27 | 
 | 
| 28 | 28 | #include "fn_utils.hpp" | 
|  | 29 | +#include "fn_maps.hpp" | 
| 29 | 30 | #include "fn_lists.hpp" | 
| 30 | 31 | #include "fn_colors.hpp" | 
| 31 | 32 | #include "fn_numbers.hpp" | 
| @@ -53,89 +54,6 @@ namespace Sass { | 
| 53 | 54 |       "custom-property" | 
| 54 | 55 |     }; | 
| 55 | 56 | 
 | 
| 56 |  | -    ///////////////// | 
| 57 |  | -    // MAP FUNCTIONS | 
| 58 |  | -    ///////////////// | 
| 59 |  | - | 
| 60 |  | -    Signature map_get_sig = "map-get($map, $key)"; | 
| 61 |  | -    BUILT_IN(map_get) | 
| 62 |  | -    { | 
| 63 |  | -      // leaks for "map-get((), foo)" if not Obj | 
| 64 |  | -      // investigate why this is (unexpected) | 
| 65 |  | -      Map_Obj m = ARGM("$map", Map, ctx); | 
| 66 |  | -      Expression_Obj v = ARG("$key", Expression); | 
| 67 |  | -      try { | 
| 68 |  | -        Expression_Obj val = m->at(v); | 
| 69 |  | -        if (!val) return SASS_MEMORY_NEW(Null, pstate); | 
| 70 |  | -        val->set_delayed(false); | 
| 71 |  | -        return val.detach(); | 
| 72 |  | -      } catch (const std::out_of_range&) { | 
| 73 |  | -        return SASS_MEMORY_NEW(Null, pstate); | 
| 74 |  | -      } | 
| 75 |  | -      catch (...) { throw; } | 
| 76 |  | -    } | 
| 77 |  | - | 
| 78 |  | -    Signature map_has_key_sig = "map-has-key($map, $key)"; | 
| 79 |  | -    BUILT_IN(map_has_key) | 
| 80 |  | -    { | 
| 81 |  | -      Map_Obj m = ARGM("$map", Map, ctx); | 
| 82 |  | -      Expression_Obj v = ARG("$key", Expression); | 
| 83 |  | -      return SASS_MEMORY_NEW(Boolean, pstate, m->has(v)); | 
| 84 |  | -    } | 
| 85 |  | - | 
| 86 |  | -    Signature map_keys_sig = "map-keys($map)"; | 
| 87 |  | -    BUILT_IN(map_keys) | 
| 88 |  | -    { | 
| 89 |  | -      Map_Obj m = ARGM("$map", Map, ctx); | 
| 90 |  | -      List_Ptr result = SASS_MEMORY_NEW(List, pstate, m->length(), SASS_COMMA); | 
| 91 |  | -      for ( auto key : m->keys()) { | 
| 92 |  | -        result->append(key); | 
| 93 |  | -      } | 
| 94 |  | -      return result; | 
| 95 |  | -    } | 
| 96 |  | - | 
| 97 |  | -    Signature map_values_sig = "map-values($map)"; | 
| 98 |  | -    BUILT_IN(map_values) | 
| 99 |  | -    { | 
| 100 |  | -      Map_Obj m = ARGM("$map", Map, ctx); | 
| 101 |  | -      List_Ptr result = SASS_MEMORY_NEW(List, pstate, m->length(), SASS_COMMA); | 
| 102 |  | -      for ( auto key : m->keys()) { | 
| 103 |  | -        result->append(m->at(key)); | 
| 104 |  | -      } | 
| 105 |  | -      return result; | 
| 106 |  | -    } | 
| 107 |  | - | 
| 108 |  | -    Signature map_merge_sig = "map-merge($map1, $map2)"; | 
| 109 |  | -    BUILT_IN(map_merge) | 
| 110 |  | -    { | 
| 111 |  | -      Map_Obj m1 = ARGM("$map1", Map, ctx); | 
| 112 |  | -      Map_Obj m2 = ARGM("$map2", Map, ctx); | 
| 113 |  | - | 
| 114 |  | -      size_t len = m1->length() + m2->length(); | 
| 115 |  | -      Map_Ptr result = SASS_MEMORY_NEW(Map, pstate, len); | 
| 116 |  | -      // concat not implemented for maps | 
| 117 |  | -      *result += m1; | 
| 118 |  | -      *result += m2; | 
| 119 |  | -      return result; | 
| 120 |  | -    } | 
| 121 |  | - | 
| 122 |  | -    Signature map_remove_sig = "map-remove($map, $keys...)"; | 
| 123 |  | -    BUILT_IN(map_remove) | 
| 124 |  | -    { | 
| 125 |  | -      bool remove; | 
| 126 |  | -      Map_Obj m = ARGM("$map", Map, ctx); | 
| 127 |  | -      List_Obj arglist = ARG("$keys", List); | 
| 128 |  | -      Map_Ptr result = SASS_MEMORY_NEW(Map, pstate, 1); | 
| 129 |  | -      for (auto key : m->keys()) { | 
| 130 |  | -        remove = false; | 
| 131 |  | -        for (size_t j = 0, K = arglist->length(); j < K && !remove; ++j) { | 
| 132 |  | -          remove = Operators::eq(key, arglist->value_at_index(j)); | 
| 133 |  | -        } | 
| 134 |  | -        if (!remove) *result << std::make_pair(key, m->at(key)); | 
| 135 |  | -      } | 
| 136 |  | -      return result; | 
| 137 |  | -    } | 
| 138 |  | - | 
| 139 | 57 |     ////////////////////////// | 
| 140 | 58 |     // INTROSPECTION FUNCTIONS | 
| 141 | 59 |     ////////////////////////// | 
|  | 
0 commit comments