// Code generated by goyacc -v midl/y.out -o midl/parse.go -p RPC midl/parse.y. DO NOT EDIT.

//line midl/parse.y:2
package midl

import __yyfmt__ "fmt"

//line midl/parse.y:2

// parse.go contains the go-yacc definitions for the
// (M)IDL grammar parser.

import (
	"fmt"
	"math/big"

	"github.com/oiweiwei/go-msrpc/midl/uuid"
)

var (
	_ = fmt.Sprintf("")
)

//line midl/parse.y:20
type RPCSymType struct {
	yys                   int
	File                  File
	Interface             Interface
	InterfaceBody         InterfaceBody
	Version               *Version
	Export                []*Export
	Type                  *Type
	Kind                  Kind
	Const                 *Const
	Operation             *Operation
	Operations            []*Operation
	Param                 *Param
	Params                []*Param
	Fields                []*Field
	Field                 *Field
	Declarators           []*pDeclarator
	Declarator            *pDeclarator
	ArrayBound            ArrayBound
	Int64                 int64
	UnionSwitch           *UnionSwitch
	UnionCases            []*UnionCase
	UnionCase             *UnionCase
	Expr                  Expr
	Exprs                 Exprs
	Ident                 string
	Char                  rune
	String                string
	Int                   *big.Int
	UUID                  *uuid.UUID
	Range                 *Range
	Strings               []string
	Token                 int
	Typedef               *pTypedef
	Attr                  pAttr
	AttrType              pAttrType
	TagID                 pTagID
	TagIDs                []pTagID
	ComClass              ComClass
	Library               Library
	ComInterfaces         []*ComInterface
	ComInterface          *ComInterface
	DispatchInterface     DispatchInterface
	DispatchInterfaceBody DispatchInterfaceBody
}

const FLOAT = 57346
const DOUBLE = 57347
const HYPER = 57348
const UNSIGNED = 57349
const SIGNED = 57350
const LONG = 57351
const SHORT = 57352
const SMALL = 57353
const INT = 57354
const CHAR = 57355
const BOOLEAN = 57356
const BYTE = 57357
const VOID = 57358
const HANDLE_T = 57359
const ERROR_STATUS_T = 57360
const ISO_LATIN_1 = 57361
const ISO_MULTILINGUAL = 57362
const ISO_UCS = 57363
const STRUCT = 57364
const FIRST_IS = 57365
const LAST_IS = 57366
const LENGTH_IS = 57367
const MAX_IS = 57368
const MIN_IS = 57369
const SIZE_IS = 57370
const SWITCH_IS = 57371
const USAGE_STRING = 57372
const USAGE_CONTEXT_HANDLE = 57373
const FORMAT = 57374
const FORMAT_NULL_TERMINATED = 57375
const FORMAT_MULTI_SIZE = 57376
const FORMAT_UTF8 = 57377
const FORMAT_RUNE = 57378
const FORMAT_HEX = 57379
const IGNORE = 57380
const POINTER = 57381
const POINTER_REF = 57382
const POINTER_UNIQUE = 57383
const POINTER_PTR = 57384
const CONST = 57385
const NULL = 57386
const TRUE = 57387
const FALSE = 57388
const IN = 57389
const OUT = 57390
const ENUM = 57391
const PIPE = 57392
const UNION = 57393
const SWITCH = 57394
const CASE = 57395
const DEFAULT = 57396
const SWITCH_TYPE = 57397
const TRANSMIT_AS = 57398
const HANDLE = 57399
const IMPORT = 57400
const TYPEDEF = 57401
const UUID = 57402
const INTERFACE = 57403
const IDEMPOTENT = 57404
const BROADCAST = 57405
const MAYBE = 57406
const REFLECT_DELETIONS = 57407
const VERSION = 57408
const ENDPOINT = 57409
const EXCEPTIONS = 57410
const LOCAL = 57411
const POINTER_DEFAULT = 57412
const RETVAL = 57413
const IID_IS = 57414
const WCHAR_T = 57415
const INT3264 = 57416
const INT8 = 57417
const INT16 = 57418
const INT32 = 57419
const INT64 = 57420
const RANGE = 57421
const MS_UNION = 57422
const OBJECT = 57423
const V1_ENUM = 57424
const STRICT_CONTEXT_HANDLE = 57425
const TYPE_STRICT_CONTEXT_HANDLE = 57426
const DISABLE_CONSISTENCY_CHECK = 57427
const SIZEOF = 57428
const PRAGMA_DEFINE = 57429
const PRAGMA_CPP_QUOTE = 57430
const CALLBACK = 57431
const HELP_STRING = 57432
const DUAL = 57433
const PROPGET = 57434
const PROPPUT = 57435
const PROPPUTREF = 57436
const ID = 57437
const HIDDEN = 57438
const NONEXTENSIBLE = 57439
const RESTRICTED = 57440
const DEFAULT_VALUE = 57441
const ODL = 57442
const OLEAUTOMATION = 57443
const OPTIONAL = 57444
const APPOBJECT = 57445
const SAFEARRAY = 57446
const PAD = 57447
const GOEXT_LAYOUT = 57448
const GOEXT_DEFAULT_NULL = 57449
const GOEXT_NO_SIZE_LIMIT = 57450
const CALL_AS = 57451
const ANNOTATION = 57452
const WIRE_MARSHAL = 57453
const PUBLIC = 57454
const SOURCE = 57455
const DISPINTERFACE = 57456
const METHODS = 57457
const PROPERTIES = 57458
const COCLASS = 57459
const LIBRARY = 57460
const ACS_BYTE_COUNT = 57461
const STRING = 57462
const CHARACTER_LITERAL = 57463
const STRING_LITERAL = 57464
const INT_LITERAL = 57465
const IDENT = 57466
const TERNARY = 57467
const RNG = 57468
const LOGICAL_OR = 57469
const LOGICAL_AND = 57470
const LE = 57471
const GE = 57472
const LT = 57473
const GT = 57474
const EQ = 57475
const NE = 57476
const OR = 57477
const XOR = 57478
const AND = 57479
const LSH = 57480
const RSH = 57481
const UPLUS = 57482
const UNEG = 57483
const UNOT = 57484
const CAST = 57485
const UMINUS = 57486
const UMUL = 57487

var RPCToknames = [...]string{
	"$end",
	"error",
	"$unk",
	"FLOAT",
	"DOUBLE",
	"HYPER",
	"UNSIGNED",
	"SIGNED",
	"LONG",
	"SHORT",
	"SMALL",
	"INT",
	"CHAR",
	"BOOLEAN",
	"BYTE",
	"VOID",
	"HANDLE_T",
	"ERROR_STATUS_T",
	"ISO_LATIN_1",
	"ISO_MULTILINGUAL",
	"ISO_UCS",
	"STRUCT",
	"FIRST_IS",
	"LAST_IS",
	"LENGTH_IS",
	"MAX_IS",
	"MIN_IS",
	"SIZE_IS",
	"SWITCH_IS",
	"USAGE_STRING",
	"USAGE_CONTEXT_HANDLE",
	"FORMAT",
	"FORMAT_NULL_TERMINATED",
	"FORMAT_MULTI_SIZE",
	"FORMAT_UTF8",
	"FORMAT_RUNE",
	"FORMAT_HEX",
	"IGNORE",
	"POINTER",
	"POINTER_REF",
	"POINTER_UNIQUE",
	"POINTER_PTR",
	"CONST",
	"NULL",
	"TRUE",
	"FALSE",
	"IN",
	"OUT",
	"ENUM",
	"PIPE",
	"UNION",
	"SWITCH",
	"CASE",
	"DEFAULT",
	"SWITCH_TYPE",
	"TRANSMIT_AS",
	"HANDLE",
	"IMPORT",
	"TYPEDEF",
	"UUID",
	"INTERFACE",
	"IDEMPOTENT",
	"BROADCAST",
	"MAYBE",
	"REFLECT_DELETIONS",
	"VERSION",
	"ENDPOINT",
	"EXCEPTIONS",
	"LOCAL",
	"POINTER_DEFAULT",
	"RETVAL",
	"IID_IS",
	"WCHAR_T",
	"INT3264",
	"INT8",
	"INT16",
	"INT32",
	"INT64",
	"RANGE",
	"MS_UNION",
	"OBJECT",
	"V1_ENUM",
	"STRICT_CONTEXT_HANDLE",
	"TYPE_STRICT_CONTEXT_HANDLE",
	"DISABLE_CONSISTENCY_CHECK",
	"SIZEOF",
	"PRAGMA_DEFINE",
	"PRAGMA_CPP_QUOTE",
	"CALLBACK",
	"HELP_STRING",
	"DUAL",
	"PROPGET",
	"PROPPUT",
	"PROPPUTREF",
	"ID",
	"HIDDEN",
	"NONEXTENSIBLE",
	"RESTRICTED",
	"DEFAULT_VALUE",
	"ODL",
	"OLEAUTOMATION",
	"OPTIONAL",
	"APPOBJECT",
	"SAFEARRAY",
	"PAD",
	"GOEXT_LAYOUT",
	"GOEXT_DEFAULT_NULL",
	"GOEXT_NO_SIZE_LIMIT",
	"CALL_AS",
	"ANNOTATION",
	"WIRE_MARSHAL",
	"PUBLIC",
	"SOURCE",
	"DISPINTERFACE",
	"METHODS",
	"PROPERTIES",
	"COCLASS",
	"LIBRARY",
	"ACS_BYTE_COUNT",
	"STRING",
	"CHARACTER_LITERAL",
	"STRING_LITERAL",
	"INT_LITERAL",
	"IDENT",
	"TERNARY",
	"RNG",
	"LOGICAL_OR",
	"LOGICAL_AND",
	"LE",
	"GE",
	"LT",
	"GT",
	"EQ",
	"NE",
	"OR",
	"XOR",
	"AND",
	"LSH",
	"RSH",
	"'+'",
	"'-'",
	"'*'",
	"'/'",
	"'%'",
	"UPLUS",
	"UNEG",
	"UNOT",
	"CAST",
	"UMINUS",
	"UMUL",
	"';'",
	"'{'",
	"'}'",
	"'['",
	"']'",
	"','",
	"':'",
	"'('",
	"')'",
	"'.'",
	"'='",
	"'?'",
	"'~'",
	"'!'",
}

var RPCStatenames = [...]string{}

const RPCEofCode = 1
const RPCErrCode = 2
const RPCInitialStackSize = 16

//line midl/parse.y:2761

//line yacctab:1
var RPCExca = [...]int16{
	-1, 0,
	1, 1,
	-2, 47,
	-1, 1,
	1, -1,
	-2, 0,
	-1, 2,
	1, 2,
	-2, 47,
	-1, 249,
	153, 117,
	-2, 47,
	-1, 266,
	115, 37,
	116, 37,
	153, 37,
	-2, 47,
	-1, 273,
	151, 200,
	156, 200,
	-2, 341,
	-1, 420,
	115, 38,
	116, 38,
	153, 38,
	-2, 47,
	-1, 421,
	115, 36,
	116, 36,
	153, 36,
	-2, 47,
	-1, 468,
	2, 341,
	124, 341,
	158, 341,
	-2, 200,
	-1, 558,
	159, 251,
	-2, 248,
	-1, 562,
	159, 251,
	-2, 248,
	-1, 586,
	159, 252,
	-2, 244,
}

const RPCPrivate = 57344

const RPCLast = 1104

var RPCAct = [...]int16{
	369, 590, 427, 182, 541, 588, 355, 26, 585, 540,
	584, 583, 359, 544, 368, 189, 391, 218, 363, 388,
	426, 354, 173, 362, 350, 261, 347, 274, 353, 352,
	349, 19, 346, 19, 252, 405, 66, 302, 74, 288,
	287, 279, 200, 196, 198, 193, 195, 214, 199, 194,
	192, 35, 79, 482, 283, 14, 197, 14, 56, 37,
	38, 39, 250, 5, 86, 367, 319, 191, 76, 521,
	77, 201, 183, 314, 571, 207, 605, 495, 605, 611,
	161, 604, 7, 612, 606, 166, 186, 187, 188, 603,
	499, 497, 602, 498, 496, 596, 170, 528, 207, 342,
	484, 318, 172, 489, 300, 301, 303, 304, 65, 68,
	69, 70, 206, 208, 306, 307, 308, 309, 293, 311,
	312, 313, 296, 484, 484, 582, 488, 487, 207, 202,
	203, 592, 160, 581, 490, 206, 208, 484, 484, 484,
	486, 485, 483, 275, 561, 538, 512, 210, 562, 298,
	299, 297, 204, 205, 209, 511, 510, 509, 508, 507,
	506, 207, 505, 185, 184, 206, 208, 504, 503, 502,
	210, 558, 273, 310, 501, 500, 494, 493, 492, 491,
	253, 463, 202, 203, 209, 344, 547, 361, 341, 246,
	161, 244, 243, 315, 242, 316, 241, 317, 206, 208,
	210, 240, 27, 239, 14, 204, 205, 238, 237, 236,
	235, 183, 270, 251, 343, 202, 203, 209, 234, 527,
	233, 232, 231, 20, 295, 230, 348, 229, 228, 31,
	345, 29, 227, 210, 226, 225, 396, 183, 204, 205,
	397, 376, 269, 224, 223, 222, 401, 412, 394, 221,
	220, 72, 145, 524, 33, 403, 384, 146, 404, 601,
	576, 537, 272, 267, 266, 481, 521, 21, 22, 514,
	418, 207, 366, 219, 337, 338, 339, 340, 417, 348,
	253, 415, 406, 156, 408, 407, 409, 370, 371, 372,
	373, 374, 546, 358, 614, 567, 33, 393, 423, 420,
	546, 545, 422, 432, 14, 437, 609, 358, 206, 208,
	33, 33, 413, 251, 358, 183, 473, 33, 442, 443,
	548, 424, 546, 545, 517, 202, 203, 375, 566, 472,
	564, 33, 358, 464, 33, 360, 76, 77, 365, 470,
	472, 170, 216, 210, 154, 434, 10, 462, 204, 205,
	465, 33, 268, 33, 73, 468, 158, 157, 598, 348,
	474, 254, 154, 475, 550, 248, 565, 446, 449, 450,
	448, 445, 447, 466, 471, 455, 456, 459, 460, 461,
	480, 457, 458, 451, 452, 453, 454, 444, 27, 469,
	358, 75, 75, 33, 264, 216, 217, 479, 213, 406,
	613, 408, 407, 409, 49, 48, 47, 46, 152, 20,
	559, 520, 516, 476, 75, 31, 467, 29, 41, 436,
	433, 36, 572, 414, 10, 45, 44, 43, 334, 335,
	336, 430, 321, 348, 333, 332, 323, 529, 171, 265,
	168, 148, 435, 322, 518, 320, 348, 466, 170, 513,
	610, 415, 423, 21, 22, 257, 519, 330, 331, 531,
	534, 535, 389, 536, 533, 532, 530, 328, 329, 326,
	327, 342, 324, 325, 392, 59, 65, 68, 69, 70,
	364, 58, 60, 552, 61, 549, 351, 515, 75, 539,
	78, 425, 416, 400, 399, 215, 167, 165, 164, 553,
	551, 163, 162, 71, 554, 402, 386, 398, 258, 395,
	42, 211, 51, 158, 157, 557, 556, 555, 259, 262,
	33, 54, 4, 53, 560, 546, 545, 563, 477, 478,
	431, 175, 176, 441, 135, 136, 137, 305, 439, 174,
	474, 1, 294, 348, 175, 573, 438, 183, 183, 574,
	577, 579, 568, 569, 471, 580, 575, 466, 67, 377,
	255, 88, 593, 63, 212, 247, 587, 64, 3, 150,
	587, 34, 62, 595, 594, 597, 52, 291, 263, 51,
	50, 290, 289, 600, 440, 292, 599, 68, 69, 70,
	286, 608, 57, 607, 180, 177, 178, 179, 181, 68,
	69, 70, 573, 169, 183, 285, 277, 615, 55, 357,
	617, 593, 618, 587, 616, 300, 301, 303, 304, 65,
	68, 69, 70, 543, 176, 306, 307, 308, 309, 293,
	311, 312, 313, 296, 300, 301, 303, 304, 65, 68,
	69, 70, 542, 356, 306, 307, 586, 309, 293, 311,
	312, 313, 296, 570, 275, 379, 380, 378, 381, 382,
	298, 299, 297, 591, 411, 65, 68, 69, 70, 589,
	526, 306, 525, 275, 68, 69, 70, 428, 429, 298,
	299, 297, 523, 419, 310, 522, 180, 177, 178, 179,
	181, 190, 578, 108, 92, 90, 260, 153, 245, 278,
	383, 30, 24, 310, 94, 25, 410, 32, 276, 23,
	28, 256, 282, 284, 281, 280, 11, 13, 12, 149,
	40, 390, 387, 385, 249, 147, 271, 421, 155, 17,
	8, 151, 16, 15, 6, 295, 159, 18, 9, 2,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 295, 80, 81, 82, 84, 83,
	85, 140, 138, 139, 89, 73, 0, 0, 0, 0,
	91, 0, 135, 136, 137, 0, 0, 0, 0, 141,
	142, 295, 0, 0, 33, 477, 478, 143, 93, 95,
	0, 0, 100, 0, 96, 97, 98, 99, 101, 102,
	103, 104, 105, 112, 113, 0, 0, 0, 0, 0,
	0, 144, 107, 110, 106, 0, 0, 109, 0, 0,
	0, 111, 114, 115, 116, 117, 118, 119, 120, 121,
	122, 123, 124, 125, 126, 127, 132, 133, 134, 87,
	0, 129, 128, 130, 131, 80, 81, 82, 84, 83,
	85, 140, 138, 139, 89, 0, 0, 0, 0, 0,
	91, 0, 135, 136, 137, 0, 0, 0, 0, 141,
	142, 0, 0, 0, 0, 0, 0, 143, 93, 95,
	0, 0, 100, 0, 96, 97, 98, 99, 101, 102,
	103, 104, 105, 112, 113, 0, 0, 0, 0, 0,
	0, 144, 107, 110, 106, 0, 0, 109, 0, 0,
	0, 111, 114, 115, 116, 117, 118, 119, 120, 121,
	122, 123, 124, 125, 126, 127, 132, 133, 134, 87,
	0, 129, 128, 130, 131, 300, 301, 303, 304, 65,
	68, 69, 70, 0, 0, 306, 307, 308, 309, 293,
	311, 312, 313, 296, 300, 301, 303, 304, 65, 68,
	69, 70, 0, 0, 306, 307, 308, 309, 293, 311,
	312, 313, 0, 0, 275, 0, 0, 0, 0, 0,
	298, 299, 297, 300, 301, 303, 304, 65, 68, 69,
	70, 0, 0, 306, 307, 308, 309, 293, 311, 312,
	313, 0, 0, 0, 310, 0, 0, 0, 0, 54,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 310, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 310, 0, 0, 295, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 295, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 295,
}

var RPCPact = [...]int16{
	366, -1000, 366, -1000, -1000, -1000, 270, 270, 270, 270,
	388, 276, 275, -1000, 274, 255, 254, 253, 252, 462,
	468, 379, 93, -1000, -1000, -1000, 200, 364, -1000, 364,
	-1000, 364, -1000, 822, -1000, -1000, -1000, -1000, -1000, -1000,
	101, -1000, -1000, -1000, -1000, -1000, 288, 190, 398, 157,
	378, 377, 374, 373, 157, 372, -1000, -1000, 298, 590,
	-1000, 296, -1000, -1000, -1000, 665, 532, 612, -1000, -1000,
	-1000, 42, 389, 822, 246, -1000, 343, 244, 117, -1000,
	92, 91, 87, 86, 85, 77, -1000, 76, -1000, 74,
	-1000, -1000, -1000, 70, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, 69, 67, 64, -1000, 63, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, 62, 60, -1000, -1000, -1000, -1000, 52,
	-1000, -1000, -1000, 51, -1000, -1000, -1000, -1000, 50, 49,
	45, -1000, 43, 38, 36, -1000, -1000, -1000, -1000, -1000,
	34, -1000, -1000, 33, 31, -1000, 388, 212, -1000, 180,
	-1000, 208, -1000, 394, 465, 241, -1000, 107, 106, 199,
	270, 395, -1000, -1000, -1000, 105, 931, -88, -1000, -1000,
	519, -1000, 519, -1000, 519, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-61, 317, 297, 307, 299, 339, 338, 319, 294, 286,
	-1000, -1000, 12, 12, 12, 12, -1000, 30, -1000, 347,
	42, 26, 117, 157, 362, 181, 29, 356, 183, 822,
	75, 75, 75, 75, 75, 185, 75, 622, 979, 383,
	340, 350, 494, 75, 387, 75, 42, 385, 370, 369,
	931, 382, 157, 75, 657, -1000, 75, -1000, -1000, 180,
	-1000, -1000, 272, 950, -1000, -1000, 368, -1000, -1000, -1000,
	114, -1000, -1000, -1000, -1000, -1000, 157, 157, -1000, 270,
	-1000, -1000, 367, 289, 487, 979, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, 268, 290, 267, 931,
	-1000, -1000, -1000, 531, 578, 520, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, 42, -1000, -1000, -1000, 75, 75,
	75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
	75, 75, 75, 75, 75, 75, 75, -1000, -1000, -1000,
	-1000, 931, -1000, 22, -1000, 178, 197, -1000, 265, 931,
	237, -1000, 186, 163, -1000, -1000, 156, -1000, -1000, 262,
	732, 657, 109, -1000, -108, -1000, -1000, -17, -1000, -1000,
	-18, -19, -32, -33, -56, -25, 20, 19, -1000, -1000,
	-1000, -1000, -1000, 18, -1000, 17, -83, -65, -1000, -1000,
	-66, -1000, -1000, 16, 15, 10, 9, 8, 3, 1,
	0, -1, -2, -3, -4, -13, -1000, -1000, -1000, -1000,
	364, 665, 113, -1000, -1000, 363, 261, 169, 465, -1000,
	157, 157, 260, 979, -1000, -1000, 110, -1000, 95, 295,
	-1000, -1000, -1000, 157, 362, 181, 356, -1000, 519, -1000,
	519, -1000, -1000, 104, 317, 297, 307, 299, 339, 338,
	338, 319, 319, 319, 319, 294, 294, 286, 286, -1000,
	-1000, -1000, -14, -1000, -1000, -1000, -1000, -1000, 289, 472,
	-1000, -1000, 475, -1000, -1000, -1000, -1000, 28, 165, 361,
	211, 356, 75, -1000, 75, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, 381, -1000, 340, -1000, 350,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, 75, 13, -1000, -1000, -1000, 259,
	-1000, 289, -10, -1000, 289, -1000, -1000, -1000, -1000, -1000,
	177, 214, 175, 142, 109, -1000, -1000, 75, -1000, -87,
	269, -1000, 239, -1000, -1000, 103, 42, 42, 156, -26,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -34, 630, -1000,
	-1000, -11, 630, -64, -1000, 472, -1000, -1000, 205, -1000,
	-1000, 75, -1000, -1000, -1000, -1000, 156, 102, -67, -1000,
	-1000, -1000, -1000, -78, -75, -1000, -1000, 611, 289, 151,
	324, -1000, 347, -1000, -80, -76, -1000, 247, -1000, -1000,
	-1000, -1000, 139, 42, -1000, 100, -1000, 289, -1000, -1000,
	-11, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
}

var RPCPgo = [...]int16{
	0, 568, 739, 738, 737, 736, 734, 733, 82, 732,
	731, 408, 730, 729, 728, 283, 727, 726, 725, 62,
	724, 723, 722, 19, 721, 16, 720, 719, 522, 418,
	63, 34, 718, 717, 716, 715, 714, 713, 712, 5,
	711, 710, 709, 708, 54, 707, 705, 35, 704, 702,
	701, 700, 27, 41, 699, 698, 490, 30, 7, 697,
	696, 52, 25, 695, 694, 693, 692, 3, 0, 15,
	691, 67, 50, 45, 49, 46, 43, 56, 44, 48,
	42, 71, 2, 685, 20, 8, 11, 32, 683, 26,
	12, 38, 682, 678, 677, 18, 672, 670, 669, 663,
	1, 653, 14, 65, 23, 47, 9, 29, 28, 24,
	4, 21, 643, 642, 13, 6, 623, 609, 608, 606,
	605, 590, 40, 585, 39, 582, 581, 577, 37, 572,
	567, 563, 561, 559, 546, 537, 36, 542, 64, 541,
	51, 17, 22, 10,
}

var RPCR1 = [...]uint8{
	0, 139, 139, 2, 2, 1, 1, 1, 1, 1,
	1, 140, 140, 3, 4, 5, 5, 8, 9, 10,
	10, 11, 40, 40, 40, 59, 59, 60, 60, 62,
	62, 12, 13, 14, 14, 15, 15, 88, 88, 16,
	16, 6, 6, 6, 7, 17, 17, 57, 57, 58,
	58, 56, 56, 61, 61, 61, 61, 61, 61, 61,
	61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
	61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
	61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
	61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
	61, 61, 61, 61, 61, 61, 61, 61, 61, 21,
	21, 22, 22, 24, 24, 23, 25, 18, 20, 20,
	27, 27, 28, 19, 19, 30, 30, 30, 30, 26,
	26, 29, 32, 33, 33, 118, 118, 118, 118, 118,
	118, 118, 67, 67, 67, 67, 67, 67, 68, 69,
	69, 70, 70, 71, 71, 72, 72, 73, 73, 74,
	74, 75, 75, 75, 76, 76, 76, 76, 76, 77,
	77, 77, 78, 78, 78, 79, 79, 79, 79, 80,
	80, 80, 80, 80, 81, 81, 81, 81, 81, 34,
	39, 39, 39, 39, 52, 52, 52, 53, 84, 84,
	84, 82, 83, 83, 83, 83, 92, 92, 44, 44,
	44, 119, 119, 119, 119, 119, 119, 119, 119, 120,
	120, 121, 121, 121, 128, 128, 128, 129, 129, 131,
	131, 130, 130, 130, 130, 130, 130, 136, 136, 136,
	122, 123, 124, 125, 126, 127, 134, 134, 135, 135,
	135, 143, 143, 142, 142, 43, 43, 43, 43, 43,
	42, 42, 35, 41, 91, 87, 87, 89, 90, 101,
	101, 49, 49, 36, 36, 36, 105, 47, 47, 47,
	47, 47, 50, 50, 50, 109, 109, 106, 106, 108,
	108, 107, 107, 110, 110, 113, 113, 111, 111, 114,
	112, 66, 66, 116, 117, 115, 115, 48, 63, 38,
	46, 46, 45, 104, 104, 141, 141, 95, 95, 37,
	96, 98, 98, 98, 99, 100, 100, 132, 132, 133,
	133, 133, 133, 133, 51, 65, 55, 103, 103, 102,
	102, 94, 94, 93, 93, 138, 138, 138, 31, 31,
	86, 86, 85, 85, 64, 64, 97, 97, 54, 54,
	137, 137, 137,
}

var RPCR2 = [...]int8{
	0, 0, 1, 1, 2, 1, 1, 2, 2, 2,
	2, 0, 1, 4, 3, 2, 3, 4, 3, 1,
	2, 4, 1, 1, 1, 0, 4, 1, 3, 1,
	1, 4, 3, 1, 2, 3, 3, 0, 1, 2,
	3, 4, 1, 3, 4, 0, 2, 0, 1, 4,
	5, 1, 3, 4, 4, 4, 4, 4, 4, 1,
	4, 1, 4, 1, 1, 1, 4, 1, 1, 1,
	1, 1, 1, 1, 4, 4, 4, 1, 4, 1,
	1, 1, 1, 1, 1, 1, 4, 4, 1, 1,
	1, 1, 4, 1, 1, 1, 4, 1, 1, 1,
	1, 4, 4, 4, 1, 4, 4, 4, 4, 1,
	3, 1, 3, 1, 3, 1, 1, 2, 1, 2,
	0, 1, 3, 1, 2, 2, 2, 1, 2, 1,
	3, 1, 5, 3, 4, 1, 1, 1, 2, 1,
	2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
	5, 1, 3, 1, 3, 1, 3, 1, 3, 1,
	3, 1, 3, 3, 1, 3, 3, 3, 3, 1,
	3, 3, 1, 3, 3, 1, 3, 3, 3, 1,
	2, 2, 2, 2, 1, 4, 1, 2, 3, 5,
	1, 2, 2, 1, 1, 1, 1, 1, 1, 3,
	0, 2, 1, 3, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 3, 3, 1, 1, 1, 3, 2, 3,
	3, 2, 2, 2, 2, 2, 2, 1, 1, 1,
	2, 1, 1, 1, 1, 1, 0, 1, 0, 1,
	1, 0, 1, 0, 1, 1, 1, 1, 1, 1,
	2, 1, 4, 5, 1, 1, 2, 2, 4, 0,
	2, 2, 1, 6, 4, 4, 5, 1, 1, 1,
	1, 2, 7, 5, 5, 0, 1, 1, 2, 1,
	2, 1, 2, 2, 1, 1, 2, 2, 1, 3,
	6, 1, 3, 3, 4, 1, 2, 4, 4, 5,
	2, 1, 6, 1, 3, 0, 1, 1, 3, 2,
	4, 0, 1, 1, 3, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 2, 5, 1, 3, 0,
	1, 0, 1, 1, 2, 1, 1, 1, 6, 6,
	3, 1, 3, 2, 1, 1, 4, 4, 1, 1,
	1, 1, 1,
}

var RPCChk = [...]int16{
	-1000, -139, -2, -1, -28, -30, -6, -8, -12, -3,
	58, -34, -32, -33, -44, -7, -9, -13, -4, -57,
	43, 87, 88, -42, -49, -46, -58, 22, -41, 51,
	-50, 49, -45, 154, -1, -140, 151, -140, -140, -140,
	-26, -29, 122, 151, 151, 151, 152, 152, 152, 152,
	118, 117, 114, 61, 59, -118, -128, 124, 13, 7,
	14, 16, -129, -131, -130, 8, -136, -135, 9, 10,
	11, 124, 158, 154, -91, 124, -91, -91, -56, -61,
	23, 24, 25, 27, 26, 28, -138, 107, -132, 32,
	-63, 38, -64, 56, -48, 57, 62, 63, 64, 65,
	60, 66, 67, 68, 69, 70, 82, 80, -65, 85,
	81, 89, 71, 72, 90, 91, 92, 93, 94, 95,
	96, 97, 98, 99, 100, 101, 102, 103, 110, 109,
	111, 112, 104, 105, 106, 40, 41, 42, 30, 31,
	29, 47, 48, 55, 79, 151, 156, -18, 153, -27,
	-28, -10, -11, -59, 154, -14, -15, 116, 115, -5,
	-8, -57, 124, 124, 124, 124, -57, 124, 142, 13,
	-136, 142, -136, -142, 7, 12, 12, 75, 76, 77,
	74, 78, -67, -68, 122, 121, 44, 45, 46, -69,
	-70, -71, -72, -73, -74, -75, -76, -77, -78, -79,
	-80, -81, 140, 141, 163, 164, 123, 86, 124, 142,
	158, 122, -56, 152, -105, 152, 52, 152, -141, 156,
	158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
	158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
	158, 158, 158, 158, 158, -55, 158, -29, 153, -20,
	-19, -30, -31, -57, 153, -11, -40, 61, 114, 124,
	-60, -62, 54, 113, 153, -15, 157, 157, 153, -8,
	-140, -17, 157, -39, -52, 43, -43, -119, -54, -53,
	-35, -36, -38, -44, -37, -120, -121, -122, -124, -125,
	-126, -127, -123, 18, -137, 124, 22, 51, 49, 50,
	4, 5, -128, 6, 7, -135, 14, 15, 16, 17,
	73, 19, 20, 21, 161, -142, -142, -142, 162, 127,
	128, 135, 136, 137, 133, 134, 131, 132, 129, 130,
	138, 139, 141, 140, 142, 143, 144, -81, -81, -81,
	-81, 158, 124, -67, 159, -141, -87, -89, -90, -57,
	-109, 124, -107, -108, -111, -115, -112, -117, 151, -90,
	154, 158, -104, -95, 124, 155, -61, -103, -102, -68,
	-103, -103, -103, -103, -103, 142, -102, -133, 35, 33,
	34, 36, 37, -51, -52, -21, 123, -22, -23, 122,
	-24, -25, 124, -138, -102, 122, -68, -67, 122, 124,
	124, -39, 123, -90, -102, -47, -128, -122, -124, -53,
	49, 7, -68, -19, 151, -52, 124, -141, 156, -88,
	-87, -16, -31, -57, -140, 124, -84, -82, -94, -93,
	142, 43, -52, 152, -105, 152, 152, -39, -134, 7,
	6, 13, -67, -68, -71, -72, -73, -74, -75, -76,
	-76, -77, -77, -77, -77, -78, -78, -79, -79, -80,
	-80, -80, -39, 159, 155, 153, -89, 151, -39, 152,
	153, -111, 154, 153, -115, -115, 151, 53, 54, -47,
	-141, 156, 161, 159, 156, 159, 159, 159, 159, 159,
	159, 159, 159, 159, 159, 160, 159, 156, 159, 156,
	159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
	159, 159, 159, -91, 156, 124, 151, 155, -62, -31,
	151, 156, -83, -92, 158, -96, -97, 124, 2, 142,
	-87, -109, -107, -108, -104, -142, -142, 157, 159, -84,
	-106, -110, -113, -116, -114, 54, 53, 158, 155, 124,
	153, -95, -68, -102, 123, -23, -25, -68, 158, 151,
	-82, 154, 158, -82, 153, 152, 153, 153, -141, -69,
	-101, 161, 153, -110, -115, -114, 157, -67, -66, -67,
	-115, 159, 159, -86, -143, -85, 16, -58, -39, -98,
	-100, -99, 142, -68, -86, -143, 159, -106, 153, -102,
	-115, 157, 159, 156, 159, 156, 159, -39, -82, 155,
	126, 159, 159, 153, 155, -67, -85, -82, -100,
}

var RPCDef = [...]int16{
	-2, -2, -2, 3, 5, 6, 11, 11, 11, 11,
	0, 0, 0, 127, 0, 42, 0, 0, 0, 0,
	248, 0, 0, 208, 209, 210, 48, 0, 261, 0,
	272, 0, 311, 0, 4, 7, 12, 8, 9, 10,
	0, 129, 131, 125, 126, 128, 120, 25, 0, 47,
	0, 0, 0, 0, 47, 0, 135, 136, 137, 249,
	139, 0, 224, 225, 226, 250, 253, 0, 237, 238,
	239, 0, 0, 0, 260, 264, 271, 310, 315, 51,
	0, 0, 0, 0, 0, 0, 59, 0, 61, 0,
	63, 64, 65, 0, 67, 68, 69, 70, 71, 72,
	73, 0, 0, 0, 77, 0, 79, 80, 81, 82,
	83, 84, 85, 0, 0, 88, 89, 90, 91, 0,
	93, 94, 95, 0, 97, 98, 99, 100, 0, 0,
	0, 104, 0, 0, 0, 345, 346, 347, 327, 328,
	0, 354, 355, 0, 0, 122, 0, 0, 43, 47,
	121, 25, 19, 0, 0, 0, 33, 0, 0, 47,
	11, 0, 14, 18, 32, 45, 248, 0, 141, 138,
	253, 140, 253, 228, 253, 254, 231, 232, 233, 234,
	235, 236, 133, 142, 143, 144, 145, 146, 147, 148,
	149, 151, 153, 155, 157, 159, 161, 164, 169, 172,
	175, 179, 0, 0, 0, 0, 184, 0, 186, 0,
	0, 0, 315, 47, 285, 47, 0, 0, 0, 316,
	339, 339, 339, 339, 339, 339, 339, 0, 248, 0,
	0, 0, 0, 339, 0, 0, 0, 0, 0, 0,
	248, 0, 47, 339, 248, 335, 0, 130, 41, -2,
	118, 123, 0, 248, 17, 20, 0, 22, 23, 24,
	315, 27, 29, 30, 31, 34, -2, 47, 13, 11,
	15, 44, 0, -2, 190, 248, 193, 194, 195, 196,
	255, 256, 257, 258, 259, 211, 212, 213, 214, 215,
	216, 217, 218, 358, 359, 197, 0, 0, 0, 248,
	219, 220, 221, 246, 249, 0, 242, 243, 244, 245,
	241, 360, 361, 362, 0, 230, 227, 229, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 180, 181, 182,
	183, 248, 187, 0, 134, 0, 47, 265, 0, 248,
	0, 286, 0, 47, 291, 289, 47, 298, 305, 0,
	0, 248, 315, 313, 317, 49, 52, 0, 337, 340,
	0, 0, 0, 0, 0, 0, 0, 0, 329, 330,
	331, 332, 333, 0, 334, 0, 109, 0, 111, 115,
	0, 113, 116, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 277, 278, 279, 280,
	0, 249, 0, 119, 124, 0, 0, 0, 316, 35,
	-2, -2, 0, 248, 16, 46, 189, 198, 0, 342,
	343, 192, 191, 47, 285, 47, 0, 319, 253, 247,
	253, 240, 132, 0, 152, 154, 156, 158, 160, 162,
	163, 165, 166, 167, 168, 170, 171, 173, 174, 176,
	177, 178, 0, 188, 50, 263, 266, 267, -2, 0,
	283, 292, 0, 284, 290, 297, 306, 0, 0, 0,
	0, 316, 0, 53, 339, 54, 55, 56, 57, 58,
	108, 60, 62, 66, 74, 0, 75, 0, 76, 0,
	78, 86, 87, 92, 96, 101, 102, 103, 105, 106,
	107, 308, 307, 281, 0, 0, 21, 26, 28, 0,
	39, 341, 201, 202, 341, 204, 205, 206, 207, 344,
	47, 0, 0, 47, 315, 222, 223, 0, 185, 269,
	0, 287, 47, 294, 295, 0, 0, 0, 47, 0,
	312, 314, 318, 338, 110, 112, 114, 0, -2, 40,
	199, 321, -2, 0, 262, 0, 274, 275, 0, 150,
	268, 339, 282, 288, 293, 296, 47, 0, 0, 301,
	304, 276, 336, 0, 0, 351, -2, 248, 341, 0,
	322, 323, 325, 326, 0, 0, 203, 0, 309, 270,
	303, 299, 0, 0, 348, 248, 349, 341, 353, 320,
	0, 356, 357, 273, 300, 302, 350, 352, 324,
}

var RPCTok1 = [...]uint8{
	1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 164, 3, 3, 3, 144, 3, 3,
	158, 159, 142, 140, 156, 141, 160, 143, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 157, 151,
	3, 161, 3, 162, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 154, 3, 155, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 152, 3, 153, 163,
}

var RPCTok2 = [...]uint8{
	2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
	12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
	22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
	42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
	62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
	72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
	82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
	92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
	102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
	112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
	122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
	132, 133, 134, 135, 136, 137, 138, 139, 145, 146,
	147, 148, 149, 150,
}

var RPCTok3 = [...]int8{
	0,
}

var RPCErrorMessages = [...]struct {
	state int
	token int
	msg   string
}{}

//line yaccpar:1

/*	parser for yacc output	*/

var (
	RPCDebug        = 0
	RPCErrorVerbose = false
)

type RPCLexer interface {
	Lex(lval *RPCSymType) int
	Error(s string)
}

type RPCParser interface {
	Parse(RPCLexer) int
	Lookahead() int
}

type RPCParserImpl struct {
	lval  RPCSymType
	stack [RPCInitialStackSize]RPCSymType
	char  int
}

func (p *RPCParserImpl) Lookahead() int {
	return p.char
}

func RPCNewParser() RPCParser {
	return &RPCParserImpl{}
}

const RPCFlag = -1000

func RPCTokname(c int) string {
	if c >= 1 && c-1 < len(RPCToknames) {
		if RPCToknames[c-1] != "" {
			return RPCToknames[c-1]
		}
	}
	return __yyfmt__.Sprintf("tok-%v", c)
}

func RPCStatname(s int) string {
	if s >= 0 && s < len(RPCStatenames) {
		if RPCStatenames[s] != "" {
			return RPCStatenames[s]
		}
	}
	return __yyfmt__.Sprintf("state-%v", s)
}

func RPCErrorMessage(state, lookAhead int) string {
	const TOKSTART = 4

	if !RPCErrorVerbose {
		return "syntax error"
	}

	for _, e := range RPCErrorMessages {
		if e.state == state && e.token == lookAhead {
			return "syntax error: " + e.msg
		}
	}

	res := "syntax error: unexpected " + RPCTokname(lookAhead)

	// To match Bison, suggest at most four expected tokens.
	expected := make([]int, 0, 4)

	// Look for shiftable tokens.
	base := int(RPCPact[state])
	for tok := TOKSTART; tok-1 < len(RPCToknames); tok++ {
		if n := base + tok; n >= 0 && n < RPCLast && int(RPCChk[int(RPCAct[n])]) == tok {
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}
	}

	if RPCDef[state] == -2 {
		i := 0
		for RPCExca[i] != -1 || int(RPCExca[i+1]) != state {
			i += 2
		}

		// Look for tokens that we accept or reduce.
		for i += 2; RPCExca[i] >= 0; i += 2 {
			tok := int(RPCExca[i])
			if tok < TOKSTART || RPCExca[i+1] == 0 {
				continue
			}
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}

		// If the default action is to accept or reduce, give up.
		if RPCExca[i+1] != 0 {
			return res
		}
	}

	for i, tok := range expected {
		if i == 0 {
			res += ", expecting "
		} else {
			res += " or "
		}
		res += RPCTokname(tok)
	}
	return res
}

func RPClex1(lex RPCLexer, lval *RPCSymType) (char, token int) {
	token = 0
	char = lex.Lex(lval)
	if char <= 0 {
		token = int(RPCTok1[0])
		goto out
	}
	if char < len(RPCTok1) {
		token = int(RPCTok1[char])
		goto out
	}
	if char >= RPCPrivate {
		if char < RPCPrivate+len(RPCTok2) {
			token = int(RPCTok2[char-RPCPrivate])
			goto out
		}
	}
	for i := 0; i < len(RPCTok3); i += 2 {
		token = int(RPCTok3[i+0])
		if token == char {
			token = int(RPCTok3[i+1])
			goto out
		}
	}

out:
	if token == 0 {
		token = int(RPCTok2[1]) /* unknown char */
	}
	if RPCDebug >= 3 {
		__yyfmt__.Printf("lex %s(%d)\n", RPCTokname(token), uint(char))
	}
	return char, token
}

func RPCParse(RPClex RPCLexer) int {
	return RPCNewParser().Parse(RPClex)
}

func (RPCrcvr *RPCParserImpl) Parse(RPClex RPCLexer) int {
	var RPCn int
	var RPCVAL RPCSymType
	var RPCDollar []RPCSymType
	_ = RPCDollar // silence set and not used
	RPCS := RPCrcvr.stack[:]

	Nerrs := 0   /* number of errors */
	Errflag := 0 /* error recovery flag */
	RPCstate := 0
	RPCrcvr.char = -1
	RPCtoken := -1 // RPCrcvr.char translated into internal numbering
	defer func() {
		// Make sure we report no lookahead when not parsing.
		RPCstate = -1
		RPCrcvr.char = -1
		RPCtoken = -1
	}()
	RPCp := -1
	goto RPCstack

ret0:
	return 0

ret1:
	return 1

RPCstack:
	/* put a state and value onto the stack */
	if RPCDebug >= 4 {
		__yyfmt__.Printf("char %v in %v\n", RPCTokname(RPCtoken), RPCStatname(RPCstate))
	}

	RPCp++
	if RPCp >= len(RPCS) {
		nyys := make([]RPCSymType, len(RPCS)*2)
		copy(nyys, RPCS)
		RPCS = nyys
	}
	RPCS[RPCp] = RPCVAL
	RPCS[RPCp].yys = RPCstate

RPCnewstate:
	RPCn = int(RPCPact[RPCstate])
	if RPCn <= RPCFlag {
		goto RPCdefault /* simple state */
	}
	if RPCrcvr.char < 0 {
		RPCrcvr.char, RPCtoken = RPClex1(RPClex, &RPCrcvr.lval)
	}
	RPCn += RPCtoken
	if RPCn < 0 || RPCn >= RPCLast {
		goto RPCdefault
	}
	RPCn = int(RPCAct[RPCn])
	if int(RPCChk[RPCn]) == RPCtoken { /* valid shift */
		RPCrcvr.char = -1
		RPCtoken = -1
		RPCVAL = RPCrcvr.lval
		RPCstate = RPCn
		if Errflag > 0 {
			Errflag--
		}
		goto RPCstack
	}

RPCdefault:
	/* default state action */
	RPCn = int(RPCDef[RPCstate])
	if RPCn == -2 {
		if RPCrcvr.char < 0 {
			RPCrcvr.char, RPCtoken = RPClex1(RPClex, &RPCrcvr.lval)
		}

		/* look through exception table */
		xi := 0
		for {
			if RPCExca[xi+0] == -1 && int(RPCExca[xi+1]) == RPCstate {
				break
			}
			xi += 2
		}
		for xi += 2; ; xi += 2 {
			RPCn = int(RPCExca[xi+0])
			if RPCn < 0 || RPCn == RPCtoken {
				break
			}
		}
		RPCn = int(RPCExca[xi+1])
		if RPCn < 0 {
			goto ret0
		}
	}
	if RPCn == 0 {
		/* error ... attempt to resume parsing */
		switch Errflag {
		case 0: /* brand new error */
			RPClex.Error(RPCErrorMessage(RPCstate, RPCtoken))
			Nerrs++
			if RPCDebug >= 1 {
				__yyfmt__.Printf("%s", RPCStatname(RPCstate))
				__yyfmt__.Printf(" saw %s\n", RPCTokname(RPCtoken))
			}
			fallthrough

		case 1, 2: /* incompletely recovered error ... try again */
			Errflag = 3

			/* find a state where "error" is a legal shift action */
			for RPCp >= 0 {
				RPCn = int(RPCPact[RPCS[RPCp].yys]) + RPCErrCode
				if RPCn >= 0 && RPCn < RPCLast {
					RPCstate = int(RPCAct[RPCn]) /* simulate a shift of "error" */
					if int(RPCChk[RPCstate]) == RPCErrCode {
						goto RPCstack
					}
				}

				/* the current p has no shift on "error", pop stack */
				if RPCDebug >= 2 {
					__yyfmt__.Printf("error recovery pops state %d\n", RPCS[RPCp].yys)
				}
				RPCp--
			}
			/* there is no state on the stack with an error shift ... abort */
			goto ret1

		case 3: /* no shift yet; clobber input char */
			if RPCDebug >= 2 {
				__yyfmt__.Printf("error recovery discards %s\n", RPCTokname(RPCtoken))
			}
			if RPCtoken == RPCEofCode {
				goto ret1
			}
			RPCrcvr.char = -1
			RPCtoken = -1
			goto RPCnewstate /* try again in the same state */
		}
	}

	/* reduction by production RPCn */
	if RPCDebug >= 2 {
		__yyfmt__.Printf("reduce %v in:\n\t%v\n", RPCn, RPCStatname(RPCstate))
	}

	RPCnt := RPCn
	RPCpt := RPCp
	_ = RPCpt // guard against "declared and not used"

	RPCp -= int(RPCR2[RPCn])
	// RPCp is now the index of $0. Perform the default action. Iff the
	// reduced production is ε, $1 is possibly out of range.
	if RPCp+1 >= len(RPCS) {
		nyys := make([]RPCSymType, len(RPCS)*2)
		copy(nyys, RPCS)
		RPCS = nyys
	}
	RPCVAL = RPCS[RPCp+1]

	/* consult goto table to find next state */
	RPCn = int(RPCR1[RPCn])
	RPCg := int(RPCPgo[RPCn])
	RPCj := RPCg + RPCS[RPCp].yys + 1

	if RPCj >= RPCLast {
		RPCstate = int(RPCAct[RPCg])
	} else {
		RPCstate = int(RPCAct[RPCj])
		if int(RPCChk[RPCstate]) != -RPCn {
			RPCstate = int(RPCAct[RPCg])
		}
	}
	// dummy call; replaced with literal code
	switch RPCnt {

	case 2:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:362
		{
			f := RPCDollar[1].File
			setResult(RPClex, &f)
		}
	case 3:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:369
		{
			RPCVAL.File = RPCDollar[1].File
			if len(RPCVAL.File.Interfaces) > 0 {
				if RPCVAL.File.Export == nil {
					RPCVAL.File.Export = make(map[string]*Export)
				}
				for i := range RPCVAL.File.Interfaces {
					iff := RPCVAL.File.Interfaces[i]
					if iff.Attrs.Object || iff.BaseName != "" {
						RPCVAL.File.Export[iff.Name] = &Export{Type: InterfaceToExport(iff), Position: Hash(iff.Name)}
					}
				}
			}
		}
	case 4:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:384
		{
			if len(RPCDollar[2].File.Imports) > 0 {
				RPCVAL.File.Imports = append(RPCVAL.File.Imports, RPCDollar[2].File.Imports...)
			}
			if len(RPCDollar[2].File.Export) > 0 {
				if RPCVAL.File.Export == nil {
					RPCVAL.File.Export = make(map[string]*Export)
				}
				for k, v := range RPCDollar[2].File.Export {
					RPCVAL.File.Export[k] = v
				}
			}
			if len(RPCDollar[2].File.Interfaces) > 0 {
				RPCVAL.File.Interfaces = append(RPCVAL.File.Interfaces, RPCDollar[2].File.Interfaces...)
				if RPCVAL.File.Export == nil {
					RPCVAL.File.Export = make(map[string]*Export)
				}
				for i := range RPCDollar[2].File.Interfaces {
					iff := RPCDollar[2].File.Interfaces[i]
					if iff.Attrs.Object || iff.BaseName != "" {
						RPCVAL.File.Export[iff.Name] = &Export{Type: InterfaceToExport(iff), Position: Hash(iff.Name)}
					}
				}
			}
			if len(RPCDollar[2].File.ComClasses) > 0 {
				RPCVAL.File.ComClasses = append(RPCVAL.File.ComClasses, RPCDollar[2].File.ComClasses...)
			}
			if len(RPCDollar[2].File.DispatchInterfaces) > 0 {
				RPCVAL.File.DispatchInterfaces = append(RPCVAL.File.DispatchInterfaces, RPCDollar[2].File.DispatchInterfaces...)
			}
			if len(RPCDollar[2].File.Libraries) > 0 {
				RPCVAL.File.Libraries = append(RPCVAL.File.Libraries, RPCDollar[2].File.Libraries...)
			}
		}
	case 5:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:421
		{
			RPCVAL.File = File{Imports: RPCDollar[1].Strings}
		}
	case 6:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:425
		{
			RPCVAL.File = File{Export: make(map[string]*Export)}
			if len(RPCDollar[1].Export) > 0 {
				for _, e := range RPCDollar[1].Export {
					RPCVAL.File.Export[e.Name] = e
					exportSyms(RPClex, e.Name, e)
				}
			}
		}
	case 7:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:435
		{
			iff := RPCDollar[1].Interface
			if iff.Attrs != nil {
				RPCVAL.File = File{Interfaces: []*Interface{&iff}}
			}
			if iff.BaseName != "" {
				typ, ok := lookupType(RPClex, iff.BaseName)
				if !ok {
					RPClex.Error("cannot find interface " + iff.BaseName)
					return 0
				}

				if typ.Kind == TypeAttribute {
					typ = typ.Elem
				}

				if iff.Base = typ.Interface; iff.Base != nil {
					inc := 0
					if l := len(iff.Base.Body.Operations); l > 0 {
						inc = iff.Base.Body.Operations[l-1].OpNum + 1
					}
					for i := range iff.Body.Operations {
						iff.Body.Operations[i].OpNum += inc
					}
				}
			}
			exportSyms(RPClex, iff.Name, &Export{Type: InterfaceToExport(&iff)})
		}
	case 8:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:464
		{
			cc := RPCDollar[1].ComClass
			RPCVAL.File = File{ComClasses: []*ComClass{&cc}}
		}
	case 9:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:469
		{
			di := RPCDollar[1].DispatchInterface
			RPCVAL.File = File{DispatchInterfaces: []*DispatchInterface{&di}}
		}
	case 10:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:474
		{
			lib := RPCDollar[1].Library
			RPCVAL.File = File{Libraries: []*Library{&lib}}
		}
	case 13:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:485
		{
			RPCVAL.Library = Library{Attrs: RPCDollar[1].Library.Attrs, Name: RPCDollar[1].Library.Name, Body: RPCDollar[3].Library.Body}
		}
	case 14:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:491
		{
			RPCVAL.Library = Library{Attrs: RPCDollar[1].Attr.Library(), Name: RPCDollar[3].Ident}
		}
	case 15:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:497
		{
			cc := RPCDollar[1].ComClass
			RPCVAL.Library = Library{Body: LibraryBody{ComClasses: []*ComClass{&cc}}}
		}
	case 16:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:502
		{
			cc := RPCDollar[2].ComClass
			RPCVAL.Library.Body.ComClasses = append(RPCVAL.Library.Body.ComClasses, &cc)
		}
	case 17:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:509
		{
			RPCVAL.ComClass = ComClass{Name: RPCDollar[1].ComClass.Name, Attrs: RPCDollar[1].ComClass.Attrs, Interfaces: RPCDollar[3].ComInterfaces}
		}
	case 18:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:515
		{
			RPCVAL.ComClass = ComClass{Attrs: RPCDollar[1].Attr.ComClass(), Name: RPCDollar[3].Ident}
		}
	case 19:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:521
		{
			RPCVAL.ComInterfaces = []*ComInterface{RPCDollar[1].ComInterface}
		}
	case 20:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:525
		{
			RPCVAL.ComInterfaces = append(RPCVAL.ComInterfaces, RPCDollar[2].ComInterface)
		}
	case 21:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:531
		{
			RPCVAL.ComInterface = &ComInterface{Name: RPCDollar[3].Ident, Type: RPCDollar[2].Type, Attrs: RPCDollar[1].Attr.ComInterface()}
		}
	case 22:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:537
		{
			RPCVAL.Type = &Type{Kind: TypeInterface}
		}
	case 23:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:541
		{
			RPCVAL.Type = &Type{Kind: TypeDispInterface}
		}
	case 24:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:545
		{
			RPCVAL.Type = &Type{Kind: TypeRef, Name: RPCDollar[1].Ident}
		}
	case 25:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:551
		{
			RPCVAL.Attr = pAttr{}
		}
	case 26:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:555
		{
			RPCVAL.Attr = RPCDollar[2].Attr
		}
	case 27:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:561
		{
			switch RPCDollar[1].AttrType.Type {
			case DEFAULT:
				RPCVAL.Attr.Default = true
			case SOURCE:
				RPCVAL.Attr.Source = true
			}
		}
	case 28:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:570
		{
			switch RPCDollar[3].AttrType.Type {
			case DEFAULT:
				RPCVAL.Attr.Default = true
			case SOURCE:
				RPCVAL.Attr.Source = true
			}
		}
	case 29:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:582
		{
			RPCVAL.AttrType = pAttrType{DEFAULT, pAttr{}}
		}
	case 30:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:586
		{
			RPCVAL.AttrType = pAttrType{SOURCE, pAttr{}}
		}
	case 31:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:592
		{
			RPCVAL.DispatchInterface = DispatchInterface{Name: RPCDollar[1].DispatchInterface.Name, Attrs: RPCDollar[1].DispatchInterface.Attrs, Body: RPCDollar[3].DispatchInterfaceBody}
			for i := range RPCDollar[3].DispatchInterfaceBody.Methods {
				RPCDollar[3].DispatchInterfaceBody.Methods[i].OpNum = i
			}
		}
	case 32:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:601
		{
			RPCVAL.DispatchInterface = DispatchInterface{Attrs: RPCDollar[1].Attr.DispatchInterface(), Name: RPCDollar[3].Ident}
		}
	case 33:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:607
		{
			RPCVAL.DispatchInterfaceBody = RPCDollar[1].DispatchInterfaceBody
		}
	case 34:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:611
		{
			if len(RPCDollar[2].DispatchInterfaceBody.Properties) > 0 {
				RPCVAL.DispatchInterfaceBody.Properties = append(RPCVAL.DispatchInterfaceBody.Properties, RPCDollar[2].DispatchInterfaceBody.Properties...)
			}
			if len(RPCDollar[2].DispatchInterfaceBody.Methods) > 0 {
				RPCVAL.DispatchInterfaceBody.Methods = append(RPCVAL.DispatchInterfaceBody.Methods, RPCDollar[2].DispatchInterfaceBody.Methods...)
			}
		}
	case 35:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:622
		{
			RPCVAL.DispatchInterfaceBody = DispatchInterfaceBody{Properties: RPCDollar[3].Fields}
		}
	case 36:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:626
		{
			RPCVAL.DispatchInterfaceBody = DispatchInterfaceBody{Methods: RPCDollar[3].Operations}
		}
	case 37:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:632
		{
			RPCVAL.Fields = nil
		}
	case 38:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:636
		{
			RPCVAL.Fields = RPCDollar[1].Fields
		}
	case 39:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:642
		{
			RPCVAL.Operations = []*Operation{RPCDollar[1].Operation}
		}
	case 40:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:646
		{
			RPCVAL.Operations = append(RPCVAL.Operations, RPCDollar[2].Operation)
		}
	case 41:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:652
		{
			RPCVAL.Interface = Interface{Name: RPCDollar[1].Interface.Name, Attrs: RPCDollar[1].Interface.Attrs, Body: RPCDollar[3].InterfaceBody, BaseName: RPCDollar[1].Interface.BaseName}
		}
	case 42:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:656
		{
			RPCVAL.Interface = Interface{Name: RPCDollar[1].Interface.Name, Attrs: RPCDollar[1].Interface.Attrs, BaseName: RPCDollar[1].Interface.BaseName}
		}
	case 43:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:660
		{
			RPCVAL.Interface = Interface{Name: RPCDollar[1].Interface.Name, Attrs: RPCDollar[1].Interface.Attrs, BaseName: RPCDollar[1].Interface.BaseName}
		}
	case 44:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:666
		{
			RPCVAL.Interface = Interface{Attrs: RPCDollar[1].Attr.Interface(), Name: RPCDollar[3].Ident, BaseName: RPCDollar[4].Ident}
		}
	case 45:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:672
		{
			RPCVAL.Ident = ""
		}
	case 46:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:676
		{
			RPCVAL.Ident = RPCDollar[2].Ident
		}
	case 47:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:682
		{
			RPCVAL.Attr = pAttr{}
		}
	case 48:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:686
		{
			RPCVAL.Attr = RPCDollar[1].Attr
		}
	case 49:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:692
		{
			RPCVAL.Attr = RPCDollar[2].Attr
		}
	case 50:
		RPCDollar = RPCS[RPCpt-5 : RPCpt+1]
//line midl/parse.y:696
		{
			RPCVAL.Attr = RPCVAL.Attr.Merge(RPCDollar[3].Attr)
		}
	case 51:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:702
		{
			RPCVAL.Attr = RPCVAL.Attr.Set(RPCDollar[1].AttrType)
		}
	case 52:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:706
		{
			RPCVAL.Attr = RPCVAL.Attr.Set(RPCDollar[3].AttrType)
		}
	case 53:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:713
		{
			RPCVAL.AttrType = pAttrType{FIRST_IS, pAttr{FirstIs: RPCDollar[3].Exprs}}
		}
	case 54:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:717
		{
			RPCVAL.AttrType = pAttrType{LAST_IS, pAttr{LastIs: RPCDollar[3].Exprs}}
		}
	case 55:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:721
		{
			RPCVAL.AttrType = pAttrType{LENGTH_IS, pAttr{LengthIs: RPCDollar[3].Exprs}}
		}
	case 56:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:725
		{
			RPCVAL.AttrType = pAttrType{MIN_IS, pAttr{MinIs: RPCDollar[3].Exprs}}
		}
	case 57:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:729
		{
			RPCVAL.AttrType = pAttrType{MAX_IS, pAttr{MaxIs: RPCDollar[3].Exprs}}
		}
	case 58:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:733
		{
			RPCVAL.AttrType = pAttrType{SIZE_IS, pAttr{SizeIs: RPCDollar[3].Exprs}}
		}
	case 59:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:737
		{
			RPCVAL.AttrType = pAttrType{RPCDollar[1].Token, pAttr{}}
		}
	case 60:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:741
		{
			if RPCDollar[3].Expr.Empty() {
				RPCVAL.AttrType = pAttrType{GOEXT_DEFAULT_NULL, pAttr{DefaultNull: []Expr{}}}
			} else {
				RPCVAL.AttrType = pAttrType{GOEXT_DEFAULT_NULL, pAttr{DefaultNull: []Expr{RPCDollar[3].Expr}}}
			}
		}
	case 61:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:749
		{
			RPCVAL.AttrType = pAttrType{RPCDollar[1].Token, pAttr{}}
		}
	case 62:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:753
		{
			RPCVAL.AttrType = pAttrType{RPCDollar[3].Token, pAttr{}}
		}
	case 63:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:757
		{
			RPCVAL.AttrType = RPCDollar[1].AttrType
		}
	case 64:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:761
		{
			RPCVAL.AttrType = pAttrType{IGNORE, pAttr{}}
		}
	case 65:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:765
		{
			RPCVAL.AttrType = RPCDollar[1].AttrType
		}
	case 66:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:769
		{
			RPCVAL.AttrType = pAttrType{TRANSMIT_AS, pAttr{TransmitAs: RPCDollar[3].Type}}
		}
	case 67:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:773
		{
			RPCVAL.AttrType = pAttrType{SWITCH_TYPE, pAttr{SwitchType: RPCDollar[1].Type}}
		}
	case 68:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:777
		{
			RPCVAL.AttrType = pAttrType{HANDLE, pAttr{}}
		}
	case 69:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:781
		{
			RPCVAL.AttrType = pAttrType{IDEMPOTENT, pAttr{}}
		}
	case 70:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:785
		{
			RPCVAL.AttrType = pAttrType{BROADCAST, pAttr{}}
		}
	case 71:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:789
		{
			RPCVAL.AttrType = pAttrType{MAYBE, pAttr{}}
		}
	case 72:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:793
		{
			RPCVAL.AttrType = pAttrType{REFLECT_DELETIONS, pAttr{}}
		}
	case 73:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:797
		{
			RPCVAL.AttrType = pAttrType{UUID, pAttr{UUID: RPCDollar[1].UUID}}
		}
	case 74:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:801
		{
			RPCVAL.AttrType = pAttrType{VERSION, pAttr{Version: RPCDollar[3].Version}}
		}
	case 75:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:805
		{
			RPCVAL.AttrType = pAttrType{ENDPOINT, pAttr{Endpoints: RPCDollar[3].Strings}}
		}
	case 76:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:809
		{
			RPCVAL.AttrType = pAttrType{EXCEPTIONS, pAttr{Exceptions: RPCDollar[3].Strings}}
		}
	case 77:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:813
		{
			RPCVAL.AttrType = pAttrType{LOCAL, pAttr{}}
		}
	case 78:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:817
		{
			switch RPCDollar[3].Token {
			case POINTER_PTR:
				RPCVAL.AttrType = pAttrType{POINTER_DEFAULT, pAttr{PointerDefault: PointerTypePtr}}
			case POINTER_REF:
				RPCVAL.AttrType = pAttrType{POINTER_DEFAULT, pAttr{PointerDefault: PointerTypeRef}}
			case POINTER_UNIQUE:
				RPCVAL.AttrType = pAttrType{POINTER_DEFAULT, pAttr{PointerDefault: PointerTypeUnique}}
			}
		}
	case 79:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:828
		{
			RPCVAL.AttrType = pAttrType{V1_ENUM, pAttr{}}
		}
	case 80:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:832
		{
			RPCVAL.AttrType = pAttrType{MS_UNION, pAttr{}}
		}
	case 81:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:836
		{
			RPCVAL.AttrType = RPCDollar[1].AttrType
		}
	case 82:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:840
		{
			RPCVAL.AttrType = pAttrType{DISABLE_CONSISTENCY_CHECK, pAttr{}}
		}
	case 83:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:844
		{
			RPCVAL.AttrType = pAttrType{OBJECT, pAttr{}}
		}
	case 84:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:848
		{
			RPCVAL.AttrType = pAttrType{CALLBACK, pAttr{}}
		}
	case 85:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:852
		{
			RPCVAL.AttrType = pAttrType{RETVAL, pAttr{}}
		}
	case 86:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:856
		{
			RPCVAL.AttrType = pAttrType{IID_IS, pAttr{IIDIs: RPCDollar[3].Expr}}
		}
	case 87:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:860
		{
			RPCVAL.AttrType = pAttrType{HELP_STRING, pAttr{HelpString: RPCDollar[3].String}}
		}
	case 88:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:864
		{
			RPCVAL.AttrType = pAttrType{DUAL, pAttr{}}
		}
	case 89:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:868
		{
			RPCVAL.AttrType = pAttrType{PROPGET, pAttr{}}
		}
	case 90:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:872
		{
			RPCVAL.AttrType = pAttrType{PROPPUT, pAttr{}}
		}
	case 91:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:876
		{
			RPCVAL.AttrType = pAttrType{PROPPUTREF, pAttr{}}
		}
	case 92:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:880
		{
			val, ok := RPCDollar[3].Expr.Eval(RPClex.(ExprStore))
			if !ok {
				RPClex.Error("cannot eval ID expression")
				return 0
			}
			if _, ok = val.BigInt(); !ok {
				RPClex.Error("cannot eval ID expression")
				return 0
			}
			RPCVAL.AttrType = pAttrType{ID, pAttr{ID: val}}
		}
	case 93:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:893
		{
			RPCVAL.AttrType = pAttrType{HIDDEN, pAttr{}}
		}
	case 94:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:897
		{
			RPCVAL.AttrType = pAttrType{NONEXTENSIBLE, pAttr{}}
		}
	case 95:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:901
		{
			RPCVAL.AttrType = pAttrType{RESTRICTED, pAttr{}}
		}
	case 96:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:905
		{
			exp, ok := RPCDollar[3].Expr.Eval(RPClex.(ExprStore))
			if !ok {
				RPClex.Error("cannot evaluate default value")
				return 0
			}
			RPCVAL.AttrType = pAttrType{DEFAULT_VALUE, pAttr{DefaultValue: exp}}
		}
	case 97:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:914
		{
			RPCVAL.AttrType = pAttrType{ODL, pAttr{}}
		}
	case 98:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:918
		{
			RPCVAL.AttrType = pAttrType{OLEAUTOMATION, pAttr{}}
		}
	case 99:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:922
		{
			RPCVAL.AttrType = pAttrType{OPTIONAL, pAttr{}}
		}
	case 100:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:926
		{
			RPCVAL.AttrType = pAttrType{APPOBJECT, pAttr{}}
		}
	case 101:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:930
		{
			RPCVAL.AttrType = pAttrType{ANNOTATION, pAttr{Annotation: RPCDollar[3].String}}
		}
	case 102:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:934
		{
			RPCVAL.AttrType = pAttrType{CALL_AS, pAttr{CallAs: RPCDollar[3].Ident}}
		}
	case 103:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:938
		{
			RPCVAL.AttrType = pAttrType{WIRE_MARSHAL, pAttr{WireMarshal: RPCDollar[3].Ident}}
		}
	case 104:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:942
		{
			RPCVAL.AttrType = pAttrType{PUBLIC, pAttr{}}
		}
	case 105:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:946
		{
			RPCVAL.AttrType = pAttrType{SAFEARRAY, pAttr{Safearray: RPCDollar[3].Type}}
		}
	case 106:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:950
		{
			RPCVAL.AttrType = pAttrType{PAD, pAttr{Pad: RPCDollar[3].Int.Uint64()}}
		}
	case 107:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:954
		{
			for i := range RPCDollar[3].Fields {
				RPCDollar[3].Fields[i].Attrs.IsLayout = true
			}
			RPCVAL.AttrType = pAttrType{GOEXT_LAYOUT, pAttr{Layout: RPCDollar[3].Fields}}
		}
	case 108:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:961
		{
			RPCVAL.AttrType = pAttrType{GOEXT_NO_SIZE_LIMIT, pAttr{NoSizeLimit: true}}
		}
	case 109:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:967
		{
			RPCVAL.Version = &Version{Major: uint16(RPCDollar[1].Int.Uint64())}
		}
	case 110:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:971
		{
			RPCVAL.Version = &Version{Major: uint16(RPCDollar[1].Int.Uint64()), Minor: uint16(RPCDollar[3].Int.Uint64())}
		}
	case 111:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:977
		{
			RPCVAL.Strings = []string{RPCDollar[1].String}
		}
	case 112:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:981
		{
			RPCVAL.Strings = append(RPCVAL.Strings, RPCDollar[3].String)
		}
	case 113:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:987
		{
			RPCVAL.Strings = []string{RPCDollar[1].String}
		}
	case 114:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:991
		{
			RPCVAL.Strings = append(RPCVAL.Strings, RPCDollar[3].String)
		}
	case 115:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:997
		{
			RPCVAL.String = RPCDollar[1].String
		}
	case 116:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1003
		{
			RPCVAL.String = RPCDollar[1].Ident
		}
	case 117:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1009
		{
			RPCVAL.InterfaceBody = InterfaceBody{Imports: RPCDollar[1].Strings, Export: RPCDollar[2].InterfaceBody.Export, Operations: RPCDollar[2].InterfaceBody.Operations}
			for i, o := range RPCVAL.InterfaceBody.Operations {
				o.OpNum = i
			}
		}
	case 118:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1018
		{
			RPCVAL.InterfaceBody = RPCDollar[1].InterfaceBody
			export := make([]*Export, len(RPCDollar[1].InterfaceBody.Export))
			for _, e := range RPCDollar[1].InterfaceBody.Export {
				export[e.Position] = e
			}
			for _, e := range export {
				exportSyms(RPClex, e.Name, e)
			}
		}
	case 119:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1029
		{
			if len(RPCDollar[2].InterfaceBody.Export) > 0 {
				if RPCVAL.InterfaceBody.Export == nil {
					RPCVAL.InterfaceBody.Export = make(map[string]*Export)
				}
				export := make([]*Export, len(RPCDollar[2].InterfaceBody.Export))
				for _, e := range RPCDollar[2].InterfaceBody.Export {
					export[e.Position] = e
				}
				for _, e := range export {
					RPCVAL.InterfaceBody.Export[e.Name] = e
					exportSyms(RPClex, e.Name, e)
				}
			}
			if len(RPCDollar[2].InterfaceBody.Operations) > 0 {
				RPCVAL.InterfaceBody.Operations = append(RPCVAL.InterfaceBody.Operations, RPCDollar[2].InterfaceBody.Operations...)
			}
		}
	case 120:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:1050
		{
			RPCVAL.Strings = []string{}
		}
	case 121:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1054
		{
			RPCVAL.Strings = RPCDollar[1].Strings
		}
	case 122:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1060
		{
			RPCVAL.Strings = RPCDollar[2].Strings
			// XXX: load import files.
			for _, f := range RPCDollar[2].Strings {
				if _, err := NewFile(f, "").Load(); err != nil {
					RPClex.Error("unable to load file: " + err.Error())
					return 0
				}
			}
		}
	case 123:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1072
		{
			RPCVAL.InterfaceBody = InterfaceBody{Export: make(map[string]*Export)}
			for _, e := range RPCDollar[1].Export {
				RPCVAL.InterfaceBody.Export[e.Name], e.Position = e, len(RPCVAL.InterfaceBody.Export)

			}
		}
	case 124:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1080
		{
			RPCVAL.InterfaceBody = InterfaceBody{Operations: []*Operation{RPCDollar[1].Operation}}
		}
	case 125:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1086
		{
			RPCVAL.Export = RPCDollar[1].Typedef.pToExport_()
		}
	case 126:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1090
		{
			RPCVAL.Export = []*Export{&Export{Name: RPCDollar[1].Const.Name, Const: RPCDollar[1].Const}}
		}
	case 127:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1094
		{
			RPCVAL.Export = RPCDollar[1].Export
		}
	case 128:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1098
		{
			RPCVAL.Export = []*Export{&Export{Name: RPCDollar[1].Type.TypeName(), Type: RPCDollar[1].Type}}
		}
	case 129:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1104
		{
			RPCVAL.Strings = []string{RPCDollar[1].String}
		}
	case 130:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1108
		{
			RPCVAL.Strings = append(RPCVAL.Strings, RPCDollar[3].String)
		}
	case 131:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1114
		{
			RPCVAL.String = RPCDollar[1].String
		}
	case 132:
		RPCDollar = RPCS[RPCpt-5 : RPCpt+1]
//line midl/parse.y:1120
		{
			exp, err := RPCDollar[5].Expr.Coerce(RPCDollar[2].Kind)
			if err != nil {
				RPClex.Error(err.Error())
				return 0
			}
			RPCVAL.Const = &Const{Type: RPCDollar[2].Kind, Name: RPCDollar[3].Ident, Value: exp}
		}
	case 133:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1131
		{
			switch v := RPCDollar[3].Expr.Value.(type) {
			case *big.Int:
				RPCVAL.Export = []*Export{&Export{Name: RPCDollar[2].Ident, Const: &Const{Type: TypeInt64, Name: RPCDollar[2].Ident, Value: RPCDollar[3].Expr}}}
			case string:
				if RPCDollar[3].Expr.CanEval() {
					RPCVAL.Export = []*Export{&Export{Name: RPCDollar[2].Ident, Const: &Const{Type: TypeString, Name: RPCDollar[2].Ident, Value: RPCDollar[3].Expr}}}
					break
				}
				ref := &Type{Kind: TypeRef, Name: v}
				decl := &Type{Kind: TypeAttribute, Attrs: &TypeAttr{Alias: RPCDollar[2].Ident}}
				typ, ok := lookupType(RPClex, ref.Name)
				if !ok {
					// XXX: defer type resolution.
					decl.Elem = pushRef(RPClex, ref)
				} else {
					decl.Elem = typ
				}

				RPCVAL.Export = []*Export{&Export{Name: RPCDollar[2].Ident, Type: decl}}

				// FIXME: dnsp.idl PRAGMA Types.
				// $$ = []*Export{&Export{Name: $2, Type: &Type{Kind: TypeRef, Name: v}}}
			default:
				RPClex.Error("invalid #define statement")
				return 0
			}
		}
	case 134:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:1160
		{
			// XXX: re-enter the STRING_LITERAL as PRAGMA_DEFINE.
			pushLex(RPClex, RPCDollar[3].String)
		}
	case 135:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1167
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 136:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1171
		{
			typ, ok := lookupType(RPClex, RPCDollar[1].Ident)
			if !ok {
				RPClex.Error("cannot lookup type " + RPCDollar[1].Ident)
				return 0
			}

			switch typ = typ.Base(); typ.Kind {
			case TypeChar,
				TypeUChar,
				TypeWChar,
				TypeBoolean,
				TypeInt8,
				TypeUint8,
				TypeInt16,
				TypeUint16,
				TypeInt32,
				TypeUint32,
				TypeInt32_64,
				TypeUint32_64,
				TypeInt64,
				TypeUint64,
				TypeVoid,
				TypeString,
				// FIXME: float, double not expected but used.
				TypeFloat32,
				TypeFloat64:
				RPCVAL.Kind = typ.Kind
			default:
				RPClex.Error("invalid const type " + RPCDollar[1].Ident)
				return 0
			}
		}
	case 137:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1205
		{
			RPCVAL.Kind = TypeChar
		}
	case 138:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1209
		{
			RPCVAL.Kind = TypeUChar
		}
	case 139:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1213
		{
			RPCVAL.Kind = TypeBoolean
		}
	case 140:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1217
		{
			RPCVAL.Kind = TypeVoid
		}
	case 141:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1221
		{
			RPCVAL.Kind = TypeString
		}
	case 142:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1227
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 143:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1231
		{
			RPCVAL.Expr = NewValue(RPCDollar[1].String)
		}
	case 144:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1235
		{
			RPCVAL.Expr = NewValue(RPCDollar[1].Char)
		}
	case 145:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1239
		{
			RPCVAL.Expr = NewValue(nil)
		}
	case 146:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1243
		{
			RPCVAL.Expr = NewValue(true)
		}
	case 147:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1247
		{
			RPCVAL.Expr = NewValue(false)
		}
	case 148:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1253
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 149:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1259
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 150:
		RPCDollar = RPCS[RPCpt-5 : RPCpt+1]
//line midl/parse.y:1263
		{
			exp, ok := RPCDollar[1].Expr.Ter(RPCDollar[3].Expr, RPCDollar[5].Expr)
			if !ok {
				RPClex.Error("cannot evaluate ternary expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 151:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1274
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 152:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1278
		{
			exp, ok := RPCDollar[1].Expr.LogicalOr(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate l-or expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 153:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1289
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 154:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1293
		{
			exp, ok := RPCDollar[1].Expr.LogicalAnd(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate l-and expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 155:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1304
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 156:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1308
		{
			exp, ok := RPCDollar[1].Expr.Or(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate or expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 157:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1319
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 158:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1323
		{
			exp, ok := RPCDollar[1].Expr.Xor(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate xor expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 159:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1334
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 160:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1338
		{
			exp, ok := RPCDollar[1].Expr.And(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate and expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 161:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1349
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 162:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1353
		{
			exp, ok := RPCDollar[1].Expr.Eq(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate eq expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 163:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1362
		{
			exp, ok := RPCDollar[1].Expr.Ne(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate ne expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 164:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1373
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 165:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1377
		{
			exp, ok := RPCDollar[1].Expr.Lt(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate lt expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 166:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1386
		{
			exp, ok := RPCDollar[1].Expr.Gt(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate gt expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 167:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1395
		{
			exp, ok := RPCDollar[1].Expr.Le(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate le expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 168:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1404
		{
			exp, ok := RPCDollar[1].Expr.Ge(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate ge expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 169:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1415
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 170:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1419
		{
			exp, ok := RPCDollar[1].Expr.Lsh(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate lsh expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 171:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1428
		{
			exp, ok := RPCDollar[1].Expr.Rsh(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate rsh expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 172:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1439
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 173:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1443
		{
			exp, ok := RPCDollar[1].Expr.Sub(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate sub expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 174:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1452
		{
			exp, ok := RPCDollar[1].Expr.Add(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate add expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 175:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1463
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 176:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1467
		{
			exp, ok := RPCDollar[1].Expr.Mul(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate mul expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 177:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1476
		{
			exp, ok := RPCDollar[1].Expr.Div(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate div expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 178:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1485
		{
			exp, ok := RPCDollar[1].Expr.Rem(RPCDollar[3].Expr)
			if !ok {
				RPClex.Error("cannot evaluate rem expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 179:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1496
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 180:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1500
		{
			exp, ok := RPCDollar[2].Expr.Positive()
			if !ok {
				RPClex.Error("cannot evaluate u'+' expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 181:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1509
		{
			exp, ok := RPCDollar[2].Expr.Negative()
			if !ok {
				RPClex.Error("cannot evaluate u'-' expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 182:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1518
		{
			exp, ok := RPCDollar[2].Expr.Neg()
			if !ok {
				RPClex.Error("cannot evaluate u'~' expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 183:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1527
		{
			exp, ok := RPCDollar[2].Expr.Not()
			if !ok {
				RPClex.Error("cannot evaluate u'!' expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 184:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1538
		{
			RPCVAL.Expr = NewValue(RPCDollar[1].Int)
		}
	case 185:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:1542
		{
			sz := TypeSize(RPClex.(TypeStore), RPCDollar[3].Type)
			if sz == 0 {
				RPClex.Error(fmt.Sprintf("cannot determine size of type: %s (%s)", RPCDollar[3].Type.Name, RPCDollar[3].Type.Kind))
				return 0
			}
			RPCVAL.Expr = NewValue(big.NewInt(int64(sz)))
		}
	case 186:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1551
		{
			if c, ok := lookupConst(RPClex, RPCDollar[1].Ident); !ok {
				RPCVAL.Expr = NewIdent(RPCDollar[1].Ident)
			} else {
				RPCVAL.Expr = c.Value
			}
		}
	case 187:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1559
		{
			exp, ok := NewIdent(RPCDollar[2].Ident).Ptr()
			if !ok {
				RPClex.Error("cannot evaluate ptr expression")
				return 0
			}
			RPCVAL.Expr = exp
		}
	case 188:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1568
		{
			RPCVAL.Expr = RPCDollar[2].Expr
		}
	case 189:
		RPCDollar = RPCS[RPCpt-5 : RPCpt+1]
//line midl/parse.y:1574
		{
			attrs := RPCDollar[1].Attr.Merge(RPCDollar[3].Attr).Type()
			if attrs.Usage.ContextHandle {
				ref := &Type{Kind: TypeRef, Name: "ndr_context_handle"}
				typ, ok := lookupType(RPClex, ref.Name)
				if !ok {
					// XXX: defer type resolution.
					RPClex.Error("ndr_context_handle not found")
					break
				}
				RPCDollar[4].Type = typ
			}

			RPCVAL.Typedef = &pTypedef{Type: RPCDollar[4].Type, Attrs: attrs, Declarators: RPCDollar[5].Declarators}
		}
	case 190:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1592
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 191:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1596
		{
			RPCVAL.Type = RPCDollar[2].Type
		}
	case 192:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1600
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 193:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1604
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 194:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1610
		{
			RPCVAL.Type = &Type{Kind: RPCDollar[1].Kind}
		}
	case 195:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1614
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 196:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1618
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 197:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1624
		{
			ref := &Type{Kind: TypeRef, Name: RPCDollar[1].Ident}
			typ, ok := lookupType(RPClex, ref.Name)
			if !ok {
				// XXX: defer type resolution.
				RPCVAL.Type = pushRef(RPClex, ref)
			} else {
				RPCVAL.Type = typ
			}
		}
	case 198:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1638
		{
			RPCVAL.Declarators = pDeclarators{RPCDollar[1].Declarator}
		}
	case 199:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1642
		{
			RPCVAL.Declarators = append(RPCVAL.Declarators, RPCDollar[3].Declarator)
		}
	case 200:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:1647
		{
			RPCVAL.Declarators = pDeclarators{&pDeclarator{Name: ""}}
		}
	case 201:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1653
		{
			RPCVAL.Declarator = RPCDollar[2].Declarator
			for i := 0; i < int(RPCDollar[1].Int64); i++ {
				RPCVAL.Declarator = &pDeclarator{Name: RPCVAL.Declarator.Name, Type: &Type{Kind: TypePointer, Elem: RPCVAL.Declarator.Type}}
			}
		}
	case 202:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1662
		{
			RPCVAL.Declarator = &pDeclarator{Name: RPCDollar[1].String}
		}
	case 203:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1666
		{
			RPCVAL.Declarator = RPCDollar[2].Declarator
		}
	case 204:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1670
		{
			RPCVAL.Declarator = RPCDollar[1].Declarator
		}
	case 205:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1674
		{
			RPCVAL.Declarator = RPCDollar[1].Declarator
		}
	case 206:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1680
		{
			RPCVAL.String = RPCDollar[1].Ident
		}
	case 207:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1684
		{
			ident, ok := tokName(RPClex, RPCrcvr.char)
			if !ok {
				return 0
			}
			RPCVAL.String = ident
		}
	case 208:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1694
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 209:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1698
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 210:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1703
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 211:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1717
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 212:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1721
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 213:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1725
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 214:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1729
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 215:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1733
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 216:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1737
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 217:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1741
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 218:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1746
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 219:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1753
		{
			RPCVAL.Kind = TypeFloat32
		}
	case 220:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1757
		{
			RPCVAL.Kind = TypeFloat64
		}
	case 221:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1763
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 222:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1767
		{
			switch RPCDollar[2].Token {
			case UNSIGNED:
				RPCVAL.Kind = TypeUint64
			default:
				RPCVAL.Kind = TypeInt64
			}
		}
	case 223:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1776
		{
			RPCVAL.Kind = TypeUint64
		}
	case 224:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1782
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 225:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1786
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 226:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1790
		{
			RPCVAL.Kind = RPCDollar[1].Kind
		}
	case 227:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1796
		{
			switch RPCDollar[2].Token {
			case LONG:
				RPCVAL.Kind = TypeInt32
			case SHORT:
				RPCVAL.Kind = TypeInt16
			case SMALL:
				RPCVAL.Kind = TypeInt8
			}
		}
	case 228:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1807
		{
			switch RPCDollar[1].Token {
			case LONG:
				RPCVAL.Kind = TypeInt32
			case SHORT:
				RPCVAL.Kind = TypeInt16
			case SMALL:
				RPCVAL.Kind = TypeInt8
			}
		}
	case 229:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1820
		{
			switch RPCDollar[1].Token {
			case LONG:
				RPCVAL.Kind = TypeUint32
			case SHORT:
				RPCVAL.Kind = TypeUint16
			case SMALL:
				RPCVAL.Kind = TypeUint8
			}
		}
	case 230:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:1831
		{
			switch RPCDollar[2].Token {
			case LONG:
				RPCVAL.Kind = TypeUint32
			case SHORT:
				RPCVAL.Kind = TypeUint16
			case SMALL:
				RPCVAL.Kind = TypeUint8
			}
		}
	case 231:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1845
		{
			switch RPCDollar[1].Token {
			case UNSIGNED:
				RPCVAL.Kind = TypeUint32
			default:
				RPCVAL.Kind = TypeInt32
			}
		}
	case 232:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1854
		{
			switch RPCDollar[1].Token {
			case UNSIGNED:
				RPCVAL.Kind = TypeUint8
			default:
				RPCVAL.Kind = TypeInt8
			}
		}
	case 233:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1863
		{
			switch RPCDollar[1].Token {
			case UNSIGNED:
				RPCVAL.Kind = TypeUint16
			default:
				RPCVAL.Kind = TypeInt16
			}
		}
	case 234:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1872
		{
			switch RPCDollar[1].Token {
			case UNSIGNED:
				RPCVAL.Kind = TypeUint32
			default:
				RPCVAL.Kind = TypeInt32
			}
		}
	case 235:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1881
		{
			switch RPCDollar[1].Token {
			case UNSIGNED:
				RPCVAL.Kind = TypeUint32_64
			default:
				RPCVAL.Kind = TypeInt32_64
			}
		}
	case 236:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1890
		{
			switch RPCDollar[1].Token {
			case UNSIGNED:
				RPCVAL.Kind = TypeUint64
			default:
				RPCVAL.Kind = TypeInt64
			}
		}
	case 237:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1902
		{
			RPCVAL.Token = LONG
		}
	case 238:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1906
		{
			RPCVAL.Token = SHORT
		}
	case 239:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1910
		{
			RPCVAL.Token = SMALL
		}
	case 240:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:1916
		{
			switch RPCDollar[1].Token {
			case UNSIGNED:
				RPCVAL.Kind = TypeUChar
			default:
				RPCVAL.Kind = TypeChar
			}
		}
	case 241:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1928
		{
			RPCVAL.Kind = TypeWChar
		}
	case 242:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1935
		{
			RPCVAL.Kind = TypeBoolean
		}
	case 243:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1941
		{
			RPCVAL.Kind = TypeUint8
		}
	case 244:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1947
		{
			RPCVAL.Kind = TypeVoid
		}
	case 245:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1953
		{
			RPCVAL.Kind = TypeHandle
		}
	case 246:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:1959
		{
			RPCVAL.Token = 0
		}
	case 247:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1963
		{
			RPCVAL.Token = UNSIGNED
		}
	case 248:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:1969
		{
			RPCVAL.Token = 0
		}
	case 249:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1973
		{
			RPCVAL.Token = UNSIGNED
		}
	case 250:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1977
		{
			RPCVAL.Token = 0
		}
	case 255:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1992
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 256:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:1996
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 257:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2000
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 258:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2004
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 259:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2008
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 260:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2014
		{
			ref := &Type{Kind: TypeRef, Name: "_struct_" + RPCDollar[2].String}
			typ, ok := lookupType(RPClex, ref.Name)
			if !ok {
				// XXX: defer type resolution.
				RPCVAL.Type = pushRef(RPClex, ref)
			} else {
				RPCVAL.Type = typ
			}
		}
	case 261:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2025
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 262:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:2031
		{
			for i := range RPCDollar[3].Fields {
				RPCDollar[3].Fields[i].Position = i + 1
			}
			// XXX: set proper switch type if not specified.
			SetSwitchType(RPCDollar[3].Fields)
			RPCVAL.Type = &Type{Kind: TypeStruct, Struct: &Struct{Fields: RPCDollar[3].Fields}}
		}
	case 263:
		RPCDollar = RPCS[RPCpt-5 : RPCpt+1]
//line midl/parse.y:2042
		{
			for i := range RPCDollar[4].Fields {
				RPCDollar[4].Fields[i].Position = i + 1
			}
			// XXX: set proper switch type if not specified.
			SetSwitchType(RPCDollar[4].Fields)
			RPCVAL.Type = &Type{Kind: TypeStruct, Tag: RPCDollar[2].String, Struct: &Struct{Fields: RPCDollar[4].Fields}}
		}
	case 264:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2053
		{
			RPCVAL.String = RPCDollar[1].Ident
		}
	case 265:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2059
		{
			RPCVAL.Fields = RPCDollar[1].Fields
		}
	case 266:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2063
		{
			RPCVAL.Fields = append(RPCVAL.Fields, RPCDollar[2].Fields...)
		}
	case 267:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2069
		{
			RPCVAL.Fields = RPCDollar[1].Fields
		}
	case 268:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:2075
		{
			RPCVAL.Fields = make([]*Field, 0, len(RPCDollar[3].Declarators))
			for _, decl := range RPCDollar[3].Declarators {
				decl.Type = decl.Type.Append(RPCDollar[2].Type)
				RPCVAL.Fields = append(RPCVAL.Fields, &Field{Attrs: RPCDollar[1].Attr.Field(), Name: decl.Name, Type: decl.Type, DefaultValue: RPCDollar[4].Expr})
			}

		}
	case 269:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:2086
		{
			RPCVAL.Expr = Expr{}
		}
	case 270:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2090
		{
			RPCVAL.Expr = RPCDollar[2].Expr
		}
	case 271:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2096
		{
			RPCVAL.Type = &Type{Kind: TypeUnion, Tag: RPCDollar[2].String}
		}
	case 272:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2100
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 273:
		RPCDollar = RPCS[RPCpt-6 : RPCpt+1]
//line midl/parse.y:2106
		{
			pos := 1
			for i := range RPCDollar[5].UnionCases {
				for j := range RPCDollar[5].UnionCases[i].Arms {
					RPCDollar[5].UnionCases[i].Arms[j].Position = pos
					pos++
				}
			}
			RPCVAL.Type = &Type{Kind: TypeUnion, Name: RPCDollar[3].String, Union: &Union{Switch: RPCDollar[2].UnionSwitch, Body: RPCDollar[5].UnionCases}}
		}
	case 274:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:2117
		{
			pos := 1
			for i := range RPCDollar[3].UnionCases {
				for j := range RPCDollar[3].UnionCases[i].Arms {
					RPCDollar[3].UnionCases[i].Arms[j].Position = pos
					pos++
				}
			}
			RPCVAL.Type = &Type{Kind: TypeUnion, Union: &Union{Body: RPCDollar[3].UnionCases}}
		}
	case 275:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:2128
		{
			pos := 1
			for i := range RPCDollar[3].UnionCases {
				for j := range RPCDollar[3].UnionCases[i].Arms {
					RPCDollar[3].UnionCases[i].Arms[j].Position = pos
					pos++
				}
			}
			RPCVAL.Type = &Type{Kind: TypeCUnion, Union: &Union{Body: RPCDollar[3].UnionCases}}
		}
	case 276:
		RPCDollar = RPCS[RPCpt-5 : RPCpt+1]
//line midl/parse.y:2141
		{
			RPCVAL.UnionSwitch = &UnionSwitch{Type: RPCDollar[3].Type, Name: RPCDollar[4].Ident}
		}
	case 277:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2147
		{
			RPCVAL.Type = &Type{Kind: RPCDollar[1].Kind}
		}
	case 278:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2151
		{
			RPCVAL.Type = &Type{Kind: RPCDollar[1].Kind}
		}
	case 279:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2155
		{
			RPCVAL.Type = &Type{Kind: RPCDollar[1].Kind}
		}
	case 280:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2159
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 281:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2164
		{
			ref := &Type{Kind: TypeRef, Name: "_enum_" + RPCDollar[2].String}
			typ, ok := lookupType(RPClex, ref.Name)
			if !ok {
				// XXX: defer type resolution.
				RPCVAL.Type = pushRef(RPClex, ref)
			} else {
				RPCVAL.Type = typ
			}
		}
	case 282:
		RPCDollar = RPCS[RPCpt-7 : RPCpt+1]
//line midl/parse.y:2177
		{
			pos := 1
			for i := range RPCDollar[6].UnionCases {
				for j := range RPCDollar[6].UnionCases[i].Arms {
					RPCDollar[6].UnionCases[i].Arms[j].Position = pos
					pos++
				}
			}
			RPCVAL.Type = &Type{Kind: TypeUnion, Tag: RPCDollar[2].String, Union: &Union{Switch: RPCDollar[3].UnionSwitch, Body: RPCDollar[6].UnionCases}}
		}
	case 283:
		RPCDollar = RPCS[RPCpt-5 : RPCpt+1]
//line midl/parse.y:2188
		{
			pos := 1
			for i := range RPCDollar[4].UnionCases {
				for j := range RPCDollar[4].UnionCases[i].Arms {
					RPCDollar[4].UnionCases[i].Arms[j].Position = pos
					pos++
				}
			}
			RPCVAL.Type = &Type{Kind: TypeUnion, Tag: RPCDollar[2].String, Union: &Union{Body: RPCDollar[4].UnionCases}}
		}
	case 284:
		RPCDollar = RPCS[RPCpt-5 : RPCpt+1]
//line midl/parse.y:2199
		{
			pos := 1
			for i := range RPCDollar[4].UnionCases {
				for j := range RPCDollar[4].UnionCases[i].Arms {
					RPCDollar[4].UnionCases[i].Arms[j].Position = pos
					pos++
				}
			}
			RPCVAL.Type = &Type{Kind: TypeCUnion, Tag: RPCDollar[2].String, Union: &Union{Body: RPCDollar[4].UnionCases}}
		}
	case 285:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:2212
		{
			// In encapsulated unions, if the <union_name> is
			// omitted, the union is assigned the name tagged_union
			// in the generated header source.
			RPCVAL.String = "tagged_union"
		}
	case 286:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2219
		{
			RPCVAL.String = RPCDollar[1].Ident
		}
	case 287:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2225
		{
			RPCVAL.UnionCases = []*UnionCase{RPCDollar[1].UnionCase}
		}
	case 288:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2229
		{
			RPCVAL.UnionCases = append(RPCVAL.UnionCases, RPCDollar[2].UnionCase)
		}
	case 289:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2235
		{
			RPCVAL.UnionCases = []*UnionCase{&UnionCase{Arms: RPCDollar[1].Fields}}
		}
	case 290:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2239
		{
			RPCVAL.UnionCases = append(RPCVAL.UnionCases, &UnionCase{Arms: RPCDollar[2].Fields})
		}
	case 291:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2245
		{
			RPCVAL.UnionCases = []*UnionCase{RPCDollar[1].UnionCase}
		}
	case 292:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2249
		{
			RPCVAL.UnionCases = append(RPCVAL.UnionCases, RPCDollar[2].UnionCase)
		}
	case 293:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2255
		{
			labels := make([]interface{}, 0, len(RPCDollar[1].Exprs))
			for _, label := range RPCDollar[1].Exprs {
				labels = append(labels, label)
			}
			RPCVAL.UnionCase = &UnionCase{Labels: labels, Arms: RPCDollar[2].Fields}
		}
	case 294:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2263
		{
			RPCVAL.UnionCase = &UnionCase{Arms: RPCDollar[1].Fields, IsDefault: true}
		}
	case 295:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2269
		{
			RPCVAL.Exprs = RPCDollar[1].Exprs
		}
	case 296:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2273
		{
			RPCVAL.Exprs = append(RPCVAL.Exprs, RPCDollar[2].Exprs...)
		}
	case 297:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2279
		{
			labels := make([]interface{}, 0, len(RPCDollar[1].Exprs))
			for _, label := range RPCDollar[1].Exprs {
				labels = append(labels, label)
			}
			RPCVAL.UnionCase = &UnionCase{Labels: labels, Arms: RPCDollar[2].Fields}
		}
	case 298:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2287
		{
			RPCVAL.UnionCase = &UnionCase{Labels: nil, Arms: RPCDollar[1].Fields, IsDefault: true}
		}
	case 299:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:2293
		{
			RPCVAL.Exprs = Exprs{RPCDollar[2].Expr}
		}
	case 300:
		RPCDollar = RPCS[RPCpt-6 : RPCpt+1]
//line midl/parse.y:2299
		{
			RPCVAL.Exprs = RPCDollar[4].Exprs
		}
	case 301:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2305
		{
			RPCVAL.Exprs = Exprs{RPCDollar[1].Expr}
		}
	case 302:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:2309
		{
			RPCVAL.Exprs = append(RPCVAL.Exprs, RPCDollar[3].Expr)
		}
	case 303:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:2316
		{
			RPCVAL.Fields = RPCDollar[3].Fields
		}
	case 304:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:2322
		{
			RPCVAL.Fields = RPCDollar[4].Fields
		}
	case 305:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2328
		{
			RPCVAL.Fields = nil
		}
	case 306:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2332
		{
			for i := range RPCDollar[1].Fields {
				RPCDollar[1].Fields[i].Position = i + 1
			}
			RPCVAL.Fields = RPCDollar[1].Fields
		}
	case 307:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:2341
		{
			RPCVAL.Type = RPCDollar[3].Type
		}
	case 308:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:2347
		{
			RPCVAL.AttrType = pAttrType{SWITCH_IS, pAttr{SwitchIs: RPCDollar[3].Expr}}
		}
	case 309:
		RPCDollar = RPCS[RPCpt-5 : RPCpt+1]
//line midl/parse.y:2353
		{
			RPCVAL.Type = &Type{Kind: TypeEnum, Enum: &Enum{Elems: make([]*Element, 0, len(RPCDollar[3].TagIDs))}}
			for idx, i := 0, 0; i < len(RPCDollar[3].TagIDs); i, idx = i+1, idx+1 {
				tag, exp := RPCDollar[3].TagIDs[i].Tag, RPCDollar[3].TagIDs[i].ID
				if !exp.Empty() {
					val, ok := exp.Eval(RPClex.(ExprStore))
					if !ok {
						RPClex.Error("cannot evaluate tag-id expression")
						return 0
					}
					bi, ok := val.BigInt()
					if !ok {
						RPClex.Error("enum: not an integer type")
						return 0
					}
					idx, exp = int(bi.Uint64()), val
				} else {
					exp = NewValue(big.NewInt(int64(idx)))
				}
				if uint32(uint16(idx)) != uint32(idx) {
					RPCVAL.Type.Enum.Is32 = true
				}
				RPCVAL.Type.Enum.Elems = append(RPCVAL.Type.Enum.Elems, &Element{tag, idx})
				storeConst(RPClex, tag, exp)
			}
		}
	case 310:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2383
		{
			RPCVAL.Type = &Type{Kind: TypeEnum, Tag: RPCDollar[2].String}
		}
	case 311:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2387
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 312:
		RPCDollar = RPCS[RPCpt-6 : RPCpt+1]
//line midl/parse.y:2393
		{
			RPCVAL.Type = &Type{Kind: TypeEnum, Tag: RPCDollar[2].String, Enum: &Enum{Elems: make([]*Element, 0, len(RPCDollar[4].TagIDs))}}
			for idx, i := 0, 0; i < len(RPCDollar[4].TagIDs); i, idx = i+1, idx+1 {
				tag, exp := RPCDollar[4].TagIDs[i].Tag, RPCDollar[4].TagIDs[i].ID
				if !exp.Empty() {
					val, ok := exp.Eval(RPClex.(ExprStore))
					if !ok {
						RPClex.Error("cannot evaluate tag-id expression")
						return 0
					}
					bi, ok := val.BigInt()
					if !ok {
						RPClex.Error("enum: not an integer type")
						return 0
					}
					idx, exp = int(bi.Uint64()), val
				} else {
					exp = NewValue(big.NewInt(int64(idx)))
				}
				if uint32(uint16(idx)) != uint32(idx) {
					RPCVAL.Type.Enum.Is32 = true
				}
				RPCVAL.Type.Enum.Elems = append(RPCVAL.Type.Enum.Elems, &Element{tag, idx})
				storeConst(RPClex, tag, exp)
			}
		}
	case 313:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2423
		{
			RPCVAL.TagIDs = pTagIDs{RPCDollar[1].TagID}
		}
	case 314:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:2427
		{
			RPCVAL.TagIDs = append(RPCVAL.TagIDs, RPCDollar[3].TagID)
		}
	case 317:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2437
		{
			RPCVAL.TagID = pTagID{Tag: RPCDollar[1].Ident}
		}
	case 318:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:2442
		{
			RPCVAL.TagID = pTagID{Tag: RPCDollar[1].Ident, ID: RPCDollar[3].Expr}
		}
	case 319:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2449
		{
			RPCVAL.Type = &Type{Kind: TypePipe, Elem: RPCDollar[2].Type}
		}
	case 320:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:2455
		{

			// XXX: array associativity is different from pointer.
			// so we need to find last array in the chain and insert
			// new array right after it (as it's element).

			array := &Type{Kind: TypeArray, Array: &Array{Bound: RPCDollar[3].ArrayBound}, Elem: RPCDollar[1].Declarator.Type}
			if RPCDollar[1].Declarator.Type == nil || RPCDollar[1].Declarator.Type.Kind != TypeArray {
				RPCVAL.Declarator = &pDeclarator{Name: RPCDollar[1].Declarator.Name, Type: array}
				break
			}

			last := RPCDollar[1].Declarator.Type
			// shift to the last array in the element chain.
			for last.Elem != nil && last.Elem.Kind == TypeArray {
				last = last.Elem
			}

			// insert array after last array and acuqire
			// the last array's element.
			array.Elem, last.Elem = last.Elem, array
			RPCVAL.Declarator = &pDeclarator{Name: RPCDollar[1].Declarator.Name, Type: RPCDollar[1].Declarator.Type}
		}
	case 321:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:2481
		{
			RPCVAL.ArrayBound = ArrayBound{Lower: 0, Upper: -1}
		}
	case 322:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2485
		{
			if RPCDollar[1].Int.Int64() == -1 {
				RPCVAL.ArrayBound = ArrayBound{Lower: -1, Upper: 0}
			} else {
				RPCVAL.ArrayBound = ArrayBound{Lower: 0, Upper: RPCDollar[1].Int.Int64() - 1}
			}

		}
	case 323:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2494
		{
			RPCVAL.ArrayBound = RPCDollar[1].ArrayBound
		}
	case 324:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:2500
		{
			RPCVAL.ArrayBound = ArrayBound{Lower: RPCDollar[1].Int.Int64(), Upper: RPCDollar[3].Int.Int64()}
		}
	case 325:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2506
		{
			RPCVAL.Int = big.NewInt(-1)
		}
	case 326:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2510
		{
			if !RPCDollar[1].Expr.CanEval() {
				RPClex.Error("cannot evaluate integer bound")
				return 0
			}
			val, ok := RPCDollar[1].Expr.BigInt()
			if !ok {
				RPClex.Error("cannot use non-integer as a bound declarator")
				return 0
			}
			RPCVAL.Int = val
		}
	case 327:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2525
		{
			RPCVAL.Token = USAGE_STRING
		}
	case 328:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2529
		{
			RPCVAL.Token = USAGE_CONTEXT_HANDLE
		}
	case 329:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2535
		{
			RPCVAL.Token = FORMAT_UTF8
		}
	case 330:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2539
		{
			RPCVAL.Token = FORMAT_NULL_TERMINATED
		}
	case 331:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2543
		{
			RPCVAL.Token = FORMAT_MULTI_SIZE
		}
	case 332:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2547
		{
			RPCVAL.Token = FORMAT_RUNE
		}
	case 333:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2551
		{
			RPCVAL.Token = FORMAT_HEX
		}
	case 334:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2557
		{
			RPCVAL.Type = RPCDollar[1].Type
		}
	case 335:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2563
		{
			RPCVAL.AttrType = pAttrType{RANGE, pAttr{Range: RPCDollar[2].Range}}
		}
	case 336:
		RPCDollar = RPCS[RPCpt-5 : RPCpt+1]
//line midl/parse.y:2569
		{
			if !CanEval(RPCDollar[2].Expr, RPCDollar[4].Expr) {
				RPClex.Error("cannot evaluate range declaration")
				return 0
			}
			min, ok := RPCDollar[2].Expr.BigInt()
			if !ok {
				RPClex.Error("invalid min value for range declarator")
				return 0
			}
			max, ok := RPCDollar[4].Expr.BigInt()
			if !ok {
				RPClex.Error("invalid max value for range declarator")
				return 0
			}
			RPCVAL.Range = &Range{Min: min.Int64(), Max: max.Int64()}
		}
	case 337:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2590
		{
			RPCVAL.Exprs = []Expr{RPCDollar[1].Expr}
		}
	case 338:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:2594
		{
			// see https://learn.microsoft.com/en-us/windows/win32/rpc/multiple-levels-of-pointers
			// for (,Size) constructions.
			RPCVAL.Exprs = append(RPCVAL.Exprs, RPCDollar[3].Expr)
		}
	case 339:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:2602
		{
			RPCVAL.Expr = Expr{}
		}
	case 340:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2606
		{
			RPCVAL.Expr = RPCDollar[1].Expr
		}
	case 341:
		RPCDollar = RPCS[RPCpt-0 : RPCpt+1]
//line midl/parse.y:2612
		{
			RPCVAL.Int64 = 0
		}
	case 342:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2616
		{
			RPCVAL.Int64 = RPCDollar[1].Int64
		}
	case 343:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2622
		{
			RPCVAL.Int64++
		}
	case 344:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2626
		{
			RPCVAL.Int64++
		}
	case 345:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2636
		{
			RPCVAL.Token = POINTER_REF
		}
	case 346:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2640
		{
			RPCVAL.Token = POINTER_UNIQUE
		}
	case 347:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2644
		{
			RPCVAL.Token = POINTER_PTR
		}
	case 348:
		RPCDollar = RPCS[RPCpt-6 : RPCpt+1]
//line midl/parse.y:2650
		{
			for i := range RPCDollar[5].Params {
				if RPCDollar[5].Params[i].Name == "" {
					RPCDollar[5].Params[i].Name = fmt.Sprintf("Param%d", i)
				}
				if RPCDollar[5].Params[i].Type.Is(TypePointer) && RPCDollar[5].Params[i].Attrs.Pointer == PointerTypeNone {
					RPCDollar[5].Params[i].Attrs.Pointer = PointerTypeRefWeak
				}
			}
			RPCVAL.Operation = &Operation{Attrs: RPCDollar[1].Attr.Operation(), Type: RPCDollar[2].Type, Name: RPCDollar[3].Ident, Params: RPCDollar[5].Params}
		}
	case 349:
		RPCDollar = RPCS[RPCpt-6 : RPCpt+1]
//line midl/parse.y:2662
		{
			RPCVAL.Operation = &Operation{Attrs: RPCDollar[1].Attr.Operation(), Type: RPCDollar[2].Type, Name: RPCDollar[3].Ident}
		}
	case 350:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:2668
		{
			RPCVAL.Params = append(RPCVAL.Params, RPCDollar[3].Param)
		}
	case 351:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2672
		{
			RPCVAL.Params = []*Param{RPCDollar[1].Param}
		}
	case 352:
		RPCDollar = RPCS[RPCpt-3 : RPCpt+1]
//line midl/parse.y:2678
		{
			RPCDollar[3].Declarator.Type = RPCDollar[3].Declarator.Type.Append(RPCDollar[2].Type)
			RPCVAL.Param = &Param{Attrs: RPCDollar[1].Attr.Param(), Name: RPCDollar[3].Declarator.Name, Type: RPCDollar[3].Declarator.Type}
			if RPCVAL.Param.Attrs.Usage.ContextHandle && !RPCDollar[3].Declarator.Type.Base().Is(TypeStruct) {
				ref := &Type{Kind: TypeRef, Name: "ndr_context_handle"}
				if typ, ok := lookupType(RPClex, ref.Name); !ok {
					// XXX: defer type resolution.
					RPCVAL.Param.Type = RPCVAL.Param.Type.AppendAfterPointer(pushRef(RPClex, ref))
				} else {
					RPCVAL.Param.Type = RPCVAL.Param.Type.AppendAfterPointer(typ)
				}
			}
		}
	case 353:
		RPCDollar = RPCS[RPCpt-2 : RPCpt+1]
//line midl/parse.y:2692
		{
			RPCDollar[2].Declarator.Type = RPCDollar[2].Declarator.Type.Append(RPCDollar[1].Type)
			attrs := pAttr{Direction: Direction{In: true}}
			RPCVAL.Param = &Param{Attrs: attrs.Param(), Name: RPCDollar[2].Declarator.Name, Type: RPCDollar[2].Declarator.Type}
		}
	case 354:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2700
		{
			RPCVAL.AttrType = pAttrType{IN, pAttr{}}
		}
	case 355:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2704
		{
			RPCVAL.AttrType = pAttrType{OUT, pAttr{}}
		}
	case 356:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:2710
		{
			for i := range RPCDollar[3].Params {
				if RPCDollar[3].Params[i].Name == "" {
					RPCDollar[3].Params[i].Name = fmt.Sprintf("Param%d", i)
				}
			}
			RPCVAL.Declarator = &pDeclarator{Name: RPCDollar[1].Declarator.Name, Type: &Type{Kind: TypeFunc, Func: &Func{Params: RPCDollar[3].Params}, Elem: RPCDollar[1].Declarator.Type}}
		}
	case 357:
		RPCDollar = RPCS[RPCpt-4 : RPCpt+1]
//line midl/parse.y:2719
		{
			RPCVAL.Declarator = &pDeclarator{Name: RPCDollar[1].Declarator.Name, Type: &Type{Kind: TypeFunc, Func: &Func{}, Elem: RPCDollar[1].Declarator.Type}}
		}
	case 358:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2730
		{
			RPCVAL.Type = &Type{Kind: TypeError}
		}
	case 359:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2734
		{
			RPCVAL.Type = &Type{Kind: TypeCharset}

			switch RPCDollar[1].Token {
			case ISO_LATIN_1:
				RPCVAL.Type.Charset = CharsetISO_Latin_1
			case ISO_MULTILINGUAL:
				RPCVAL.Type.Charset = CharsetISO_Multilingual
			case ISO_UCS:
				RPCVAL.Type.Charset = CharsetISO_UCS
			}
		}
	case 360:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2749
		{
			RPCVAL.Token = ISO_LATIN_1
		}
	case 361:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2753
		{
			RPCVAL.Token = ISO_MULTILINGUAL
		}
	case 362:
		RPCDollar = RPCS[RPCpt-1 : RPCpt+1]
//line midl/parse.y:2757
		{
			RPCVAL.Token = ISO_UCS
		}
	}
	goto RPCstack /* stack new state and value */
}
