public DynamicMetaObject/*!*/ GetMetaObject(params DynamicMetaObject/*!*/[]/*!*/ types) {
if (_body == null) {
throw new InvalidOperationException("FinishCondition not called before GetMetaObject");
}
Expression body = _body;
for (int i = _bodies.Count - 1; i >= 0; i--) {
body = Ast.Condition(
_conditions[i],
AstUtils.Convert(_bodies[i], _retType),
AstUtils.Convert(body, _retType)
);
}
body = Ast.Block(_variables, body);
return new DynamicMetaObject(
body,
BindingRestrictions.Combine(types)
);
}