From a724f739ac05932709f6a4569f2062a8b1015ff0 Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 8 Jan 2026 04:48:29 +0100 Subject: [PATCH] fix: more pointer type safety in example plugins Signed-off-by: Christopher Arndt --- examples/amp_plugin.nim | 6 +++--- examples/faustlpf_plugin.nim | 6 +++--- examples/miditranspose_plugin.nim | 19 +++++++++++-------- examples/multimodefilter_plugin.nim | 6 +++--- examples/tiltfilter_plugin.nim | 6 +++--- src/nymph/core.nim | 3 ++- 6 files changed, 25 insertions(+), 21 deletions(-) diff --git a/examples/amp_plugin.nim b/examples/amp_plugin.nim index 75d3f25..38f8cab 100644 --- a/examples/amp_plugin.nim +++ b/examples/amp_plugin.nim @@ -28,12 +28,12 @@ proc instantiate(descriptor: ptr Lv2Descriptor; sampleRate: cdouble; Lv2Handle {.cdecl.} = try: let plug: ptr AmpPlugin = createShared(AmpPlugin) - + plug.map = cast[ptr UridMap](lv2FeaturesData(features, lv2UridMap)) if plug.map.isNil: freeShared(plug) - return nil + return cast[Lv2Handle](nil) let logPtr = cast[ptr Log](lv2FeaturesData(features, lv2LogLog)) @@ -43,7 +43,7 @@ proc instantiate(descriptor: ptr Lv2Descriptor; sampleRate: cdouble; plug.log.note("nymph amp LV2 plugin instance created.") return cast[Lv2Handle](plug) except OutOfMemDefect: - return nil + return cast[Lv2Handle](nil) proc connectPort(instance: Lv2Handle; port: cuint; diff --git a/examples/faustlpf_plugin.nim b/examples/faustlpf_plugin.nim index 2007071..0bd9feb 100644 --- a/examples/faustlpf_plugin.nim +++ b/examples/faustlpf_plugin.nim @@ -21,12 +21,12 @@ proc instantiate(descriptor: ptr Lv2Descriptor; sampleRate: cdouble; bundlePath: cstring; features: ptr UncheckedArray[ptr Lv2Feature]): Lv2Handle {.cdecl.} = try: - let plug = cast[ptr FaustLPFPlugin](createShared(FaustLPFPlugin)) + let plug: ptr FaustLPFPlugin = createShared(FaustLPFPlugin) plug.flt = newfaustlpf() initfaustlpf(plug.flt, sampleRate.cint) return cast[Lv2Handle](plug) except OutOfMemDefect: - return nil + return cast[Lv2Handle](nil) proc connectPort(instance: Lv2Handle; port: cuint; @@ -73,7 +73,7 @@ let descriptor = Lv2Descriptor( ) proc lv2Descriptor(index: cuint): ptr Lv2Descriptor {. - cdecl, exportc, dynlib, extern: "lv2_descriptor".} = + cdecl, dynlib, exportc: "lv2_descriptor".} = if index == 0: NimMain() return addr(descriptor) diff --git a/examples/miditranspose_plugin.nim b/examples/miditranspose_plugin.nim index cd6040d..3261981 100644 --- a/examples/miditranspose_plugin.nim +++ b/examples/miditranspose_plugin.nim @@ -28,16 +28,19 @@ type proc instantiate(descriptor: ptr Lv2Descriptor; sampleRate: cdouble; bundlePath: cstring; features: ptr UncheckedArray[ptr Lv2Feature]): Lv2Handle {.cdecl.} = - let plug: ptr MidiTransposePlugin = createShared(MidiTransposePlugin) - plug.map = cast[ptr UridMap](lv2FeaturesData(features, lv2UridMap)) + try: + let plug: ptr MidiTransposePlugin = createShared(MidiTransposePlugin) + plug.map = cast[ptr UridMap](lv2FeaturesData(features, lv2UridMap)) - if plug.map.isNil: - freeShared(plug) - return nil + if plug.map.isNil: + freeShared(plug) + return cast[Lv2Handle](nil) - plug.midi_urid = plug.map.map(plug.map.handle, lv2MidiMidiEvent) + plug.midi_urid = plug.map.map(plug.map.handle, lv2MidiMidiEvent) - return cast[Lv2Handle](plug) + return cast[Lv2Handle](plug) + except OutOfMemDefect: + return cast[Lv2Handle](nil) proc connectPort(instance: Lv2Handle; port: cuint; @@ -95,7 +98,7 @@ let descriptor = Lv2Descriptor( ) proc lv2Descriptor(index: cuint): ptr Lv2Descriptor {. - cdecl, exportc, dynlib, extern: "lv2_descriptor".} = + cdecl, dynlib, exportc: "lv2_descriptor".} = if index == 0: NimMain() return addr(descriptor) diff --git a/examples/multimodefilter_plugin.nim b/examples/multimodefilter_plugin.nim index 9c48336..406b1fd 100644 --- a/examples/multimodefilter_plugin.nim +++ b/examples/multimodefilter_plugin.nim @@ -27,12 +27,12 @@ proc instantiate(descriptor: ptr Lv2Descriptor; sampleRate: cdouble; bundlePath: cstring; features: ptr UncheckedArray[ptr Lv2Feature]): Lv2Handle {.cdecl.} = try: - let plug = createShared(SVFPlugin) + let plug: ptr SVFPlugin = createShared(SVFPlugin) plug.svf = initSVFilter(fmLowPass, sampleRate) plug.smoothCutoff = initParamSmooth(20.0, sampleRate) return cast[Lv2Handle](plug) except OutOfMemDefect: - return nil + return cast[Lv2Handle](nil) proc connectPort(instance: Lv2Handle; port: cuint; @@ -91,7 +91,7 @@ let descriptor = Lv2Descriptor( ) proc lv2Descriptor(index: cuint): ptr Lv2Descriptor {. - cdecl, exportc, dynlib, extern: "lv2_descriptor".} = + cdecl, dynlib, exportc: "lv2_descriptor".} = if index == 0: NimMain() return addr(descriptor) diff --git a/examples/tiltfilter_plugin.nim b/examples/tiltfilter_plugin.nim index f66aa97..4027c02 100644 --- a/examples/tiltfilter_plugin.nim +++ b/examples/tiltfilter_plugin.nim @@ -30,12 +30,12 @@ proc instantiate(descriptor: ptr Lv2Descriptor; sampleRate: cdouble; bundlePath: cstring; features: ptr UncheckedArray[ptr Lv2Feature]): Lv2Handle {.cdecl.} = try: - let plug = createShared(TiltFilterPlugin) + let plug: ptr TiltFilterPlugin = createShared(TiltFilterPlugin) plug.flt = initTiltFilter(10_000.0, 1.0, fmLowPass, sampleRate) plug.smoothFreq = initParamSmooth(20.0, sampleRate) return cast[Lv2Handle](plug) except OutOfMemDefect: - return nil + return cast[Lv2Handle](nil) proc connectPort(instance: Lv2Handle; port: cuint; @@ -91,7 +91,7 @@ let descriptor = Lv2Descriptor( ) proc lv2Descriptor(index: cuint): ptr Lv2Descriptor {. - cdecl, exportc, dynlib, extern: "lv2_descriptor".} = + cdecl, dynlib, exportc: "lv2_descriptor".} = if index == 0: NimMain() return addr(descriptor) diff --git a/src/nymph/core.nim b/src/nymph/core.nim index 25541d4..6c137b2 100644 --- a/src/nymph/core.nim +++ b/src/nymph/core.nim @@ -92,7 +92,8 @@ const lv2CoreInstanceSampleRate* = lv2CorePrefix & "sampleRate" lv2CoreInstanceToggled* = lv2CorePrefix & "toggled" -type Lv2Handle* = pointer +type + Lv2Handle* = distinct pointer type Lv2Feature* = object uri*: cstring