aboutsummaryrefslogtreecommitdiffstats
path: root/expr.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2016-01-05 14:41:53 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2016-01-05 14:41:53 +0900
commit347e06f1469dd5eb403cd5a7e608f705cfcecd19 (patch)
treef48e835181bb0b10cd64213eaafc13a4d62af89d /expr.cc
parentb91fb6f10484468f2aafdb328cf97d4ce98e20d3 (diff)
downloadandroid_build_kati-347e06f1469dd5eb403cd5a7e608f705cfcecd19.tar.gz
android_build_kati-347e06f1469dd5eb403cd5a7e608f705cfcecd19.tar.bz2
android_build_kati-347e06f1469dd5eb403cd5a7e608f705cfcecd19.zip
Stop using dynamic_cast
Diffstat (limited to 'expr.cc')
-rw-r--r--expr.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/expr.cc b/expr.cc
index d0d3e38..a8f306c 100644
--- a/expr.cc
+++ b/expr.cc
@@ -62,6 +62,8 @@ class Literal : public Value {
s->append(s_.begin(), s_.end());
}
+ virtual bool IsLiteral() const { return true; }
+
virtual string DebugString_() const override {
return s_.as_string();
}
@@ -356,7 +358,8 @@ Value* ParseDollar(const Loc& loc, StringPiece s, size_t* index_out) {
i += n;
if (s[i] == cp) {
*index_out = i + 1;
- if (Literal* lit = dynamic_cast<Literal*>(vname)) {
+ if (vname->IsLiteral()) {
+ Literal* lit = static_cast<Literal*>(vname);
Symbol sym = Intern(lit->val());
if (g_flags.enable_kati_warnings) {
size_t found = sym.str().find_first_of(" ({");
@@ -374,7 +377,8 @@ Value* ParseDollar(const Loc& loc, StringPiece s, size_t* index_out) {
if (s[i] == ' ' || s[i] == '\\') {
// ${func ...}
- if (Literal* lit = dynamic_cast<Literal*>(vname)) {
+ if (vname->IsLiteral()) {
+ Literal* lit = static_cast<Literal*>(vname);
if (FuncInfo* fi = GetFuncInfo(lit->val())) {
delete lit;
Func* func = new Func(fi);