4
* © Copyright IBM Corp. 2007
6
* THIS FILE IS PROVIDED UNDER THE TERMS OF THE ECLIPSE PUBLIC LICENSE
7
* ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE
8
* CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT.
10
* You can obtain a current copy of the Eclipse Public License from
11
* http://www.opensource.org/licenses/eclipse-1.0.php
13
* Author: Sven Schuetz <sven@de.ibm.com>
17
* CIM XML parser for sfcc to be used in connection with lexer cimXmlParser.c
22
#include "cimXmlParser.h"
23
#include "sfcUtil/utilft.h"
24
#include "parserUtil.h"
28
static int dontLex = 0;
31
static void parseError(char* tokExp, int tokFound, ParserControl *parm)
33
printf("Parse error. Expected token(s) %s, found tag number %d (see cimXmlParser.h) and following xml: %.255s...\nAborting.\n", tokExp, tokFound, parm->xmb->cur+1);
38
static int localLex(parseUnion *lvalp, ParserControl *parm)
41
ct = sfccLex(lvalp, parm);
51
void startParsing(ParserControl *parm)
53
parseUnion stateUnion;
54
start(parm, &stateUnion);
57
static void start(ParserControl *parm, parseUnion *stateUnion)
60
ct = localLex(stateUnion, parm);
62
ct = localLex(stateUnion, parm);
64
cim(parm, stateUnion);
67
parseError("ZTOK_XML", ct, parm);
71
parseError("XTOK_XML", ct, parm);
75
static void cim(ParserControl *parm, parseUnion *stateUnion)
78
ct = localLex(stateUnion, parm);
80
message(parm, (parseUnion*)&stateUnion->xtokMessage);
81
ct = localLex(stateUnion, parm);
85
parseError("ZTOK_CIM", ct, parm);
89
parseError("XTOK_CIM", ct, parm);
93
static void message(ParserControl *parm, parseUnion *stateUnion)
96
ct = localLex((parseUnion*)&stateUnion->xtokMessage, parm);
97
if(ct == XTOK_MESSAGE) {
98
messageContent(parm, stateUnion);
99
ct = localLex((parseUnion*)&stateUnion->xtokMessage, parm);
100
if(ct == ZTOK_MESSAGE) {
103
parseError("ZTOK_MESSAGE", ct, parm);
107
parseError("XTOK_MESSAGE", ct, parm);
111
static void messageContent(ParserControl *parm, parseUnion *stateUnion)
114
ct = localLex(stateUnion, parm);
115
if(ct == XTOK_SIMPLERSP) {
116
simpleRspContent(parm, (parseUnion*)&stateUnion->xtokSimpleRespContent);
117
ct = localLex(stateUnion, parm);
118
if(ct == ZTOK_SIMPLERSP) {
121
parseError("ZTOK_SIMPLERSP", ct, parm);
124
else if(ct == XTOK_SIMPLEEXPREQ) {
125
exportIndication(parm, stateUnion);
126
ct = localLex(stateUnion, parm);
127
if(ct == ZTOK_SIMPLEEXPREQ) {
130
parseError("ZTOK_SIMPLEEXPREQ", ct, parm);
134
parseError("XTOK_SIMPLERSP", ct, parm);
138
static void simpleRspContent(ParserControl *parm, parseUnion *stateUnion)
141
ct = localLex((parseUnion*)&stateUnion->xtokSimpleRespContent, parm);
142
if(ct == XTOK_METHODRESP) {
143
methodRespContent(parm, (parseUnion*)&stateUnion->xtokSimpleRespContent.resp);
144
setReturnArgs(parm, &stateUnion->xtokSimpleRespContent.resp.values);
145
ct = localLex((parseUnion*)&stateUnion->xtokSimpleRespContent, parm);
146
if(ct == ZTOK_METHODRESP) {
149
parseError("ZTOK_METHODRESP", ct, parm);
152
else if(ct == XTOK_IMETHODRESP) {
153
iMethodRespContent(parm, stateUnion);
154
ct = localLex((parseUnion*)&stateUnion->xtokSimpleRespContent, parm);
155
if(ct == ZTOK_IMETHODRESP) {
158
parseError("ZTOK_IMETHODRESP", ct, parm);
162
parseError("XTOK_METHODRESP", ct, parm);
166
static void exportIndication(ParserControl *parm, parseUnion *stateUnion)
169
ct = localLex(stateUnion, parm);
170
if(ct == XTOK_EXPORTINDICATION) {
171
exParamValue(parm, stateUnion);
172
ct = localLex(stateUnion, parm);
173
if(ct == ZTOK_EXPMETHODCALL) {
176
parseError("ZTOK_EXPMETHODCALL", ct, parm);
180
parseError("XTOK_EXPORTINDICATION", ct, parm);
184
static void exParamValue(ParserControl *parm, parseUnion *stateUnion)
188
ct = localLex(stateUnion, parm);
189
if(ct == XTOK_EP_INSTANCE) {
190
ct = localLex(&lvalp, parm);
192
if(ct == XTOK_INSTANCE) {
194
instance(parm, (parseUnion*)&lvalp.xtokInstance);
195
inst = native_new_CMPIInstance(NULL,NULL);
196
setInstNsAndCn(inst,parm->da_nameSpace,lvalp.xtokInstance.className);
197
setInstProperties(inst, &lvalp.xtokInstance.properties);
198
simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&inst,CMPI_instance);
200
ct = localLex(stateUnion, parm);
201
if(ct == ZTOK_EXPPARAMVALUE) {
204
parseError("ZTOK_EXPPARAMVALUE or XTOK_INSTANCE", ct, parm);
208
parseError("XTOK_EP_INSTANCE", ct, parm);
212
static void methodRespContent(ParserControl *parm, parseUnion *stateUnion)
215
ct = localLex(&lvalp, parm);
216
if(ct == XTOK_ERROR) {
218
error(parm, (parseUnion*)&lvalp.xtokErrorResp);
220
else if(ct == XTOK_RETVALUE || ct == XTOK_PARAMVALUE) {
222
if(ct == XTOK_RETVALUE) {
224
returnValue(parm, (parseUnion*)&lvalp.xtokReturnValue);
226
ct = localLex(&lvalp, parm);
228
if(ct == XTOK_PARAMVALUE) {
231
paramValue(parm, (parseUnion*)&lvalp.xtokParamValue);
232
addParamValue(parm, &stateUnion->xtokMethodRespContent.values, &lvalp.xtokParamValue);
233
ct = localLex(&lvalp, parm);
235
while(ct == XTOK_PARAMVALUE);
239
else if(ct == ZTOK_METHODRESP) {
243
parseError("XTOK_ERROR or XTOK_RETVALUE or XTOK_PARAMVALUE or ZTOK_METHODRESP", ct, parm);
247
static void iMethodRespContent(ParserControl *parm, parseUnion *stateUnion)
250
ct = localLex(&lvalp, parm);
251
if(ct == XTOK_ERROR) {
253
error(parm, (parseUnion*)&lvalp.xtokErrorResp);
255
else if(ct == XTOK_IRETVALUE) {
257
iReturnValue(parm, stateUnion);
260
parseError("XTOK_ERROR or XTOK_IRETVALUE", ct, parm);
264
static void error(ParserControl *parm, parseUnion *stateUnion)
267
ct = localLex((parseUnion*)&stateUnion->xtokErrorResp, parm);
268
if(ct == XTOK_ERROR) {
269
setError(parm, &stateUnion->xtokErrorResp);
270
ct = localLex((parseUnion*)&stateUnion->xtokErrorResp, parm);
271
if(ct == ZTOK_ERROR) {
274
parseError("ZTOK_ERROR", ct, parm);
278
parseError("XTOK_ERROR", ct, parm);
282
static void returnValue(ParserControl *parm, parseUnion *stateUnion)
288
ct = localLex((parseUnion*)&stateUnion->xtokReturnValue, parm);
289
if(ct == XTOK_RETVALUE) {
290
returnValueData(parm, (parseUnion*)&stateUnion->xtokReturnValue.data);
291
if(stateUnion->xtokReturnValue.data.type == CMPI_ref) {
293
val = str2CMPIValue(t, NULL, &stateUnion->xtokReturnValue.data.ref);
295
else if(stateUnion->xtokReturnValue.data.value.type == typeValue_Instance) {
297
inst = native_new_CMPIInstance(NULL,NULL);
298
setInstNsAndCn(inst,parm->da_nameSpace,stateUnion->xtokReturnValue.data.value.data.inst->className);
299
setInstProperties(inst, &stateUnion->xtokReturnValue.data.value.data.inst->properties);
303
t = stateUnion->xtokReturnValue.type;
304
if (t == CMPI_null) {
305
t = guessType(stateUnion->xtokReturnValue.data.value.data.value);
307
val = str2CMPIValue(t, stateUnion->xtokReturnValue.data.value.data.value, NULL);
309
simpleArrayAdd(parm->respHdr.rvArray, (CMPIValue*)&val, t);
310
ct = localLex((parseUnion*)&stateUnion->xtokReturnValue, parm);
311
if(ct == ZTOK_RETVALUE) {
314
parseError("ZTOK_RETVALUE", ct, parm);
318
parseError("XTOK_RETVALUE", ct, parm);
322
static void returnValueData(ParserControl *parm, parseUnion *stateUnion)
325
ct = localLex((parseUnion*)&stateUnion->xtokReturnValueData, parm);
326
if(ct == XTOK_VALUE) {
328
value(parm, (parseUnion*)&stateUnion->xtokReturnValueData.value);
330
else if(ct == XTOK_VALUEREFERENCE) {
332
valueReference(parm, (parseUnion*)&stateUnion->xtokReturnValueData.ref);
333
stateUnion->xtokReturnValueData.type = CMPI_ref;
336
parseError("XTOK_VALUE or XTOK_VALUEREFERENCE", ct, parm);
340
static void paramValue(ParserControl *parm, parseUnion *stateUnion)
343
ct = localLex((parseUnion*)&stateUnion->xtokParamValue, parm);
344
if(ct == XTOK_PARAMVALUE) {
345
ct = localLex(&lvalp, parm);
347
if(ct == XTOK_VALUE || ct == XTOK_VALUEREFERENCE || ct == XTOK_VALUEARRAY || ct == XTOK_VALUEREFARRAY) {
349
paramValueData(parm, (parseUnion*)&lvalp.xtokParamValueData);
350
stateUnion->xtokParamValue.data = lvalp.xtokParamValueData;
351
if(lvalp.xtokParamValueData.type == CMPI_instance) {
352
stateUnion->xtokParamValue.type = CMPI_instance;
355
stateUnion->xtokParamValue.type |= lvalp.xtokParamValueData.type;
358
ct = localLex((parseUnion*)&stateUnion->xtokParamValue, parm);
359
if(ct == ZTOK_PARAMVALUE) {
362
parseError("ZTOK_PARAMVALUE or XTOK_VALUE or XTOK_VALUEREFERENCE or XTOK_VALUEARRAY or XTOK_VALUEREFARRAY", ct, parm);
366
parseError("XTOK_PARAMVALUE", ct, parm);
370
static void paramValueData(ParserControl *parm, parseUnion *stateUnion)
373
ct = localLex((parseUnion*)&stateUnion->xtokParamValueData, parm);
374
if(ct == XTOK_VALUE) {
376
value(parm, (parseUnion*)&stateUnion->xtokParamValueData.value);
377
if(stateUnion->xtokParamValueData.value.type == typeValue_Instance) {
378
stateUnion->xtokParamValueData.type = CMPI_instance;
381
else if(ct == XTOK_VALUEREFERENCE) {
383
valueReference(parm, (parseUnion*)&stateUnion->xtokParamValueData.valueRef);
384
stateUnion->xtokParamValueData.type = CMPI_ref;
386
else if(ct == XTOK_VALUEARRAY) {
388
valueArray(parm, (parseUnion*)&stateUnion->xtokParamValueData.valueArray);
389
stateUnion->xtokParamValueData.type |= CMPI_ARRAY;
391
else if(ct == XTOK_VALUEREFARRAY) {
393
valueRefArray(parm, (parseUnion*)&stateUnion->xtokParamValueData.valueRefArray);
394
stateUnion->xtokParamValueData.type = CMPI_refA;
397
parseError("XTOK_VALUE or XTOK_VALUEREFERENCE or XTOK_VALUEARRAY or XTOK_VALUEREFARRAY", ct, parm);
401
static void iReturnValue(ParserControl *parm, parseUnion *stateUnion)
404
ct = localLex(stateUnion, parm);
405
if(ct == XTOK_IRETVALUE) {
406
iReturnValueContent(parm, stateUnion);
407
ct = localLex(stateUnion, parm);
408
if(ct == ZTOK_IRETVALUE) {
411
parseError("ZTOK_IRETVALUE", ct, parm);
415
parseError("XTOK_IRETVALUE", ct, parm);
419
static void iReturnValueContent(ParserControl *parm, parseUnion *stateUnion)
425
ct = localLex(&lvalp, parm);
427
if(ct == XTOK_CLASS) {
430
class(parm, (parseUnion*)&lvalp.xtokClass);
431
cls = native_new_CMPIConstClass(lvalp.xtokClass.className,NULL);
432
setClassProperties(cls, &lvalp.xtokClass.properties);
433
simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&cls,CMPI_class);
434
ct = localLex(&lvalp, parm);
436
while(ct == XTOK_CLASS);
439
else if(ct == XTOK_CLASSNAME) {
442
className(parm, (parseUnion*)&lvalp.xtokClassName);
443
op = newCMPIObjectPath(NULL, lvalp.xtokClassName.value, NULL);
444
simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&op,CMPI_ref);
445
ct = localLex(&lvalp, parm);
447
while(ct == XTOK_CLASSNAME);
450
else if(ct == XTOK_INSTANCE) {
453
instance(parm, (parseUnion*)&lvalp.xtokInstance);
454
inst = native_new_CMPIInstance(NULL,NULL);
455
setInstNsAndCn(inst,parm->da_nameSpace,lvalp.xtokInstance.className);
456
setInstProperties(inst, &lvalp.xtokInstance.properties);
457
simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&inst,CMPI_instance);
458
ct = localLex(&lvalp, parm);
460
while(ct == XTOK_INSTANCE);
463
else if(ct == XTOK_INSTANCENAME) {
466
instanceName(parm, (parseUnion*)&lvalp.xtokInstanceName);
467
createPath(&op, &lvalp.xtokInstanceName);
468
simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&op,CMPI_ref);
469
ct = localLex(&lvalp, parm);
471
while(ct == XTOK_INSTANCENAME);
474
else if(ct == XTOK_VALUENAMEDINSTANCE) {
477
valueNamedInstance(parm, (parseUnion*)&lvalp.xtokNamedInstance);
478
createPath(&op,&(lvalp.xtokNamedInstance.path));
479
inst = native_new_CMPIInstance(op,NULL);
480
//setInstQualifiers(inst, &lvalp.xtokNamedInstance.instance.qualifiers);
481
setInstProperties(inst, &lvalp.xtokNamedInstance.instance.properties);
482
simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&inst,CMPI_instance);
483
ct = localLex(&lvalp, parm);
485
while(ct == XTOK_VALUENAMEDINSTANCE);
488
else if(ct == XTOK_OBJECTPATH) {
491
objectPath(parm, (parseUnion*)&lvalp.xtokObjectPath);
492
createPath(&op, &lvalp.xtokObjectPath.path.instanceName);
493
CMSetNameSpace(op, lvalp.xtokObjectPath.path.path.nameSpacePath.value);
494
CMSetHostname(op, lvalp.xtokObjectPath.path.path.host.host);
495
simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&op,CMPI_ref);
496
ct = localLex(&lvalp, parm);
498
while(ct == XTOK_OBJECTPATH);
501
else if(ct == XTOK_VALUEOBJECTWITHPATH) {
504
valueObjectWithPath(parm, (parseUnion*)&lvalp.xtokObjectWithPath);
505
ct = localLex(&lvalp, parm);
507
while(ct == XTOK_VALUEOBJECTWITHPATH);
510
else if(ct == XTOK_VALUE || ct == XTOK_VALUEARRAY || ct == XTOK_VALUEREFERENCE) {
512
if(ct == XTOK_VALUE || ct == XTOK_VALUEARRAY || ct == XTOK_VALUEREFERENCE) {
514
getPropertyRetValue(parm, (parseUnion*)&lvalp.xtokGetPropRetContent);
517
else if(ct == ZTOK_IRETVALUE) {
521
parseError("XTOK_CLASS or XTOK_CLASSNAME or XTOK_INSTANCE or XTOK_INSTANCENAME or XTOK_VALUENAMEDINSTANCE or XTOK_OBJECTPATH or XTOK_VALUEOBJECTWITHPATH or XTOK_VALUE or ZTOK_IRETVALUE", ct, parm);
525
static void getPropertyRetValue(ParserControl *parm, parseUnion *stateUnion)
530
ct = localLex((parseUnion*)&stateUnion->xtokGetPropRetContent, parm);
531
if(ct == XTOK_VALUE) {
533
value(parm, (parseUnion*)&stateUnion->xtokGetPropRetContent.value);
534
t = guessType(stateUnion->xtokGetPropRetContent.value.data.value);
535
val = str2CMPIValue(t, stateUnion->xtokGetPropRetContent.value.data.value, NULL);
536
simpleArrayAdd(parm->respHdr.rvArray, (CMPIValue*)&val, t);
538
else if(ct == XTOK_VALUEARRAY) {
540
valueArray(parm, (parseUnion*)&stateUnion->xtokGetPropRetContent.arr);
542
else if(ct == XTOK_VALUEREFERENCE) {
544
valueReference(parm, (parseUnion*)&stateUnion->xtokGetPropRetContent.ref);
547
parseError("XTOK_VALUE or XTOK_VALUEARRAY or XTOK_VALUEREFERENCE", ct, parm);
551
static void valueObjectWithPath(ParserControl *parm, parseUnion *stateUnion)
554
ct = localLex((parseUnion*)&stateUnion->xtokObjectWithPath, parm);
555
if(ct == XTOK_VALUEOBJECTWITHPATH) {
556
valueObjectWithPathData(parm, (parseUnion*)&stateUnion->xtokObjectWithPath.object);
557
stateUnion->xtokObjectWithPath.type = stateUnion->xtokObjectWithPath.object.type;
558
ct = localLex((parseUnion*)&stateUnion->xtokObjectWithPath, parm);
559
if(ct == ZTOK_VALUEOBJECTWITHPATH) {
562
parseError("ZTOK_VALUEOBJECTWITHPATH", ct, parm);
566
parseError("XTOK_VALUEOBJECTWITHPATH", ct, parm);
570
static void valueObjectWithPathData(ParserControl *parm, parseUnion *stateUnion)
575
ct = localLex((parseUnion*)&stateUnion->xtokObjectWithPathData, parm);
576
if(ct == XTOK_CLASSPATH) {
578
classWithPath(parm, (parseUnion*)&stateUnion->xtokObjectWithPathData.cls);
579
stateUnion->xtokObjectWithPathData.type = 1;
581
else if(ct == XTOK_INSTANCEPATH) {
583
instanceWithPath(parm, (parseUnion*)&stateUnion->xtokObjectWithPathData.inst);
584
stateUnion->xtokObjectWithPathData.type = 0;
585
createPath(&op, &stateUnion->xtokObjectWithPathData.inst.path.instanceName);
586
CMSetNameSpace(op, stateUnion->xtokObjectWithPathData.inst.path.path.nameSpacePath.value);
587
CMSetHostname(op, stateUnion->xtokObjectWithPathData.inst.path.path.host.host);
588
inst = native_new_CMPIInstance(op,NULL);
589
setInstQualifiers(inst, &stateUnion->xtokObjectWithPathData.inst.inst.qualifiers);
590
setInstProperties(inst, &stateUnion->xtokObjectWithPathData.inst.inst.properties);
591
simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&inst,CMPI_instance);
594
parseError("XTOK_CLASSPATH or XTOK_INSTANCEPATH", ct, parm);
598
static void classWithPath(ParserControl *parm, parseUnion *stateUnion)
601
ct = localLex((parseUnion*)&stateUnion->xtokClassWithPath, parm);
602
if(ct == XTOK_CLASSPATH) {
604
classPath(parm, (parseUnion*)&stateUnion->xtokClassWithPath.path);
605
class(parm, (parseUnion*)&stateUnion->xtokClassWithPath.cls);
608
parseError("XTOK_CLASSPATH or XTOK_CLASS", ct, parm);
612
static void instanceWithPath(ParserControl *parm, parseUnion *stateUnion)
615
ct = localLex((parseUnion*)&stateUnion->xtokInstanceWithPath, parm);
616
if(ct == XTOK_INSTANCEPATH) {
618
instancePath(parm, (parseUnion*)&stateUnion->xtokInstanceWithPath.path);
619
instance(parm, (parseUnion*)&stateUnion->xtokInstanceWithPath.inst);
622
parseError("XTOK_INSTANCEPATH or XTOK_INSTANCE", ct, parm);
626
static void class(ParserControl *parm, parseUnion *stateUnion)
629
ct = localLex((parseUnion*)&stateUnion->xtokClass, parm);
630
if(ct == XTOK_CLASS) {
631
ct = localLex(&lvalp, parm);
633
if(ct == XTOK_QUALIFIER) {
636
qualifier(parm, (parseUnion*)&lvalp.xtokQualifier);
637
addQualifier(parm,&stateUnion->xtokClass.qualifiers,&lvalp.xtokQualifier);
638
ct = localLex(&lvalp, parm);
640
while(ct == XTOK_QUALIFIER);
643
ct = localLex(&lvalp, parm);
645
if(ct == XTOK_PROPERTY || ct == XTOK_PROPERTYARRAY || ct == XTOK_PROPERTYREFERENCE) {
648
genProperty(parm, (parseUnion*)&lvalp.xtokProperty);
649
addProperty(parm,&stateUnion->xtokClass.properties,&lvalp.xtokProperty);
650
ct = localLex(&lvalp, parm);
652
while(ct == XTOK_PROPERTY || ct == XTOK_PROPERTYARRAY || ct == XTOK_PROPERTYREFERENCE);
655
ct = localLex(&lvalp, parm);
657
if(ct == XTOK_METHOD) {
660
method(parm, (parseUnion*)&lvalp.xtokMethod);
661
addMethod(parm,&stateUnion->xtokClass.methods,&lvalp.xtokMethod);
662
ct = localLex(&lvalp, parm);
664
while(ct == XTOK_METHOD);
667
ct = localLex((parseUnion*)&stateUnion->xtokClass, parm);
668
if(ct == ZTOK_CLASS) {
671
parseError("ZTOK_CLASS or XTOK_METHOD or XTOK_PROPERTY or XTOK_PROPERTYARRAY or XTOK_PROPERTYREFERENCE or XTOK_QUALIFIER", ct, parm);
675
parseError("XTOK_CLASS", ct, parm);
679
static void method(ParserControl *parm, parseUnion *stateUnion)
682
ct = localLex((parseUnion*)&stateUnion->xtokMethod, parm);
683
if(ct == XTOK_METHOD) {
684
ct = localLex(&lvalp, parm);
686
if(ct == XTOK_QUALIFIER) {
689
qualifier(parm, (parseUnion*)&lvalp.xtokQualifier);
690
addQualifier(parm,&stateUnion->xtokMethod.qualifiers,&lvalp.xtokQualifier);
691
ct = localLex(&lvalp, parm);
693
while(ct == XTOK_QUALIFIER);
696
ct = localLex(&lvalp, parm);
698
if(ct == XTOK_PARAM || ct == XTOK_PARAMREF || ct == XTOK_PARAMARRAY || ct == XTOK_PARAMREFARRAY) {
701
methodData(parm, (parseUnion*)&lvalp.xtokMethodData);
702
ct = localLex(&lvalp, parm);
704
while(ct == XTOK_PARAM || ct == XTOK_PARAMREF || ct == XTOK_PARAMARRAY || ct == XTOK_PARAMREFARRAY);
707
ct = localLex((parseUnion*)&stateUnion->xtokMethod, parm);
708
if(ct == ZTOK_METHOD) {
711
parseError("ZTOK_METHOD or XTOK_PARAM or XTOK_PARAMREF or XTOK_PARAMARRAY or XTOK_PARAMREFARRAY or XTOK_QUALIFIER", ct, parm);
715
parseError("XTOK_METHOD", ct, parm);
719
static void methodData(ParserControl *parm, parseUnion *stateUnion)
722
if(ct == XTOK_PARAM) {
724
if(ct == XTOK_PARAM) {
726
parameter(parm, (parseUnion*)&lvalp.xtokParam);
729
else if(ct == XTOK_PARAMREF) {
731
if(ct == XTOK_PARAMREF) {
733
parameterReference(parm, (parseUnion*)&lvalp.xtokParam);
736
else if(ct == XTOK_PARAMARRAY) {
738
if(ct == XTOK_PARAMARRAY) {
740
parameterArray(parm, (parseUnion*)&lvalp.xtokParam);
743
else if(ct == XTOK_PARAMREFARRAY) {
745
if(ct == XTOK_PARAMREFARRAY) {
747
parameterRefArray(parm, (parseUnion*)&lvalp.xtokParam);
751
parseError("XTOK_PARAM or XTOK_PARAMREF or XTOK_PARAMARRAY or XTOK_PARAMREFARRAY", ct, parm);
755
static void parameter(ParserControl *parm, parseUnion *stateUnion)
758
ct = localLex((parseUnion*)&stateUnion->xtokParam, parm);
759
if(ct == XTOK_PARAM) {
760
ct = localLex(&lvalp, parm);
762
if(ct == XTOK_QUALIFIER) {
765
qualifier(parm, (parseUnion*)&lvalp.xtokQualifier);
766
ct = localLex(&lvalp, parm);
768
while(ct == XTOK_QUALIFIER);
771
ct = localLex((parseUnion*)&stateUnion->xtokParam, parm);
772
if(ct == ZTOK_PARAM) {
775
parseError("ZTOK_PARAM or XTOK_QUALIFIER", ct, parm);
779
parseError("XTOK_PARAM", ct, parm);
783
static void parameterReference(ParserControl *parm, parseUnion *stateUnion)
786
ct = localLex((parseUnion*)&stateUnion->xtokParam, parm);
787
if(ct == XTOK_PARAMREF) {
788
ct = localLex(&lvalp, parm);
790
if(ct == XTOK_QUALIFIER) {
793
qualifier(parm, (parseUnion*)&lvalp.xtokQualifier);
794
ct = localLex(&lvalp, parm);
796
while(ct == XTOK_QUALIFIER);
799
ct = localLex((parseUnion*)&stateUnion->xtokParam, parm);
800
if(ct == ZTOK_PARAMREF) {
803
parseError("ZTOK_PARAMREF or XTOK_QUALIFIER", ct, parm);
807
parseError("XTOK_PARAMREF", ct, parm);
811
static void parameterRefArray(ParserControl *parm, parseUnion *stateUnion)
814
ct = localLex((parseUnion*)&stateUnion->xtokParam, parm);
815
if(ct == XTOK_PARAMREFARRAY) {
816
ct = localLex(&lvalp, parm);
818
if(ct == XTOK_QUALIFIER) {
821
qualifier(parm, (parseUnion*)&lvalp.xtokQualifier);
822
ct = localLex(&lvalp, parm);
824
while(ct == XTOK_QUALIFIER);
827
ct = localLex((parseUnion*)&stateUnion->xtokParam, parm);
828
if(ct == ZTOK_PARAMREFARRAY) {
831
parseError("ZTOK_PARAMREFARRAY or XTOK_QUALIFIER", ct, parm);
835
parseError("XTOK_PARAMREFARRAY", ct, parm);
839
static void parameterArray(ParserControl *parm, parseUnion *stateUnion)
842
ct = localLex((parseUnion*)&stateUnion->xtokParam, parm);
843
if(ct == XTOK_PARAMARRAY) {
844
ct = localLex(&lvalp, parm);
846
if(ct == XTOK_QUALIFIER) {
849
qualifier(parm, (parseUnion*)&lvalp.xtokQualifier);
850
ct = localLex(&lvalp, parm);
852
while(ct == XTOK_QUALIFIER);
855
ct = localLex((parseUnion*)&stateUnion->xtokParam, parm);
856
if(ct == ZTOK_PARAMARRAY) {
859
parseError("ZTOK_PARAMARRAY or XTOK_QUALIFIER", ct, parm);
863
parseError("XTOK_PARAMARRAY", ct, parm);
867
static void objectPath(ParserControl *parm, parseUnion *stateUnion)
870
ct = localLex((parseUnion*)&stateUnion->xtokObjectPath, parm);
871
if(ct == XTOK_OBJECTPATH) {
872
instancePath(parm, (parseUnion*)&stateUnion->xtokObjectPath.path);
873
ct = localLex((parseUnion*)&stateUnion->xtokObjectPath, parm);
874
if(ct == ZTOK_OBJECTPATH) {
877
parseError("ZTOK_OBJECTPATH", ct, parm);
881
parseError("XTOK_OBJECTPATH", ct, parm);
885
static void classPath(ParserControl *parm, parseUnion *stateUnion)
888
ct = localLex((parseUnion*)&stateUnion->xtokClassPath, parm);
889
if(ct == XTOK_CLASSPATH) {
890
nameSpacePath(parm, (parseUnion*)&stateUnion->xtokClassPath.name);
891
className(parm, (parseUnion*)&stateUnion->xtokClassPath.className);
892
ct = localLex((parseUnion*)&stateUnion->xtokClassPath, parm);
893
if(ct == ZTOK_CLASSPATH) {
896
parseError("ZTOK_CLASSPATH", ct, parm);
900
parseError("XTOK_CLASSPATH", ct, parm);
904
static void className(ParserControl *parm, parseUnion *stateUnion)
907
ct = localLex((parseUnion*)&stateUnion->xtokClassName, parm);
908
if(ct == XTOK_CLASSNAME) {
909
ct = localLex((parseUnion*)&stateUnion->xtokClassName, parm);
910
if(ct == ZTOK_CLASSNAME) {
913
parseError("ZTOK_CLASSNAME", ct, parm);
917
parseError("XTOK_CLASSNAME", ct, parm);
921
static void instancePath(ParserControl *parm, parseUnion *stateUnion)
924
ct = localLex((parseUnion*)&stateUnion->xtokInstancePath, parm);
925
if(ct == XTOK_INSTANCEPATH) {
926
nameSpacePath(parm, (parseUnion*)&stateUnion->xtokInstancePath.path);
927
instanceName(parm, (parseUnion*)&stateUnion->xtokInstancePath.instanceName);
928
ct = localLex((parseUnion*)&stateUnion->xtokInstancePath, parm);
929
if(ct == ZTOK_INSTANCEPATH) {
932
parseError("ZTOK_INSTANCEPATH", ct, parm);
936
parseError("XTOK_INSTANCEPATH", ct, parm);
940
static void localInstancePath(ParserControl *parm, parseUnion *stateUnion)
943
ct = localLex((parseUnion*)&stateUnion->xtokLocalInstancePath, parm);
944
if(ct == XTOK_LOCALINSTANCEPATH) {
945
localNameSpacePath(parm, (parseUnion*)&stateUnion->xtokLocalInstancePath.path);
946
instanceName(parm, (parseUnion*)&stateUnion->xtokLocalInstancePath.instanceName);
947
ct = localLex((parseUnion*)&stateUnion->xtokLocalInstancePath, parm);
948
if(ct == ZTOK_LOCALINSTANCEPATH) {
951
parseError("ZTOK_LOCALINSTANCEPATH", ct, parm);
955
parseError("XTOK_LOCALINSTANCEPATH", ct, parm);
959
static void nameSpacePath(ParserControl *parm, parseUnion *stateUnion)
962
ct = localLex((parseUnion*)&stateUnion->xtokNameSpacePath, parm);
963
if(ct == XTOK_NAMESPACEPATH) {
964
host(parm, (parseUnion*)&stateUnion->xtokNameSpacePath.host);
965
localNameSpacePath(parm, (parseUnion*)&stateUnion->xtokNameSpacePath.nameSpacePath);
966
ct = localLex((parseUnion*)&stateUnion->xtokNameSpacePath, parm);
967
if(ct == ZTOK_NAMESPACEPATH) {
970
parseError("ZTOK_NAMESPACEPATH", ct, parm);
974
parseError("XTOK_NAMESPACEPATH", ct, parm);
978
static void host(ParserControl *parm, parseUnion *stateUnion)
981
ct = localLex((parseUnion*)&stateUnion->xtokHost, parm);
982
if(ct == XTOK_HOST) {
983
ct = localLex((parseUnion*)&stateUnion->xtokHost, parm);
984
if(ct == ZTOK_HOST) {
987
parseError("ZTOK_HOST", ct, parm);
991
parseError("XTOK_HOST", ct, parm);
995
static void localNameSpacePath(ParserControl *parm, parseUnion *stateUnion)
998
ct = localLex((parseUnion*)&stateUnion->xtokLocalNameSpacePath, parm);
999
if(ct == XTOK_LOCALNAMESPACEPATH) {
1000
ct = localLex(&lvalp, parm);
1002
if(ct == XTOK_NAMESPACE) {
1005
nameSpace(parm, (parseUnion*)&lvalp.xtokNameSpace);
1006
if(stateUnion->xtokLocalNameSpacePath.value) {
1007
stateUnion->xtokLocalNameSpacePath.value = parser_realloc(parm->heap, stateUnion->xtokLocalNameSpacePath.value, strlen(stateUnion->xtokLocalNameSpacePath.value) + strlen(lvalp.xtokNameSpace.ns) + 2);
1008
strcat(stateUnion->xtokLocalNameSpacePath.value, "/");
1009
strcat(stateUnion->xtokLocalNameSpacePath.value, lvalp.xtokNameSpace.ns);
1012
stateUnion->xtokLocalNameSpacePath.value = parser_malloc(parm->heap, strlen(lvalp.xtokNameSpace.ns) + 1);
1013
strcpy(stateUnion->xtokLocalNameSpacePath.value, lvalp.xtokNameSpace.ns);
1015
ct = localLex(&lvalp, parm);
1017
while(ct == XTOK_NAMESPACE);
1020
ct = localLex((parseUnion*)&stateUnion->xtokLocalNameSpacePath, parm);
1021
if(ct == ZTOK_LOCALNAMESPACEPATH) {
1024
parseError("ZTOK_LOCALNAMESPACEPATH or XTOK_NAMESPACE", ct, parm);
1028
parseError("XTOK_LOCALNAMESPACEPATH", ct, parm);
1032
static void nameSpace(ParserControl *parm, parseUnion *stateUnion)
1035
ct = localLex((parseUnion*)&stateUnion->xtokNameSpace, parm);
1036
if(ct == XTOK_NAMESPACE) {
1037
ct = localLex((parseUnion*)&stateUnion->xtokNameSpace, parm);
1038
if(ct == ZTOK_NAMESPACE) {
1041
parseError("ZTOK_NAMESPACE", ct, parm);
1045
parseError("XTOK_NAMESPACE", ct, parm);
1049
static void valueNamedInstance(ParserControl *parm, parseUnion *stateUnion)
1052
ct = localLex((parseUnion*)&stateUnion->xtokNamedInstance, parm);
1053
if(ct == XTOK_VALUENAMEDINSTANCE) {
1054
instanceName(parm, (parseUnion*)&stateUnion->xtokNamedInstance.path);
1055
instance(parm, (parseUnion*)&stateUnion->xtokNamedInstance.instance);
1056
ct = localLex((parseUnion*)&stateUnion->xtokNamedInstance, parm);
1057
if(ct == ZTOK_VALUENAMEDINSTANCE) {
1060
parseError("ZTOK_VALUENAMEDINSTANCE", ct, parm);
1064
parseError("XTOK_VALUENAMEDINSTANCE", ct, parm);
1068
static void instance(ParserControl *parm, parseUnion *stateUnion)
1071
ct = localLex((parseUnion*)&stateUnion->xtokInstance, parm);
1072
if(ct == XTOK_INSTANCE) {
1073
ct = localLex(&lvalp, parm);
1075
if(ct == XTOK_QUALIFIER) {
1078
qualifier(parm, (parseUnion*)&lvalp.xtokQualifier);
1079
addQualifier(parm,&stateUnion->xtokInstance.qualifiers,&lvalp.xtokQualifier);
1080
ct = localLex(&lvalp, parm);
1082
while(ct == XTOK_QUALIFIER);
1085
ct = localLex(&lvalp, parm);
1087
if(ct == XTOK_PROPERTY || ct == XTOK_PROPERTYARRAY || ct == XTOK_PROPERTYREFERENCE) {
1090
genProperty(parm, (parseUnion*)&lvalp.xtokProperty);
1091
addProperty(parm,&stateUnion->xtokInstance.properties,&lvalp.xtokProperty);
1092
ct = localLex(&lvalp, parm);
1094
while(ct == XTOK_PROPERTY || ct == XTOK_PROPERTYARRAY || ct == XTOK_PROPERTYREFERENCE);
1097
ct = localLex((parseUnion*)&stateUnion->xtokInstance, parm);
1098
if(ct == ZTOK_INSTANCE) {
1101
parseError("ZTOK_INSTANCE or XTOK_PROPERTY or XTOK_PROPERTYARRAY or XTOK_PROPERTYREFERENCE or XTOK_QUALIFIER", ct, parm);
1105
parseError("XTOK_INSTANCE", ct, parm);
1109
static void genProperty(ParserControl *parm, parseUnion *stateUnion)
1112
ct = localLex((parseUnion*)&stateUnion->xtokProperty, parm);
1113
if(ct == XTOK_PROPERTY) {
1115
property(parm, (parseUnion*)&stateUnion->xtokProperty.val);
1116
if(stateUnion->xtokProperty.val.value.type == typeValue_Instance) {
1117
stateUnion->xtokProperty.valueType = CMPI_instance;
1120
else if(ct == XTOK_PROPERTYARRAY) {
1122
propertyArray(parm, (parseUnion*)&stateUnion->xtokProperty.val);
1124
else if(ct == XTOK_PROPERTYREFERENCE) {
1126
propertyReference(parm, (parseUnion*)&stateUnion->xtokProperty.val);
1129
parseError("XTOK_PROPERTY or XTOK_PROPERTYARRAY or XTOK_PROPERTYREFERENCE", ct, parm);
1133
static void qualifier(ParserControl *parm, parseUnion *stateUnion)
1136
ct = localLex((parseUnion*)&stateUnion->xtokQualifier, parm);
1137
if(ct == XTOK_QUALIFIER) {
1138
ct = localLex(&lvalp, parm);
1140
if(ct == XTOK_VALUE || ct == XTOK_VALUEARRAY) {
1142
qualifierData(parm, (parseUnion*)&lvalp.xtokQualifierData);
1143
stateUnion->xtokQualifier.data = lvalp.xtokQualifierData;
1144
if(lvalp.xtokQualifierData.isArray) {
1145
stateUnion->xtokQualifier.type |= CMPI_ARRAY;
1148
ct = localLex((parseUnion*)&stateUnion->xtokQualifier, parm);
1149
if(ct == ZTOK_QUALIFIER) {
1152
parseError("ZTOK_QUALIFIER or XTOK_VALUE or XTOK_VALUEARRAY", ct, parm);
1156
parseError("XTOK_QUALIFIER", ct, parm);
1160
static void qualifierData(ParserControl *parm, parseUnion *stateUnion)
1163
ct = localLex((parseUnion*)&stateUnion->xtokQualifierData, parm);
1164
if(ct == XTOK_VALUE) {
1166
value(parm, (parseUnion*)&stateUnion->xtokQualifierData.value);
1167
stateUnion->xtokQualifierData.isArray = 0;
1169
else if(ct == XTOK_VALUEARRAY) {
1171
valueArray(parm, (parseUnion*)&stateUnion->xtokQualifierData.array);
1172
stateUnion->xtokQualifierData.isArray = 1;
1175
parseError("XTOK_VALUE or XTOK_VALUEARRAY", ct, parm);
1179
static void property(ParserControl *parm, parseUnion *stateUnion)
1182
ct = localLex((parseUnion*)&stateUnion->xtokPropertyData, parm);
1183
if(ct == XTOK_PROPERTY) {
1184
ct = localLex(&lvalp, parm);
1186
if(ct == XTOK_QUALIFIER) {
1189
qualifier(parm, (parseUnion*)&lvalp.xtokQualifier);
1190
addQualifier(parm,&stateUnion->xtokPropertyData.qualifiers,&lvalp.xtokQualifier);
1191
ct = localLex(&lvalp, parm);
1193
while(ct == XTOK_QUALIFIER);
1196
ct = localLex(&lvalp, parm);
1198
if(ct == XTOK_VALUE) {
1200
value(parm, (parseUnion*)&lvalp.xtokValue);
1201
stateUnion->xtokPropertyData.value = lvalp.xtokValue;
1203
ct = localLex((parseUnion*)&stateUnion->xtokPropertyData, parm);
1204
if(ct == ZTOK_PROPERTY) {
1207
parseError("ZTOK_PROPERTY or XTOK_VALUE or XTOK_QUALIFIER", ct, parm);
1211
parseError("XTOK_PROPERTY", ct, parm);
1215
static void propertyArray(ParserControl *parm, parseUnion *stateUnion)
1218
ct = localLex((parseUnion*)&stateUnion->xtokPropertyData, parm);
1219
if(ct == XTOK_PROPERTYARRAY) {
1220
ct = localLex(&lvalp, parm);
1222
if(ct == XTOK_QUALIFIER) {
1225
qualifier(parm, (parseUnion*)&lvalp.xtokQualifier);
1226
addQualifier(parm,&stateUnion->xtokPropertyData.qualifiers,&lvalp.xtokQualifier);
1227
ct = localLex(&lvalp, parm);
1229
while(ct == XTOK_QUALIFIER);
1232
ct = localLex(&lvalp, parm);
1234
if(ct == XTOK_VALUEARRAY) {
1236
valueArray(parm, (parseUnion*)&lvalp.xtokValueArray);
1237
stateUnion->xtokPropertyData.array = lvalp.xtokValueArray;
1239
ct = localLex((parseUnion*)&stateUnion->xtokPropertyData, parm);
1240
if(ct == ZTOK_PROPERTYARRAY) {
1243
parseError("ZTOK_PROPERTYARRAY or XTOK_VALUEARRAY or XTOK_QUALIFIER", ct, parm);
1247
parseError("XTOK_PROPERTYARRAY", ct, parm);
1251
static void propertyReference(ParserControl *parm, parseUnion *stateUnion)
1254
ct = localLex((parseUnion*)&stateUnion->xtokPropertyData, parm);
1255
if(ct == XTOK_PROPERTYREFERENCE) {
1256
ct = localLex(&lvalp, parm);
1258
if(ct == XTOK_QUALIFIER) {
1261
qualifier(parm, (parseUnion*)&lvalp.xtokQualifier);
1262
addQualifier(parm,&stateUnion->xtokPropertyData.qualifiers,&lvalp.xtokQualifier);
1263
ct = localLex(&lvalp, parm);
1265
while(ct == XTOK_QUALIFIER);
1268
ct = localLex(&lvalp, parm);
1270
if(ct == XTOK_VALUEREFERENCE) {
1272
valueReference(parm, (parseUnion*)&lvalp.xtokValueReference);
1273
stateUnion->xtokPropertyData.ref = lvalp.xtokValueReference;
1275
ct = localLex((parseUnion*)&stateUnion->xtokPropertyData, parm);
1276
if(ct == ZTOK_PROPERTYREFERENCE) {
1279
parseError("ZTOK_PROPERTYREFERENCE or XTOK_VALUEREFERENCE or XTOK_QUALIFIER", ct, parm);
1283
parseError("XTOK_PROPERTYREFERENCE", ct, parm);
1287
static void instanceName(ParserControl *parm, parseUnion *stateUnion)
1290
ct = localLex((parseUnion*)&stateUnion->xtokInstanceName, parm);
1291
if(ct == XTOK_INSTANCENAME) {
1292
ct = localLex(&lvalp, parm);
1294
if(ct == XTOK_KEYBINDING) {
1297
keyBinding(parm, (parseUnion*)&lvalp.xtokKeyBinding);
1298
addKeyBinding(parm, &stateUnion->xtokInstanceName.bindings, &lvalp.xtokKeyBinding);
1299
ct = localLex(&lvalp, parm);
1301
while(ct == XTOK_KEYBINDING);
1304
ct = localLex((parseUnion*)&stateUnion->xtokInstanceName, parm);
1305
if(ct == ZTOK_INSTANCENAME) {
1308
parseError("ZTOK_INSTANCENAME or XTOK_KEYBINDING", ct, parm);
1312
parseError("XTOK_INSTANCENAME", ct, parm);
1316
static void keyBinding(ParserControl *parm, parseUnion *stateUnion)
1319
ct = localLex((parseUnion*)&stateUnion->xtokKeyBinding, parm);
1320
if(ct == XTOK_KEYBINDING) {
1321
keyBindingContent(parm, (parseUnion*)&stateUnion->xtokKeyBinding.val);
1322
stateUnion->xtokKeyBinding.type = stateUnion->xtokKeyBinding.val.type;
1323
ct = localLex((parseUnion*)&stateUnion->xtokKeyBinding, parm);
1324
if(ct == ZTOK_KEYBINDING) {
1327
parseError("ZTOK_KEYBINDING", ct, parm);
1331
parseError("XTOK_KEYBINDING", ct, parm);
1335
static void keyBindingContent(ParserControl *parm, parseUnion *stateUnion)
1338
ct = localLex((parseUnion*)&stateUnion->xtokKeyBindingContent, parm);
1339
if(ct == XTOK_KEYVALUE) {
1341
keyValue(parm, (parseUnion*)&stateUnion->xtokKeyBindingContent.keyValue);
1342
stateUnion->xtokKeyBindingContent.type = stateUnion->xtokKeyBindingContent.keyValue.valueType;
1344
else if(ct == XTOK_VALUEREFERENCE) {
1346
valueReference(parm, (parseUnion*)&stateUnion->xtokKeyBindingContent.ref);
1347
stateUnion->xtokKeyBindingContent.type = "ref";
1350
parseError("XTOK_KEYVALUE or XTOK_VALUEREFERENCE", ct, parm);
1354
static void keyValue(ParserControl *parm, parseUnion *stateUnion)
1357
ct = localLex((parseUnion*)&stateUnion->xtokKeyValue, parm);
1358
if(ct == XTOK_KEYVALUE) {
1359
ct = localLex((parseUnion*)&stateUnion->xtokKeyValue, parm);
1360
if(ct == ZTOK_KEYVALUE) {
1363
parseError("ZTOK_KEYVALUE", ct, parm);
1367
parseError("XTOK_KEYVALUE", ct, parm);
1371
static void value(ParserControl *parm, parseUnion *stateUnion)
1374
ct = localLex((parseUnion*)&stateUnion->xtokValue, parm);
1375
if(ct == XTOK_VALUE) {
1376
valueData(parm, (parseUnion*)&stateUnion->xtokValue.data);
1377
stateUnion->xtokValue.type = stateUnion->xtokValue.data.type;
1378
ct = localLex((parseUnion*)&stateUnion->xtokValue, parm);
1379
if(ct == ZTOK_VALUE) {
1382
parseError("ZTOK_VALUE", ct, parm);
1386
parseError("XTOK_VALUE", ct, parm);
1390
static void valueData(ParserControl *parm, parseUnion *stateUnion)
1393
ct = localLex((parseUnion*)&stateUnion->xtokValueData, parm);
1394
if(ct == ZTOK_VALUE) {
1395
stateUnion->xtokValueData.type=typeValue_charP;
1398
else if(ct == XTOK_CDATA) {
1399
stateUnion->xtokValueData.inst = parser_malloc(parm->heap, sizeof(XtokInstance));
1400
instance(parm, (parseUnion*)stateUnion->xtokValueData.inst);
1401
stateUnion->xtokValueData.type=typeValue_Instance;
1402
ct = localLex((parseUnion*)&stateUnion->xtokValueData, parm);
1403
if(ct == ZTOK_CDATA) {
1406
parseError("ZTOK_CDATA", ct, parm);
1410
parseError("ZTOK_VALUE", ct, parm);
1414
static void valueArray(ParserControl *parm, parseUnion *stateUnion)
1417
ct = localLex((parseUnion*)&stateUnion->xtokValueArray, parm);
1418
if(ct == XTOK_VALUEARRAY) {
1419
ct = localLex(&lvalp, parm);
1421
if(ct == XTOK_VALUE) {
1424
value(parm, (parseUnion*)&lvalp.xtokValue);
1425
if(stateUnion->xtokValueArray.next >= stateUnion->xtokValueArray.max) {
1426
stateUnion->xtokValueArray.max *= 2;
1427
stateUnion->xtokValueArray.values = (char**)parser_realloc(parm->heap, stateUnion->xtokValueArray.values, sizeof(char*) * stateUnion->xtokValueArray.max);
1429
stateUnion->xtokValueArray.values[stateUnion->xtokValueArray.next++] = lvalp.xtokValue.data.value;
1430
ct = localLex(&lvalp, parm);
1432
while(ct == XTOK_VALUE);
1435
ct = localLex((parseUnion*)&stateUnion->xtokValueArray, parm);
1436
if(ct == ZTOK_VALUEARRAY) {
1439
parseError("ZTOK_VALUEARRAY or XTOK_VALUE", ct, parm);
1443
parseError("XTOK_VALUEARRAY", ct, parm);
1447
static void valueRefArray(ParserControl *parm, parseUnion *stateUnion)
1450
ct = localLex((parseUnion*)&stateUnion->xtokValueRefArray, parm);
1451
if(ct == XTOK_VALUEREFARRAY) {
1452
ct = localLex(&lvalp, parm);
1454
if(ct == XTOK_VALUEREFERENCE) {
1457
valueReference(parm, (parseUnion*)&lvalp.xtokValueReference);
1458
if(stateUnion->xtokValueRefArray.next >= stateUnion->xtokValueRefArray.max) {
1459
stateUnion->xtokValueRefArray.max *= 2;
1460
stateUnion->xtokValueRefArray.values = (XtokValueReference*)parser_realloc(parm->heap, stateUnion->xtokValueRefArray.values, sizeof(XtokValueReference) * stateUnion->xtokValueRefArray.max);
1462
stateUnion->xtokValueRefArray.values[stateUnion->xtokValueRefArray.next++] = lvalp.xtokValueReference;
1463
ct = localLex(&lvalp, parm);
1465
while(ct == XTOK_VALUEREFERENCE);
1468
ct = localLex((parseUnion*)&stateUnion->xtokValueRefArray, parm);
1469
if(ct == ZTOK_VALUEREFARRAY) {
1472
parseError("ZTOK_VALUEREFARRAY or XTOK_VALUEREFERENCE", ct, parm);
1476
parseError("XTOK_VALUEREFARRAY", ct, parm);
1480
static void valueReference(ParserControl *parm, parseUnion *stateUnion)
1483
ct = localLex((parseUnion*)&stateUnion->xtokValueReference, parm);
1484
if(ct == XTOK_VALUEREFERENCE) {
1485
valueReferenceData(parm, (parseUnion*)&stateUnion->xtokValueReference.data);
1486
stateUnion->xtokValueReference.type = stateUnion->xtokValueReference.data.type;
1487
ct = localLex((parseUnion*)&stateUnion->xtokValueReference, parm);
1488
if(ct == ZTOK_VALUEREFERENCE) {
1491
parseError("ZTOK_VALUEREFERENCE", ct, parm);
1495
parseError("XTOK_VALUEREFERENCE", ct, parm);
1499
static void valueReferenceData(ParserControl *parm, parseUnion *stateUnion)
1502
ct = localLex((parseUnion*)&stateUnion->xtokValueReferenceData, parm);
1503
if(ct == XTOK_INSTANCEPATH) {
1505
instancePath(parm, (parseUnion*)&stateUnion->xtokValueReferenceData.instancePath);
1506
stateUnion->xtokValueReferenceData.type = typeValRef_InstancePath;
1508
else if(ct == XTOK_LOCALINSTANCEPATH) {
1510
localInstancePath(parm, (parseUnion*)&stateUnion->xtokValueReferenceData.localInstancePath);
1511
stateUnion->xtokValueReferenceData.type = typeValRef_LocalInstancePath;
1513
else if(ct == XTOK_INSTANCENAME) {
1515
instanceName(parm, (parseUnion*)&stateUnion->xtokValueReferenceData.instanceName);
1516
stateUnion->xtokValueReferenceData.type = typeValRef_InstanceName;
1519
parseError("XTOK_INSTANCEPATH or XTOK_LOCALINSTANCEPATH or XTOK_INSTANCENAME", ct, parm);