internal static ISassType[] GetSassArguments(IntPtr rawPointer) { var length = sass_list_get_length(rawPointer); var values = new ISassType[length]; for (int i = 0; i < length; ++i) { var rawValue = sass_list_get_value(rawPointer, i); var convertedValue = GetSassType(rawValue); values[i] = convertedValue; } return(values); }
private IntPtr SassFunctionCallback(IntPtr sassValues, IntPtr callback, IntPtr compiler) { ISassType[] convertedValues = TypeFactory.GetSassArguments(sassValues); IntPtr signaturePtr = sass_function_get_signature(callback); string signature = PtrToString(signaturePtr); IntPtr cookiePtr = sass_function_get_cookie(callback); CustomFunctionDelegate customFunctionCallback = _functionsCallbackDictionary[cookiePtr]; ISassType returnedValue = customFunctionCallback(_sassOptions, signature, convertedValues); var ptr = TypeFactory.GetRawPointer(returnedValue, ValidityEvent); ValidityEvent.Invoke(); return(ptr); }
public static IntPtr GetRawPointer(ISassType returnedValue, InternalPtrValidityEventHandler onValidityEvent) { if (returnedValue == null) { returnedValue = SassNull.Instance; } var sassExportableType = returnedValue as ISassExportableType; if (sassExportableType != null) { return(sassExportableType.GetInternalTypePtr(onValidityEvent, true)); } // This should never happen. I could not find anyway to keep both // OOP and Resharper satisfied with the current design of ISassType // with public accessor and ISassExportableType with internal accessor // and all Sass types implementing both interfaces. return(IntPtr.Zero); }