Implement global functions for the new evaluation system #711
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This implements all the global functions of the core (functions that are only exposed from built-in modules have not been ported from dart-sass yet as modules are not implemented for now), except for the special functions of
sass:meta
that require being implemented in the evaluator itself because they access its internals (those are implemented in #709).Each sass module is implemented as a separate internal class with static methods for each callable (one per function generally, but overloaded functions will have several associated callables).
The
FunctionRegistry
is our registry of core functions, allowing us to lazy-load theBuiltInCallable
only when a function is used for the first time (for now, theFunctionRegistry
does not perform any caching of those SassCallable objects because I kept that in the evaluator instead, but I might revisit that decision in the future).