// // Generated by dtk // Translation Unit: JPADraw.cpp // #include "JSystem/JParticle/JPADraw.h" #include "JSystem/JParticle/JPABaseShape.h" #include "JSystem/JParticle/JPAExtraShape.h" #include "JSystem/JParticle/JPASweepShape.h" #include "JSystem/JParticle/JPAResourceManager.h" #include "JSystem/JUtility/JUTAssert.h" #include "dolphin/types.h" JPADrawVisitorContainer JPADraw::vc; JPADrawClipBoard JPADraw::cb; /* 80267F40-80268634 .text initialize__7JPADrawFP14JPABaseEmitterP18JPATextureResource */ bool JPADraw::initialize(JPABaseEmitter* emtr, JPATextureResource* texRes) { JPADrawContext::pcb = &cb; dc.pbe = emtr; dc.pbsp = dc.pbe->getEmitterDataBlockInfoPtr()->getBaseShape(); dc.pesp = dc.pbe->getEmitterDataBlockInfoPtr()->getExtraShape(); dc.pssp = dc.pbe->getEmitterDataBlockInfoPtr()->getSweepShape(); dc.petx = dc.pbe->getEmitterDataBlockInfoPtr()->getExTexShape(); dc.mpDraw = this; dc.mpTextureResource = texRes; dc.pTexIdx = dc.pbe->getEmitterDataBlockInfoPtr()->getTextureDataBase(); dc.mpActiveParticles = &dc.pbe->mActiveParticles; field_0xc2 = 0; mScaleOut = 1.0f; GXColor white = { 0xFF, 0xFF, 0xFF, 0xFF }; if (dc.pbsp->isEnablePrm()) { if (!dc.pbsp->isEnablePrmAnm()) { mPrmColor = dc.pbsp->getPrmColor(); } } else { mPrmColor = white; } if (dc.pbsp->isEnableEnv()) { if (!dc.pbsp->isEnableEnvAnm()) { mEnvColor = dc.pbsp->getEnvColor(); } } else { mEnvColor = white; } calcChldVisNum = 0; calcPtclVisNum = 0; execChldVisNum = 0; execPtclVisNum = 0; calcEmtrVisNum = 0; execEmtrCVisNum = 0; execEmtrPVisNum = 0; execEmtrVisNum = 0; for (u32 i = 0; i < ARRAY_SIZE(mpExecEmtrVis); i++) mpExecEmtrVis[i] = NULL; for (u32 i = 0; i < ARRAY_SIZE(mpExecEmtrPVis); i++) mpExecEmtrPVis[i] = NULL; for (u32 i = 0; i < ARRAY_SIZE(mpExecEmtrCVis); i++) mpExecEmtrCVis[i] = NULL; for (u32 i = 0; i < ARRAY_SIZE(mpCalcEmtrVis); i++) mpCalcEmtrVis[i] = NULL; for (u32 i = 0; i < ARRAY_SIZE(mpExecPtclVis); i++) mpExecPtclVis[i] = NULL; for (u32 i = 0; i < ARRAY_SIZE(mpExecChldVis); i++) mpExecChldVis[i] = NULL; for (u32 i = 0; i < ARRAY_SIZE(mpCalcPtclVis); i++) mpCalcPtclVis[i] = NULL; for (u32 i = 0; i < ARRAY_SIZE(mpCalcChldVis); i++) mpCalcChldVis[i] = NULL; JPADrawVisitorDefFlags flags; flags.mbIsEnableDrawParent = dc.pssp == NULL || dc.pssp->isEnableDrawParent(); flags.mbHasPrmAnm = dc.pbsp->isEnablePrm() && dc.pbsp->isEnablePrmAnm(); flags.mbHasEnvAnm = dc.pbsp->isEnableEnv() && dc.pbsp->isEnableEnvAnm(); flags.mbIsStripe = dc.pbsp->getType() == JPABaseShape::JPAType_Stripe || dc.pbsp->getType() == JPABaseShape::JPAType_StripeCross; flags.mbIsPointOrLine = dc.pbsp->getType() == JPABaseShape::JPAType_Point || dc.pbsp->getType() == JPABaseShape::JPAType_Line; flags.mbIsEnableAlpha = dc.pesp != NULL && dc.pesp->isEnableAlpha(); setDrawExecVisitorsBeforeCB(flags); mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x90; mpExecEmtrCVis[execEmtrCVisNum++] = &vc.field_0x90; mpExecPtclVis[execPtclVisNum++] = &vc.field_0x90; mpExecChldVis[execChldVisNum++] = &vc.field_0x90; setDrawExecVisitorsAfterCB(flags); setDrawCalcVisitors(flags); JUT_ASSERT(0x65, execEmtrVisNum <= 1); JUT_ASSERT(0x66, execEmtrPVisNum <= 5); JUT_ASSERT(0x67, execEmtrCVisNum <= 3); JUT_ASSERT(0x68, calcEmtrVisNum <= 4); JUT_ASSERT(0x69, execPtclVisNum <= 5); JUT_ASSERT(0x6a, execChldVisNum <= 4); JUT_ASSERT(0x6b, calcPtclVisNum <= 10); JUT_ASSERT(0x6c, calcChldVisNum <= 2); return true; } /* 80268634-802688D4 .text draw__7JPADrawFPA4_f */ void JPADraw::draw(MtxP param_1) { GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSetCurrentMtx(0); GXSetNumChans(0); GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE1); GXSetTevDirect(GX_TEVSTAGE2); GXSetCoPlanar(GX_DISABLE); GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE); GXSetChanCtrl(GX_COLOR1A1, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE); GXSetBlendMode(dc.pbsp->getBlendMode1(), dc.pbsp->getSrcBlendFactor1(), dc.pbsp->getDstBlendFactor1(), dc.pbsp->getBlendOp1()); cb.field_0x98 = dc.pbe->mGlobalPrmColor; cb.field_0x9c = dc.pbe->mGlobalEnvColor; cb.field_0x34 = param_1; cb.field_0x0.setupTev(dc.pbsp, dc.petx); for (int i = 0; i < execEmtrVisNum; i++) { mpExecEmtrVis[i]->exec(&dc); } if (dc.pbsp->isEnableAnmTone()) { zDraw(); } field_0xc2 &= 0xfe; if (dc.pbsp->getChildOrder() && dc.pssp) { drawChild(); } drawParticle(); if (!dc.pbsp->getChildOrder() && dc.pssp) { drawChild(); } GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); } /* 802688D4-80268940 .text calc__7JPADrawFv */ void JPADraw::calc() { /* Nonmatching */ } /* 80268940-802689C4 .text calcParticle__7JPADrawFP15JPABaseParticle */ void JPADraw::calcParticle(JPABaseParticle*) { /* Nonmatching */ } /* 802689C4-80268A48 .text calcChild__7JPADrawFP15JPABaseParticle */ void JPADraw::calcChild(JPABaseParticle*) { /* Nonmatching */ } /* 80268A48-80268F28 .text initParticle__7JPADrawFP15JPABaseParticle */ void JPADraw::initParticle(JPABaseParticle*) { /* Nonmatching */ } /* 80268F28-802692A4 .text initChild__7JPADrawFP15JPABaseParticleP15JPABaseParticle */ void JPADraw::initChild(JPABaseParticle*, JPABaseParticle*) { /* Nonmatching */ } /* 802692A4-80269358 .text loadTexture__7JPADrawFUc11_GXTexMapID */ bool JPADraw::loadTexture(u8 tex_no, GXTexMapID texMap) { JUT_ASSERT(0x17e, dc.pbe->getEmitterDataBlockInfoPtr()->getTextureNum() > tex_no); JPATexture * tex = dc.mpTextureResource->pTexResArray[dc.pTexIdx[tex_no]]; tex->load(texMap); return TRUE; } /* 80269358-80269C08 .text setDrawExecVisitorsBeforeCB__7JPADrawFRCQ27JPADraw22JPADrawVisitorDefFlags */ void JPADraw::setDrawExecVisitorsBeforeCB(const JPADraw::JPADrawVisitorDefFlags& param_1) { /* Nonmatching */ if (dc.petx) { mpExecEmtrVis[execEmtrVisNum++] = &vc.field_0x50; } if (param_1.mbIsPointOrLine) { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0xc; } else if (dc.pbsp->isEnableProjection()) { if (dc.pbsp->isEnableTexScrollAnm()) { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x4; } else { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x0; } } else if (dc.pbsp->isEnableTexScrollAnm()) { if (param_1.mbIsStripe) { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x10; } else { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x8; } } else { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0xc; } if (dc.pbsp->isEnableGlobalColAnm()) { if (param_1.mbIsStripe || param_1.mbIsEnableAlpha == 0) { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x20; } else if (param_1.mbIsEnableAlpha) { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x28; } } else if ((!dc.pbsp->isEnablePrm() || !dc.pbsp->isEnablePrmAnm()) && param_1.mbIsEnableAlpha == 0) { if (!dc.pbsp->isEnableEnv() || !dc.pbsp->isEnableEnvAnm()) { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x20; } else { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x24; } } else if (!dc.pbsp->isEnableEnv() || !dc.pbsp->isEnableEnvAnm()) { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x28; } if (!dc.pbsp->textureIsEmpty() && (!dc.pbsp->isEnableTextureAnm() || dc.pbsp->isEnableGlobalTexAnm())) { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x48; } else if (dc.pbsp->textureIsEmpty()) { mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x44; } if (dc.pssp && !dc.pssp->isEnableAlphaOut() && !dc.pssp->isInheritedAlpha() && !dc.pssp->isInheritedRGB()) { mpExecEmtrCVis[execEmtrCVisNum++] = &vc.field_0x2c; } if (!dc.pbsp->isEnableGlobalColAnm()) { if (param_1.mbHasPrmAnm) { if (param_1.mbHasEnvAnm) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x3c; } else { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x30; } } else if (param_1.mbIsEnableAlpha) { if (param_1.mbHasEnvAnm) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x40; } else { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x34; } } else if (param_1.mbHasEnvAnm) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x38; } } else if (param_1.mbIsEnableAlpha && !param_1.mbIsStripe) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x34; } if (!dc.pbsp->textureIsEmpty() && dc.pbsp->isEnableTextureAnm() && !dc.pbsp->isEnableGlobalTexAnm()) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x48; } switch (dc.pbsp->getType()) { case 0: if (dc.pesp && dc.pesp->isEnableScale()) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x18; } break; case 1: if (dc.pesp && dc.pesp->isEnableScale()) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x1c; } break; case 5: case 6: break; case 7: case 8: case 9: case 10: if (dc.pbsp->isEnableTexScrollAnm() && !dc.pbsp->isEnableProjection()) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x10; } break; } if (dc.pssp) { if (dc.pssp->isEnableAlphaOut() || dc.pssp->isInheritedAlpha() || dc.pssp->isInheritedRGB()) { mpExecChldVis[execChldVisNum++] = &vc.field_0x3c; } switch (dc.pssp->getType()) { case 0: mpExecChldVis[execChldVisNum++] = &vc.field_0x18; break; case 1: mpExecChldVis[execChldVisNum++] = &vc.field_0x1c; break; } } } /* 80269C08-8026A2EC .text setDrawExecVisitorsAfterCB__7JPADrawFRCQ27JPADraw22JPADrawVisitorDefFlags */ void JPADraw::setDrawExecVisitorsAfterCB(const JPADraw::JPADrawVisitorDefFlags& param_1) { if (param_1.mbIsEnableDrawParent) { switch (dc.pbsp->getType()) { case 0: mpExecPtclVis[execPtclVisNum++] = &vc.field_0x80; break; case 1: mpExecPtclVis[execPtclVisNum++] = &vc.field_0x84; break; case 2: if (dc.pesp && dc.pesp->isEnableRotate()) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x58; } else { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x54; } break; case 3: if (dc.pesp && dc.pesp->isEnableRotate()) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x68; } else { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x64; } break; case 4: if (dc.pesp && dc.pesp->isEnableRotate()) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x70; } else { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x6c; } break; case 10: if (dc.pesp && dc.pesp->isEnableRotate()) { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x60; } else { mpExecPtclVis[execPtclVisNum++] = &vc.field_0x5c; } break; case 7: mpExecPtclVis[execPtclVisNum++] = &vc.field_0x78; break; case 8: mpExecPtclVis[execPtclVisNum++] = &vc.field_0x7c; break; case 9: mpExecPtclVis[execPtclVisNum++] = &vc.field_0x74; break; case 5: mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x88; break; case 6: mpExecEmtrPVis[execEmtrPVisNum++] = &vc.field_0x8c; break; } } if (dc.pssp) { switch (dc.pssp->getType()) { case 0: mpExecChldVis[execChldVisNum++] = &vc.field_0x80; break; case 1: mpExecChldVis[execChldVisNum++] = &vc.field_0x84; break; case 2: if ((dc.pesp && dc.pesp->isEnableRotate()) || dc.pssp->isEnableRotate()) { mpExecChldVis[execChldVisNum++] = &vc.field_0x58; } else { mpExecChldVis[execChldVisNum++] = &vc.field_0x54; } break; case 3: if ((dc.pesp && dc.pesp->isEnableRotate()) || dc.pssp->isEnableRotate()) { mpExecChldVis[execChldVisNum++] = &vc.field_0x68; } else { mpExecChldVis[execChldVisNum++] = &vc.field_0x64; } break; case 4: if ((dc.pesp && dc.pesp->isEnableRotate()) || dc.pssp->isEnableRotate()) { mpExecChldVis[execChldVisNum++] = &vc.field_0x70; } else { mpExecChldVis[execChldVisNum++] = &vc.field_0x6c; } break; case 10: if ((dc.pesp && dc.pesp->isEnableRotate()) || dc.pssp->isEnableRotate()) { mpExecChldVis[execChldVisNum++] = &vc.field_0x60; } else { mpExecChldVis[execChldVisNum++] = &vc.field_0x5c; } break; case 7: mpExecChldVis[execChldVisNum++] = &vc.field_0x78; break; case 8: mpExecChldVis[execChldVisNum++] = &vc.field_0x7c; break; case 9: mpExecChldVis[execChldVisNum++] = &vc.field_0x74; break; case 5: mpExecEmtrCVis[execEmtrCVisNum++] = &vc.field_0x88; break; case 6: mpExecEmtrCVis[execEmtrCVisNum++] = &vc.field_0x8c; break; } } } /* 8026A2EC-8026ADB0 .text setDrawCalcVisitors__7JPADrawFRCQ27JPADraw22JPADrawVisitorDefFlags */ void JPADraw::setDrawCalcVisitors(const JPADraw::JPADrawVisitorDefFlags& param_1) { if (dc.pbsp->isEnableGlobalColAnm() && (param_1.mbHasPrmAnm || param_1.mbHasEnvAnm)) { switch (dc.pbsp->getColorRegAnmType()) { case 0: mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0xd4; break; case 1: mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0xdc; break; case 2: mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0xe4; break; case 3: mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0xec; break; case 4: mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0xf4; break; } if (param_1.mbHasPrmAnm) { mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0xc0; } if (param_1.mbHasEnvAnm) { mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0xc8; } } if (!dc.pbsp->textureIsEmpty() && dc.pbsp->isEnableTextureAnm() && dc.pbsp->isEnableGlobalTexAnm()) { switch (dc.pbsp->getTextureAnmType()) { case 0: mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0x10c; break; case 1: mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0x114; break; case 2: mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0x11c; break; case 3: mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0x124; break; case 4: mpCalcEmtrVis[calcEmtrVisNum++] = &vc.field_0x12c; break; } } if (dc.pesp && dc.pesp->isEnableScale()) { if (dc.pesp->isEnableScaleAnmX()) { if (dc.pesp->getAnmTypeX()) { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xb8; } else { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xb0; } } else { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xac; } if (dc.pesp->isEnableScaleBySpeedX() && dc.pbsp->getType() != 1) { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0x9c; } else { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0x98; } if (dc.pbsp->getType() != 0) { if (!dc.pesp->isDiffXY()) { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xa8; } else { if (dc.pesp->isEnableScaleAnmY()) { if (dc.pesp->getAnmTypeY()) { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xbc; } else { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xb4; } } else if (dc.pesp->isEnableScaleAnmX()) { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xac; } if (dc.pesp->isEnableScaleBySpeedY()) { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xa4; } else { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xa0; } } } } if (!dc.pbsp->isEnableGlobalColAnm()) { if (param_1.mbHasPrmAnm || param_1.mbHasEnvAnm) { switch (dc.pbsp->getColorRegAnmType()) { case 0: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xd4; break; case 1: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xdc; break; case 2: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xe4; break; case 3: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xec; break; case 4: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xf4; break; } if (param_1.mbHasPrmAnm) { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xc0; } if (param_1.mbHasEnvAnm) { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xc8; } } } else { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xd0; } if (param_1.mbIsEnableAlpha && !param_1.mbIsStripe) { mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0xfc; if (dc.pesp->isEnableSinWave()) { switch (dc.pesp->getAlphaWaveType()) { case 0: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0x100; break; case 1: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0x104; break; case 2: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0x108; break; } } } if (!dc.pbsp->textureIsEmpty() && dc.pbsp->isEnableTextureAnm() && !dc.pbsp->isEnableGlobalTexAnm()) { switch (dc.pbsp->getTextureAnmType()) { case 0: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0x10c; break; case 1: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0x114; break; case 2: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0x11c; break; case 3: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0x124; break; case 4: mpCalcPtclVis[calcPtclVisNum++] = &vc.field_0x12c; break; } } if (dc.pssp) { if (dc.pssp->isEnableAlphaOut()) { mpCalcChldVis[calcChldVisNum++] = &vc.field_0x134; } if (dc.pssp->isEnableScaleOut()) { mpCalcChldVis[calcChldVisNum++] = &vc.field_0x138; } } } /* 8026ADB0-8026B3DC .text setParticleClipBoard__7JPADrawFv */ void JPADraw::setParticleClipBoard() { /* Nonmatching */ } /* 8026B3DC-8026B938 .text setChildClipBoard__7JPADrawFv */ void JPADraw::setChildClipBoard() { /* Nonmatching */ } /* 8026B938-8026BC2C .text drawParticle__7JPADrawFv */ void JPADraw::drawParticle() { /* Nonmatching */ } /* 8026BC2C-8026BF88 .text drawChild__7JPADrawFv */ void JPADraw::drawChild() { /* Nonmatching */ } /* 8026BF88-8026C024 .text zDraw__7JPADrawFv */ void JPADraw::zDraw() { field_0xc2 |= 0x01; if (dc.pbsp->getChildOrder() && dc.pssp != NULL) zDrawChild(); zDrawParticle(); if (!dc.pbsp->getChildOrder() && dc.pssp != NULL) zDrawChild(); } /* 8026C024-8026C24C .text zDrawParticle__7JPADrawFv */ void JPADraw::zDrawParticle() { /* Nonmatching */ } /* 8026C24C-8026C4DC .text zDrawChild__7JPADrawFv */ void JPADraw::zDrawChild() { /* Nonmatching */ } /* 8026C4DC-8026C640 .text loadYBBMtx__7JPADrawFPA4_f */ void JPADraw::loadYBBMtx(float(*)[4]) { /* Nonmatching */ }