aboutsummaryrefslogtreecommitdiff
path: root/lib/object.nom
diff options
context:
space:
mode:
authorBruce Hill <bitbucket@bruce-hill.com>2018-06-18 15:44:29 -0700
committerBruce Hill <bitbucket@bruce-hill.com>2018-06-18 15:44:35 -0700
commit16d127abb507751808eca65108710d3de1fd3cab (patch)
tree53a78ad2e88a95048eea76426e62c05c2c5102a5 /lib/object.nom
parentfc71b0331b6122c774585c3ab93e6e55978ecaf2 (diff)
Initial working version.
Diffstat (limited to 'lib/object.nom')
-rw-r--r--lib/object.nom107
1 files changed, 54 insertions, 53 deletions
diff --git a/lib/object.nom b/lib/object.nom
index 37f661c..c5c0091 100644
--- a/lib/object.nom
+++ b/lib/object.nom
@@ -3,57 +3,58 @@
use "core"
-immediately
- compile [@, me] to: Lua value "self"
- compile [set methods %methods] to
- %lua <- (Lua "")
- for %m in %methods
- to %lua write "\nclass.\(%m as lua id) = \(%m as lua id)"
- return %lua
-
-immediately
- parse [method %actions %body] as
- with local %actions
- action %actions %body
- set methods %actions
-
-immediately
- parse [as %instance %body] as
- result of
- %old_self <- (me)
- (me) <- %instance
- try
- %body
- ..and if it barfs %msg
- (me) <- %old_self
- barf %msg
- ..or if it succeeds
- (me) <- %old_self
-
- compile [object %classname extends %parent %class_body] to
- Lua ".."
- do
- local class = {name=\(%classname as lua expr)}
- setmetatable(class, {
- __index=\(%parent as lua expr),
- __tostring=function(cls) return cls.name end,
- __call=function(cls, inst)
- inst = setmetatable(inst or {}, cls)
- if cls.A_initialize_1 then
- cls.A_initialize_1(inst)
- end
- return inst
- end,
- })
- _ENV["A"..string.as_lua_id("new "..class.name)] = class
- _ENV["A"..string.as_lua_id("new "..class.name.." 1")] = class
- _ENV["A"..string.as_lua_id("class "..class.name)] = function() return class end
- class.__index = class
- class.class = class
-
- \(%class_body as lua statements)
-
- class.__tostring = class["A"..string.as_lua_id("as text")]
- end
-
+compile [@, me] to: Lua value "self"
+compile [set methods %methods] to
+ %lua <- (Lua "")
+ for %m in %methods
+ to %lua write "\nclass.\(%m as lua id) = \(%m as lua id)"
+ return %lua
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+parse [method %actions %body] as
+ with local %actions
+ action %actions %body
+ set methods %actions
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+parse [as %instance %body] as
+ result of
+ %old_self <- (me)
+ (me) <- %instance
+ try
+ %body
+ ..and if it barfs %msg
+ (me) <- %old_self
+ barf %msg
+ ..or if it succeeds
+ (me) <- %old_self
+
+compile [object %classname extends %parent %class_body] to
+ Lua ".."
+ do
+ local class = {name=\(%classname as lua expr)}
+ setmetatable(class, {
+ __index=\(%parent as lua expr),
+ __tostring=function(cls) return cls.name end,
+ __call=function(cls, inst)
+ inst = setmetatable(inst or {}, cls)
+ if cls.A_initialize_1 then
+ cls.A_initialize_1(inst)
+ end
+ return inst
+ end,
+ })
+ _ENV["A"..string.as_lua_id("new "..class.name)] = class
+ _ENV["A"..string.as_lua_id("new "..class.name.." 1")] = class
+ _ENV["A"..string.as_lua_id("class "..class.name)] = function() return class end
+ class.__index = class
+ class.class = class
+
+ \(%class_body as lua statements)
+
+ class.__tostring = class["A"..string.as_lua_id("as text")]
+ end
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
parse [object %classname %class_body] as: object %classname extends (nil) %class_body