本文整理汇总了C#中clojure.lang.CljCompiler.Ast.LocalBinding类的典型用法代码示例。如果您正苦于以下问题:C# LocalBinding类的具体用法?C# LocalBinding怎么用?C# LocalBinding使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
LocalBinding类属于clojure.lang.CljCompiler.Ast命名空间,在下文中一共展示了LocalBinding类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: LocalBindingExpr
public LocalBindingExpr(LocalBinding b, Symbol tag)
{
if (b.PrimitiveType != null && _tag != null)
throw new InvalidOperationException("Can't type hint a primitive local");
_b = b;
_tag = tag;
}
开发者ID:kmartin,项目名称:clojure-contrib,代码行数:7,代码来源:LocalBindingExpr.cs
示例2: EmitLocal
internal void EmitLocal(CljILGen ilg, LocalBinding lb)
{
Type primType = lb.PrimitiveType;
if (Closes.containsKey(lb))
{
ilg.Emit(OpCodes.Ldarg_0); // this
FieldBuilder fb = _closedOverFieldsMap[lb];
ilg.MaybeEmitVolatileOp(IsVolatile(lb));
ilg.Emit(OpCodes.Ldfld, fb);
if (primType != null)
HostExpr.EmitBoxReturn(this, ilg, primType);
// TODO: ONCEONLY?
}
else
{
if (lb.IsArg)
{
//int argOffset = IsStatic ? 1 : 0;
//ilg.Emit(OpCodes.Ldarg, lb.Index - argOffset);
ilg.EmitLoadArg(lb.Index);
}
else if (lb.IsThis)
{
ilg.EmitLoadArg(0);
}
else
{
ilg.Emit(OpCodes.Ldloc, lb.LocalVar);
}
if (primType != null)
HostExpr.EmitBoxReturn(this, ilg, primType);
}
}
开发者ID:EricThorsen,项目名称:clojure-clr,代码行数:34,代码来源:ObjExpr.cs
示例3: EmitAssignLocal
internal void EmitAssignLocal(CljILGen ilg, LocalBinding lb, Expr val)
{
if (!IsMutable(lb))
throw new ArgumentException("Cannot assign to non-mutable: ", lb.Name);
FieldBuilder fb = null;
bool hasField = _closedOverFieldsMap.TryGetValue(lb, out fb);
ilg.Emit(OpCodes.Ldarg_0); // this
Type primt = lb.PrimitiveType;
if (primt != null)
{
MaybePrimitiveExpr mbe = val as MaybePrimitiveExpr;
if (!(mbe != null && mbe.CanEmitPrimitive))
throw new ArgumentException("Must assign primitive to primitive mutable", lb.Name);
mbe.EmitUnboxed(RHC.Expression, this, ilg);
}
else
{
val.Emit(RHC.Expression, this, ilg);
}
if (hasField)
{
ilg.MaybeEmitVolatileOp(IsVolatile(lb));
ilg.Emit(OpCodes.Stfld, fb);
}
else
ilg.Emit(OpCodes.Stloc, lb.LocalVar);
}
开发者ID:EricThorsen,项目名称:clojure-clr,代码行数:32,代码来源:ObjExpr.cs
示例4: RegisterLocalInternal
private static LocalBinding RegisterLocalInternal(Symbol sym, Symbol tag, Expr init, bool isThis, bool isArg, bool isByRef)
{
int num = GetAndIncLocalNum();
LocalBinding b = new LocalBinding(num, sym, tag, init, isThis, isArg, isByRef);
IPersistentMap localsMap = (IPersistentMap)LocalEnvVar.deref();
LocalEnvVar.set(RT.assoc(localsMap, b.Symbol, b));
ObjMethod method = (ObjMethod)MethodVar.deref();
method.AddLocal(num, b);
return b;
}
开发者ID:rvedam,项目名称:clojure-clr,代码行数:10,代码来源:Compiler.cs
示例5: Build
internal static ObjExpr Build(
IPersistentVector interfaceSyms,
IPersistentVector fieldSyms,
Symbol thisSym,
string tagName,
Symbol className,
Symbol typeTag,
ISeq methodForms,
Object frm)
{
NewInstanceExpr ret = new NewInstanceExpr(null);
ret._src = frm;
ret._name = className.ToString();
ret._classMeta = GenInterface.ExtractAttributes(RT.meta(className));
ret.InternalName = ret.Name; // ret.Name.Replace('.', '/');
// Java: ret.objtype = Type.getObjectType(ret.internalName);
if (thisSym != null)
ret._thisName = thisSym.Name;
if (fieldSyms != null)
{
IPersistentMap fmap = PersistentHashMap.EMPTY;
object[] closesvec = new object[2 * fieldSyms.count()];
for (int i = 0; i < fieldSyms.count(); i++)
{
Symbol sym = (Symbol)fieldSyms.nth(i);
LocalBinding lb = new LocalBinding(-1, sym, null, new MethodParamExpr(Compiler.TagType(Compiler.TagOf(sym))), false, false);
fmap = fmap.assoc(sym, lb);
closesvec[i * 2] = lb;
closesvec[i * 2 + 1] = lb;
}
// Java TODO: inject __meta et al into closes - when?
// use array map to preserve ctor order
ret._closes = new PersistentArrayMap(closesvec);
ret._fields = fmap;
for (int i = fieldSyms.count() - 1; i >= 0 && ((Symbol)fieldSyms.nth(i)).Name.StartsWith("__"); --i)
ret._altCtorDrops++;
}
// Java TODO: set up volatiles
//ret._volatiles = PersistentHashSet.create(RT.seq(RT.get(ret._optionsMap, volatileKey)));
IPersistentVector interfaces = PersistentVector.EMPTY;
for (ISeq s = RT.seq(interfaceSyms); s != null; s = s.next())
{
Type t = (Type)Compiler.Resolve((Symbol)s.first());
if (!t.IsInterface)
throw new ArgumentException("only interfaces are supported, had: " + t.Name);
interfaces = interfaces.cons(t);
}
Type superClass = typeof(Object);
Dictionary<IPersistentVector, List<MethodInfo>> overrideables;
GatherMethods(superClass, RT.seq(interfaces), out overrideables);
ret._methodMap = overrideables;
//string[] inames = InterfaceNames(interfaces);
Type stub = CompileStub(superClass, ret, SeqToTypeArray(interfaces),frm);
Symbol thisTag = Symbol.intern(null, stub.FullName);
//Symbol stubTag = Symbol.intern(null,stub.FullName);
//Symbol thisTag = Symbol.intern(null, tagName);
// Needs its own GenContext so it has its own DynInitHelper
// Can't reuse Compiler.EvalContext if it is a DefType because we have to use the given name and will get a conflict on redefinition
GenContext context = Compiler.COMPILER_CONTEXT.get() as GenContext ?? (ret.IsDefType ? new GenContext("deftype" + RT.nextID().ToString(),".dll",".",true) : Compiler.EvalContext);
GenContext genC = context.WithNewDynInitHelper(ret.InternalName + "__dynInitHelper_" + RT.nextID().ToString());
//genC.FnCompileMode = FnMode.Full;
try
{
Var.pushThreadBindings(
RT.map(
Compiler.CONSTANTS, PersistentVector.EMPTY,
Compiler.CONSTANT_IDS, new IdentityHashMap(),
Compiler.KEYWORDS, PersistentHashMap.EMPTY,
Compiler.VARS, PersistentHashMap.EMPTY,
Compiler.KEYWORD_CALLSITES, PersistentVector.EMPTY,
Compiler.PROTOCOL_CALLSITES, PersistentVector.EMPTY,
Compiler.VAR_CALLSITES, PersistentVector.EMPTY,
Compiler.COMPILER_CONTEXT, genC
));
if (ret.IsDefType)
{
Var.pushThreadBindings(
RT.map(
Compiler.METHOD, null,
Compiler.LOCAL_ENV, ret._fields,
Compiler.COMPILE_STUB_SYM, Symbol.intern(null, tagName),
Compiler.COMPILE_STUB_CLASS, stub
));
}
// now (methodname [args] body)*
// TODO: SourceLocation?
//ret.line = (Integer)LINE.deref();
IPersistentCollection methods = null;
for (ISeq s = methodForms; s != null; s = RT.next(s))
//.........这里部分代码省略.........
开发者ID:christianblunden,项目名称:clojure-clr,代码行数:101,代码来源:NewInstanceExpr.cs
示例6: HostArg
public HostArg(ParameterType paramType, Expr argExpr, LocalBinding lb)
{
_paramType = paramType;
_argExpr = argExpr;
_localBinding = lb;
}
开发者ID:101v,项目名称:clojure-clr,代码行数:6,代码来源:HostArg.cs
示例7: RegisterLocal
internal static LocalBinding RegisterLocal(Symbol sym, Symbol tag, Expr init)
{
int num = GetAndIncLocalNum();
LocalBinding b = new LocalBinding(num,sym, tag, init);
IPersistentMap localsMap = (IPersistentMap)LOCAL_ENV.deref();
LOCAL_ENV.set(RT.assoc(localsMap,b.Symbol, b));
FnMethod method = (FnMethod)METHODS.deref();
method.Locals = (IPersistentMap)RT.assoc(method.Locals,b, b);
method.IndexLocals = (IPersistentMap)RT.assoc(method.IndexLocals, num, b);
return b;
}
开发者ID:starapor,项目名称:clojure-clr,代码行数:13,代码来源:Compiler.cs
示例8: IsVolatile
internal bool IsVolatile(LocalBinding lb)
{
return RT.booleanCast(RT.contains(Fields, lb.Symbol)) &&
RT.booleanCast(RT.get(lb.Symbol.meta(), Keyword.intern("volatile-mutable")));
}
开发者ID:EricThorsen,项目名称:clojure-clr,代码行数:5,代码来源:ObjExpr.cs
示例9: BindingInit
public BindingInit(LocalBinding binding, Expr init)
{
_binding = binding;
_init = init;
}
开发者ID:101v,项目名称:clojure-clr,代码行数:5,代码来源:BindingInit.cs
示例10: Build
internal static ObjExpr Build(
IPersistentVector interfaceSyms,
IPersistentVector fieldSyms,
Symbol thisSym,
string tagName,
Symbol className,
Symbol typeTag,
ISeq methodForms,
Object frm,
IPersistentMap opts)
{
NewInstanceExpr ret = new NewInstanceExpr(null);
ret.Src = frm;
ret.Name = className.ToString();
ret.ClassMeta = GenInterface.ExtractAttributes(RT.meta(className));
ret.InternalName = ret.Name; // ret.Name.Replace('.', '/');
// Java: ret.objtype = Type.getObjectType(ret.internalName);
ret.Opts = opts;
if (thisSym != null)
ret.ThisName = thisSym.Name;
if (fieldSyms != null)
{
IPersistentMap fmap = PersistentHashMap.EMPTY;
object[] closesvec = new object[2 * fieldSyms.count()];
for (int i = 0; i < fieldSyms.count(); i++)
{
Symbol sym = (Symbol)fieldSyms.nth(i);
LocalBinding lb = new LocalBinding(-1, sym, null, new MethodParamExpr(Compiler.TagType(Compiler.TagOf(sym))), false, false, false);
fmap = fmap.assoc(sym, lb);
closesvec[i * 2] = lb;
closesvec[i * 2 + 1] = lb;
}
// Java TODO: inject __meta et al into closes - when?
// use array map to preserve ctor order
ret.Closes = new PersistentArrayMap(closesvec);
ret.Fields = fmap;
for (int i = fieldSyms.count() - 1; i >= 0 && (((Symbol)fieldSyms.nth(i)).Name.Equals("__meta") || ((Symbol)fieldSyms.nth(i)).Name.Equals("__extmap")); --i)
ret.AltCtorDrops++;
}
// Java TODO: set up volatiles
//ret._volatiles = PersistentHashSet.create(RT.seq(RT.get(ret._optionsMap, volatileKey)));
IPersistentVector interfaces = PersistentVector.EMPTY;
for (ISeq s = RT.seq(interfaceSyms); s != null; s = s.next())
{
Type t = (Type)Compiler.Resolve((Symbol)s.first());
if (!t.IsInterface)
throw new ParseException("only interfaces are supported, had: " + t.Name);
interfaces = interfaces.cons(t);
}
Type superClass = typeof(Object);
Dictionary<IPersistentVector, IList<MethodInfo>> overrideables;
Dictionary<IPersistentVector, IList<MethodInfo>> explicits;
GatherMethods(superClass, RT.seq(interfaces), out overrideables, out explicits);
ret._methodMap = overrideables;
GenContext context = Compiler.IsCompiling
? Compiler.CompilerContextVar.get() as GenContext
: (ret.IsDefType
? GenContext.CreateWithExternalAssembly("deftype" + RT.nextID().ToString(), ".dll", true)
: (Compiler.CompilerContextVar.get() as GenContext
??
Compiler.EvalContext));
GenContext genC = context.WithNewDynInitHelper(ret.InternalName + "__dynInitHelper_" + RT.nextID().ToString());
Type baseClass = ret.CompileBaseClass(genC, superClass, SeqToTypeArray(interfaces), frm);
Symbol thisTag = Symbol.intern(null, baseClass.FullName);
try
{
Var.pushThreadBindings(
RT.mapUniqueKeys(
Compiler.ConstantsVar, PersistentVector.EMPTY,
Compiler.ConstantIdsVar, new IdentityHashMap(),
Compiler.KeywordsVar, PersistentHashMap.EMPTY,
Compiler.VarsVar, PersistentHashMap.EMPTY,
Compiler.KeywordCallsitesVar, PersistentVector.EMPTY,
Compiler.ProtocolCallsitesVar, PersistentVector.EMPTY,
Compiler.VarCallsitesVar, Compiler.EmptyVarCallSites(),
Compiler.NoRecurVar, null,
Compiler.CompilerContextVar, genC
));
if (ret.IsDefType)
{
Var.pushThreadBindings(
RT.mapUniqueKeys(
Compiler.MethodVar, null,
Compiler.LocalEnvVar, ret.Fields,
Compiler.CompileStubSymVar, Symbol.intern(null, tagName),
Compiler.CompileStubClassVar, baseClass
));
ret.HintedFields = RT.subvec(fieldSyms, 0, fieldSyms.count() - ret.AltCtorDrops);
//.........这里部分代码省略.........
开发者ID:TerabyteX,项目名称:clojure-clr,代码行数:101,代码来源:NewInstanceExpr.cs
示例11: AddLocal
public void AddLocal(int index, LocalBinding lb)
{
Locals = (IPersistentMap)RT.assoc(Locals, lb, lb);
IndexLocals = (IPersistentMap)RT.assoc(IndexLocals, index, lb);
}
开发者ID:clojure,项目名称:clojure-clr,代码行数:5,代码来源:ObjMethod.cs
示例12: EmitUnboxedLocal
internal void EmitUnboxedLocal(CljILGen ilg, LocalBinding lb)
{
if (Closes.containsKey(lb))
{
if (_fnMode == FnMode.Full)
{
ilg.Emit(OpCodes.Ldarg_0); // this
FieldBuilder fb = _closedOverFieldsMap[lb];
ilg.MaybeEmitVolatileOp(IsVolatile(lb));
ilg.Emit(OpCodes.Ldfld, fb);
}
else
{
ilg.Emit(OpCodes.Ldarg_0); // this
ilg.Emit(OpCodes.Castclass, typeof(IFnClosure));
ilg.EmitCall(Compiler.Method_IFnClosure_GetClosure);
ilg.EmitFieldGet(Compiler.Field_Closure_Locals);
ilg.EmitInt(lb.Index);
ilg.EmitLoadElement(typeof(Object));
if (lb.PrimitiveType != null)
ilg.Emit(OpCodes.Unbox, lb.PrimitiveType);
}
}
else if (lb.IsArg)
{
//int argOffset = IsStatic ? 0 : 1;
//ilg.Emit(OpCodes.Ldarg, lb.Index + argOffset);
ilg.EmitLoadArg(lb.Index);
}
else if (lb.IsThis)
{
ilg.EmitLoadArg(0);
}
else
ilg.Emit(OpCodes.Ldloc, lb.LocalVar);
}
开发者ID:aaronc,项目名称:clojure-clr,代码行数:36,代码来源:ObjExpr.cs
示例13: EmitLocal
internal void EmitLocal(CljILGen ilg, LocalBinding lb)
{
Type primType = lb.PrimitiveType;
if (Closes.containsKey(lb))
{
if (_fnMode == FnMode.Full)
{
ilg.Emit(OpCodes.Ldarg_0); // this
FieldBuilder fb = _closedOverFieldsMap[lb];
ilg.MaybeEmitVolatileOp(IsVolatile(lb));
ilg.Emit(OpCodes.Ldfld, fb);
if (primType != null)
HostExpr.EmitBoxReturn(this, ilg, primType);
// TODO: ONCEONLY?
}
else // FnMode.Light
{
ilg.Emit(OpCodes.Ldarg_0); // this
ilg.Emit(OpCodes.Castclass, typeof(IFnClosure));
ilg.EmitCall(Compiler.Method_IFnClosure_GetClosure);
ilg.EmitFieldGet(Compiler.Field_Closure_Locals);
ilg.EmitInt(lb.Index);
ilg.EmitLoadElement(typeof(Object));
}
}
else
{
if (lb.IsArg)
{
//int argOffset = IsStatic ? 1 : 0;
//ilg.Emit(OpCodes.Ldarg, lb.Index - argOffset);
ilg.EmitLoadArg(lb.Index);
}
else if (lb.IsThis)
{
ilg.EmitLoadArg(0);
}
else
{
ilg.Emit(OpCodes.Ldloc, lb.LocalVar);
}
if (primType != null)
HostExpr.EmitBoxReturn(this, ilg, primType);
}
}
开发者ID:aaronc,项目名称:clojure-clr,代码行数:46,代码来源:ObjExpr.cs
示例14: EmitUnboxedLocal
internal void EmitUnboxedLocal(CljILGen ilg, LocalBinding lb)
{
if (Closes.containsKey(lb))
{
ilg.Emit(OpCodes.Ldarg_0); // this
FieldBuilder fb = _closedOverFieldsMap[lb];
ilg.MaybeEmitVolatileOp(IsVolatile(lb));
ilg.Emit(OpCodes.Ldfld, fb);
}
else if (lb.IsArg)
{
//int argOffset = IsStatic ? 0 : 1;
//ilg.Emit(OpCodes.Ldarg, lb.Index + argOffset);
ilg.EmitLoadArg(lb.Index);
}
else if (lb.IsThis)
{
ilg.EmitLoadArg(0);
}
else
ilg.Emit(OpCodes.Ldloc, lb.LocalVar);
}
开发者ID:EricThorsen,项目名称:clojure-clr,代码行数:22,代码来源:ObjExpr.cs
示例15: GenAssignLocal
internal Expression GenAssignLocal(GenContext context, LocalBinding lb, Expr val)
{
if (!IsMutable(lb))
throw new ArgumentException("Cannot assign to non-mutable: " + lb.Name);
FieldBuilder fb;
if ( _closedOverFieldsMap.TryGetValue(lb,out fb) )
return Expression.Assign(Expression.Field(_thisParam,_closedOverFieldsMap[lb]), val.GenCode(RHC.Expression,this,context));
return Expression.Assign(lb.ParamExpression, val.GenCode(RHC.Expression,this,context));
}
开发者ID:davidadsit,项目名称:clojure-clr,代码行数:11,代码来源:ObjExpr.cs
示例16: IsMutable
internal bool IsMutable(LocalBinding lb)
{
return IsVolatile(lb)
||
RT.booleanCast(RT.contains(Fields, lb.Symbol)) &&
RT.booleanCast(RT.get(lb.Symbol.meta(), Keyword.intern("unsynchronized-mutable")))
||
lb.IsByRef;
}
开发者ID:EricThorsen,项目名称:clojure-clr,代码行数:9,代码来源:ObjExpr.cs
示例17: GenLocal
internal Expression GenLocal(GenContext context, LocalBinding lb)
{
if ( _fnMode == FnMode.Full )
{
if (_closes.containsKey(lb))
{
Expression expr = Expression.Field(_thisParam, lb.Name);
Type primtType = lb.PrimitiveType;
if (primtType != null)
expr = Compiler.MaybeBox(Expression.Convert(expr, primtType));
return expr;
}
else
return lb.ParamExpression;
}
else
{
return lb.ParamExpression;
}
}
开发者ID:davidadsit,项目名称:clojure-clr,代码行数:20,代码来源:ObjExpr.cs
示例18: CloseOver
static void CloseOver(LocalBinding b, FnMethod method)
{
if (b != null && method != null)
{
if (RT.get(method.Locals, b) == null)
{
method.Fn.Closes = (IPersistentMap)RT.assoc(method.Fn.Closes, b, b);
CloseOver(b, method.Parent);
}
else if (IN_CATCH_FINALLY.deref() != null)
{
method.LocalsUsedInCatchFinally = (PersistentHashSet)method.LocalsUsedInCatchFinally.cons(b.Index);
}
}
}
开发者ID:starapor,项目名称:clojure-clr,代码行数:15,代码来源:Compiler.cs
示例19: GenUnboxedLocal
internal Expression GenUnboxedLocal(GenContext context, LocalBinding lb)
{
Type primType = lb.PrimitiveType;
if (_closes.containsKey(lb) && _fnMode == FnMode.Full)
return Expression.Convert(Expression.Field(_thisParam, lb.Name), primType);
else
return lb.ParamExpression;
}
开发者ID:davidadsit,项目名称:clojure-clr,代码行数:8,代码来源:ObjExpr.cs
示例20: CatchClause
public CatchClause(Type type, LocalBinding lb, Expr handler)
{
_type = type;
_lb = lb;
_handler = handler;
}
开发者ID:kmartin,项目名称:clojure-contrib,代码行数:6,代码来源:TryExpr.cs
注:本文中的clojure.lang.CljCompiler.Ast.LocalBinding类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论