- In addition to the (* ... *) attribute syntax, yosys supports
the non-standard {* ... *} attribute syntax to set default attributes
for everything that comes after the {* ... *} statement. (Reset
- by adding an empty {* *} statement.) The preprocessor define
- __YOSYS_ENABLE_DEFATTR__ must be set in order for this feature to be active.
+ by adding an empty {* *} statement.)
Workarounds for known build problems
namespace VERILOG_FRONTEND {
std::vector<std::string> fn_stack;
std::vector<int> ln_stack;
- bool lexer_feature_defattr;
}
%}
"`timescale"[ \t]+[^ \t\r\n/]+[ \t]*"/"[ \t]*[^ \t\r\n]* /* ignore timescale directive */
-"`yosys_enable_defattr" lexer_feature_defattr = true;
-"`yosys_disable_defattr" lexer_feature_defattr = false;
-
"`"[a-zA-Z_$][a-zA-Z0-9_$]* {
frontend_verilog_yyerror("Unimplemented compiler directive or undefined macro %s.", yytext);
}
"(*" { return ATTR_BEGIN; }
"*)" { return ATTR_END; }
-"{*" { if (lexer_feature_defattr) return DEFATTR_BEGIN; else REJECT; }
-"*}" { if (lexer_feature_defattr) return DEFATTR_END; else REJECT; }
+"{*" { return DEFATTR_BEGIN; }
+"*}" { return DEFATTR_END; }
"**" { return OP_POW; }
"||" { return OP_LOR; }
input_buffer.insert(it, "`file_pop\n");
}
-static std::string define_to_feature(std::string defname)
-{
- if (defname == "__YOSYS_ENABLE_DEFATTR__")
- return "defattr";
- return std::string();
-}
-
std::string frontend_verilog_preproc(FILE *f, std::string filename, const std::map<std::string, std::string> pre_defines_map, const std::list<std::string> include_dirs)
{
std::map<std::string, std::string> defines_map(pre_defines_map);
std::string name, value;
skip_spaces();
name = next_token(true);
- if (!define_to_feature(name).empty())
- output_code.push_back("`yosys_enable_" + define_to_feature(name));
skip_spaces();
int newline_count = 0;
while (!tok.empty()) {
std::string name;
skip_spaces();
name = next_token(true);
- if (!define_to_feature(name).empty())
- output_code.push_back("`yosys_disable_" + define_to_feature(name));
// printf("undef: >>%s<<\n", name.c_str());
defines_map.erase(name);
continue;
fp = fmemopen((void*)code_after_preproc.c_str(), code_after_preproc.size(), "r");
}
- lexer_feature_defattr = false;
-
frontend_verilog_yyset_lineno(1);
frontend_verilog_yyrestart(fp);
frontend_verilog_yyparse();
// this function converts a Verilog constant to an AST_CONSTANT node
AST::AstNode *const2ast(std::string code, char case_type = 0);
-
- // lexer state variables
- extern bool lexer_feature_defattr;
}
// the pre-processor