Skip to content

Commit 69c5d66

Browse files
committed
Fixes for catch matching
Signed-off-by: James Hamlin <jfhamlin@gmail.com>
1 parent e289ed7 commit 69c5d66

15 files changed

Lines changed: 862 additions & 477 deletions

pkg/gen/gljimports/gljimports_darwin_amd64.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3524,6 +3524,7 @@ func RegisterImports(_register func(string, interface{})) {
35243524
_register("github.com/glojurelang/glojure/pkg/lang.GT", github_com_glojurelang_glojure_pkg_lang.GT)
35253525
_register("github.com/glojurelang/glojure/pkg/lang.Get", github_com_glojurelang_glojure_pkg_lang.Get)
35263526
_register("github.com/glojurelang/glojure/pkg/lang.GetDefault", github_com_glojurelang_glojure_pkg_lang.GetDefault)
3527+
_register("github.com/glojurelang/glojure/pkg/lang.GetExData", github_com_glojurelang_glojure_pkg_lang.GetExData)
35273528
_register("github.com/glojurelang/glojure/pkg/lang.GetPersistentStructMapAccessor", github_com_glojurelang_glojure_pkg_lang.GetPersistentStructMapAccessor)
35283529
_register("github.com/glojurelang/glojure/pkg/lang.GlobalEnv", github_com_glojurelang_glojure_pkg_lang.GlobalEnv)
35293530
_register("github.com/glojurelang/glojure/pkg/lang.GoAppend", github_com_glojurelang_glojure_pkg_lang.GoAppend)

pkg/gen/gljimports/gljimports_darwin_arm64.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3524,6 +3524,7 @@ func RegisterImports(_register func(string, interface{})) {
35243524
_register("github.com/glojurelang/glojure/pkg/lang.GT", github_com_glojurelang_glojure_pkg_lang.GT)
35253525
_register("github.com/glojurelang/glojure/pkg/lang.Get", github_com_glojurelang_glojure_pkg_lang.Get)
35263526
_register("github.com/glojurelang/glojure/pkg/lang.GetDefault", github_com_glojurelang_glojure_pkg_lang.GetDefault)
3527+
_register("github.com/glojurelang/glojure/pkg/lang.GetExData", github_com_glojurelang_glojure_pkg_lang.GetExData)
35273528
_register("github.com/glojurelang/glojure/pkg/lang.GetPersistentStructMapAccessor", github_com_glojurelang_glojure_pkg_lang.GetPersistentStructMapAccessor)
35283529
_register("github.com/glojurelang/glojure/pkg/lang.GlobalEnv", github_com_glojurelang_glojure_pkg_lang.GlobalEnv)
35293530
_register("github.com/glojurelang/glojure/pkg/lang.GoAppend", github_com_glojurelang_glojure_pkg_lang.GoAppend)

pkg/gen/gljimports/gljimports_js_wasm.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3524,6 +3524,7 @@ func RegisterImports(_register func(string, interface{})) {
35243524
_register("github.com/glojurelang/glojure/pkg/lang.GT", github_com_glojurelang_glojure_pkg_lang.GT)
35253525
_register("github.com/glojurelang/glojure/pkg/lang.Get", github_com_glojurelang_glojure_pkg_lang.Get)
35263526
_register("github.com/glojurelang/glojure/pkg/lang.GetDefault", github_com_glojurelang_glojure_pkg_lang.GetDefault)
3527+
_register("github.com/glojurelang/glojure/pkg/lang.GetExData", github_com_glojurelang_glojure_pkg_lang.GetExData)
35273528
_register("github.com/glojurelang/glojure/pkg/lang.GetPersistentStructMapAccessor", github_com_glojurelang_glojure_pkg_lang.GetPersistentStructMapAccessor)
35283529
_register("github.com/glojurelang/glojure/pkg/lang.GlobalEnv", github_com_glojurelang_glojure_pkg_lang.GlobalEnv)
35293530
_register("github.com/glojurelang/glojure/pkg/lang.GoAppend", github_com_glojurelang_glojure_pkg_lang.GoAppend)

pkg/gen/gljimports/gljimports_linux_amd64.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3524,6 +3524,7 @@ func RegisterImports(_register func(string, interface{})) {
35243524
_register("github.com/glojurelang/glojure/pkg/lang.GT", github_com_glojurelang_glojure_pkg_lang.GT)
35253525
_register("github.com/glojurelang/glojure/pkg/lang.Get", github_com_glojurelang_glojure_pkg_lang.Get)
35263526
_register("github.com/glojurelang/glojure/pkg/lang.GetDefault", github_com_glojurelang_glojure_pkg_lang.GetDefault)
3527+
_register("github.com/glojurelang/glojure/pkg/lang.GetExData", github_com_glojurelang_glojure_pkg_lang.GetExData)
35273528
_register("github.com/glojurelang/glojure/pkg/lang.GetPersistentStructMapAccessor", github_com_glojurelang_glojure_pkg_lang.GetPersistentStructMapAccessor)
35283529
_register("github.com/glojurelang/glojure/pkg/lang.GlobalEnv", github_com_glojurelang_glojure_pkg_lang.GlobalEnv)
35293530
_register("github.com/glojurelang/glojure/pkg/lang.GoAppend", github_com_glojurelang_glojure_pkg_lang.GoAppend)

pkg/gen/gljimports/gljimports_linux_arm64.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3524,6 +3524,7 @@ func RegisterImports(_register func(string, interface{})) {
35243524
_register("github.com/glojurelang/glojure/pkg/lang.GT", github_com_glojurelang_glojure_pkg_lang.GT)
35253525
_register("github.com/glojurelang/glojure/pkg/lang.Get", github_com_glojurelang_glojure_pkg_lang.Get)
35263526
_register("github.com/glojurelang/glojure/pkg/lang.GetDefault", github_com_glojurelang_glojure_pkg_lang.GetDefault)
3527+
_register("github.com/glojurelang/glojure/pkg/lang.GetExData", github_com_glojurelang_glojure_pkg_lang.GetExData)
35273528
_register("github.com/glojurelang/glojure/pkg/lang.GetPersistentStructMapAccessor", github_com_glojurelang_glojure_pkg_lang.GetPersistentStructMapAccessor)
35283529
_register("github.com/glojurelang/glojure/pkg/lang.GlobalEnv", github_com_glojurelang_glojure_pkg_lang.GlobalEnv)
35293530
_register("github.com/glojurelang/glojure/pkg/lang.GoAppend", github_com_glojurelang_glojure_pkg_lang.GoAppend)

pkg/gen/gljimports/gljimports_windows_amd64.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3524,6 +3524,7 @@ func RegisterImports(_register func(string, interface{})) {
35243524
_register("github.com/glojurelang/glojure/pkg/lang.GT", github_com_glojurelang_glojure_pkg_lang.GT)
35253525
_register("github.com/glojurelang/glojure/pkg/lang.Get", github_com_glojurelang_glojure_pkg_lang.Get)
35263526
_register("github.com/glojurelang/glojure/pkg/lang.GetDefault", github_com_glojurelang_glojure_pkg_lang.GetDefault)
3527+
_register("github.com/glojurelang/glojure/pkg/lang.GetExData", github_com_glojurelang_glojure_pkg_lang.GetExData)
35273528
_register("github.com/glojurelang/glojure/pkg/lang.GetPersistentStructMapAccessor", github_com_glojurelang_glojure_pkg_lang.GetPersistentStructMapAccessor)
35283529
_register("github.com/glojurelang/glojure/pkg/lang.GlobalEnv", github_com_glojurelang_glojure_pkg_lang.GlobalEnv)
35293530
_register("github.com/glojurelang/glojure/pkg/lang.GoAppend", github_com_glojurelang_glojure_pkg_lang.GoAppend)

pkg/gen/gljimports/gljimports_windows_arm.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3524,6 +3524,7 @@ func RegisterImports(_register func(string, interface{})) {
35243524
_register("github.com/glojurelang/glojure/pkg/lang.GT", github_com_glojurelang_glojure_pkg_lang.GT)
35253525
_register("github.com/glojurelang/glojure/pkg/lang.Get", github_com_glojurelang_glojure_pkg_lang.Get)
35263526
_register("github.com/glojurelang/glojure/pkg/lang.GetDefault", github_com_glojurelang_glojure_pkg_lang.GetDefault)
3527+
_register("github.com/glojurelang/glojure/pkg/lang.GetExData", github_com_glojurelang_glojure_pkg_lang.GetExData)
35273528
_register("github.com/glojurelang/glojure/pkg/lang.GetPersistentStructMapAccessor", github_com_glojurelang_glojure_pkg_lang.GetPersistentStructMapAccessor)
35283529
_register("github.com/glojurelang/glojure/pkg/lang.GlobalEnv", github_com_glojurelang_glojure_pkg_lang.GlobalEnv)
35293530
_register("github.com/glojurelang/glojure/pkg/lang.GoAppend", github_com_glojurelang_glojure_pkg_lang.GoAppend)

pkg/lang/catch.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ var (
1212
// CatchMatches checks if a recovered panic value matches an expected catch type.
1313
// This implements the semantics of Clojure's try/catch matching.
1414
func CatchMatches(r, expect any) bool {
15-
if IsNil(expect) {
15+
if IsNil(expect) || IsNil(r) {
1616
return false
1717
}
1818

@@ -24,14 +24,13 @@ func CatchMatches(r, expect any) bool {
2424
// if expectType is a pointer type, instantiate a new value of that type
2525
// and check if rErr is an instance of it
2626
if expectType.Kind() == reflect.Ptr {
27-
expectVal := reflect.New(expectType.Elem()).Interface()
28-
if errors.As(rErr, expectVal) {
27+
if errors.As(rErr, reflect.New(expectType).Interface()) {
2928
return true
3029
}
3130
}
3231
// if expectType is an interface type, check if rErr implements it
3332
if expectType.Kind() == reflect.Interface {
34-
if reflect.TypeOf(rErr).Implements(expectType) {
33+
if errors.As(rErr, reflect.New(expectType).Interface()) {
3534
return true
3635
}
3736
}

0 commit comments

Comments
 (0)