@@ -173,7 +173,8 @@ func init() {
173173 A := int (inst >> 18 ) & 0xff //GETA
174174 RA := lbase + A
175175 B := int (inst & 0x1ff ) //GETB
176- reg .Set (RA , reg .Get (lbase + B ))
176+ v := reg .Get (lbase + B )
177+ // +inline-call reg.Set RA v
177178 return 0
178179 },
179180 func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_MOVEN
@@ -183,15 +184,17 @@ func init() {
183184 A := int (inst >> 18 ) & 0xff //GETA
184185 B := int (inst & 0x1ff ) //GETB
185186 C := int (inst >> 9 ) & 0x1ff //GETC
186- reg .Set (lbase + A , reg .Get (lbase + B ))
187+ v := reg .Get (lbase + B )
188+ // +inline-call reg.Set lbase+A v
187189 code := cf .Fn .Proto .Code
188190 pc := cf .Pc
189191 for i := 0 ; i < C ; i ++ {
190192 inst = code [pc ]
191193 pc ++
192194 A = int (inst >> 18 ) & 0xff //GETA
193195 B = int (inst & 0x1ff ) //GETB
194- reg .Set (lbase + A , reg .Get (lbase + B ))
196+ v := reg .Get (lbase + B )
197+ // +inline-call reg.Set lbase+A v
195198 }
196199 cf .Pc = pc
197200 return 0
@@ -203,7 +206,8 @@ func init() {
203206 A := int (inst >> 18 ) & 0xff //GETA
204207 RA := lbase + A
205208 Bx := int (inst & 0x3ffff ) //GETBX
206- reg .Set (RA , cf .Fn .Proto .Constants [Bx ])
209+ v := cf .Fn .Proto .Constants [Bx ]
210+ // +inline-call reg.Set RA v
207211 return 0
208212 },
209213 func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_LOADBOOL
@@ -215,9 +219,9 @@ func init() {
215219 B := int (inst & 0x1ff ) //GETB
216220 C := int (inst >> 9 ) & 0x1ff //GETC
217221 if B != 0 {
218- reg .Set ( RA , LTrue )
222+ // +inline-call reg.Set RA LTrue
219223 } else {
220- reg .Set ( RA , LFalse )
224+ // +inline-call reg.Set RA LFalse
221225 }
222226 if C != 0 {
223227 cf .Pc ++
@@ -232,7 +236,7 @@ func init() {
232236 RA := lbase + A
233237 B := int (inst & 0x1ff ) //GETB
234238 for i := RA ; i <= lbase + B ; i ++ {
235- reg .Set ( i , LNil )
239+ // +inline-call reg.Set i LNil
236240 }
237241 return 0
238242 },
@@ -243,7 +247,8 @@ func init() {
243247 A := int (inst >> 18 ) & 0xff //GETA
244248 RA := lbase + A
245249 B := int (inst & 0x1ff ) //GETB
246- reg .Set (RA , cf .Fn .Upvalues [B ].Value ())
250+ v := cf .Fn .Upvalues [B ].Value ()
251+ // +inline-call reg.Set RA v
247252 return 0
248253 },
249254 func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_GETGLOBAL
@@ -254,7 +259,8 @@ func init() {
254259 RA := lbase + A
255260 Bx := int (inst & 0x3ffff ) //GETBX
256261 //reg.Set(RA, L.getField(cf.Fn.Env, cf.Fn.Proto.Constants[Bx]))
257- reg .Set (RA , L .getFieldString (cf .Fn .Env , cf .Fn .Proto .stringConstants [Bx ]))
262+ v := L .getFieldString (cf .Fn .Env , cf .Fn .Proto .stringConstants [Bx ])
263+ // +inline-call reg.Set RA v
258264 return 0
259265 },
260266 func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_GETTABLE
@@ -265,7 +271,8 @@ func init() {
265271 RA := lbase + A
266272 B := int (inst & 0x1ff ) //GETB
267273 C := int (inst >> 9 ) & 0x1ff //GETC
268- reg .Set (RA , L .getField (reg .Get (lbase + B ), L .rkValue (C )))
274+ v := L .getField (reg .Get (lbase + B ), L .rkValue (C ))
275+ // +inline-call reg.Set RA v
269276 return 0
270277 },
271278 func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_GETTABLEKS
@@ -276,7 +283,8 @@ func init() {
276283 RA := lbase + A
277284 B := int (inst & 0x1ff ) //GETB
278285 C := int (inst >> 9 ) & 0x1ff //GETC
279- reg .Set (RA , L .getFieldString (reg .Get (lbase + B ), L .rkString (C )))
286+ v := L .getFieldString (reg .Get (lbase + B ), L .rkString (C ))
287+ // +inline-call reg.Set RA v
280288 return 0
281289 },
282290 func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_SETGLOBAL
@@ -330,7 +338,8 @@ func init() {
330338 RA := lbase + A
331339 B := int (inst & 0x1ff ) //GETB
332340 C := int (inst >> 9 ) & 0x1ff //GETC
333- reg .Set (RA , newLTable (B , C ))
341+ v := newLTable (B , C )
342+ // +inline-call reg.Set RA v
334343 return 0
335344 },
336345 func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_SELF
@@ -342,8 +351,9 @@ func init() {
342351 B := int (inst & 0x1ff ) //GETB
343352 C := int (inst >> 9 ) & 0x1ff //GETC
344353 selfobj := reg .Get (lbase + B )
345- reg .Set (RA , L .getFieldString (selfobj , L .rkString (C )))
346- reg .Set (RA + 1 , selfobj )
354+ v := L .getFieldString (selfobj , L .rkString (C ))
355+ // +inline-call reg.Set RA v
356+ // +inline-call reg.Set RA+1 selfobj
347357 return 0
348358 },
349359 opArith , // OP_ADD
@@ -361,17 +371,17 @@ func init() {
361371 B := int (inst & 0x1ff ) //GETB
362372 unaryv := L .rkValue (B )
363373 if nm , ok := unaryv .(LNumber ); ok {
364- reg .SetNumber ( RA , - nm )
374+ // +inline-call reg.Set RA -nm
365375 } else {
366376 op := L .metaOp1 (unaryv , "__unm" )
367377 if op .Type () == LTFunction {
368378 reg .Push (op )
369379 reg .Push (unaryv )
370380 L .Call (1 , 1 )
371- reg .Set ( RA , reg .Pop () )
381+ // +inline-call reg.Set RA reg.Pop()
372382 } else if str , ok1 := unaryv .(LString ); ok1 {
373383 if num , err := parseNumber (string (str )); err == nil {
374- reg .Set ( RA , - num )
384+ // +inline-call reg.Set RA -num
375385 } else {
376386 L .RaiseError ("__unm undefined" )
377387 }
@@ -389,9 +399,9 @@ func init() {
389399 RA := lbase + A
390400 B := int (inst & 0x1ff ) //GETB
391401 if LVIsFalse (reg .Get (lbase + B )) {
392- reg .Set ( RA , LTrue )
402+ // +inline-call reg.Set RA LTrue
393403 } else {
394- reg .Set ( RA , LFalse )
404+ // +inline-call reg.Set RA LFalse
395405 }
396406 return 0
397407 },
@@ -404,7 +414,7 @@ func init() {
404414 B := int (inst & 0x1ff ) //GETB
405415 switch lv := L .rkValue (B ).(type ) {
406416 case LString :
407- reg .SetNumber ( RA , LNumber (len (lv ) ))
417+ // +inline-call reg.SetNumber RA LNumber(len(lv))
408418 default :
409419 op := L .metaOp1 (lv , "__len" )
410420 if op .Type () == LTFunction {
@@ -413,12 +423,13 @@ func init() {
413423 L .Call (1 , 1 )
414424 ret := reg .Pop ()
415425 if ret .Type () == LTNumber {
416- reg .SetNumber (RA , ret .(LNumber ))
426+ v , _ := ret .(LNumber )
427+ // +inline-call reg.SetNumber RA v
417428 } else {
418- reg .Set ( RA , ret )
429+ // +inline-call reg.Set RA ret
419430 }
420431 } else if lv .Type () == LTTable {
421- reg .SetNumber ( RA , LNumber (lv .(* LTable ).Len () ))
432+ // +inline-call reg.SetNumber RA LNumber(lv.(*LTable).Len())
422433 } else {
423434 L .RaiseError ("__len undefined" )
424435 }
@@ -435,7 +446,8 @@ func init() {
435446 C := int (inst >> 9 ) & 0x1ff //GETC
436447 RC := lbase + C
437448 RB := lbase + B
438- reg .Set (RA , stringConcat (L , RC - RB + 1 , RC ))
449+ v := stringConcat (L , RC - RB + 1 , RC )
450+ // +inline-call reg.Set RA v
439451 return 0
440452 },
441453 func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_JMP
@@ -538,7 +550,7 @@ func init() {
538550 B := int (inst & 0x1ff ) //GETB
539551 C := int (inst >> 9 ) & 0x1ff //GETC
540552 if value := reg .Get (lbase + B ); LVAsBool (value ) != (C == 0 ) {
541- reg .Set ( RA , value )
553+ // +inline-call reg.Set RA value
542554 } else {
543555 cf .Pc ++
544556 }
@@ -677,13 +689,14 @@ func init() {
677689 if limit , ok2 := reg .Get (RA + 1 ).assertFloat64 (); ok2 {
678690 if step , ok3 := reg .Get (RA + 2 ).assertFloat64 (); ok3 {
679691 init += step
680- reg .SetNumber (RA , LNumber (init ))
692+ v := LNumber (init )
693+ // +inline-call reg.SetNumber RA v
681694 if (step > 0 && init <= limit ) || (step <= 0 && init >= limit ) {
682695 Sbx := int (inst & 0x3ffff ) - opMaxArgSbx //GETSBX
683696 cf .Pc += Sbx
684- reg .SetNumber ( RA + 3 , LNumber ( init ))
697+ // +inline-call reg.SetNumber RA+3 v
685698 } else {
686- reg .SetTop ( RA + 1 )
699+ // +inline-call reg.SetTop RA+1
687700 }
688701 } else {
689702 L .RaiseError ("for statement step must be a number" )
@@ -705,7 +718,7 @@ func init() {
705718 Sbx := int (inst & 0x3ffff ) - opMaxArgSbx //GETSBX
706719 if init , ok1 := reg .Get (RA ).assertFloat64 (); ok1 {
707720 if step , ok2 := reg .Get (RA + 2 ).assertFloat64 (); ok2 {
708- reg .SetNumber ( RA , LNumber (init - step ) )
721+ // +inline-call reg.SetNumber RA LNumber(init-step)
709722 } else {
710723 L .RaiseError ("for statement step must be a number" )
711724 }
@@ -723,13 +736,13 @@ func init() {
723736 RA := lbase + A
724737 C := int (inst >> 9 ) & 0x1ff //GETC
725738 nret := C
726- reg .SetTop ( RA + 3 + 2 )
727- reg .Set ( RA + 3 + 2 , reg .Get (RA + 2 ) )
728- reg .Set ( RA + 3 + 1 , reg .Get (RA + 1 ) )
729- reg .Set ( RA + 3 , reg .Get (RA ) )
739+ // +inline-call reg.SetTop RA+3+2
740+ // +inline-call reg.Set RA+3+2 reg.Get(RA+2)
741+ // +inline-call reg.Set RA+3+1 reg.Get(RA+1)
742+ // +inline-call reg.Set RA+3 reg.Get(RA)
730743 L .callR (2 , nret , RA + 3 )
731744 if value := reg .Get (RA + 3 ); value != LNil {
732- reg .Set ( RA + 2 , value )
745+ // +inline-call reg.Set RA+2 value
733746 pc := cf .Fn .Proto .Code [cf .Pc ]
734747 cf .Pc += int (pc & 0x3ffff ) - opMaxArgSbx
735748 }
@@ -776,7 +789,7 @@ func init() {
776789 Bx := int (inst & 0x3ffff ) //GETBX
777790 proto := cf .Fn .Proto .FunctionPrototypes [Bx ]
778791 closure := newLFunctionL (proto , cf .Fn .Env , int (proto .NumUpvalues ))
779- reg .Set ( RA , closure )
792+ // +inline-call reg.Set RA closure
780793 for i := 0 ; i < int (proto .NumUpvalues ); i ++ {
781794 inst = cf .Fn .Proto .Code [cf .Pc ]
782795 cf .Pc ++
@@ -829,9 +842,11 @@ func opArith(L *LState, inst uint32, baseframe *callFrame) int { //OP_ADD, OP_SU
829842 v1 , ok1 := lhs .assertFloat64 ()
830843 v2 , ok2 := rhs .assertFloat64 ()
831844 if ok1 && ok2 {
832- reg .SetNumber (RA , numberArith (L , opcode , LNumber (v1 ), LNumber (v2 )))
845+ v := numberArith (L , opcode , LNumber (v1 ), LNumber (v2 ))
846+ // +inline-call reg.SetNumber RA v
833847 } else {
834- reg .Set (RA , objectArith (L , opcode , lhs , rhs ))
848+ v := objectArith (L , opcode , lhs , rhs )
849+ // +inline-call reg.Set RA v
835850 }
836851 return 0
837852}
@@ -884,19 +899,19 @@ func objectArith(L *LState, opcode int, lhs, rhs LValue) LValue {
884899 event = "__pow"
885900 }
886901 op := L .metaOp2 (lhs , rhs , event )
887- if op .Type () == LTFunction {
902+ if _ , ok := op .assertFunction (); ok {
888903 L .reg .Push (op )
889904 L .reg .Push (lhs )
890905 L .reg .Push (rhs )
891906 L .Call (2 , 1 )
892907 return L .reg .Pop ()
893908 }
894- if str , ok := lhs .( LString ); ok {
909+ if str , ok := lhs .assertString ( ); ok {
895910 if lnum , err := parseNumber (string (str )); err == nil {
896911 lhs = lnum
897912 }
898913 }
899- if str , ok := rhs .( LString ); ok {
914+ if str , ok := rhs .assertString ( ); ok {
900915 if rnum , err := parseNumber (string (str )); err == nil {
901916 rhs = rnum
902917 }
@@ -972,12 +987,13 @@ func lessThan(L *LState, lhs, rhs LValue) bool {
972987}
973988
974989func equals (L * LState , lhs , rhs LValue , raw bool ) bool {
975- if lhs .Type () != rhs .Type () {
990+ lt := lhs .Type ()
991+ if lt != rhs .Type () {
976992 return false
977993 }
978994
979995 ret := false
980- switch lhs . Type () {
996+ switch lt {
981997 case LTNil :
982998 ret = true
983999 case LTNumber :
0 commit comments