@@ -180,7 +180,10 @@ func (d *Debugger) preHook(i *interpreter, n ast.Node) {
180
180
if l .File == nil {
181
181
return
182
182
}
183
- vs := valueToString (d .lastEvaluation )
183
+ vs , err := valueToString (d .interpreter , d .lastEvaluation )
184
+ if err != nil {
185
+ return
186
+ }
184
187
if d .singleStep {
185
188
d .singleStep = false
186
189
d .events <- & DebugEventStop {
@@ -208,61 +211,6 @@ func (d *Debugger) preHook(i *interpreter, n ast.Node) {
208
211
return
209
212
}
210
213
211
- func valueToString (v value ) string {
212
- switch i := v .(type ) {
213
- case * valueFlatString :
214
- return "\" " + i .getGoString () + "\" "
215
- case * valueObject :
216
- if i == nil {
217
- return "{}"
218
- }
219
- var sb strings.Builder
220
- sb .WriteString ("{" )
221
- firstLine := true
222
- for k , v := range i .cache {
223
- if k .depth != 0 {
224
- continue
225
- }
226
- if ! firstLine {
227
- sb .WriteString (", " )
228
- firstLine = true
229
- }
230
- sb .WriteString (k .field )
231
- sb .WriteString (": " )
232
- sb .WriteString (valueToString (v ))
233
- }
234
- sb .WriteString ("}" )
235
- return sb .String ()
236
- case * valueArray :
237
- var sb strings.Builder
238
- sb .WriteString ("[" )
239
- for i , e := range i .elements {
240
- if i > 0 {
241
- sb .WriteString (", " )
242
- }
243
- sb .WriteString (valueToString (e .content ))
244
- }
245
- sb .WriteString ("]" )
246
- return sb .String ()
247
- case * valueNumber :
248
- return fmt .Sprintf ("%f" , i .value )
249
- case * valueBoolean :
250
- return fmt .Sprintf ("%t" , i .value )
251
- case * valueFunction :
252
- var sb strings.Builder
253
- sb .WriteString ("function(" )
254
- for i , p := range i .parameters () {
255
- if i > 0 {
256
- sb .WriteString (", " )
257
- }
258
- sb .WriteString (string (p .name ))
259
- }
260
- sb .WriteString (")" )
261
- return sb .String ()
262
- }
263
- return fmt .Sprintf ("%T%+v" , v , v )
264
- }
265
-
266
214
func (d * Debugger ) ActiveBreakpoints () []string {
267
215
bps := []string {}
268
216
for k := range d .breakpoints {
@@ -334,9 +282,9 @@ func (d *Debugger) ClearBreakpoints(file string) {
334
282
func (d * Debugger ) LookupValue (val string ) (string , error ) {
335
283
switch val {
336
284
case "self" :
337
- return valueToString (d .interpreter . stack .getSelfBinding ().self ), nil
285
+ return valueToString (d .interpreter , d . interpreter . stack .getSelfBinding ().self )
338
286
case "super" :
339
- return valueToString (d .interpreter . stack .getSelfBinding ().super ().self ), nil
287
+ return valueToString (d .interpreter , d . interpreter . stack .getSelfBinding ().super ().self )
340
288
default :
341
289
v := d .interpreter .stack .lookUpVar (ast .Identifier (val ))
342
290
if v != nil {
@@ -357,7 +305,7 @@ func (d *Debugger) LookupValue(val string) (string, error) {
357
305
}
358
306
v .content = e
359
307
}
360
- return valueToString (v .content ), nil
308
+ return valueToString (d . interpreter , v .content )
361
309
}
362
310
}
363
311
return "" , fmt .Errorf ("invalid identifier %s" , val )
0 commit comments