diff options
Diffstat (limited to 'core/const.moon')
| -rw-r--r-- | core/const.moon | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/core/const.moon b/core/const.moon index 45c44eb..99e4178 100644 --- a/core/const.moon +++ b/core/const.moon @@ -10,6 +10,15 @@ ancestor = (klass) -> klass = klass.__parent klass +class Ref + new: (@original) => + + get: (...) => @original\get ... + getc: (...) => @original\get ... + + destroy: => + update: => + class Const types = { sym: true @@ -110,4 +119,18 @@ class Const Const typ, val + @wrap_ref: (val) -> + if base = rawget val, '__base' + -- a class + error "#{name}: cannot wrap_ref class '#{val.__name}'" + elseif val.__class + -- an instance + switch ancestor val.__class + when Op then Ref val + when Const then val + else + error "#{name}: cannot wrap_ref '#{val.__class.__name}' instance" + else + error "#{name}: cannot wrap_ref Lua type '#{type val}'" + :Const, :load_ |
