diff options
Diffstat (limited to 'source/slang/emit.cpp')
| -rw-r--r-- | source/slang/emit.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/source/slang/emit.cpp b/source/slang/emit.cpp index 5272204f6..9a1d44641 100644 --- a/source/slang/emit.cpp +++ b/source/slang/emit.cpp @@ -219,6 +219,8 @@ static void Emit(EmitContext* context, double value) Emit(context, buffer); } +static void emitTokenWithLocation(EmitContext* context, Token const& token); + // Expressions // Determine if an expression should not be emitted when it is the base of @@ -900,14 +902,53 @@ static void EmitExprWithPrecedence(EmitContext* context, RefPtr<ExpressionSyntax { needClose = MaybeEmitParens(context, outerPrec, kPrecedence_Atomic); + char const* suffix = ""; + auto type = litExpr->Type.type; switch (litExpr->ConstType) { case ConstantExpressionSyntaxNode::ConstantType::Int: + if(!type) + { + // Special case for "rewrite" mode + emitTokenWithLocation(context, litExpr->token); + break; + } + if(type->Equals(ExpressionType::GetInt())) + {} + else if(type->Equals(ExpressionType::GetUInt())) + { + suffix = "u"; + } + else + { + assert(!"unimplemented"); + } Emit(context, litExpr->IntValue); + Emit(context, suffix); break; + + case ConstantExpressionSyntaxNode::ConstantType::Float: + if(!type) + { + // Special case for "rewrite" mode + emitTokenWithLocation(context, litExpr->token); + break; + } + if(type->Equals(ExpressionType::GetFloat())) + {} + else if(type->Equals(ExpressionType::getDoubleType())) + { + suffix = "l"; + } + else + { + assert(!"unimplemented"); + } Emit(context, litExpr->FloatValue); + Emit(context, suffix); break; + case ConstantExpressionSyntaxNode::ConstantType::Bool: Emit(context, litExpr->IntValue ? "true" : "false"); break; |
