1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
#include "stdafx.h"
#include "VariableInitializer.h"
#include "Resolve.h"
#include "Named.h"
namespace storm {
namespace bs {
VariableInitializer::VariableInitializer(SrcPos pos, Value type, Scope scope, MAYBE(syntax::Node *) initExpr)
: BSRawFn(type, new (engine()) syntax::SStr(S("init")), new (engine()) Array<ValParam>(), null),
scope(scope), initExpr(initExpr) {
this->pos = pos;
makeInline();
}
FnBody *VariableInitializer::createBody() {
FnBody *body = new (this) FnBody(this, scope);
if (initExpr) {
// Use the expression.
body->add(syntax::transformNode<Expr, Block *>(initExpr, body));
} else {
// Create an instance using the default constructor.
body->add(defaultCtor(pos, scope, result.type));
}
return body;
}
}
}
|