| ... | ... | @@ -1206,6 +1206,7 @@ static AstNode *trans_implicit_cast_expr(Context *c, AstNode *block, ImplicitCas |
| 1206 | 1206 | return trans_c_cast(c, stmt->getExprLoc(), stmt->getType(), target_node); |
| 1207 | 1207 | } |
| 1208 | 1208 | case CK_FunctionToPointerDecay: |
| 1209 | case CK_ArrayToPointerDecay: |
| 1209 | 1210 | { |
| 1210 | 1211 | AstNode *target_node = trans_expr(c, true, block, stmt->getSubExpr(), TransRValue); |
| 1211 | 1212 | if (target_node == nullptr) |
| ... | ... | @@ -1239,9 +1240,6 @@ static AstNode *trans_implicit_cast_expr(Context *c, AstNode *block, ImplicitCas |
| 1239 | 1240 | case CK_ToUnion: |
| 1240 | 1241 | emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_ToUnion"); |
| 1241 | 1242 | return nullptr; |
| 1242 | | case CK_ArrayToPointerDecay: |
| 1243 | | emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_ArrayToPointerDecay"); |
| 1244 | | return nullptr; |
| 1245 | 1243 | case CK_NullToPointer: |
| 1246 | 1244 | emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_NullToPointer"); |
| 1247 | 1245 | return nullptr; |
| ... | ... | @@ -1808,6 +1806,22 @@ static AstNode *trans_member_expr(Context *c, AstNode *block, MemberExpr *stmt) |
| 1808 | 1806 | return node; |
| 1809 | 1807 | } |
| 1810 | 1808 | |
| 1809 | static AstNode *trans_array_subscript_expr(Context *c, AstNode *block, ArraySubscriptExpr *stmt) { |
| 1810 | AstNode *container_node = trans_expr(c, true, block, stmt->getBase(), TransRValue); |
| 1811 | if (container_node == nullptr) |
| 1812 | return nullptr; |
| 1813 | |
| 1814 | AstNode *idx_node = trans_expr(c, true, block, stmt->getIdx(), TransRValue); |
| 1815 | if (idx_node == nullptr) |
| 1816 | return nullptr; |
| 1817 | |
| 1818 | |
| 1819 | AstNode *node = trans_create_node(c, NodeTypeArrayAccessExpr); |
| 1820 | node->data.array_access_expr.array_ref_expr = container_node; |
| 1821 | node->data.array_access_expr.subscript = idx_node; |
| 1822 | return node; |
| 1823 | } |
| 1824 | |
| 1811 | 1825 | static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *stmt, TransLRValue lrvalue) { |
| 1812 | 1826 | Stmt::StmtClass sc = stmt->getStmtClass(); |
| 1813 | 1827 | switch (sc) { |
| ... | ... | @@ -1841,6 +1855,8 @@ static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *s |
| 1841 | 1855 | return skip_add_to_block_node; |
| 1842 | 1856 | case Stmt::MemberExprClass: |
| 1843 | 1857 | return trans_member_expr(c, block, (MemberExpr *)stmt); |
| 1858 | case Stmt::ArraySubscriptExprClass: |
| 1859 | return trans_array_subscript_expr(c, block, (ArraySubscriptExpr *)stmt); |
| 1844 | 1860 | case Stmt::CaseStmtClass: |
| 1845 | 1861 | emit_warning(c, stmt->getLocStart(), "TODO handle C CaseStmtClass"); |
| 1846 | 1862 | return nullptr; |
| ... | ... | @@ -1901,9 +1917,6 @@ static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *s |
| 1901 | 1917 | case Stmt::ArrayInitLoopExprClass: |
| 1902 | 1918 | emit_warning(c, stmt->getLocStart(), "TODO handle C ArrayInitLoopExprClass"); |
| 1903 | 1919 | return nullptr; |
| 1904 | | case Stmt::ArraySubscriptExprClass: |
| 1905 | | emit_warning(c, stmt->getLocStart(), "TODO handle C ArraySubscriptExprClass"); |
| 1906 | | return nullptr; |
| 1907 | 1920 | case Stmt::ArrayTypeTraitExprClass: |
| 1908 | 1921 | emit_warning(c, stmt->getLocStart(), "TODO handle C ArrayTypeTraitExprClass"); |
| 1909 | 1922 | return nullptr; |