@@ -496,10 +496,15 @@ proc processStderr(instance: ptr InstanceData; self: var ProcessResource): ReadC
496496proc processStdout (instance: ptr InstanceData ; self: var ProcessResource ): ReadChannelResource
497497proc processStdin (instance: ptr InstanceData ; self: var ProcessResource ): WriteChannelResource
498498proc registersIsReplayingCommands (instance: ptr InstanceData ): bool
499+ proc registersIsRecordingCommands (instance: ptr InstanceData ;
500+ register: sink string ): bool
499501proc registersSetRegisterText (instance: ptr InstanceData ; text: sink string ;
500502 register: sink string ): void
503+ proc registersGetRegisterText (instance: ptr InstanceData ; register: sink string ): string
501504proc registersStartRecordingCommands (instance: ptr InstanceData ;
502505 register: sink string ): void
506+ proc registersStopRecordingCommands (instance: ptr InstanceData ;
507+ register: sink string ): void
503508proc defineComponent * (linker: ptr LinkerT ): WasmtimeResult [void ] =
504509 block :
505510 let e = block :
@@ -3167,6 +3172,35 @@ proc defineComponent*(linker: ptr LinkerT): WasmtimeResult[void] =
31673172 parameters [0 ].i32 = cast [int32 ](res)
31683173 if e.isErr:
31693174 return e
3175+ block :
3176+ let e = block :
3177+ var ty: ptr WasmFunctypeT = newFunctype (
3178+ [WasmValkind .I32 , WasmValkind .I32 ], [WasmValkind .I32 ])
3179+ linker.defineFuncUnchecked (" nev:plugins/registers" ,
3180+ " is-recording-commands" , ty):
3181+ var instance = cast [ptr InstanceData ](store.getData ())
3182+ var mainMemory = caller.getExport (" memory" )
3183+ if mainMemory.isNone:
3184+ mainMemory = instance.getMemoryFor (caller)
3185+ var memory: ptr UncheckedArray [uint8 ] = nil
3186+ if mainMemory.get.kind == WASMTIME_EXTERN_SHAREDMEMORY :
3187+ memory = cast [ptr UncheckedArray [uint8 ]](data (
3188+ mainMemory.get.of_field.sharedmemory))
3189+ elif mainMemory.get.kind == WASMTIME_EXTERN_MEMORY :
3190+ memory = cast [ptr UncheckedArray [uint8 ]](store.data (
3191+ mainMemory.get.of_field.memory.addr ))
3192+ else :
3193+ assert false
3194+ var register: string
3195+ block :
3196+ let p0 = cast [ptr UncheckedArray [char ]](memory[parameters[0 ].i32].addr )
3197+ register = newString (parameters[1 ].i32)
3198+ for i0 in 0 ..< register.len:
3199+ register[i0] = p0[i0]
3200+ let res = registersIsRecordingCommands (instance, register)
3201+ parameters [0 ].i32 = cast [int32 ](res)
3202+ if e.isErr:
3203+ return e
31703204 block :
31713205 let e = block :
31723206 var ty: ptr WasmFunctypeT = newFunctype (
@@ -3202,6 +3236,46 @@ proc defineComponent*(linker: ptr LinkerT): WasmtimeResult[void] =
32023236 registersSetRegisterText (instance, text, register)
32033237 if e.isErr:
32043238 return e
3239+ block :
3240+ let e = block :
3241+ var ty: ptr WasmFunctypeT = newFunctype (
3242+ [WasmValkind .I32 , WasmValkind .I32 , WasmValkind .I32 ], [])
3243+ linker.defineFuncUnchecked (" nev:plugins/registers" , " get-register-text" ,
3244+ ty):
3245+ var instance = cast [ptr InstanceData ](store.getData ())
3246+ var mainMemory = caller.getExport (" memory" )
3247+ if mainMemory.isNone:
3248+ mainMemory = instance.getMemoryFor (caller)
3249+ var memory: ptr UncheckedArray [uint8 ] = nil
3250+ if mainMemory.get.kind == WASMTIME_EXTERN_SHAREDMEMORY :
3251+ memory = cast [ptr UncheckedArray [uint8 ]](data (
3252+ mainMemory.get.of_field.sharedmemory))
3253+ elif mainMemory.get.kind == WASMTIME_EXTERN_MEMORY :
3254+ memory = cast [ptr UncheckedArray [uint8 ]](store.data (
3255+ mainMemory.get.of_field.memory.addr ))
3256+ else :
3257+ assert false
3258+ let stackAllocFunc = caller.getExport (" mem_stack_alloc" ).get.of_field.func_field
3259+ var register: string
3260+ block :
3261+ let p0 = cast [ptr UncheckedArray [char ]](memory[parameters[0 ].i32].addr )
3262+ register = newString (parameters[1 ].i32)
3263+ for i0 in 0 ..< register.len:
3264+ register[i0] = p0[i0]
3265+ let res = registersGetRegisterText (instance, register)
3266+ let retArea = parameters[^ 1 ].i32
3267+ if res.len > 0 :
3268+ let dataPtrWasm0 = int32 (? stackAlloc (stackAllocFunc, store,
3269+ (res.len * 1 ).int32 , 4 ))
3270+ cast [ptr int32 ](memory [retArea + 0 ].addr )[] = cast [int32 ](dataPtrWasm0)
3271+ block :
3272+ for i0 in 0 ..< res.len:
3273+ memory [dataPtrWasm0 + i0] = cast [uint8 ](res[i0])
3274+ else :
3275+ cast [ptr int32 ](memory[retArea + 0 ].addr )[] = 0 .int32
3276+ cast [ptr int32 ](memory [retArea + 4 ].addr )[] = cast [int32 ](res.len)
3277+ if e.isErr:
3278+ return e
32053279 block :
32063280 let e = block :
32073281 var ty: ptr WasmFunctypeT = newFunctype (
@@ -3230,3 +3304,31 @@ proc defineComponent*(linker: ptr LinkerT): WasmtimeResult[void] =
32303304 registersStartRecordingCommands (instance, register)
32313305 if e.isErr:
32323306 return e
3307+ block :
3308+ let e = block :
3309+ var ty: ptr WasmFunctypeT = newFunctype (
3310+ [WasmValkind .I32 , WasmValkind .I32 ], [])
3311+ linker.defineFuncUnchecked (" nev:plugins/registers" ,
3312+ " stop-recording-commands" , ty):
3313+ var instance = cast [ptr InstanceData ](store.getData ())
3314+ var mainMemory = caller.getExport (" memory" )
3315+ if mainMemory.isNone:
3316+ mainMemory = instance.getMemoryFor (caller)
3317+ var memory: ptr UncheckedArray [uint8 ] = nil
3318+ if mainMemory.get.kind == WASMTIME_EXTERN_SHAREDMEMORY :
3319+ memory = cast [ptr UncheckedArray [uint8 ]](data (
3320+ mainMemory.get.of_field.sharedmemory))
3321+ elif mainMemory.get.kind == WASMTIME_EXTERN_MEMORY :
3322+ memory = cast [ptr UncheckedArray [uint8 ]](store.data (
3323+ mainMemory.get.of_field.memory.addr ))
3324+ else :
3325+ assert false
3326+ var register: string
3327+ block :
3328+ let p0 = cast [ptr UncheckedArray [char ]](memory[parameters[0 ].i32].addr )
3329+ register = newString (parameters[1 ].i32)
3330+ for i0 in 0 ..< register.len:
3331+ register[i0] = p0[i0]
3332+ registersStopRecordingCommands (instance, register)
3333+ if e.isErr:
3334+ return e
0 commit comments