Fix GCC retardedness.
1 /* vim: set ts=4 sw=4 tw=99 et:
3 * Copyright (C) 2012 David Anderson
5 * This file is part of SourcePawn.
7 * SourcePawn is free software: you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License as published by the Free
9 * Software Foundation, either version 3 of the License, or (at your option)
12 * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY
13 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with
17 * SourcePawn. If not, see http://www.gnu.org/licenses/.
20 #include "ConstantEvaluator.h"
21 #include "../Heap-inl.h"
22 #include "../Handles-inl.h"
27 EvaluateBinaryOperation(TokenKind kind, const BoxedPrimitive &left, const BoxedPrimitive &right,
32 *out = BoxedPrimitive::Int(left.toInt() + right.toInt());
36 *out = BoxedPrimitive::Int(left.toInt() << right.toInt());
45 EvaluateUnaryOperation(TokenKind kind, const BoxedPrimitive &inner, BoxedPrimitive *out)
49 *out = BoxedPrimitive::Int(-inner.toInt());
58 ke::EvaluateForConstant(Expression *expr, BoxedPrimitive *out)
60 switch (expr->kind()) {
61 case AstNode::kBinaryExpression:
65 BinaryExpression *b = expr->toBinaryExpression();
66 if (!EvaluateForConstant(b->left(), &left) ||
67 !EvaluateForConstant(b->right(), &right))
71 return EvaluateBinaryOperation(b->token(), left, right, out);
74 case AstNode::kUnaryExpression:
77 UnaryExpression *u = expr->toUnaryExpression();
78 if (!EvaluateForConstant(u->expression(), &inner))
80 return EvaluateUnaryOperation(u->token(), inner, out);
83 case AstNode::kBooleanLiteral:
84 *out = BoxedPrimitive::Int(expr->toBooleanLiteral()->token() == TOK_TRUE ? 1 : 0);
87 case AstNode::kIntegerLiteral:
88 *out = BoxedPrimitive::Int(expr->toIntegerLiteral()->value());