diff --git a/core.nom b/core.nom index 8ef2a80..920a295 100644 --- a/core.nom +++ b/core.nom @@ -61,6 +61,9 @@ rule "concat %strs with glue %glue": macro block "return %return-value": concat ["do return ",%return-value as lua expr," end"] +macro block "return": + "do return nil end" + macro block "let %varname = %value": concat ["vars[",%varname as lua expr,"] = ",%value as lua expr] diff --git a/sample_game.nom b/sample_game.nom index e3e7561..010e610 100644 --- a/sample_game.nom +++ b/sample_game.nom @@ -14,7 +14,7 @@ lua block ".." | end) | compiler:def("* %relation = %value", function(_,vars) | local result = {} - | for k,v in pairs(relations) do + | for k,v in pairs(relations[vars.relation]) do | if utils.equivalent(v, vars.value) then | table.insert(result, k) | end @@ -78,9 +78,12 @@ with everyone's approval: rule ["approve", "vote yes", "vote yea"]: let "pending" = ("pending proposal" "is" ?) + if (%pending == (nil)): + say "Nothing is currently pending!" + return mark (you) as approving %pending - say "Voted yes." if (everyone approves %pending): + say "The motion passes!" with everyone's approval %pending unpropose ..else: @@ -90,8 +93,10 @@ with everyone's approval: rule ["reject", "vote no", "vote nay", "veto", "disapprove"]: let "pending" = ("pending proposal" "is" ?) + if (%pending == (nil)): + say "Nothing is currently pending!" + return mark (you) as rejecting %pending - say "Voted no." unpropose rule ["players", "everyone", "everybody", "all players"]: @@ -184,5 +189,6 @@ propose: approve as bill: approve as dave: approve - +take a shit +say "Done."