|
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