@@ -99,14 +99,14 @@ static PyObject *handle_result(struct JsonnetVm *vm, char *out, int error)
99
99
}
100
100
}
101
101
102
- int handle_ext_vars (struct JsonnetVm * vm , PyObject * ext_vars )
102
+ int handle_vars (struct JsonnetVm * vm , PyObject * map , int code , int tla )
103
103
{
104
- if (ext_vars == NULL ) return 1 ;
104
+ if (map == NULL ) return 1 ;
105
105
106
106
PyObject * key , * val ;
107
107
Py_ssize_t pos = 0 ;
108
108
109
- while (PyDict_Next (ext_vars , & pos , & key , & val )) {
109
+ while (PyDict_Next (map , & pos , & key , & val )) {
110
110
const char * key_ = PyString_AsString (key );
111
111
if (key_ == NULL ) {
112
112
jsonnet_destroy (vm );
@@ -117,7 +117,15 @@ int handle_ext_vars(struct JsonnetVm *vm, PyObject *ext_vars)
117
117
jsonnet_destroy (vm );
118
118
return 0 ;
119
119
}
120
- jsonnet_ext_var (vm , key_ , val_ );
120
+ if (!tla && !code ) {
121
+ jsonnet_ext_var (vm , key_ , val_ );
122
+ } else if (!tla && code ) {
123
+ jsonnet_ext_code (vm , key_ , val_ );
124
+ } else if (tla && !code ) {
125
+ jsonnet_tla_var (vm , key_ , val_ );
126
+ } else {
127
+ jsonnet_tla_code (vm , key_ , val_ );
128
+ }
121
129
}
122
130
return 1 ;
123
131
}
@@ -145,16 +153,24 @@ static PyObject* evaluate_file(PyObject* self, PyObject* args, PyObject *keywds)
145
153
unsigned max_stack = 500 , gc_min_objects = 1000 , max_trace = 20 ;
146
154
double gc_growth_trigger = 2 ;
147
155
int error ;
148
- PyObject * ext_vars = NULL , * import_callback = NULL ;
156
+ PyObject * ext_vars = NULL , * ext_codes = NULL ;
157
+ PyObject * tla_vars = NULL , * tla_codes = NULL ;
158
+ PyObject * import_callback = NULL ;
149
159
struct JsonnetVm * vm ;
150
- static char * kwlist [] = {"filename" , "max_stack" , "gc_min_objects" , "gc_growth_trigger" , "ext_vars" , "max_trace" , "import_callback" , NULL };
160
+ static char * kwlist [] = {
161
+ "filename" ,
162
+ "max_stack" , "gc_min_objects" , "gc_growth_trigger" , "ext_vars" ,
163
+ "ext_codes" , "tla_vars" , "tla_codes" , "max_trace" , "import_callback" ,
164
+ NULL
165
+ };
151
166
152
167
(void ) self ;
153
168
154
- if (!PyArg_ParseTupleAndKeywords (args , keywds , "s|IIdOIO" , kwlist ,
155
- & filename ,
156
- & max_stack , & gc_min_objects , & gc_growth_trigger , & ext_vars ,
157
- & max_trace , & import_callback )) {
169
+ if (!PyArg_ParseTupleAndKeywords (
170
+ args , keywds , "s|IIdOOOOIO" , kwlist ,
171
+ & filename ,
172
+ & max_stack , & gc_min_objects , & gc_growth_trigger , & ext_vars ,
173
+ & ext_codes , & tla_vars , & tla_codes , & max_trace , & import_callback )) {
158
174
return NULL ;
159
175
}
160
176
@@ -163,9 +179,10 @@ static PyObject* evaluate_file(PyObject* self, PyObject* args, PyObject *keywds)
163
179
jsonnet_gc_min_objects (vm , gc_min_objects );
164
180
jsonnet_max_trace (vm , max_trace );
165
181
jsonnet_gc_growth_trigger (vm , gc_growth_trigger );
166
- if (!handle_ext_vars (vm , ext_vars )) {
167
- return NULL ;
168
- }
182
+ if (!handle_vars (vm , ext_vars , 0 , 0 )) return NULL ;
183
+ if (!handle_vars (vm , ext_codes , 1 , 0 )) return NULL ;
184
+ if (!handle_vars (vm , tla_vars , 0 , 1 )) return NULL ;
185
+ if (!handle_vars (vm , tla_codes , 1 , 1 )) return NULL ;
169
186
struct ImportCtx ctx = { vm , import_callback };
170
187
if (!handle_import_callback (& ctx , import_callback )) {
171
188
return NULL ;
@@ -182,16 +199,24 @@ static PyObject* evaluate_snippet(PyObject* self, PyObject* args, PyObject *keyw
182
199
unsigned max_stack = 500 , gc_min_objects = 1000 , max_trace = 20 ;
183
200
double gc_growth_trigger = 2 ;
184
201
int error ;
185
- PyObject * ext_vars = NULL , * import_callback = NULL ;
202
+ PyObject * ext_vars = NULL , * ext_codes = NULL ;
203
+ PyObject * tla_vars = NULL , * tla_codes = NULL ;
204
+ PyObject * import_callback = NULL ;
186
205
struct JsonnetVm * vm ;
187
- static char * kwlist [] = {"filename" , "src" , "max_stack" , "gc_min_objects" , "gc_growth_trigger" , "ext_vars" , "max_trace" , "import_callback" , NULL };
206
+ static char * kwlist [] = {
207
+ "filename" , "src" ,
208
+ "max_stack" , "gc_min_objects" , "gc_growth_trigger" , "ext_vars" ,
209
+ "ext_codes" , "tla_vars" , "tla_codes" , "max_trace" , "import_callback" ,
210
+ NULL
211
+ };
188
212
189
213
(void ) self ;
190
214
191
- if (!PyArg_ParseTupleAndKeywords (args , keywds , "ss|IIdOIO" , kwlist ,
192
- & filename , & src ,
193
- & max_stack , & gc_min_objects , & gc_growth_trigger , & ext_vars ,
194
- & max_trace , & import_callback )) {
215
+ if (!PyArg_ParseTupleAndKeywords (
216
+ args , keywds , "ss|IIdOOOOIO" , kwlist ,
217
+ & filename , & src ,
218
+ & max_stack , & gc_min_objects , & gc_growth_trigger , & ext_vars ,
219
+ & ext_codes , & tla_vars , & tla_codes , & max_trace , & import_callback )) {
195
220
return NULL ;
196
221
}
197
222
@@ -200,9 +225,10 @@ static PyObject* evaluate_snippet(PyObject* self, PyObject* args, PyObject *keyw
200
225
jsonnet_gc_min_objects (vm , gc_min_objects );
201
226
jsonnet_max_trace (vm , max_trace );
202
227
jsonnet_gc_growth_trigger (vm , gc_growth_trigger );
203
- if (!handle_ext_vars (vm , ext_vars )) {
204
- return NULL ;
205
- }
228
+ if (!handle_vars (vm , ext_vars , 0 , 0 )) return NULL ;
229
+ if (!handle_vars (vm , ext_codes , 1 , 0 )) return NULL ;
230
+ if (!handle_vars (vm , tla_vars , 0 , 1 )) return NULL ;
231
+ if (!handle_vars (vm , tla_codes , 1 , 1 )) return NULL ;
206
232
struct ImportCtx ctx = { vm , import_callback };
207
233
if (!handle_import_callback (& ctx , import_callback )) {
208
234
return NULL ;
0 commit comments