Dmitry Panov пре 3 година
родитељ
комит
a5e7acf16e
9 измењених фајлова са 33 додато и 138 уклоњено
  1. 6 0
      .github/workflows/main.yml
  2. 3 3
      object_goreflect_test.go
  3. 0 6
      parser/lexer.go
  4. 1 0
      staticcheck.conf
  5. 15 16
      string.go
  6. 3 0
      tc39_norace_test.go
  7. 2 1
      tc39_test.go
  8. 1 1
      token/token.go
  9. 2 111
      vm_test.go

+ 6 - 0
.github/workflows/main.yml

@@ -18,6 +18,12 @@ jobs:
         uses: actions/checkout@v2
       - name: Check formatting
         run: diff -u <(echo -n) <(gofmt -d .)
+      - name: Run staticcheck
+        uses: dominikh/[email protected]
+        with:
+          install-go: false
+          cache-key: ${{ matrix.go-version }}
+        if: ${{ matrix.go-version == '1.x' }}
       - name: Checkout tc39 tests
         run: ./.tc39_test262_checkout.sh
       - name: Run tests

+ 3 - 3
object_goreflect_test.go

@@ -618,7 +618,7 @@ func TestNonStructAnonFields(t *testing.T) {
 	`
 	vm := New()
 	vm.SetFieldNameMapper(fieldNameMapper1{})
-	vm.Set("a", &Test2{Test1: &Test1{M: true}, Test4: []int{1, 2}})
+	vm.Set("a", &Test2{Test1: &Test1{M: true}, Test4: []int{1, 2}, test3: nil})
 	v, err := vm.RunString(SCRIPT)
 	if err != nil {
 		t.Fatal(err)
@@ -787,7 +787,7 @@ func TestDefinePropertyUnexportedJsName(t *testing.T) {
 
 	vm := New()
 	vm.SetFieldNameMapper(fieldNameMapper1{})
-	vm.Set("f", &T{})
+	vm.Set("f", &T{unexported: 0})
 
 	_, err := vm.RunString(`
 	"use strict";
@@ -857,7 +857,7 @@ func BenchmarkGoReflectGet(b *testing.B) {
 
 	b.StartTimer()
 	for i := 0; i < b.N; i++ {
-		v := vm.ToValue(child{parent: parent{Test: "Test"}}).(*Object)
+		v := vm.ToValue(child{parent: parent{Test: "Test", field: ""}}).(*Object)
 		v.Get("Test")
 	}
 }

+ 0 - 6
parser/lexer.go

@@ -567,12 +567,6 @@ func (self *_parser) skipWhiteSpace() {
 	}
 }
 
-func (self *_parser) skipLineWhiteSpace() {
-	for isLineWhiteSpace(self.chr) {
-		self.read()
-	}
-}
-
 func (self *_parser) scanMantissa(base int) {
 	for digitValue(self.chr) < base {
 		self.read()

+ 1 - 0
staticcheck.conf

@@ -0,0 +1 @@
+checks = ["all", "-ST1000", "-ST1003", "-ST1005", "-ST1006", "-ST1012", "-ST1021", "-ST1020", "-ST1008"]

+ 15 - 16
string.go

@@ -15,22 +15,21 @@ const (
 )
 
 var (
-	stringTrue         valueString = asciiString("true")
-	stringFalse        valueString = asciiString("false")
-	stringNull         valueString = asciiString("null")
-	stringUndefined    valueString = asciiString("undefined")
-	stringObjectC      valueString = asciiString("object")
-	stringFunction     valueString = asciiString("function")
-	stringBoolean      valueString = asciiString("boolean")
-	stringString       valueString = asciiString("string")
-	stringSymbol       valueString = asciiString("symbol")
-	stringNumber       valueString = asciiString("number")
-	stringNaN          valueString = asciiString("NaN")
-	stringInfinity                 = asciiString("Infinity")
-	stringPlusInfinity             = asciiString("+Infinity")
-	stringNegInfinity              = asciiString("-Infinity")
-	stringBound_       valueString = asciiString("bound ")
-	stringEmpty        valueString = asciiString("")
+	stringTrue        valueString = asciiString("true")
+	stringFalse       valueString = asciiString("false")
+	stringNull        valueString = asciiString("null")
+	stringUndefined   valueString = asciiString("undefined")
+	stringObjectC     valueString = asciiString("object")
+	stringFunction    valueString = asciiString("function")
+	stringBoolean     valueString = asciiString("boolean")
+	stringString      valueString = asciiString("string")
+	stringSymbol      valueString = asciiString("symbol")
+	stringNumber      valueString = asciiString("number")
+	stringNaN         valueString = asciiString("NaN")
+	stringInfinity                = asciiString("Infinity")
+	stringNegInfinity             = asciiString("-Infinity")
+	stringBound_      valueString = asciiString("bound ")
+	stringEmpty       valueString = asciiString("")
 
 	stringError          valueString = asciiString("Error")
 	stringAggregateError valueString = asciiString("AggregateError")

+ 3 - 0
tc39_norace_test.go

@@ -5,6 +5,9 @@ package goja
 
 import "testing"
 
+// Prevent linter warnings about unused type
+var _ = tc39Test{name: "", f: nil}
+
 func (ctx *tc39TestCtx) runTest(name string, f func(t *testing.T)) {
 	ctx.t.Run(name, func(t *testing.T) {
 		t.Parallel()

+ 2 - 1
tc39_test.go

@@ -337,8 +337,9 @@ type tc39TestCtx struct {
 	enableBench  bool
 	benchmark    tc39BenchmarkData
 	benchLock    sync.Mutex
-	testQueue    []tc39Test
 	sabStub      *Program
+	//lint:ignore U1000 Only used with race
+	testQueue []tc39Test
 }
 
 type TC39MetaNegative struct {

+ 1 - 1
token/token.go

@@ -24,7 +24,7 @@ func (tkn Token) String() string {
 	return "token(" + strconv.Itoa(int(tkn)) + ")"
 }
 
-// This is not used for anything
+//lint:ignore U1000 This is not used for anything
 func (tkn Token) precedence(in bool) int {
 
 	switch tkn {

+ 2 - 111
vm_test.go

@@ -55,35 +55,6 @@ func TestEvalVar(t *testing.T) {
 	testScript(SCRIPT, valueTrue, t)
 }
 
-var jumptable = []func(*vm, *instr){
-	f_jump,
-	f_halt,
-}
-
-func f_jump(vm *vm, i *instr) {
-	vm.pc += i.prim
-}
-
-func f_halt(vm *vm, i *instr) {
-	vm.halt = true
-}
-
-func f_loadVal(vm *vm, i *instr) {
-	vm.push(vm.prg.values[i.prim])
-	vm.pc++
-}
-
-type instr struct {
-	code int
-	prim int
-	arg  interface{}
-}
-
-type jumparg struct {
-	offset int
-	other  string
-}
-
 func BenchmarkVmNOP2(b *testing.B) {
 	prg := []func(*vm){
 		//loadVal(0).exec,
@@ -118,85 +89,6 @@ func BenchmarkVmNOP2(b *testing.B) {
 	}
 }
 
-func BenchmarkVmNOP1(b *testing.B) {
-	prg := []instr{
-		{code: 2, prim: 0},
-		{code: 2, prim: 1},
-		{code: 3},
-		{code: 1},
-	}
-
-	r := &Runtime{}
-	r.init()
-
-	vm := r.vm
-	vm.prg = &Program{
-		values: []Value{intToValue(2), intToValue(3)},
-	}
-	for i := 0; i < b.N; i++ {
-		vm.halt = false
-		vm.pc = 0
-	L:
-		for {
-			instr := &prg[vm.pc]
-			//jumptable[instr.code](vm, instr)
-			switch instr.code {
-			case 10:
-				vm.pc += 1
-			case 11:
-				vm.pc += 2
-			case 12:
-				vm.pc += 3
-			case 13:
-				vm.pc += 4
-			case 14:
-				vm.pc += 5
-			case 15:
-				vm.pc += 6
-			case 16:
-				vm.pc += 7
-			case 17:
-				vm.pc += 8
-			case 18:
-				vm.pc += 9
-			case 19:
-				vm.pc += 10
-			case 20:
-				vm.pc += 11
-			case 21:
-				vm.pc += 12
-			case 22:
-				vm.pc += 13
-			case 23:
-				vm.pc += 14
-			case 24:
-				vm.pc += 15
-			case 25:
-				vm.pc += 16
-			case 0:
-				//vm.pc += instr.prim
-				f_jump(vm, instr)
-			case 1:
-				break L
-			case 2:
-				f_loadVal(vm, instr)
-			default:
-				jumptable[instr.code](vm, instr)
-			}
-
-		}
-		r := vm.pop()
-		if r.ToInteger() != 5 {
-			b.Fatalf("Unexpected result: %+v", r)
-		}
-		if vm.sp != 0 {
-			b.Fatalf("Unexpected sp: %d", vm.sp)
-		}
-
-		//vm.sp -= 1
-	}
-}
-
 func BenchmarkVmNOP(b *testing.B) {
 	r := &Runtime{}
 	r.init()
@@ -279,7 +171,7 @@ fib(35);
 
 	vm.prg = c.p
 	vm.run()
-	v := vm.pop()
+	v := vm.result
 
 	b.Logf("stack size: %d", len(vm.stack))
 	b.Logf("stashAllocs: %d", vm.stashAllocs)
@@ -347,8 +239,7 @@ func BenchmarkFuncCall(b *testing.B) {
 }
 
 func BenchmarkAssertInt(b *testing.B) {
-	var v Value
-	v = intToValue(42)
+	v := intToValue(42)
 	for i := 0; i < b.N; i++ {
 		if i, ok := v.(valueInt); !ok || int64(i) != 42 {
 			b.Fatal()