Class: SassC::FunctionsHandler
- Inherits:
-
Object
- Object
- SassC::FunctionsHandler
- Defined in:
- lib/sassc/functions_handler.rb
Instance Method Summary collapse
-
#initialize(options) ⇒ FunctionsHandler
constructor
A new instance of FunctionsHandler.
- #setup(native_options, functions: Script::Functions) ⇒ Object
Constructor Details
#initialize(options) ⇒ FunctionsHandler
Returns a new instance of FunctionsHandler.
5 6 7 |
# File 'lib/sassc/functions_handler.rb', line 5 def initialize() @options = end |
Instance Method Details
#setup(native_options, functions: Script::Functions) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/sassc/functions_handler.rb', line 9 def setup(, functions: Script::Functions) @callbacks = {} @function_names = {} list = Native.make_function_list(Script.custom_functions(functions: functions).count) # use an anonymous class wrapper to avoid mutations in a threaded environment functions_wrapper = Class.new do attr_accessor :options include functions end.new functions_wrapper. = @options Script.custom_functions(functions: functions).each_with_index do |custom_function, i| @callbacks[custom_function] = FFI::Function.new(:pointer, [:pointer, :pointer]) do |native_argument_list, | begin function_arguments = arguments_from_native_list(native_argument_list) result = functions_wrapper.send(custom_function, *function_arguments) to_native_value(result) rescue StandardError => exception # This rescues any exceptions that occur either in value conversion # or during the execution of a custom function. error(exception.) end end @function_names[custom_function] = Script.formatted_function_name(custom_function, functions: functions) callback = Native.make_function( @function_names[custom_function], @callbacks[custom_function], nil ) Native::function_set_list_entry(list, i, callback) end Native::option_set_c_functions(, list) end |