all: support interface asserts in interp

This adds support for the math/rand package.
This commit is contained in:
Ayke van Laethem
2019-04-13 17:13:16 +02:00
committed by Ron Evans
parent 02ecab833f
commit 7de3d4be2b
7 changed files with 104 additions and 84 deletions
+2 -5
View File
@@ -33,6 +33,8 @@ func (e *Eval) hasSideEffects(fn llvm.Value) *sideEffectResult {
return &sideEffectResult{severity: sideEffectNone}
case "runtime._panic":
return &sideEffectResult{severity: sideEffectLimited}
case "runtime.interfaceImplements":
return &sideEffectResult{severity: sideEffectNone}
}
if e.sideEffectFuncs == nil {
e.sideEffectFuncs = make(map[llvm.Value]*sideEffectResult)
@@ -84,11 +86,6 @@ func (e *Eval) hasSideEffects(fn llvm.Value) *sideEffectResult {
continue
}
if child.IsDeclaration() {
switch child.Name() {
case "runtime.makeInterface":
// Can be interpreted so does not have side effects.
continue
}
// External function call. Assume only limited side effects
// (no affected globals, etc.).
if e.hasLocalSideEffects(dirtyLocals, inst) {