本文整理汇总了C#中IronPython.Compiler.Ast.AstGenerator.MakeScriptCode方法的典型用法代码示例。如果您正苦于以下问题:C# AstGenerator.MakeScriptCode方法的具体用法?C# AstGenerator.MakeScriptCode怎么用?C# AstGenerator.MakeScriptCode使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IronPython.Compiler.Ast.AstGenerator
的用法示例。
在下文中一共展示了AstGenerator.MakeScriptCode方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TransformToAst
internal ScriptCode/*!*/ TransformToAst(CompilationMode mode, CompilerContext/*!*/ context) {
// Create the ast generator
// Use the PrintExpression value for the body (global level code)
PythonCompilerOptions pco = context.Options as PythonCompilerOptions;
Debug.Assert(pco != null);
string name;
if (!context.SourceUnit.HasPath || (pco.Module & ModuleOptions.ExecOrEvalCode) != 0) {
name = "<module>";
} else {
name = context.SourceUnit.Path;
}
AstGenerator ag = new AstGenerator(mode, context, _body.Span, name, false, _printExpressions);
MSAst.Expression body = Ast.Block(
Ast.Call(
AstGenerator.GetHelperMethod("ModuleStarted"),
ag.LocalContext,
AstUtils.Constant(ag.BinderState, typeof(object)),
AstUtils.Constant(_languageFeatures)
),
ag.UpdateLineNumber(0),
ag.UpdateLineUpdated(false),
ag.WrapScopeStatements(Transform(ag)), // new ComboActionRewriter().VisitNode(Transform(ag))
AstUtils.Empty()
);
if (_isModule) {
string moduleName = pco.ModuleName;
if (moduleName == null) {
#if !SILVERLIGHT
if (context.SourceUnit.HasPath && context.SourceUnit.Path.IndexOfAny(Path.GetInvalidFileNameChars()) == -1) {
moduleName = Path.GetFileNameWithoutExtension(context.SourceUnit.Path);
#else
if (context.SourceUnit.HasPath) {
moduleName = context.SourceUnit.Path;
#endif
} else {
moduleName = "<module>";
}
}
Debug.Assert(moduleName != null);
body = Ast.Block(
ag.Globals.Assign(ag.Globals.GetVariable(ag, _fileVariable), Ast.Constant(name)),
ag.Globals.Assign(ag.Globals.GetVariable(ag, _nameVariable), Ast.Constant(moduleName)),
body // already typed to void
);
if ((pco.Module & ModuleOptions.Initialize) != 0) {
MSAst.Expression tmp = ag.HiddenVariable(typeof(object), "$originalModule");
// TODO: Should be try/fault
body = AstUtils.Try(
Ast.Assign(tmp, Ast.Call(AstGenerator.GetHelperMethod("PublishModule"), ag.LocalContext, Ast.Constant(moduleName))),
body
).Catch(
typeof(Exception),
Ast.Call(AstGenerator.GetHelperMethod("RemoveModule"), ag.LocalContext, Ast.Constant(moduleName), tmp),
Ast.Rethrow(body.Type)
);
}
}
body = ag.AddProfiling(body);
body = ag.AddReturnTarget(body);
if (body.Type == typeof(void)) {
body = Ast.Block(body, Ast.Constant(null));
}
return ag.MakeScriptCode(body, context, this);
}