Introduce ModuleEngine interface (#345)
This commit adds ModuleEngine interface which is used to make calls and created per-module instance. Notably, this enables us to remove the necessity for store to holds FunctionInstances and FunctionIndex. This is a follow-up from #342 Signed-off-by: Takeshi Yoneda <takeshi@tetrate.io> Co-authored-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
@@ -414,16 +414,22 @@ func TestModule_validateFunctions(t *testing.T) {
|
||||
FunctionSection: []uint32{0},
|
||||
CodeSection: []*Code{{Body: []byte{OpcodeI32Const, 0, OpcodeDrop, OpcodeEnd}}},
|
||||
}
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil)
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil, maximumFunctionIndex)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
t.Run("too many functions", func(t *testing.T) {
|
||||
m := Module{}
|
||||
err := m.validateFunctions(Features20191205, []uint32{1, 2, 3, 4}, nil, nil, nil, 3)
|
||||
require.Error(t, err)
|
||||
require.EqualError(t, err, "too many functions in a store")
|
||||
})
|
||||
t.Run("function, but no code", func(t *testing.T) {
|
||||
m := Module{
|
||||
TypeSection: []*FunctionType{{}},
|
||||
FunctionSection: []Index{0},
|
||||
CodeSection: nil,
|
||||
}
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil)
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil, maximumFunctionIndex)
|
||||
require.Error(t, err)
|
||||
require.EqualError(t, err, "code count (0) != function count (1)")
|
||||
})
|
||||
@@ -433,7 +439,7 @@ func TestModule_validateFunctions(t *testing.T) {
|
||||
FunctionSection: []Index{1},
|
||||
CodeSection: []*Code{{Body: []byte{OpcodeEnd}}},
|
||||
}
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil)
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil, maximumFunctionIndex)
|
||||
require.Error(t, err)
|
||||
require.EqualError(t, err, "invalid function[0]: type section index 1 out of range")
|
||||
})
|
||||
@@ -443,7 +449,7 @@ func TestModule_validateFunctions(t *testing.T) {
|
||||
FunctionSection: []Index{0},
|
||||
CodeSection: []*Code{{Body: []byte{OpcodeF32Abs}}},
|
||||
}
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil)
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil, maximumFunctionIndex)
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), "invalid function[0]: cannot pop the 1st f32 operand")
|
||||
})
|
||||
@@ -454,7 +460,7 @@ func TestModule_validateFunctions(t *testing.T) {
|
||||
CodeSection: []*Code{{Body: []byte{OpcodeF32Abs}}},
|
||||
ExportSection: map[string]*Export{"f1": {Name: "f1", Type: ExternTypeFunc, Index: 0}},
|
||||
}
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil)
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil, maximumFunctionIndex)
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), `invalid function[0] export["f1"]: cannot pop the 1st f32`)
|
||||
})
|
||||
@@ -466,7 +472,7 @@ func TestModule_validateFunctions(t *testing.T) {
|
||||
CodeSection: []*Code{{Body: []byte{OpcodeF32Abs}}},
|
||||
ExportSection: map[string]*Export{"f1": {Name: "f1", Type: ExternTypeFunc, Index: 1}},
|
||||
}
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil)
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil, maximumFunctionIndex)
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), `invalid function[0] export["f1"]: cannot pop the 1st f32`)
|
||||
})
|
||||
@@ -480,7 +486,7 @@ func TestModule_validateFunctions(t *testing.T) {
|
||||
"f2": {Name: "f2", Type: ExternTypeFunc, Index: 0},
|
||||
},
|
||||
}
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil)
|
||||
err := m.validateFunctions(Features20191205, nil, nil, nil, nil, maximumFunctionIndex)
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), `invalid function[0] export["f1","f2"]: cannot pop the 1st f32`)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user