File: VariableInitializer.cpp

package info (click to toggle)
storm-lang 0.7.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,028 kB
  • sloc: ansic: 261,471; cpp: 140,432; sh: 14,891; perl: 9,846; python: 2,525; lisp: 2,504; asm: 860; makefile: 678; pascal: 70; java: 52; xml: 37; awk: 12
file content (33 lines) | stat: -rw-r--r-- 791 bytes parent folder | download
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;
		}

	}
}