Skip to content
Extraits de code Groupes Projets
Vérifiée Valider b2c93379 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

PARSER: Create const expr from a single token

parent c3819854
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!25Draft: New Vivy module spec
......@@ -94,11 +94,28 @@ IrEConstExpr::IrEConstExpr(const Token &singleElement)
: IrExpression(nullptr, Type::ConstExpr)
{
switch (singleElement.valueType()) {
case Token::Type::INTEGER:
case Token::Type::FLOATING:
case Token::Type::COLORLIT:
case Token::Type::INTEGER: {
setInnerType(IrElement::create<IrTPrimitive>(this, IrType::PrimitiveType::Int));
inner.integer = singleElement.asInteger();
return;
}
case Token::Type::FLOATING: {
setInnerType(IrElement::create<IrTPrimitive>(this, IrType::PrimitiveType::Float));
inner.floating = singleElement.asFloating();
return;
}
case Token::Type::COLORLIT: {
setInnerType(IrElement::create<IrTPrimitive>(this, IrType::PrimitiveType::Color));
inner.string = singleElement.asColorLit();
return;
}
case Token::Type::STRINGLIT: {
throw std::logic_error("IrEConstExpr: not implemented " + singleElement.toString());
setInnerType(IrElement::create<IrTPrimitive>(this, IrType::PrimitiveType::String));
inner.string = singleElement.asStringLit();
return;
}
/* Only handle true or false */
......@@ -115,9 +132,7 @@ IrEConstExpr::IrEConstExpr(const Token &singleElement)
}
case Token::Type::QNAME:
default: {
throw std::logic_error("IrEConstExpr unexpected token: " + singleElement.toString());
}
default: throw std::logic_error("IrEConstExpr unexpected token: " + singleElement.toString());
}
}
......@@ -141,7 +156,7 @@ IrEConstExpr::getInnerInteger() const
return inner.integer;
}
float
double
IrEConstExpr::getInnerFloating() const
{
innerType()->assertInnerType(IrType::PrimitiveType::Float);
......
......@@ -38,7 +38,7 @@ class IrEConstExpr : public IrExpression {
union {
bool boolean;
int integer;
float floating;
double floating;
/* StringLit + ColorLit */
StrV string = STRV_NULL;
......@@ -50,7 +50,7 @@ public:
bool getInnerBoolean() const;
int getInnerInteger() const;
float getInnerFloating() const;
double getInnerFloating() const;
StrV getInnerStringLit() const;
StrV getInnerColorLit() const;
};
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter