Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/torch/argcheck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonan Collobert <ronan@collobert.com>2014-11-08 03:52:25 +0300
committerRonan Collobert <ronan@collobert.com>2014-11-08 03:52:25 +0300
commitf83243fbd2ad8f3a60ff6e420f31e4386b96513e (patch)
tree65ef62283d1935d0410f092a24be84916147e374
parenta41730c909e60e20a2dcfdf72224e5edc3719ba0 (diff)
check for ambiguities (added force flag too for insane users)
-rw-r--r--graph.lua44
1 files changed, 41 insertions, 3 deletions
diff --git a/graph.lua b/graph.lua
index 54478a5..c40d384 100644
--- a/graph.lua
+++ b/graph.lua
@@ -62,11 +62,49 @@ function ACN:match(rules, rulemask, named)
end
function ACN:addpath(rules, rulemask, named)
- if #rulemask == 0 then
- self.rules = self.rules or rules
- self.rulemask = self.rulemask or rulemask
+
+ -- check the corner case where one has named
+ -- and ordered arguments, and ordered
+ -- can take a single table
+ if not rules.force and named then -- named
+ local noordered = true -- do we have ordered?
+ self:apply(function(rules)
+ if not rules.noordered then
+ noordered = false
+ end
+ end)
+
+ if not noordered then -- if yes then beware
+ for n=1,self.n do
+ if self.next[n].type == 'table'
+ and not self.next[n].check
+ and self.next[n].rules then
+ error('argcheck rules led to ambiguous situations')
+ end
+ end
+ end
+ end
+
+ if #rulemask == 0 then -- the no argument case
+ if not rules.force and self.rules then
+ if rules ~= self.rules then
+ error('argcheck rules led to ambiguous situations')
+ end
+ end
+ self.rules = rules
+ self.rulemask = rulemask
else
local head, n = self:match(rules, rulemask, named)
+ if n == #rulemask and head.rules then
+ if rules ~= head.rules then
+ if rules.force then
+ self.rules = rules
+ self.rulemask = rulemask
+ else
+ error('argcheck rules led to ambiguous situations')
+ end
+ end
+ end
for n=n+1,#rulemask do
local rule = rules[rulemask[n]]
local node = ACN.new(rule.type,