Skip to content

Commit

Permalink
Revert "Revert "Add built-in variables e and pi. (#907)""
Browse files Browse the repository at this point in the history
This reverts commit 3c64add.
  • Loading branch information
Awjin committed Jan 15, 2020
1 parent ad6122a commit 0b20087
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 5 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -6,6 +6,8 @@
* `hypot()`: given *n* numbers, outputs the length of the *n*-dimensional
vector that has components equal to each of the inputs.

* Add the variables `$pi` and `$e` to the built-in "sass:math" module.

## 1.24.4

### JavaScript API
Expand Down
5 changes: 4 additions & 1 deletion lib/src/functions/math.dart
Expand Up @@ -25,7 +25,10 @@ final global = UnmodifiableListView([
final module = BuiltInModule("math", functions: [
_abs, _ceil, _clamp, _compatible, _floor, _hypot, _isUnitless, _max, _min, //
_percentage, _randomFunction, _round, _unit,
]);
], variables: {
"e": SassNumber(math.e),
"pi": SassNumber(math.pi),
});

/// Returns a [Callable] named [name] that transforms a number's value
/// using [transform] and preserves its units.
Expand Down
14 changes: 10 additions & 4 deletions lib/src/module/built_in.dart
Expand Up @@ -17,19 +17,22 @@ class BuiltInModule<T extends AsyncCallable> implements Module<T> {
final Uri url;
final Map<String, T> functions;
final Map<String, T> mixins;
final Map<String, Value> variables;

List<Module<T>> get upstream => const [];
Map<String, Value> get variables => const {};
Map<String, AstNode> get variableNodes => const {};
Extender get extender => Extender.empty;
CssStylesheet get css => CssStylesheet.empty(url: url);
bool get transitivelyContainsCss => false;
bool get transitivelyContainsExtensions => false;

BuiltInModule(String name, {Iterable<T> functions, Iterable<T> mixins})
BuiltInModule(String name,
{Iterable<T> functions, Iterable<T> mixins, Map<String, Value> variables})
: url = Uri(scheme: "sass", path: name),
functions = _callableMap(functions),
mixins = _callableMap(mixins);
mixins = _callableMap(mixins),
variables =
variables == null ? const {} : UnmodifiableMapView(variables);

/// Returns a map from [callables]' names to their values.
static Map<String, T> _callableMap<T extends AsyncCallable>(
Expand All @@ -40,7 +43,10 @@ class BuiltInModule<T extends AsyncCallable> implements Module<T> {
{for (var callable in callables) callable.name: callable}));

void setVariable(String name, Value value, AstNode nodeWithSpan) {
throw SassScriptException("Undefined variable.");
if (!variables.containsKey(name)) {
throw SassScriptException("Undefined variable.");
}
throw SassScriptException("Cannot modify built-in variable.");
}

Module<T> cloneCss() => this;
Expand Down

0 comments on commit 0b20087

Please sign in to comment.