private ITypeHLSL EmitTypeImpl(MidBuiltinType type) { var template = type.GetTemplate("hlsl"); if (template == null) { Diagnostics.Add( Severity.Error, new SourceRange(), "No HLSL equivalent for type {0}", type); return new ErrorTypeHLSL(); } if (type.Args == null) return new ScalarTypeHLSL(template); var args = (from a in type.Args select EmitGenericArg(a)).Eager(); // I hate hacks... :( if (template == "__Array") { var baseType = (EmitTypeHLSL)args[0]; var count = (EmitValHLSL)args[1]; return MakeArrayType( baseType, count); } return new ScalarTypeHLSL(string.Format(template, args)); }