@@ -33,6 +33,8 @@ const char *fpvm_version()
33
33
void fpvm_init (struct fpvm_fragment * fragment , int vector_mode )
34
34
{
35
35
fragment -> last_error [0 ] = 0 ;
36
+ fragment -> bind_callback = NULL ;
37
+ fragment -> bind_callback_user = NULL ;
36
38
37
39
fragment -> nbindings = 3 ;
38
40
fragment -> bindings [0 ].isvar = 1 ;
@@ -70,15 +72,26 @@ void fpvm_init(struct fpvm_fragment *fragment, int vector_mode)
70
72
fragment -> vector_mode = vector_mode ;
71
73
}
72
74
75
+ void fpvm_set_bind_callback (struct fpvm_fragment * fragment , fpvm_bind_callback callback , void * user )
76
+ {
77
+ fragment -> bind_callback = callback ;
78
+ fragment -> bind_callback_user = user ;
79
+ }
80
+
73
81
int fpvm_bind (struct fpvm_fragment * fragment , const char * sym )
74
82
{
83
+ int r ;
84
+
75
85
if (fragment -> nbindings == FPVM_MAXBINDINGS ) {
76
86
snprintf (fragment -> last_error , FPVM_MAXERRLEN , "Failed to allocate register for variable: %s" , sym );
77
87
return FPVM_INVALID_REG ;
78
88
}
79
- fragment -> bindings [fragment -> nbindings ].isvar = 1 ;
80
- strcpy (fragment -> bindings [fragment -> nbindings ].b .v , sym );
81
- return fragment -> nbindings ++ ;
89
+ r = fragment -> nbindings ++ ;
90
+ fragment -> bindings [r ].isvar = 1 ;
91
+ strcpy (fragment -> bindings [r ].b .v , sym );
92
+ if (fragment -> bind_callback != NULL )
93
+ fragment -> bind_callback (fragment -> bind_callback_user , sym , r );
94
+ return r ;
82
95
}
83
96
84
97
void fpvm_set_xin (struct fpvm_fragment * fragment , const char * sym )
0 commit comments