[STABLE] WORKS!!!

pull/281/head
Rick Carlino 2016-10-13 16:38:33 -05:00
parent 3de3e4f7ee
commit 3b9b64323d
3 changed files with 41 additions and 17 deletions

View File

@ -1,10 +1,11 @@
module CeleryScript
class AstLeaf
attr_reader :value, :parent
def initialize(parent, value)
@parent, @value = parent, value
attr_reader :kind, :value, :parent
def initialize(parent, value, kind)
@parent, @value, @kind = parent, value, kind
end
end
class AstNode
attr_reader :args, :body, :comments, :kind, :parent
@ -12,7 +13,7 @@ module CeleryScript
@comment, @kind, @parent = comment, kind, parent
@args = args.map do |key, value|
[key, maybe_initialize(self, value)]
[key, maybe_initialize(self, value, key)]
end.to_h if args
@body = body.map do |e|
@ -20,9 +21,12 @@ module CeleryScript
end if body
end
def maybe_initialize(parent, leaf_or_node)
klass = is_node?(leaf_or_node) ? AstNode : AstLeaf
klass.new(parent, leaf_or_node)
def maybe_initialize(parent, leaf_or_node, key = "__NEVER__")
if is_node?(leaf_or_node)
AstNode.new(parent, leaf_or_node)
else
AstLeaf.new(parent, leaf_or_node, key)
end
end
def is_node?(hash)

View File

@ -53,21 +53,35 @@ module CeleryScript
def check_arg_validity(should_be, node)
# 2. DONT check validity of body? write test to verify...
case node
when AstNode
corpus
.fetchNode(node.kind)
.allowed_args
.map { |aa| corpus.fetchArg(aa) }
.map do |argSpec|
binding.pry
end
when AstLeaf
puts "Skipping (for now?)"
allowed = corpus
.fetchArg(node.kind)
.allowed_values
.select { |d| d.is_a?(Class) }
actual = node.value.class
unless allowed.include?(actual)
raise TypeCheckError, "Expected leaf '#{ node.kind }' within "\
"'#{ node.parent.kind }' to be one of: "\
"#{ allowed.inspect } but got #{ actual.inspect }"
end
puts "VALID LEAF!"
else
raise TypeCheckError, "What was that?"
end
end
def validate_agaist_spec(argSpec, node)
argSpec.allowed_values.map do |value|
case value
when Class
# binding.pry
when Symbol, String
# binding.pry
else; raise TypeCheckError, "What was that?"
end
end
end
end
end

View File

@ -12,7 +12,13 @@ describe CeleryScript::Checker do
.new
.defineArg(:data_label, [String])
.defineArg(:data_type, [String])
.defineArg(:data_value, [Fixnum, :var_get])
.defineArg(:data_value, [
# If it's a leaf.
# Check that node.value.is_a?(Fixnum)
Fixnum,
# If it's a legit node,
# just check node.kind == "var_get"
:var_get])
.defineArg(:x, [:blah]) do |param, problem|
problem("Param can't be -1") if param < 0
end