Соединение Дерева выражений.NET в новый блок

Расширение http://www.soapui.org/soap-mocking/creating-dynamic-mockservices.html и основано на http://www.soapui.org/apidocs/com /eviware/soapui/support/xmlholder.html Я придумал это:

// Create XmlHolder for request content
def holder = new com.eviware.soapui.support.XmlHolder( mockRequest.requestContent )
holder.namespaces["ns3"] = "ns3"

// Get arguments
def custNo = holder.getNodeValue("//ns3:CustomerNumber")
context.setProperty("custNo", custNo)

5
задан Tamas Czinege 24 October 2009 в 18:24
поделиться

2 ответа

Только что нашел. DLR-версия LambdaExpression предоставляет метод CompileToMethod, который делает именно то, что мне нужно.

lambdaExpression.CompileToMethod(myMethodBuilder);
3
ответ дан 15 December 2019 в 06:29
поделиться

Чтобы генерировать необработанный IL, вам необходимо определить свой собственный AST. Вам нужно получить AssemblyBuilder, затем ModuleBuilder, а затем вы можете определить метод уровня модуля или получить новый TypeBuilder и теперь MethodBuilder для определения метода уровня класса.

Вы сказали, что у вас уже есть лексер и синтаксический анализатор. это означает, что вы можете построить AST. Так что просто пройдитесь по разобранным выражениям и испустите свой IL.

Даже если вы получите сгенерированный (путем компиляции) код, вы не сможете сделать с ним что-то полезное, поскольку сгенерированный код зависит от инфраструктуры. Например, если вам нужно скомпилировать замыкания, вы должны создать класс или другое хранилище для лексических переменных и так далее (например, нелексическая передача управления, которая требует использования исключений в .net)

0
ответ дан 15 December 2019 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: