11import { CPointer , CVizzu , CString } from '../cvizzu.types'
22
33import { CError } from './cerror.js'
4- import { ObjectRegistry , FnGetter , CPointerClosure } from './objregistry.js'
4+ import { ObjectRegistry , CPointerClosure } from './objregistry.js'
55
66export class CEnv {
77 protected _wasm : CVizzu
@@ -23,8 +23,9 @@ export class CEnv {
2323 return this . _wasm . UTF8ToString ( str )
2424 }
2525
26- protected _getStatic ( getter : FnGetter ) : CPointerClosure {
27- return this . _objectRegistry . get ( this . _callStatic ( getter ) )
26+ protected _getStatic ( getter : ( ) => CPointer ) : CPointerClosure {
27+ const cPointer = this . _callStatic ( getter ) ( )
28+ return ( ) : CPointer => cPointer
2829 }
2930
3031 protected _callStatic < T extends unknown [ ] , R > ( f : ( ...params : T ) => R ) : ( ...params : T ) => R {
@@ -55,7 +56,8 @@ export class CObject extends CEnv {
5556 }
5657
5758 protected _get ( getter : ( self : CPointer ) => CPointer ) : CPointerClosure {
58- return this . _objectRegistry . get ( this . _call ( getter ) )
59+ const cPointer = this . _call ( getter ) ( )
60+ return ( ) : CPointer => cPointer
5961 }
6062
6163 protected _call < T extends unknown [ ] , R > (
@@ -64,3 +66,15 @@ export class CObject extends CEnv {
6466 return super . _callStatic ( f ) . bind ( this , this . getId ( ) )
6567 }
6668}
69+
70+ export class CManagedObject extends CObject {
71+ constructor ( getId : CPointerClosure , cenv : CEnv ) {
72+ super ( getId , cenv )
73+ this . _objectRegistry . register ( this . getId )
74+ }
75+
76+ free ( ) : void {
77+ this . _objectRegistry . unregister ( this . getId )
78+ this . _wasm . _object_free ( this . getId ( ) )
79+ }
80+ }
0 commit comments