internal override Instruction ToInstruction() { var enumerated = _enumerated.ToInstruction(); var block = _block.ToInstruction(); var enumeratedParam = _block.Parameters[0]; var enumeratedType = enumeratedParam.VariableType; var enumeratorType = typeof(IEnumerator <>).MakeGenericType(enumeratedType); var enumeratorVar = E.CreateVariable("Enumerator", enumeratorType); var getEnumerator = E.MethodCall(enumerated, "GetEnumerator"); var assignEnumerator = E.Assign(enumeratorVar, getEnumerator); var moveNextCall = E.MethodCall(enumeratorVar, typeof(IEnumerator).GetMethod("MoveNext")); var current = E.MethodCall(enumeratorVar, "get_Current"); var assignCurrent = E.Assign(enumeratedParam, current); var loopSequence = E.Sequence(new[] { assignCurrent, block }); var result = E.Sequence(new[] { assignEnumerator, E.While(moveNextCall, loopSequence ) }); return(result); }
private Instruction createAttributes() { Instruction attributes; var idConstant = E.Constant("id"); var classConstant = E.Constant("class"); if (Attributes == null) { var pairs = new List <Instruction>(); if (ExplicitID != null) { pairs.Add(E.Pair(idConstant, ExplicitID.ToInstruction())); } if (ExplicitClass != null) { pairs.Add(E.Pair(classConstant, ExplicitClass.ToInstruction())); } if (pairs.Count == 0) { return(null); } attributes = E.Container(pairs); } else { attributes = Attributes.ToInstruction(); if (ExplicitID != null) { attributes = E.SetValue(attributes, idConstant, ExplicitID.ToInstruction()); } if (ExplicitClass != null) { attributes = E.SetValue(attributes, classConstant, ExplicitClass.ToInstruction()); } } return(attributes); }
internal override Instruction ToInstruction() { var tag = E.Tag(TagName.ToInstruction()); var attributes = createAttributes(); tag.SetAttributes(attributes); tag.SetContent(_content); return(tag); }
internal override Instruction ToInstruction() { var valueInstruction = Value.ToInstruction(); var valueType = valueInstruction.ReturnType; var defaultValue = E.DefaultValue(valueType); switch (valueType.FullName) { case "System.Double": return(E.Call("DoubleToBool", new[] { valueInstruction })); default: return(E.Not(E.IsEqual(valueInstruction, defaultValue))); } }
internal override Instruction ToInstruction() { //keep correct order because of side effects var thisObj = ThisObj.ToInstruction(); var argExprs = new List <Instruction>(); foreach (var arg in Args) { argExprs.Add(arg.ToInstruction()); } if (Field == null) { return(E.MethodCall(thisObj, Method, argExprs.ToArray())); } else { return(E.Field(thisObj, Field)); } }
internal override Instruction ToInstruction() { return(E.Pair(Key.ToInstruction(), Value.ToInstruction())); }
internal override Instruction ToInstruction() { var identifierInstr = Identifier == null ? null : Identifier.ToInstruction(); return(E.Yield(identifierInstr)); }
internal override Instruction ToInstruction() { return(E.CreateObject <HAMLInterval>(_from.ToInstruction(), _to.ToInstruction())); }