本文整理汇总了C#中SourceCode.Throw方法的典型用法代码示例。如果您正苦于以下问题:C# SourceCode.Throw方法的具体用法?C# SourceCode.Throw怎么用?C# SourceCode.Throw使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SourceCode
的用法示例。
在下文中一共展示了SourceCode.Throw方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Build
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
{
// while (condition) { /* Code */ }
sourceCode += 4; // The +1 comes from below.
while ((++sourceCode).SpecialChar)
{
}
if (sourceCode.CurrentCode != '(')
{
sourceCode.Throw("Error parsing a 'while' statement, was epexting a '(' after 'while'.");
}
List<List<Token>> exitCondition = engine.BuildTokensAdvanced(ref sourceCode, ref script, new[] {')'});
if (!sourceCode.SeekToNext('{'))
{
sourceCode.Throw(String.Format("Unexpected char: '{0}'", sourceCode.CurrentCode));
}
List<List<List<Token>>> code = engine.BuildLongTokens(ref sourceCode, ref script, new[] {'}'});
return new WhileLoopToken(exitCondition, code);
}
示例2: Build
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
{
while ((++sourceCode).SpecialChar)
{
}
if (sourceCode.Peek() != '{')
{
sourceCode.Throw(String.Format("Error parsing a 'do' statement, expected a '{' but got '{0}' instead.",
sourceCode.Peek()));
}
List<List<List<Token>>> code = engine.BuildLongTokens(ref sourceCode, ref script, new[] {'}'});
if (!sourceCode.SeekToNext("while"))
{
sourceCode.Throw("Error parsing a 'do' statement, was expecting a 'while' after the { } block.");
}
if (!sourceCode.SeekToNext('('))
{
sourceCode.Throw("Error parsing a 'do' statement, was expecting a '(' after 'while'.");
}
List<List<Token>> exitCondition = engine.BuildTokensAdvanced(ref sourceCode, ref script, new[] {')'});
return new DoWhileToken(code, exitCondition);
}
示例3: Build
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
{
// using (arg1, arg2, arg3) { }
sourceCode += 5;
if (!sourceCode.SeekToNext('('))
{
sourceCode.Throw("Expected (");
}
// Build up the arguments.
Dictionary<string, List<Token>> items = new Dictionary<string, List<Token>>();
while (sourceCode.CurrentCode != ')')
{
string name = sourceCode.NextWord();
if (sourceCode.CurrentCode != '=')
{
sourceCode.Throw(String.Format("Unexpected character, {0}.", sourceCode.CurrentCode));
}
// Otherwise...
List<Token> code = engine.BuildTokens(ref sourceCode, ref script, new char[] {',', ')'});
items.Add(name, code);
}
if (!sourceCode.SeekToNext('{'))
{
sourceCode.Throw(String.Format("Unexpected character, {0}", sourceCode.NextCode));
}
List<List<List<Token>>> codeBlock = engine.BuildLongTokens(ref sourceCode, ref script, new char[] {'}'});
return new UsingToken(items, codeBlock);
}
示例4: Build
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
{
sourceCode += 5;
if (!sourceCode.SeekToNext('('))
{
sourceCode.Throw(String.Format("Expected '(', got '{0}' instead", sourceCode.NextCode));
}
List<Token> tokens = engine.BuildTokens(ref sourceCode, ref script, new[] {')'});
sourceCode.SeekToNext(';'); // Go to the ;
return new FixedToken(tokens);
}
示例5: Build
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
{
sourceCode += 6;
string code = "";
bool space = false;
while ((++sourceCode).CurrentCode != ')')
{
if (sourceCode.CurrentCode == ' ' && !string.IsNullOrEmpty(code))
{
space = true;
}
else
{
if (sourceCode.CurrentCode == ' ' && string.IsNullOrEmpty(code))
{
// Do nothing...
}
else if (sourceCode.CurrentCode == ' ')
{
space = true;
}
else
{
if (space)
{
sourceCode.Throw("Unexpected whitespace");
}
else
{
code += sourceCode.CurrentCode;
}
}
}
}
return new TypeOfToken(code);
}
示例6: Build
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
{
sourceCode += 8; // Skip past function
// Pattern
// function functionName(args) { code }
string functionName = "";
var argumentNames = new List<string>();
// Build the name first.
while (sourceCode.SpecialChar)
{
sourceCode++;
}
bool space = false;
while (sourceCode.CurrentCode != '(')
{
if (sourceCode.CurrentCode == ' ')
{
space = true;
}
else
{
if (space)
{
sourceCode.Throw("Unexpected Whitespace");
}
functionName += sourceCode.CurrentCode;
}
sourceCode++;
}
// Build up arguments now.
sourceCode++;
space = false;
string arg = "";
while (sourceCode.CurrentCode != ')')
{
char c = sourceCode.CurrentCode;
if (c == ',')
{
if (string.IsNullOrEmpty(arg))
{
sourceCode.Throw("Expected an argument.");
}
else
{
argumentNames.Add(arg);
space = false;
arg = "";
}
}
else
{
if (char.IsWhiteSpace(c) && !string.IsNullOrEmpty(arg))
{
space = true;
}
else
{
if (space)
{
sourceCode.Throw("Unexpected whitespace");
}
else if (char.IsWhiteSpace(c))
{
// Do nothing...
}
else
{
arg += sourceCode.CurrentCode;
}
}
}
sourceCode++;
}
if (string.IsNullOrEmpty(arg))
{
sourceCode.Throw("Expected an argument.");
}
argumentNames.Add(arg);
bool result = sourceCode.SeekToNext('{');
List<List<List<Token>>> code = engine.BuildLongTokens(ref sourceCode, ref script, new[] {'}'});
return new FunctionToken(functionName, argumentNames, code);
}
示例7: Build
public override void Build(ref SourceCode code, ref Script script, ScriptEngine engine, ConfigBuilder config)
{
string id = "";
code += _identifier.Length;
if (code.Peek() == '{' && _requiresID)
{
throw new Exception("Script block requires an ID.");
}
if (code.Peek() != '{')
{
code.SeekToNext('"');
while (!(++code).EOF && code.CurrentCode != '"')
{
id += code.CurrentCode;
}
if (code.EOF)
{
code.Throw("Unexpected EOF");
}
}
code.SeekToNext('{');
var c = new Code(engine.BuildLongTokens(ref code, ref script, new[] {'}'}),
new Script(engine) {UseEngineGlobals = false});
config.AddReturnElement(_identifier, new ScriptBlock {Code = c, Identifier = id});
}