@@ -59,14 +59,18 @@ func Debug() *VM {
5959func (vm * VM ) Run (program * Program , env any ) (_ any , err error ) {
6060 defer func () {
6161 if r := recover (); r != nil {
62+ var location file.Location
63+ if vm .ip - 1 < len (program .locations ) {
64+ location = program .locations [vm .ip - 1 ]
65+ }
6266 f := & file.Error {
63- Location : program . Locations [ vm . ip - 1 ] ,
67+ Location : location ,
6468 Message : fmt .Sprintf ("%v" , r ),
6569 }
6670 if err , ok := r .(error ); ok {
6771 f .Wrap (err )
6872 }
69- err = f .Bind (program .Source )
73+ err = f .Bind (program .source )
7074 }
7175 }()
7276
@@ -108,10 +112,10 @@ func (vm *VM) Run(program *Program, env any) (_ any, err error) {
108112 vm .pop ()
109113
110114 case OpStore :
111- program .Variables [arg ] = vm .pop ()
115+ program .variables [arg ] = vm .pop ()
112116
113117 case OpLoadVar :
114- vm .push (program .Variables [arg ])
118+ vm .push (program .variables [arg ])
115119
116120 case OpLoadConst :
117121 vm .push (runtime .Fetch (env , program .Constants [arg ]))
@@ -126,7 +130,7 @@ func (vm *VM) Run(program *Program, env any) (_ any, err error) {
126130 vm .push (runtime .FetchMethod (env , program .Constants [arg ].(* runtime.Method )))
127131
128132 case OpLoadFunc :
129- vm .push (program .Functions [arg ])
133+ vm .push (program .functions [arg ])
130134
131135 case OpFetch :
132136 b := vm .pop ()
@@ -332,15 +336,15 @@ func (vm *VM) Run(program *Program, env any) (_ any, err error) {
332336 vm .push (out [0 ].Interface ())
333337
334338 case OpCall0 :
335- out , err := program .Functions [arg ]()
339+ out , err := program .functions [arg ]()
336340 if err != nil {
337341 panic (err )
338342 }
339343 vm .push (out )
340344
341345 case OpCall1 :
342346 a := vm .pop ()
343- out , err := program.Functions [arg ](a )
347+ out , err := program.functions [arg ](a )
344348 if err != nil {
345349 panic (err )
346350 }
@@ -349,7 +353,7 @@ func (vm *VM) Run(program *Program, env any) (_ any, err error) {
349353 case OpCall2 :
350354 b := vm .pop ()
351355 a := vm .pop ()
352- out , err := program .Functions [arg ](a , b )
356+ out , err := program .functions [arg ](a , b )
353357 if err != nil {
354358 panic (err )
355359 }
@@ -359,7 +363,7 @@ func (vm *VM) Run(program *Program, env any) (_ any, err error) {
359363 c := vm .pop ()
360364 b := vm .pop ()
361365 a := vm .pop ()
362- out , err := program .Functions [arg ](a , b , c )
366+ out , err := program .functions [arg ](a , b , c )
363367 if err != nil {
364368 panic (err )
365369 }
0 commit comments