@@ -119,10 +119,10 @@ def handle_hny(ns, output_files, parse_code_only, filenames):
119119
120120 return code , scope
121121
122- def handle_hvm (ns , output_files , parse_code_only , code , scope ):
122+ def handle_hvm (ns , output_files , parse_code_only , code , scope , behavior ):
123123 charm_options = ns .cf or []
124- if ns . B :
125- charm_options .append ("-B" + ns . B )
124+ if behavior != None :
125+ charm_options .append ("-B" + behavior )
126126 if ns .b :
127127 charm_options .append ("-b" )
128128 if ns .T :
@@ -175,16 +175,11 @@ def handle_hvm(ns, output_files, parse_code_only, code, scope):
175175 print ("charm model checker failed" )
176176 exit (r )
177177
178- def handle_hco (ns , output_files ):
178+ def handle_hco (ns , output_files , behavior ):
179179 if ns .quick :
180180 return
181181
182182 suppress_output = ns .suppress
183-
184- behavior = None
185- if ns .B :
186- behavior = ns .B
187-
188183 disable_browser = settings .values .disable_web or ns .noweb
189184
190185 b = Brief ()
@@ -270,14 +265,29 @@ def main():
270265 return 1
271266 output_files [suffix ] = str (p )
272267
273- if len (ns .args ) != 1 :
274- print (f"harmony: error: invalid number of arguments ({ len (ns .args )} ). Provide 1 argument." )
275- args .print_help ()
276- return 1
268+ filename = None
269+ behavior_file = ns .B if ns .B else None
270+ for f in ns .args :
271+ name = pathlib .Path (f )
272+ if not name .exists ():
273+ print (f"harmony: error: file named '{ name } ' does not exist." )
274+ return 1
275+ file_type = name .suffix
276+ if file_type == '.hfa' :
277+ if behavior_file != None :
278+ print (f"harmony: error: duplicate behavior file." )
279+ return 1
280+ behavior_file = f
281+ elif filename == None :
282+ filename = name
283+ else :
284+ print (f"harmony: error: multiple input files." )
285+ args .print_help ()
286+ return 1
277287
278- filename = pathlib . Path ( ns . args [ 0 ])
279- if not filename . exists ():
280- print ( f"harmony: error: file named ' { filename } ' does not exist." )
288+ if filename == None :
289+ print ( f"harmony: no input file" )
290+ args . print_help ( )
281291 return 1
282292
283293 stem = str (filename .parent / filename .stem )
@@ -314,17 +324,17 @@ def main():
314324 if input_file_type == ".hny" :
315325 code , scope = handle_hny (ns , output_files , parse_code_only , str (filename ))
316326 if charm_flag :
317- handle_hvm (ns , output_files , parse_code_only , code , scope )
318- handle_hco (ns , output_files )
327+ handle_hvm (ns , output_files , parse_code_only , code , scope , behavior_file )
328+ handle_hco (ns , output_files , behavior_file )
319329 else :
320330 print ("Skipping Phases 2-5..." , flush = True )
321331 legacy_harmony .dumpCode (print_code , code , scope )
322332
323333 if input_file_type == ".hvm" :
324334 print ("Skipping Phase 1..." , flush = True )
325- handle_hvm (ns , output_files , parse_code_only , None , None )
326- handle_hco (ns , output_files )
335+ handle_hvm (ns , output_files , parse_code_only , None , None , behavior_file )
336+ handle_hco (ns , output_files , behavior_file )
327337
328338 if input_file_type == ".hco" :
329339 print ("Skipping Phases 1-4..." , flush = True )
330- handle_hco (ns , output_files )
340+ handle_hco (ns , output_files , behavior_file )
0 commit comments