public static void AppendStrings(ByteCodeGenerator generator, DefinedType sb, ExpressionNode node) { if (node is AdditiveNode) { var addNode = node as AdditiveNode; generator.Kill(); var addType = new AdditiveCompiler(addNode).Compile(generator).Type; generator.Revive(); if (addType.Name == BuiltinTypes.String.Name) { AppendStrings(generator, sb, addNode.LeftChild.Child); AppendStrings(generator, sb, addNode.RightChild.Child); return; } } var item = new ExpressionCompiler(node).Compile(generator); var appendMethod = sb.FindMethod(generator, "append", new List<Type> { item.Type }); if (appendMethod == null) throw new InvalidOperationException(); item.Load(); new MemberItem(generator, appendMethod, false).Invoke(); }
public ExpressionCompiler(ExpressionNode node) { this.node = node; }
public TranslationCompiler(TranslateNode node, Type type) { expression = node.Child; this.type = type; }
public TranslationCompiler(TranslateNode node) { expression = node.Child; }