mirror of
https://github.com/zeek/zeek.git
synced 2025-10-04 15:48:19 +00:00
extensive rewrite of generation & execution of run-time initialization
This commit is contained in:
parent
bc3bf4ea6c
commit
e1a760e674
26 changed files with 3459 additions and 1580 deletions
|
@ -13,75 +13,14 @@ using namespace std;
|
|||
|
||||
void CPPCompile::StartBlock()
|
||||
{
|
||||
++block_level;
|
||||
IndentUp();
|
||||
Emit("{");
|
||||
}
|
||||
|
||||
void CPPCompile::EndBlock(bool needs_semi)
|
||||
{
|
||||
Emit("}%s", needs_semi ? ";" : "");
|
||||
--block_level;
|
||||
}
|
||||
|
||||
string CPPCompile::GenString(const char* b, int len) const
|
||||
{
|
||||
return string("make_intrusive<StringVal>(") + Fmt(len) + ", " + CPPEscape(b, len) + ")";
|
||||
}
|
||||
|
||||
string CPPCompile::CPPEscape(const char* b, int len) const
|
||||
{
|
||||
string res = "\"";
|
||||
|
||||
for ( int i = 0; i < len; ++i )
|
||||
{
|
||||
unsigned char c = b[i];
|
||||
|
||||
switch ( c )
|
||||
{
|
||||
case '\a':
|
||||
res += "\\a";
|
||||
break;
|
||||
case '\b':
|
||||
res += "\\b";
|
||||
break;
|
||||
case '\f':
|
||||
res += "\\f";
|
||||
break;
|
||||
case '\n':
|
||||
res += "\\n";
|
||||
break;
|
||||
case '\r':
|
||||
res += "\\r";
|
||||
break;
|
||||
case '\t':
|
||||
res += "\\t";
|
||||
break;
|
||||
case '\v':
|
||||
res += "\\v";
|
||||
break;
|
||||
|
||||
case '\\':
|
||||
res += "\\\\";
|
||||
break;
|
||||
case '"':
|
||||
res += "\\\"";
|
||||
break;
|
||||
|
||||
default:
|
||||
if ( isprint(c) )
|
||||
res += c;
|
||||
else
|
||||
{
|
||||
char buf[8192];
|
||||
snprintf(buf, sizeof buf, "%03o", c);
|
||||
res += "\\";
|
||||
res += buf;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return res + "\"";
|
||||
IndentDown();
|
||||
}
|
||||
|
||||
void CPPCompile::Indent() const
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue