BUG: set ASTNode parent to symbol!?

pull/281/head
Rick Carlino 2016-10-13 13:59:12 -05:00
parent 292fa20eea
commit b01c7f521d
4 changed files with 83 additions and 46 deletions

View File

@ -6,7 +6,7 @@ module CeleryScript
@comment, @kind, @parent = comment, kind, parent
@args = args.map do |key, value|
[key, maybe_initialize(key, value)]
[key, maybe_initialize(self, value)]
end.to_h if args
@body = body.map do |e|

View File

@ -1,5 +1,29 @@
module CeleryScript
class TypeCheckError < StandardError; end
class LeafValue
attr_reader :val
def initialize(val)
@val = val
end
end
class NodeValue
attr_reader :val
def initialize(val)
@val = val
end
end
class Checker
attr_reader :tree, :corpus
def initialize(tree, corpus)
@tree, @corpus = tree, corpus
end
def run!
binding.pry
tree
end
end
end

View File

@ -0,0 +1,27 @@
module CeleryScript
class TypeCheckError < StandardError; end
class LeafValue
attr_reader :val
def initialize(val)
@val = val
end
end
class NodeValue
attr_reader :val
def initialize(val)
@val = val
end
end
class Corpus
def defineArg(arg_name, allowed_values)
# additional_checks.call("node", "err_callback")
self
end
def defineNode(kind, allowed_args, allowed_body_nodes = [])
self
end
end
end

View File

@ -1,49 +1,35 @@
# require 'spec_helper'
require 'spec_helper'
# describe CeleryScript::Checker do
# file_path = File.read("/home/rick/code/farmbot/api/spec/mutations/sequences/improved_ast_fixture.json")
describe CeleryScript::Checker do
file_path = File.read("/home/rick/code/farmbot/api/spec/mutations/sequences/improved_ast_fixture.json")
# let(:tree) do
# CeleryScript::AstNode.new(JSON.parse(file_path).deep_symbolize_keys)
# end
let(:tree) do
CeleryScript::AstNode.new(JSON.parse(file_path).deep_symbolize_keys)
end
# # class LeafValue
# # attr_reader :val
# # def initialize(val)
# # @val = val
# # end
# # end
# # class NodeValue
# # attr_reader :val
# # def initialize(val)
# # @val = val
# # end
# # end
let (:corpus) do
CeleryScript::Corpus
.new
.defineArg(:data_label, [String])
.defineArg(:data_type, [String])
.defineArg(:data_value, [Fixnum, :var_get])
.defineArg(:x, [:blah]) do |param, problem|
problem("Param can't be -1") if param < 0
end
.defineNode(:sequence, [:x], [:other, :whatever])
.defineNode(:blah, [:data_value, :data_type])
.defineNode(:var_get, [:data_label])
.defineNode(:whatever, [:data_type, :data_value])
.defineNode(:var_get, [:data_label])
.defineNode(:other, [:data_type, :data_value])
end
# let (:corpus) do
# CeleryScript::Corpus
# .new
# .defineArg(:data_label, [String])
# .defineArg(:data_type, [String])
# .defineArg(:data_value, [Fixnum, :var_get])
# .defineArg(:x, [:blah]) do |param, problem|
# problem("Param can't be -1") if param < 0
# end
# # Kind: # args: # body:
# .defineNode(:sequence, [:x], [:other, :whatever])
# .defineNode(:blah, [:data_value, :data_type])
# .defineNode(:var_get, [:data_label])
# .defineNode(:whatever, [:data_type, :data_value])
# .defineNode(:var_get, [:data_label])
# .defineNode(:other, [:data_type, :data_value])
# end
# it "runs" do
# begin
# checker = CeleryScript::Checker.new(tree, corpus)
# outcome = checker.run!
# rescue => CeleryScript::TypeCheckError
# binding.pry
# end
# end
# end
it "runs" do
begin
checker = CeleryScript::Checker.new(tree, corpus)
outcome = checker.run!
rescue CeleryScript::TypeCheckError => e
binding.pry
end
end
end