@@ -173,7 +173,8 @@ func init() {
173
173
A := int (inst >> 18 ) & 0xff //GETA
174
174
RA := lbase + A
175
175
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
177
178
return 0
178
179
},
179
180
func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_MOVEN
@@ -183,15 +184,17 @@ func init() {
183
184
A := int (inst >> 18 ) & 0xff //GETA
184
185
B := int (inst & 0x1ff ) //GETB
185
186
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
187
189
code := cf .Fn .Proto .Code
188
190
pc := cf .Pc
189
191
for i := 0 ; i < C ; i ++ {
190
192
inst = code [pc ]
191
193
pc ++
192
194
A = int (inst >> 18 ) & 0xff //GETA
193
195
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
195
198
}
196
199
cf .Pc = pc
197
200
return 0
@@ -203,7 +206,8 @@ func init() {
203
206
A := int (inst >> 18 ) & 0xff //GETA
204
207
RA := lbase + A
205
208
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
207
211
return 0
208
212
},
209
213
func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_LOADBOOL
@@ -215,9 +219,9 @@ func init() {
215
219
B := int (inst & 0x1ff ) //GETB
216
220
C := int (inst >> 9 ) & 0x1ff //GETC
217
221
if B != 0 {
218
- reg .Set ( RA , LTrue )
222
+ // +inline-call reg.Set RA LTrue
219
223
} else {
220
- reg .Set ( RA , LFalse )
224
+ // +inline-call reg.Set RA LFalse
221
225
}
222
226
if C != 0 {
223
227
cf .Pc ++
@@ -232,7 +236,7 @@ func init() {
232
236
RA := lbase + A
233
237
B := int (inst & 0x1ff ) //GETB
234
238
for i := RA ; i <= lbase + B ; i ++ {
235
- reg .Set ( i , LNil )
239
+ // +inline-call reg.Set i LNil
236
240
}
237
241
return 0
238
242
},
@@ -243,7 +247,8 @@ func init() {
243
247
A := int (inst >> 18 ) & 0xff //GETA
244
248
RA := lbase + A
245
249
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
247
252
return 0
248
253
},
249
254
func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_GETGLOBAL
@@ -254,7 +259,8 @@ func init() {
254
259
RA := lbase + A
255
260
Bx := int (inst & 0x3ffff ) //GETBX
256
261
//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
258
264
return 0
259
265
},
260
266
func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_GETTABLE
@@ -265,7 +271,8 @@ func init() {
265
271
RA := lbase + A
266
272
B := int (inst & 0x1ff ) //GETB
267
273
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
269
276
return 0
270
277
},
271
278
func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_GETTABLEKS
@@ -276,7 +283,8 @@ func init() {
276
283
RA := lbase + A
277
284
B := int (inst & 0x1ff ) //GETB
278
285
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
280
288
return 0
281
289
},
282
290
func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_SETGLOBAL
@@ -330,7 +338,8 @@ func init() {
330
338
RA := lbase + A
331
339
B := int (inst & 0x1ff ) //GETB
332
340
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
334
343
return 0
335
344
},
336
345
func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_SELF
@@ -342,8 +351,9 @@ func init() {
342
351
B := int (inst & 0x1ff ) //GETB
343
352
C := int (inst >> 9 ) & 0x1ff //GETC
344
353
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
347
357
return 0
348
358
},
349
359
opArith , // OP_ADD
@@ -361,17 +371,17 @@ func init() {
361
371
B := int (inst & 0x1ff ) //GETB
362
372
unaryv := L .rkValue (B )
363
373
if nm , ok := unaryv .(LNumber ); ok {
364
- reg .SetNumber ( RA , - nm )
374
+ // +inline-call reg.Set RA -nm
365
375
} else {
366
376
op := L .metaOp1 (unaryv , "__unm" )
367
377
if op .Type () == LTFunction {
368
378
reg .Push (op )
369
379
reg .Push (unaryv )
370
380
L .Call (1 , 1 )
371
- reg .Set ( RA , reg .Pop () )
381
+ // +inline-call reg.Set RA reg.Pop()
372
382
} else if str , ok1 := unaryv .(LString ); ok1 {
373
383
if num , err := parseNumber (string (str )); err == nil {
374
- reg .Set ( RA , - num )
384
+ // +inline-call reg.Set RA -num
375
385
} else {
376
386
L .RaiseError ("__unm undefined" )
377
387
}
@@ -389,9 +399,9 @@ func init() {
389
399
RA := lbase + A
390
400
B := int (inst & 0x1ff ) //GETB
391
401
if LVIsFalse (reg .Get (lbase + B )) {
392
- reg .Set ( RA , LTrue )
402
+ // +inline-call reg.Set RA LTrue
393
403
} else {
394
- reg .Set ( RA , LFalse )
404
+ // +inline-call reg.Set RA LFalse
395
405
}
396
406
return 0
397
407
},
@@ -404,7 +414,7 @@ func init() {
404
414
B := int (inst & 0x1ff ) //GETB
405
415
switch lv := L .rkValue (B ).(type ) {
406
416
case LString :
407
- reg .SetNumber ( RA , LNumber (len (lv ) ))
417
+ // +inline-call reg.SetNumber RA LNumber(len(lv))
408
418
default :
409
419
op := L .metaOp1 (lv , "__len" )
410
420
if op .Type () == LTFunction {
@@ -413,12 +423,13 @@ func init() {
413
423
L .Call (1 , 1 )
414
424
ret := reg .Pop ()
415
425
if ret .Type () == LTNumber {
416
- reg .SetNumber (RA , ret .(LNumber ))
426
+ v , _ := ret .(LNumber )
427
+ // +inline-call reg.SetNumber RA v
417
428
} else {
418
- reg .Set ( RA , ret )
429
+ // +inline-call reg.Set RA ret
419
430
}
420
431
} else if lv .Type () == LTTable {
421
- reg .SetNumber ( RA , LNumber (lv .(* LTable ).Len () ))
432
+ // +inline-call reg.SetNumber RA LNumber(lv.(*LTable).Len())
422
433
} else {
423
434
L .RaiseError ("__len undefined" )
424
435
}
@@ -435,7 +446,8 @@ func init() {
435
446
C := int (inst >> 9 ) & 0x1ff //GETC
436
447
RC := lbase + C
437
448
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
439
451
return 0
440
452
},
441
453
func (L * LState , inst uint32 , baseframe * callFrame ) int { //OP_JMP
@@ -538,7 +550,7 @@ func init() {
538
550
B := int (inst & 0x1ff ) //GETB
539
551
C := int (inst >> 9 ) & 0x1ff //GETC
540
552
if value := reg .Get (lbase + B ); LVAsBool (value ) != (C == 0 ) {
541
- reg .Set ( RA , value )
553
+ // +inline-call reg.Set RA value
542
554
} else {
543
555
cf .Pc ++
544
556
}
@@ -677,13 +689,14 @@ func init() {
677
689
if limit , ok2 := reg .Get (RA + 1 ).assertFloat64 (); ok2 {
678
690
if step , ok3 := reg .Get (RA + 2 ).assertFloat64 (); ok3 {
679
691
init += step
680
- reg .SetNumber (RA , LNumber (init ))
692
+ v := LNumber (init )
693
+ // +inline-call reg.SetNumber RA v
681
694
if (step > 0 && init <= limit ) || (step <= 0 && init >= limit ) {
682
695
Sbx := int (inst & 0x3ffff ) - opMaxArgSbx //GETSBX
683
696
cf .Pc += Sbx
684
- reg .SetNumber ( RA + 3 , LNumber ( init ))
697
+ // +inline-call reg.SetNumber RA+3 v
685
698
} else {
686
- reg .SetTop ( RA + 1 )
699
+ // +inline-call reg.SetTop RA+1
687
700
}
688
701
} else {
689
702
L .RaiseError ("for statement step must be a number" )
@@ -705,7 +718,7 @@ func init() {
705
718
Sbx := int (inst & 0x3ffff ) - opMaxArgSbx //GETSBX
706
719
if init , ok1 := reg .Get (RA ).assertFloat64 (); ok1 {
707
720
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)
709
722
} else {
710
723
L .RaiseError ("for statement step must be a number" )
711
724
}
@@ -723,13 +736,13 @@ func init() {
723
736
RA := lbase + A
724
737
C := int (inst >> 9 ) & 0x1ff //GETC
725
738
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)
730
743
L .callR (2 , nret , RA + 3 )
731
744
if value := reg .Get (RA + 3 ); value != LNil {
732
- reg .Set ( RA + 2 , value )
745
+ // +inline-call reg.Set RA+2 value
733
746
pc := cf .Fn .Proto .Code [cf .Pc ]
734
747
cf .Pc += int (pc & 0x3ffff ) - opMaxArgSbx
735
748
}
@@ -776,7 +789,7 @@ func init() {
776
789
Bx := int (inst & 0x3ffff ) //GETBX
777
790
proto := cf .Fn .Proto .FunctionPrototypes [Bx ]
778
791
closure := newLFunctionL (proto , cf .Fn .Env , int (proto .NumUpvalues ))
779
- reg .Set ( RA , closure )
792
+ // +inline-call reg.Set RA closure
780
793
for i := 0 ; i < int (proto .NumUpvalues ); i ++ {
781
794
inst = cf .Fn .Proto .Code [cf .Pc ]
782
795
cf .Pc ++
@@ -829,9 +842,11 @@ func opArith(L *LState, inst uint32, baseframe *callFrame) int { //OP_ADD, OP_SU
829
842
v1 , ok1 := lhs .assertFloat64 ()
830
843
v2 , ok2 := rhs .assertFloat64 ()
831
844
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
833
847
} else {
834
- reg .Set (RA , objectArith (L , opcode , lhs , rhs ))
848
+ v := objectArith (L , opcode , lhs , rhs )
849
+ // +inline-call reg.Set RA v
835
850
}
836
851
return 0
837
852
}
@@ -884,19 +899,19 @@ func objectArith(L *LState, opcode int, lhs, rhs LValue) LValue {
884
899
event = "__pow"
885
900
}
886
901
op := L .metaOp2 (lhs , rhs , event )
887
- if op .Type () == LTFunction {
902
+ if _ , ok := op .assertFunction (); ok {
888
903
L .reg .Push (op )
889
904
L .reg .Push (lhs )
890
905
L .reg .Push (rhs )
891
906
L .Call (2 , 1 )
892
907
return L .reg .Pop ()
893
908
}
894
- if str , ok := lhs .( LString ); ok {
909
+ if str , ok := lhs .assertString ( ); ok {
895
910
if lnum , err := parseNumber (string (str )); err == nil {
896
911
lhs = lnum
897
912
}
898
913
}
899
- if str , ok := rhs .( LString ); ok {
914
+ if str , ok := rhs .assertString ( ); ok {
900
915
if rnum , err := parseNumber (string (str )); err == nil {
901
916
rhs = rnum
902
917
}
@@ -972,12 +987,13 @@ func lessThan(L *LState, lhs, rhs LValue) bool {
972
987
}
973
988
974
989
func equals (L * LState , lhs , rhs LValue , raw bool ) bool {
975
- if lhs .Type () != rhs .Type () {
990
+ lt := lhs .Type ()
991
+ if lt != rhs .Type () {
976
992
return false
977
993
}
978
994
979
995
ret := false
980
- switch lhs . Type () {
996
+ switch lt {
981
997
case LTNil :
982
998
ret = true
983
999
case LTNumber :
0 commit comments