private XamlIlNodeEmitResult EmitNode(IXamlIlAstNode value, IXamlIlEmitter codeGen) { if (File != null) { codeGen.InsertSequencePoint(File, value.Line, value.Position); } XamlIlNodeEmitResult res = null; foreach (var e in Emitters) { if (e is IXamlIlAstNodeEmitter ve) { res = ve.Emit(value, this, codeGen); if (res != null) { return(res); } } } if (value is IXamlIlAstEmitableNode en) { return(en.Emit(this, codeGen)); } else { throw new XamlIlLoadException("Unable to find emitter for node type: " + value.GetType().FullName, value); } }
private XamlIlNodeEmitResult EmitCore(IXamlIlAstNode value, IXamlIlCodeGen codeGen) { XamlIlNodeEmitResult res = null; foreach (var e in _emitters) { if (e is IXamlIlAstNodeEmitter ve) { res = ve.Emit(value, this, codeGen); if (res != null) { return(res); } } } if (value is IXamlIlAstEmitableNode en) { return(en.Emit(this, codeGen)); } else { throw new XamlIlLoadException("Unable to find emitter for node type: " + value.GetType().FullName, value); } }
public XamlIlNodeEmitResult Emit(IXamlIlAstNode value, IXamlIlEmitter codeGen, IXamlIlType expectedType) { XamlIlNodeEmitResult res = null; if (_currentNode != null) { PushParent(_currentNode); _currentNode = value; res = EmitCore(value, codeGen, expectedType); _currentNode = PopParent(); } else { _currentNode = value; res = EmitCore(value, codeGen, expectedType); _currentNode = null; } return(res); }