diff options
| author | Mel <einebeere@gmail.com> | 2022-06-01 19:51:40 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-01 19:51:40 +0000 |
| commit | edca72c160967f1918b65c91a40de89ecd8badda (patch) | |
| tree | b79feabc0889a3f6cfddf09906a486d09e5c60a1 /pkg/lang/vm/value/value.go | |
| parent | 33671436680e7922001df9921ee582c486c7c3f4 (diff) | |
| download | jinx-edca72c160967f1918b65c91a40de89ecd8badda.tar.zst jinx-edca72c160967f1918b65c91a40de89ecd8badda.zip | |
Implement proper object types
Diffstat (limited to 'pkg/lang/vm/value/value.go')
| -rw-r--r-- | pkg/lang/vm/value/value.go | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/pkg/lang/vm/value/value.go b/pkg/lang/vm/value/value.go index f1ccc2d..953ac8b 100644 --- a/pkg/lang/vm/value/value.go +++ b/pkg/lang/vm/value/value.go @@ -73,6 +73,21 @@ func NewObject(m mem.Mem, t mem.Ptr) (Value, error) { return Value{t: t, d: ObjectData{obj: ptr}}, nil } +func NewType(m mem.Mem, name string) (Value, error) { + ptr, err := m.Allocate(mem.CellKindType) + if err != nil { + return Value{}, err + } + + t := Type{Kind: ObjectType, Name: name, Methods: make(map[string]FunctionData), Statics: make(map[string]Value)} + + if err = m.Set(ptr, TypeCell(t)); err != nil { + return Value{}, err + } + + return Value{t: CORE_TYPE_TYPE_REF, d: TypeRefData{typeRef: ptr}}, nil +} + func (v Value) TypePtr() mem.Ptr { return v.t } @@ -93,11 +108,17 @@ func (v Value) Type() TypeKind { return ArrayType case CORE_TYPE_FUNCTION: return FunctionType + case CORE_TYPE_TYPE_REF: + return TypeRefType default: return ObjectType } } +func (v Value) WithType(t mem.Ptr) Value { + return Value{t: t, d: v.d, outlet: v.outlet} +} + func (v Value) Data() Data { return v.d } |
