Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision aaeacf4b17e26df880b846210c264be0d6cc771b)
+++ src/AST/Convert.cpp	(revision 21300d75a007db91aebde37600bdcb7eeb14a5d5)
@@ -2193,6 +2193,12 @@
 
 	int isStringlikeConstantType(const Type *t) {
+		const Type *referentType = nullptr;
 		if ( const ArrayType * aty = dynamic_cast< const ArrayType * >( t ) ) {
-			if ( const BasicType * bty = dynamic_cast< const BasicType * >( aty->base ) ) {
+			referentType = aty->base;
+		} else if ( const PointerType * pty = dynamic_cast< const PointerType * >( t ) ) {
+			referentType = pty->base;
+		}
+		if (referentType) {
+			if ( const BasicType * bty = dynamic_cast< const BasicType * >( referentType ) ) {
 			   if ( bty->kind == BasicType::Kind::Char ) {
 				   return true;
@@ -2205,5 +2211,13 @@
 	virtual void visit( ConstantExpr * old ) override final {
 		ast::ConstantExpr *rslt = nullptr;
-		if (isIntlikeConstantType(old->result)) {
+		if (isStringlikeConstantType(old->result)) {
+			rslt = new ast::ConstantExpr(
+				old->location,
+				GET_ACCEPT_1(result, Type),
+				old->constant.get_value(),
+				0,
+				ast::ConstantExpr::Kind::String
+			);
+		} else if (isIntlikeConstantType(old->result)) {
 			rslt = new ast::ConstantExpr(
 				old->location,
@@ -2219,12 +2233,4 @@
 				old->constant.get_value(),
 				(double) old->constant.get_dval()
-			);
-		} else if (isStringlikeConstantType(old->result)) {
-			rslt = new ast::ConstantExpr(
-				old->location,
-				GET_ACCEPT_1(result, Type),
-				old->constant.get_value(),
-				0,
-				ast::ConstantExpr::Kind::String
 			);
 		}
Index: src/AST/Node.hpp
===================================================================
--- src/AST/Node.hpp	(revision aaeacf4b17e26df880b846210c264be0d6cc771b)
+++ src/AST/Node.hpp	(revision 21300d75a007db91aebde37600bdcb7eeb14a5d5)
@@ -99,14 +99,26 @@
 
 /// Mutate a node field (only clones if not equal to existing value)
-template<typename node_t, typename field_t>
-const node_t * mutate_field( 
-	const node_t * node, 
-	typename std::remove_const<typename std::remove_reference<field_t>::type>::type node_t::* field,
-	field_t&& val 
-) {
+template<typename node_t, typename field_t, typename assn_t>
+const node_t * mutate_field( const node_t * node, field_t node_t::* field, assn_t && val ) {
+	// skip mutate if equivalent
 	if ( node->*field == val ) return node;
 	
+	// mutate and return
 	node_t * ret = mutate( node );
-	ret->*field = std::forward< field_t >( val );
+	ret->*field = std::forward< assn_t >( val );
+	return ret;
+}
+
+/// Mutate a single index of a node field (only clones if not equal to existing value)
+template<typename node_t, typename coll_t, typename ind_t, typename field_t>
+const node_t * mutate_field_index(
+	const node_t * node, coll_t node_t::* field, ind_t i, field_t && val
+) {
+	// skip mutate if equivalent
+	if  ( (node->*field)[i] == val ) return node;
+
+	// mutate and return
+	node_t * ret = mutate( node );
+	(ret->*field)[i] = std::forward< field_t >( val );
 	return ret;
 }
Index: src/AST/Print.hpp
===================================================================
--- src/AST/Print.hpp	(revision aaeacf4b17e26df880b846210c264be0d6cc771b)
+++ src/AST/Print.hpp	(revision 21300d75a007db91aebde37600bdcb7eeb14a5d5)
@@ -16,6 +16,6 @@
 #pragma once
 
-#include <iosfwd>
-#include <utility> // for forward
+#include <iostream>
+#include <utility>   // for forward
 
 #include "AST/Node.hpp"
@@ -32,6 +32,14 @@
 void printShort( std::ostream & os, const ast::Decl * node, Indenter indent = {} );
 
-inline void printShort( std::ostream & os, const ast::Decl * node, unsigned int indent ) {
-    printShort( os, node, Indenter{ indent } );
+/// Print a collection of items
+template< typename Coll >
+void printAll( std::ostream & os, const Coll & c, Indenter indent = {} ) {
+    for ( const auto & i : c ) {
+        if ( ! i ) continue;
+        
+        os << indent;
+        print( os, i, indent );
+        os << std::endl;
+    }
 }
 
Index: src/AST/porting.md
===================================================================
--- src/AST/porting.md	(revision aaeacf4b17e26df880b846210c264be0d6cc771b)
+++ src/AST/porting.md	(revision 21300d75a007db91aebde37600bdcb7eeb14a5d5)
@@ -299,4 +299,7 @@
 * `openVars` => `open`
 
+`ExplodedActual` => `ExplodedArg`
+* `ExplodedActual.h` => `ExplodedArg.hpp`
+
 [1] https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Type-Attributes.html#Type-Attributes
 
