CiNativeBlock ParseNativeBlock()
{
StringBuilder sb = new StringBuilder();
this.CopyTo = sb;
try {
Expect(CiToken.LeftBrace);
int level = 1;
for (;;) {
if (See(CiToken.EndOfFile))
throw new ParseException("Native block not terminated");
if (See(CiToken.LeftBrace))
level++;
else if (See(CiToken.RightBrace))
if (--level == 0)
break;
NextToken();
}
}
finally {
this.CopyTo = null;
}
NextToken();
Trace.Assert(sb[sb.Length - 1] == '}');
sb.Length--;
return new CiNativeBlock { Content = sb.ToString() };
}