blob: cd47fe6e2aa0f915b7dfdd973b2a65465f9943d0 [file] [log] [blame]
Parker Schuh343481e2014-02-09 18:28:43 -08001
2class StructStmt
3 def initialize(name,suite)
4 @name = name
5 @suite = suite
6 end
7 def q_eval(locals)
8 group = Target::StructDec.new(@name)
9 locals.register(group)
10 @suite.each do |stmt|
11 stmt.q_eval(locals.bind(group))
12 end
13 return group
14 end
15 def self.parse(tokens)
16 name = tokens.expect(:tWord).data
17 values = []
18 tokens.expect(:tOpenB)
19 while(tokens.peak != :tCloseB)
20 values << MessageElementStmt.parse(tokens)
21 end
22 names = {}
23 values.each do |val|
24 if(names[val.name])
25 raise QSyntaxError.new(<<ERROR_MSG)
26Hey! duplicate name #{val.name.inspect} in your message declaration statement (message #{name}).
27\tI found them at: #{names[val.name].q_stack_name()} and #{val.q_stack_name()}.
28\tWot. Wot.
29ERROR_MSG
30 end
31 names[val.name] = val
32 end
33 tokens.expect(:tCloseB)
34 tokens.expect(:tSemi)
35 self.new(name,values)
36 end
37end