本文整理汇总了C#中clojure.lang.CljCompiler.Ast.CljILGen类的典型用法代码示例。如果您正苦于以下问题:C# CljILGen类的具体用法?C# CljILGen怎么用?C# CljILGen使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
CljILGen类属于clojure.lang.CljCompiler.Ast命名空间,在下文中一共展示了CljILGen类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
EmitUnboxed(rhc, objx, ilg);
HostExpr.EmitBoxReturn(objx, ilg, typeof(bool));
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:chrisortman,项目名称:clojure-clr,代码行数:7,代码来源:InstanceOfExpr.cs
示例2: Emit
public override void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
ilg.EmitBoolean(_val);
ilg.Emit(OpCodes.Box,typeof(bool));
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:telefunkenvf14,项目名称:clojure-clr,代码行数:7,代码来源:BooleanExpr.cs
示例3: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
objx.EmitVar(ilg, _var);
if (_isDynamic)
{
ilg.Emit(OpCodes.Call, Compiler.Method_Var_setDynamic0);
}
if (_meta != null)
{
if (_initProvided || true) //IncludesExplicitMetadata((MapExpr)_meta))
{
ilg.Emit(OpCodes.Dup);
_meta.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Castclass, typeof(IPersistentMap));
ilg.Emit(OpCodes.Call, Compiler.Method_Var_setMeta);
}
}
if (_initProvided)
{
ilg.Emit(OpCodes.Dup);
if (_init is FnExpr)
((FnExpr)_init).EmitForDefn(objx, ilg);
else
_init.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Call,Compiler.Method_Var_bindRoot);
}
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:robertlj,项目名称:clojure-clr,代码行数:29,代码来源:DefExpr.cs
示例4: EmitAssign
public void EmitAssign(RHC rhc, ObjExpr objx, CljILGen ilg, Expr val)
{
objx.EmitVar(ilg, _var);
val.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Call, Compiler.Method_Var_set);
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:telefunkenvf14,项目名称:clojure-clr,代码行数:8,代码来源:VarExpr.cs
示例5: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
for (int i = 0; i < _exprs.count() - 1; i++)
{
Expr e = (Expr)_exprs.nth(i);
e.Emit(RHC.Statement, objx, ilg);
}
LastExpr.Emit(rhc, objx, ilg);
}
开发者ID:telefunkenvf14,项目名称:clojure-clr,代码行数:9,代码来源:BodyExpr.cs
示例6: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
ilg.Emit(OpCodes.Call,Compiler.Method_Compiler_CurrentNamespace.GetGetMethod());
ilg.Emit(OpCodes.Ldstr, _c);
ilg.Emit(OpCodes.Call, Compiler.Method_RT_classForName);
ilg.Emit(OpCodes.Call, Compiler.Method_Namespace_importClass1);
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:JvJ,项目名称:clojure-clr,代码行数:9,代码来源:ImportExpr.cs
示例7: EmitUnboxed
public void EmitUnboxed(RHC rhc, ObjExpr objx, CljILGen ilg)
{
for (int i = 0; i < _exprs.count() - 1; i++)
{
Expr e = (Expr)_exprs.nth(i);
e.Emit(RHC.Statement, objx, ilg);
}
MaybePrimitiveExpr mbe = (MaybePrimitiveExpr)LastExpr;
mbe.EmitUnboxed(rhc, objx, ilg);
}
开发者ID:telefunkenvf14,项目名称:clojure-clr,代码行数:10,代码来源:BodyExpr.cs
示例8: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
_expr.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Castclass, typeof(IObj));
_meta.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Castclass, typeof(IPersistentMap));
ilg.EmitCall(Compiler.Method_IObj_withMeta);
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:telefunkenvf14,项目名称:clojure-clr,代码行数:10,代码来源:MetaExpr.cs
示例9: Emit
public override void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
if (_excExpr == null)
{
ilg.Emit(OpCodes.Rethrow);
}
else
{
_excExpr.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Castclass, typeof(Exception));
ilg.Emit(OpCodes.Throw);
}
}
开发者ID:mjmcaulay,项目名称:clojure-clr,代码行数:13,代码来源:ThrowExpr.cs
示例10: EmitUnboxed
public void EmitUnboxed(RHC rhc, ObjExpr objx, CljILGen ilg)
{
Type t = _n.GetType();
if (t == typeof(int))
ilg.EmitLong((long)(int)_n);
else if (t == typeof(double))
ilg.EmitDouble((double)_n);
else if (t == typeof(long))
ilg.EmitLong((long)_n);
else
throw new ArgumentException("Unsupported Number type: " + _n.GetType().Name);
}
开发者ID:telefunkenvf14,项目名称:clojure-clr,代码行数:13,代码来源:NumberExpr.cs
示例11: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
objx.EmitVar(ilg, _var);
if ( _shadowsCoreMapping )
{
LocalBuilder locNs = ilg.DeclareLocal(typeof(Namespace));
GenContext.SetLocalName(locNs, "ns");
ilg.Emit(OpCodes.Dup);
ilg.EmitFieldGet(VarNsFI);
ilg.Emit(OpCodes.Stloc,locNs);
LocalBuilder locSym = ilg.DeclareLocal(typeof(Symbol));
GenContext.SetLocalName(locSym, "sym");
ilg.Emit(OpCodes.Dup);
ilg.EmitFieldGet(VarSymFI);
ilg.Emit(OpCodes.Stloc, locSym);
ilg.Emit(OpCodes.Ldloc, locNs);
ilg.Emit(OpCodes.Ldloc, locSym);
ilg.Emit(OpCodes.Call, NamespaceReferMI);
}
if (_isDynamic)
{
ilg.Emit(OpCodes.Call, Compiler.Method_Var_setDynamic0);
}
if (_meta != null)
{
if (_initProvided || true) //IncludesExplicitMetadata((MapExpr)_meta))
{
ilg.Emit(OpCodes.Dup);
_meta.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Castclass, typeof(IPersistentMap));
ilg.Emit(OpCodes.Call, Compiler.Method_Var_setMeta);
}
}
if (_initProvided)
{
ilg.Emit(OpCodes.Dup);
if (_init is FnExpr)
((FnExpr)_init).EmitForDefn(objx, ilg);
else
_init.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Call,Compiler.Method_Var_bindRoot);
}
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:telefunkenvf14,项目名称:clojure-clr,代码行数:51,代码来源:DefExpr.cs
示例12: DoEmit
void DoEmit(RHC rhc, ObjExpr objx, CljILGen ilg, bool emitUnboxed)
{
List<LocalBuilder> locals = new List<LocalBuilder>();
for (int i = 0; i < _bindingInits.count(); i++)
{
BindingInit bi = (BindingInit)_bindingInits.nth(i);
Type primType = Compiler.MaybePrimitiveType(bi.Init);
if (primType != null)
{
LocalBuilder local = ilg.DeclareLocal(primType);
locals.Add(local);
GenContext.SetLocalName(local, bi.Binding.Name);
bi.Binding.LocalVar = local;
((MaybePrimitiveExpr)bi.Init).EmitUnboxed(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Stloc, local);
}
else
{
LocalBuilder local = ilg.DeclareLocal(typeof(Object));
locals.Add(local);
GenContext.SetLocalName(local, bi.Binding.Name);
bi.Binding.LocalVar = local;
bi.Init.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Stloc, local);
}
}
Label loopLabel = ilg.DefineLabel();
ilg.MarkLabel(loopLabel);
try
{
if (_isLoop)
Var.pushThreadBindings(PersistentHashMap.create(Compiler.LoopLabelVar, loopLabel));
if (emitUnboxed)
((MaybePrimitiveExpr)_body).EmitUnboxed(rhc, objx, ilg);
else
_body.Emit(rhc, objx, ilg);
}
finally
{
if (_isLoop)
Var.popThreadBindings();
}
}
开发者ID:corvusalba,项目名称:clojure-clr,代码行数:49,代码来源:LetExpr.cs
示例13: Emit
//static readonly FieldInfo VectorEmptyFI = typeof(PersistentVector).GetField("EMPTY");
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
if (_coll is IPersistentList || _coll is LazySeq) // JVM does not include LazySeq test. I'm getting it in some places. LazySeq of 0 size got us here, we'll treat as an empty list
ilg.EmitFieldGet(ListEmptyFI);
else if (_coll is IPersistentVector)
ilg.EmitFieldGet(TupleEmptyFI);
else if (_coll is IPersistentMap)
ilg.EmitFieldGet(HashMapEmptyFI);
else if (_coll is IPersistentSet)
ilg.EmitFieldGet(HashSetEmptyFI);
else
throw new InvalidOperationException("Unknown collection type.");
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:mjmcaulay,项目名称:clojure-clr,代码行数:16,代码来源:EmptyExpr.cs
示例14: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
if (_coll is IPersistentList)
ilg.EmitFieldGet(ListEmptyFI);
else if (_coll is IPersistentVector)
ilg.EmitFieldGet(VectorEmptyFI);
else if (_coll is IPersistentMap)
ilg.EmitFieldGet(HashMapEmptyFI);
else if (_coll is IPersistentSet)
ilg.EmitFieldGet(HashSetEmptyFI);
else
throw new InvalidOperationException("Unknown collection type.");
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:stuman08,项目名称:clojure-clr,代码行数:15,代码来源:EmptyExpr.cs
示例15: EmitUnboxed
public void EmitUnboxed(RHC rhc, ObjExpr objx, CljILGen ilg)
{
_expr.Emit(RHC.Expression, objx, ilg);
// This corresponds to the most general case code in System.Linq.Expressions.Compiler.LambdaCompiler
Type opType = _expr.HasClrType && _expr.ClrType != null ? _expr.ClrType : typeof(object);
if (opType.IsValueType)
{
ilg.Emit(OpCodes.Box, opType);
}
ilg.Emit(OpCodes.Isinst, _t);
ilg.Emit(OpCodes.Ldnull);
ilg.Emit(OpCodes.Cgt_Un);
}
开发者ID:JvJ,项目名称:clojure-clr,代码行数:15,代码来源:InstanceOfExpr.cs
示例16: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
GenContext.EmitDebugInfo(ilg, _spanMap);
if (_ctor != null)
EmitForMethod(rhc, objx, ilg);
else if (_isNoArgValueTypeCtor)
EmitForNoArgValueTypeCtor(rhc, objx, ilg);
else
{
EmitComplexCall(rhc, objx, ilg);
if (_type.IsValueType)
HostExpr.EmitBoxReturn(objx, ilg, _type);
}
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:telefunkenvf14,项目名称:clojure-clr,代码行数:18,代码来源:NewExpr.cs
示例17: Emit
public override void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
GenContext.EmitDebugInfo(ilg, _spanMap);
Type retType;
if (_method != null)
{
EmitForMethod(objx, ilg);
retType = _method.ReturnType;
}
else
{
EmitComplexCall(objx, ilg);
retType = typeof(object);
}
HostExpr.EmitBoxReturn(objx, ilg, retType);
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}
开发者ID:TerabyteX,项目名称:clojure-clr,代码行数:21,代码来源:MethodExpr.cs
示例18: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
int n = _bindingInits.count();
// Define our locals
for (int i = 0; i < n; i++)
{
BindingInit bi = (BindingInit)_bindingInits.nth(i);
LocalBuilder local = ilg.DeclareLocal(typeof(IFn));
bi.Binding.LocalVar = local;
ilg.Emit(OpCodes.Ldnull);
ilg.Emit(OpCodes.Stloc, local);
}
// Then initialize
IPersistentSet lbset = PersistentHashSet.EMPTY;
for (int i = 0; i < n; i++)
{
BindingInit bi = (BindingInit)_bindingInits.nth(i);
lbset = (IPersistentSet)lbset.cons(bi.Binding);
bi.Init.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Stloc,bi.Binding.LocalVar);
}
for (int i = 0; i < n; i++)
{
BindingInit bi = (BindingInit)_bindingInits.nth(i);
ObjExpr fe = (ObjExpr)bi.Init;
ilg.Emit(OpCodes.Ldloc, bi.Binding.LocalVar);
fe.EmitLetFnInits(ilg, bi.Binding.LocalVar, objx, lbset);
}
_body.Emit(rhc, objx, ilg);
}
开发者ID:clojure,项目名称:clojure-clr,代码行数:38,代码来源:LetFnExpr.cs
示例19: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
if (_catchExprs.count() == 0 && _finallyExpr == null)
{
// degenerate case
_tryExpr.Emit(rhc, objx, ilg);
return;
}
LocalBuilder retLocal = ilg.DeclareLocal(typeof(Object));
ilg.BeginExceptionBlock();
_tryExpr.Emit(rhc, objx, ilg);
if (rhc != RHC.Statement)
ilg.Emit(OpCodes.Stloc, retLocal);
for (int i = 0; i < _catchExprs.count(); i++)
{
CatchClause clause = (CatchClause)_catchExprs.nth(i);
ilg.BeginCatchBlock(clause.Type);
// Exception should be on the stack. Put in clause local
clause.Lb.LocalVar = ilg.DeclareLocal(clause.Type);
ilg.Emit(OpCodes.Stloc, clause.Lb.LocalVar);
clause.Handler.Emit(rhc, objx, ilg);
if (clause.Handler.HasNormalExit() && rhc != RHC.Statement)
ilg.Emit(OpCodes.Stloc, retLocal);
}
if (_finallyExpr != null)
{
ilg.BeginFinallyBlock();
_finallyExpr.Emit(RHC.Statement, objx, ilg);
}
ilg.EndExceptionBlock();
if (rhc != RHC.Statement)
ilg.Emit(OpCodes.Ldloc, retLocal);
}
开发者ID:clojure,项目名称:clojure-clr,代码行数:37,代码来源:TryExpr.cs
示例20: Emit
public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
Label loopLabel = (Label)Compiler.LoopLabelVar.deref();
if (loopLabel == null)
throw new InvalidOperationException("Recur not in proper context.");
{
for (int i = 0; i < _loopLocals.count(); i++)
{
LocalBinding lb = (LocalBinding)_loopLocals.nth(i);
Expr arg = (Expr)_args.nth(i);
Type primt = lb.PrimitiveType;
if (primt != null)
{
MaybePrimitiveExpr mpeArg = arg as MaybePrimitiveExpr;
Type pt = Compiler.MaybePrimitiveType(arg);
if (pt == primt)
{
mpeArg.EmitUnboxed(RHC.Expression, objx, ilg);
}
else if (primt == typeof(long) && pt == typeof(int))
{
mpeArg.EmitUnboxed(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Conv_I8);
}
else if (primt == typeof(double) && pt == typeof(float))
{
mpeArg.EmitUnboxed(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Conv_R8);
}
else if (primt == typeof(int) && pt == typeof(long))
{
mpeArg.EmitUnboxed(RHC.Expression, objx, ilg);
ilg.EmitCall(Compiler.Method_RT_intCast_long);
}
else if (primt == typeof(float) && pt == typeof(double))
{
mpeArg.EmitUnboxed(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Conv_R4);
}
else
{
throw new ArgumentException(String.Format(
"{0}:{1} recur arg for primitive local: {2} is not matching primitive, had: {3}, needed {4}",
_source, _spanMap != null ? (int)_spanMap.valAt(RT.StartLineKey, 0) : 0,
lb.Name, (arg.HasClrType ? arg.ClrType.Name : "Object"), primt.Name));
}
}
else
{
arg.Emit(RHC.Expression, objx, ilg);
}
}
}
for (int i = _loopLocals.count() - 1; i >= 0; i--)
{
LocalBinding lb = (LocalBinding)_loopLocals.nth(i);
Type primt = lb.PrimitiveType;
if (lb.IsArg)
//ilg.Emit(OpCodes.Starg, lb.Index - (objx.IsStatic ? 0 : 1));
ilg.EmitStoreArg(lb.Index);
else
{
ilg.Emit(OpCodes.Stloc, lb.LocalVar);
}
}
ilg.Emit(OpCodes.Br, loopLabel);
//if (rhc != RHC.Statement)
// ilg.Emit(OpCodes.Ldnull);
}
开发者ID:stuman08,项目名称:clojure-clr,代码行数:75,代码来源:RecurExpr.cs
注:本文中的clojure.lang.CljCompiler.Ast.CljILGen类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论