0

Strings をサポートするために、LLVM Kaleidoscope の例を拡張しました。次のように、仮想 Codegen メソッド impl を持つ StringExprAST を追加しました。

Value *StringExprAST::Codegen() {
  StringRef r(Val);
  return ConstantDataArray::getString(getGlobalContext(), r, false);
}

私は文字列を連結しようとしており、その Codegen メソッドで ConcatExprAST を持っています。ConstantDataArray 内のデータにアクセスしようとすると、getAsString() メソッドを使用するために Value* を ConstantDataArray* にキャストする必要があります。

これどうやってするの?

助けてくれてありがとう。

4

1 に答える 1

0

のサブタイプを別のサブタイプにキャストする適切な方法Valueは、 viacast<>()です。例:

Value* v = ...
ConstantDataArray* result = cast<ConstantDataArray>(v);

ただし、あなたの例では type のオブジェクトを返さないことに注意してください。ただし、必ずしもそれ自体のインスタンスであるとは限らないConstantDataArray、戻り値の型の何かを返すことに注意してください。ではない) である可能性があります。ConstantDataArray::getString()ConstantDataArrayConstantConstantAggregateZeroConstantDataArray

いずれにせよv、それが実際に特定のタイプであるisa<>()どうかわからない場合は、.dyn_cast<>()cast<>()

于 2013-04-21T09:58:54.797 に答える