aboutsummaryrefslogtreecommitdiffstats
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
parentb91fb6f10484468f2aafdb328cf97d4ce98e20d3 (diff)
downloadplatform_build_kati-347e06f1469dd5eb403cd5a7e608f705cfcecd19.tar.gz
platform_build_kati-347e06f1469dd5eb403cd5a7e608f705cfcecd19.tar.bz2
platform_build_kati-347e06f1469dd5eb403cd5a7e608f705cfcecd19.zip
Stop using dynamic_cast
-rw-r--r--expr.cc8
-rw-r--r--expr.h2
2 files changed, 8 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);
diff --git a/expr.h b/expr.h
index 606ef90..e479ed8 100644
--- a/expr.h
+++ b/expr.h
@@ -41,6 +41,8 @@ class Value : public Evaluable {
virtual Value* Compact() { return this; }
+ virtual bool IsLiteral() const { return false; }
+
string DebugString() const;
protected: