Browse Source

build: #3893 do not return LLVM structs from Build

pull/3921/head
Kenneth Bell 1 year ago
committed by Ayke
parent
commit
58fafaeb5c
  1. 8
      interp/errors.go
  2. 8
      interp/interp_test.go
  3. 2
      interp/interpreter.go
  4. 8
      main.go

8
interp/errors.go

@ -35,14 +35,14 @@ func isRecoverableError(err error) bool {
// ErrorLine is one line in a traceback. The position may be missing.
type ErrorLine struct {
Pos token.Position
Inst llvm.Value
Inst string
}
// Error encapsulates compile-time interpretation errors with an associated
// import path. The errors may not have a precise location attached.
type Error struct {
ImportPath string
Inst llvm.Value
Inst string
Pos token.Position
Err error
Traceback []ErrorLine
@ -60,10 +60,10 @@ func (r *runner) errorAt(inst instruction, err error) *Error {
pos := getPosition(inst.llvmInst)
return &Error{
ImportPath: r.pkgName,
Inst: inst.llvmInst,
Inst: inst.String(),
Pos: pos,
Err: err,
Traceback: []ErrorLine{{pos, inst.llvmInst}},
Traceback: []ErrorLine{{pos, inst.String()}},
}
}

8
interp/interp_test.go

@ -57,16 +57,14 @@ func runTest(t *testing.T, pathPrefix string) {
if err != nil {
if err, match := err.(*Error); match {
println(err.Error())
if !err.Inst.IsNil() {
err.Inst.Dump()
println()
if len(err.Inst) != 0 {
println(err.Inst)
}
if len(err.Traceback) > 0 {
println("\ntraceback:")
for _, line := range err.Traceback {
println(line.Pos.String() + ":")
line.Inst.Dump()
println()
println(line.Inst)
}
}
}

2
interp/interpreter.go

@ -543,7 +543,7 @@ func (r *runner) run(fn *function, params []value, parentMem *memoryView, indent
// how this function got called.
callErr.Traceback = append(callErr.Traceback, ErrorLine{
Pos: getPosition(inst.llvmInst),
Inst: inst.llvmInst,
Inst: inst.String(),
})
return nil, mem, callErr
}

8
main.go

@ -1289,16 +1289,14 @@ func printCompilerError(logln func(...interface{}), err error) {
case *interp.Error:
logln("#", err.ImportPath)
logln(err.Error())
if !err.Inst.IsNil() {
err.Inst.Dump()
logln()
if len(err.Inst) != 0 {
logln(err.Inst)
}
if len(err.Traceback) > 0 {
logln("\ntraceback:")
for _, line := range err.Traceback {
logln(line.Pos.String() + ":")
line.Inst.Dump()
logln()
logln(line.Inst)
}
}
case loader.Errors:

Loading…
Cancel
Save