Class: OrigenVerilog::Preprocessor::Processor
Defined Under Namespace
Classes: Define
Instance Method Summary
collapse
#handler_missing, #inline, #process, #process_all
Instance Method Details
#on_define(node) ⇒ Object
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/origen_verilog/preprocessor/processor.rb', line 27
def on_define(node)
n = node.find(:name)
name = n.to_a[0]
if a = n.find(:arguments)
args = a.to_a
end
if n = node.find(:text)
text = n.to_a.first
end
env[name] = Define.new(name: name, args: args, text: text)
nil
end
|
#on_else(node) ⇒ Object
Also known as:
on_elsif
78
79
80
|
# File 'lib/origen_verilog/preprocessor/processor.rb', line 78
def on_else(node)
end
|
#on_ifdef(node) ⇒ Object
Also known as:
on_ifndef
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/origen_verilog/preprocessor/processor.rb', line 44
def on_ifdef(node)
elsif_nodes = node.find_all(:elsif)
else_node = node.find(:else)
enable, *nodes = *node
if node.type == :ifdef ? env[enable] : !env[enable]
inline(process_all(nodes))
else
elsif_nodes.each do |elsif_node|
enable, *nodes = *elsif_node
if env[enable]
return inline(process_all(nodes))
end
end
if else_node
inline(process_all(else_node.children))
end
end
end
|
#on_include(node) ⇒ Object
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# File 'lib/origen_verilog/preprocessor/processor.rb', line 9
def on_include(node)
path = node.to_a[0]
file = path if File.exist?(path)
unless file
dir = ([Dir.pwd] + Array(env[:source_dirs])).find do |dir|
f = File.join(dir, path)
File.exist?(f)
end
file = File.join(dir, path) if dir
end
unless file
puts "The file #{path} could not be found!"
puts "#{node.file}:#{node.line_number}"
exit 1
end
inline process(Parser.parse_file(file)).children
end
|
#on_macro_reference(node) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/origen_verilog/preprocessor/processor.rb', line 64
def on_macro_reference(node)
if define = env[node.to_a[0]]
if a = node.find(:arguments)
args = a.to_a
end
node.updated(:text_block, [define.value(node, args)])
else
puts "A reference has been made to macro #{node.to_a[0]} but it hasn't been defined yet!"
puts "#{node.file}:#{node.line_number}"
exit 1
end
end
|
#on_undef(node) ⇒ Object
40
41
42
|
# File 'lib/origen_verilog/preprocessor/processor.rb', line 40
def on_undef(node)
env[node.to_a[0]] = nil
end
|
#run(ast, env) ⇒ Object
4
5
6
7
|
# File 'lib/origen_verilog/preprocessor/processor.rb', line 4
def run(ast, env)
@env = env
process(ast)
end
|