def test_preprocess_include_directive(self): self.write_file("include.svh", "hello hey") included_files = [] tokens = preprocess( tokenize('`include "include.svh"'), include_paths=[self.output_path], included_files=included_files ) self.assertEqual(tokens, tokenize("hello hey")) self.assertEqual(included_files, [join(self.output_path, "include.svh")])
def test_preprocess_define_with_default_values(self): defines = {} tokens = preprocess(tokenize("`define foo(arg1, arg2=default)arg1 arg2"), defines) self.assertEqual(tokens, []) self.assertEqual( defines, {"foo": Macro("foo", tokenize("arg1 arg2"), args=("arg1", "arg2"), defaults={"arg2": tokenize("default")})}, )
def test_preprocess_substitute_define_with_multile_args(self): tokens = preprocess( tokenize( """\ `define foo(arg1, arg2)arg1,arg2 `foo(1 2, hello)""" ) ) self.assertEqual(tokens, tokenize("1 2, hello"))
def test_preprocess_substitute_define_with_one_arg(self): tokens = preprocess( tokenize( """\ `define foo(arg)arg 123 `foo(hello hey)""" ) ) self.assertEqual(tokens, tokenize("hello hey 123"))
def test_preprocess_substitute_define_without_args(self): tokens = preprocess( tokenize( """\ `define foo bar \"abc\" `foo""" ) ) self.assertEqual(tokens, tokenize('bar "abc"'))
def test_preprocess_substitute_define_with_default_values(self): defines = {} tokens = preprocess( tokenize( """\ `define foo(arg1, arg2=default)arg1 arg2 `foo(1)""" ), defines, ) self.assertEqual(tokens, tokenize("1 default"))
def parse(cls, code, file_name, include_paths=None): """ Parse verilog file """ include_paths = [] if include_paths is None else include_paths tokens = tokenize(code) included_files = [] pp_tokens = preprocess(tokens, include_paths=[dirname(file_name)] + include_paths, included_files=included_files) tokens = [token for token in pp_tokens if token.kind not in (tokenizer.WHITESPACE, tokenizer.COMMENT, tokenizer.NEWLINE, tokenizer.MULTI_COMMENT)] return cls(modules=VerilogModule.find(tokens), packages=VerilogPackage.find(tokens), imports=cls.find_imports(tokens), instances=cls.find_instances(tokens), included_files=included_files)
def test_preprocess_define_with_multiple_args(self): defines = {} tokens = preprocess(tokenize("`define foo( arg1, arg2)arg1 arg2"), defines) self.assertEqual(tokens, []) self.assertEqual(defines, {"foo": Macro("foo", tokenize("arg1 arg2"), args=("arg1", "arg2"))})
def test_preprocess_define_with_one_arg(self): defines = {} tokens = preprocess(tokenize("`define foo(arg)arg 123"), defines) self.assertEqual(tokens, []) self.assertEqual(defines, {"foo": Macro("foo", tokenize("arg 123"), args=("arg",))})
def test_preprocess_define_with_lpar_value(self): defines = {} tokens = preprocess(tokenize("`define foo (bar)"), defines) self.assertEqual(tokens, []) self.assertEqual(defines, {"foo": Macro("foo", tokenize("(bar)"))})
def test_preprocess_define_with_value(self): defines = {} tokens = preprocess(tokenize('`define foo bar "abc"'), defines) self.assertEqual(tokens, []) self.assertEqual(defines, {"foo": Macro("foo", tokenize('bar "abc"'))})
def test_preprocess_define_without_value(self): defines = {} tokens = preprocess(tokenize("`define foo"), defines) self.assertEqual(tokens, []) self.assertEqual(defines, {"foo": Macro("foo")})
def test_non_preprocess_tokens_are_kept(self): defines = {} tokens = tokenize('"hello"ident/*comment*///comment') pp_tokens = preprocess(tokenize('"hello"ident/*comment*///comment'), defines) self.assertEqual(pp_tokens, tokens) self.assertEqual(defines, {})