module volta.parser.intir

Code Map

module volta.parser.intir;


class IntExp
{
public:
	loc: Location;


public:
	this() { }
}

class AssignExp : IntExp
{
public:
	op: BinOp.Op;
	left: TernaryExp;
	right: AssignExp;
	taggedRef: bool;
	taggedOut: bool;


public:
	this() { }
}

class TernaryExp : IntExp
{
public:
	isTernary: bool;
	condition: BinExp;
	ifTrue: TernaryExp;
	ifFalse: TernaryExp;


public:
	this() { }
}

class BinExp : IntExp
{
public:
	op: BinOp.Op;
	left: UnaryExp;
	right: BinExp;


public:
	this() { }
}

class UnaryExp : IntExp
{
public:
	op: Unary.Op;
	unaryExp: UnaryExp;
	postExp: PostfixExp;
	newExp: NewExp;
	castExp: CastExp;
	dupExp: DupExp;
	runExp: RunExp;


public:
	this() { }
}

class NewExp : IntExp
{
public:
	type: Type;
	isArray: bool;
	exp: TernaryExp;
	hasArgumentList: bool;
	argumentList: AssignExp[];
	argumentLabels: string[];


public:
	this() { }
}

class DupExp : IntExp
{
public:
	name: PostfixExp;
	beginning: AssignExp;
	end: AssignExp;
	shorthand: bool;


public:
	this() { }
}

class CastExp : IntExp
{
public:
	type: Type;
	unaryExp: UnaryExp;


public:
	this() { }
}

class PostfixExp : IntExp
{
public:
	op: Postfix.Op;
	primary: PrimaryExp;
	postfix: PostfixExp;
	arguments: AssignExp[];
	labels: string[];
	identifier: Identifier;
	templateInstance: Exp;


public:
	this() { }
}

class PrimaryExp : IntExp
{
public:
	enum Type
	{
		Identifier,
		DotIdentifier,
		This,
		Super,
		Null,
		True,
		False,
		Dollar,
		IntegerLiteral,
		FloatLiteral,
		CharLiteral,
		StringLiteral,
		ArrayLiteral,
		AssocArrayLiteral,
		FunctionLiteral,
		Assert,
		Import,
		Type,
		Typeof,
		Typeid,
		Is,
		ParenExp,
		StructLiteral,
		TemplateInstance,
		FunctionName,
		PrettyFunctionName,
		File,
		Line,
		Location,
		VaArg,
		ComposableString,
	}


public:
	op: Type;
	type: Type;
	exp: Exp;
	_string: string;
	keys: AssignExp[];
	arguments: AssignExp[];
	tlargs: AssignExp[];
	isExp: IsExp;
	functionLiteral: FunctionLiteral;
	vaexp: VaArgExp;


public:
	this() { }
}

fn isLeftAssociative(operator: BinOp.Op) bool { }
fn getPrecedence(operator: BinOp.Op) i32 { }