forked from google/grumpy
/
baseexception.go
75 lines (65 loc) · 2.21 KB
/
baseexception.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Copyright 2016 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package grumpy
import (
"reflect"
)
// BaseException represents Python 'BaseException' objects.
type BaseException struct {
Object
args *Tuple
}
func toBaseExceptionUnsafe(o *Object) *BaseException {
return (*BaseException)(o.toPointer())
}
// ToObject upcasts e to an Object.
func (e *BaseException) ToObject() *Object {
return &e.Object
}
// BaseExceptionType corresponds to the Python type 'BaseException'.
var BaseExceptionType = newBasisType("BaseException", reflect.TypeOf(BaseException{}), toBaseExceptionUnsafe, ObjectType)
func baseExceptionInit(f *Frame, o *Object, args Args, kwargs KWArgs) (*Object, *BaseException) {
e := toBaseExceptionUnsafe(o)
e.args = NewTuple(args.makeCopy()...)
return None, nil
}
func baseExceptionRepr(f *Frame, o *Object) (*Object, *BaseException) {
e := toBaseExceptionUnsafe(o)
argsString := "()"
if e.args != nil {
s, raised := Repr(f, e.args.ToObject())
if raised != nil {
return nil, raised
}
argsString = s.Value()
}
return NewStr(e.typ.Name() + argsString).ToObject(), nil
}
func baseExceptionStr(f *Frame, o *Object) (*Object, *BaseException) {
e := toBaseExceptionUnsafe(o)
if e.args == nil || len(e.args.elems) == 0 {
return NewStr("").ToObject(), nil
}
if len(e.args.elems) == 1 {
s, raised := ToStr(f, e.args.elems[0])
return s.ToObject(), raised
}
s, raised := ToStr(f, e.args.ToObject())
return s.ToObject(), raised
}
func initBaseExceptionType(map[string]*Object) {
BaseExceptionType.slots.Init = &initSlot{baseExceptionInit}
BaseExceptionType.slots.Repr = &unaryOpSlot{baseExceptionRepr}
BaseExceptionType.slots.Str = &unaryOpSlot{baseExceptionStr}
}