diff --git a/lslopt/lslparse.py b/lslopt/lslparse.py index 644b3f9..38393c6 100644 --- a/lslopt/lslparse.py +++ b/lslopt/lslparse.py @@ -1,4 +1,3 @@ -# TODO: Check "Not All Code Paths return a Value" from lslcommon import Key, Vector, Quaternion import lslfuncs @@ -98,6 +97,11 @@ class EParseCantChangeState(EParse): super(EParseCantChangeState, self).__init__(parser, u"Global functions can't change state") +class EParseCodePathWithoutRet(EParse): + def __init__(self, parser): + super(EParseCodePathWithoutRet, self).__init__(parser, + u"Not all code paths return a value") + class EParseDuplicateLabel(EParse): def __init__(self, parser): super(EParseDuplicateLabel, self).__init__(parser, @@ -1156,7 +1160,7 @@ class parser(object): """ tok0 = self.tok[0] if tok0 == '{': - return self.Parse_code_block(ReturnType) + return self.Parse_code_block(ReturnType, AllowStSw = AllowStSw) if tok0 == ';': self.NextToken() return {'nt':';', 't':None} @@ -1242,31 +1246,30 @@ class parser(object): raise EParseReturnIsEmpty(self) if value is None: return {'nt':'RETURN', 't':None} - return {'nt':'RETURN', 't':None, 'ch':[self.autocastcheck(value, ReturnType)]} + # Sets LastIsReturn flag too + return {'nt':'RETURN', 't':None, 'LIR':True, + 'ch':[self.autocastcheck(value, ReturnType)]} if tok0 == 'IF': ret = {'nt':'IF', 't':None, 'ch':[]} - cur = ret - while True: + self.NextToken() + self.expect('(') + self.NextToken() + ret['ch'].append(self.Parse_expression()) + self.expect(')') + self.NextToken() + # INCOMPATIBILITY NOTE: This is more permissive than LSL. + # In LSL, an if...then...else does NOT allow a state change + # in either branch. Only an if...then without else does. + # BUT we're not going to check the branch after the fact, just + # to report that error. The compiler will report it. + ret['ch'].append(self.Parse_statement(ReturnType, AllowStSw = True)) + if self.tok[0] == 'ELSE': + LastIsReturn = 'LIR' in ret['ch'][1] self.NextToken() - self.expect('(') - self.NextToken() - cur['ch'].append(self.Parse_expression()) - self.expect(')') - self.NextToken() - # INCOMPATIBILITY NOTE: This is more permissive than LSL. - # In LSL, an if...then...else does NOT allow a state change - # in either branch. Only an if...then without else does. - # BUT we're not going to check the branch after the fact, just - # to report that error. The compiler will report it. - cur['ch'].append(self.Parse_statement(ReturnType, AllowStSw = True)) - if self.tok[0] == 'ELSE': - self.NextToken() - if self.tok[0] == 'IF': - cur['ch'].append({'nt':'IF', 't':None, 'ch':[]}) - cur = cur['ch'][2] - continue - cur['ch'].append(self.Parse_statement(ReturnType)) - return ret + ret['ch'].append(self.Parse_statement(ReturnType, AllowStSw = AllowStSw)) + if LastIsReturn and 'LIR' in ret['ch'][2]: + ret['LIR'] = True + return ret if tok0 == 'WHILE': self.NextToken() @@ -1335,7 +1338,7 @@ class parser(object): self.NextToken() return value - def Parse_code_block(self, ReturnType): + def Parse_code_block(self, ReturnType, AllowStSw = False): """Grammar parsed here: code_block: '{' statements '}' @@ -1349,17 +1352,23 @@ class parser(object): self.PushScope() body = [] + LastIsReturn = False while True: if self.tok[0] == '}': break - body.append(self.Parse_statement(ReturnType, AllowDecl = True)) + stmt = self.Parse_statement(ReturnType, AllowDecl = True, AllowStSw = AllowStSw) + LastIsReturn = 'LIR' in stmt + body.append(stmt) self.PopScope() self.expect('}') self.NextToken() - return {'nt':'{}', 't':None, 'ch':body} + node = {'nt':'{}', 't':None, 'ch':body} + if LastIsReturn: + node['LIR'] = True + return node def Parse_simple_expr(self, ForbidList=False): """Grammar parsed here: @@ -1579,6 +1588,8 @@ class parser(object): self.locallabels = set() body = self.Parse_code_block(typ) del self.locallabels + if typ and 'LIR' not in body: # is LastIsReturn flag set? + raise EParseCodePathWithoutRet(self) paramscope = self.scopeindex self.AddSymbol('f', 0, name, Loc=len(self.tree), Type=typ, ParamTypes=params[0], ParamNames=params[1]) @@ -1935,6 +1946,7 @@ class parser(object): while True: line = f.readline() if not line: break + if line[-1] == '\n': line = line[:-1] match = parse_lin_re.match(line) if not match: warning('Syntax error in builtins.txt: ' + line) diff --git a/testparser.py b/testparser.py index 6784727..8d73bda 100644 --- a/testparser.py +++ b/testparser.py @@ -1,7 +1,7 @@ from lslopt.lslparse import parser,EParseSyntax,EParseUEOF,EParseAlreadyDefined,\ EParseUndefined,EParseTypeMismatch,EParseReturnShouldBeEmpty,EParseReturnIsEmpty,\ EParseInvalidField,EParseFunctionMismatch,EParseDeclarationScope,\ - EParseDuplicateLabel,fieldpos + EParseDuplicateLabel,EParseCantChangeState,EParseCodePathWithoutRet,fieldpos from lslopt.lsloutput import outscript from lslopt.lsloptimizer import optimizer from lslopt import lslfuncs @@ -91,6 +91,7 @@ class Test02_Parser(UnitTestCase): L"\n\t\rxxxx";@lbl;jump lbl; {f;} [1,2,3]; + return 1; } fwd(string a,string b,string c){} default{touch(integer n){n;state default;state another;return;}timer(){}} @@ -121,7 +122,7 @@ class Test02_Parser(UnitTestCase): self.assertRaises(EParseAlreadyDefined, self.parser.parse, '''default{timer(){@x;integer x;}}''') self.assertRaises(EParseUEOF, self.parser.parse, 'float x=3+3;', set(('extendedglobalexpr',))) self.assertRaises(EParseUndefined, self.parser.parse, '''float x=-2147483648;float y=z;''') - self.assertRaises(EParseUndefined, self.parser.parse, '''float z(){;}float y=z;''') + self.assertRaises(EParseUndefined, self.parser.parse, '''float z(){return 0;}float y=z;''') self.assertRaises(EParseUndefined, self.parser.parse, '''float y=z;float z;''') self.assertRaises(EParseUndefined, self.parser.parse, '''default{timer(){state blah;}}''') self.assertRaises(EParseUndefined, self.parser.parse, '''f(){k;}''') @@ -179,6 +180,7 @@ class Test02_Parser(UnitTestCase): self.assertRaises(EParseUEOF, self.parser.parse, '''f(){(integer)''') self.assertRaises(EParseInvalidField, self.parser.parse, '''f(){vector v;v.s;}''') self.assertRaises(EParseDuplicateLabel, self.parser.parse, 'f(){@x;{@x;}}') + self.assertRaises(EParseCantChangeState, self.parser.parse, 'f(){state default;}default{}') self.assertRaises(EParseSyntax, self.parser.parse, '''f(){<1,2,3,4==5>;}''') self.assertRaises(EParseSyntax, self.parser.parse, '''#blah;\ndefault{timer(){}}''') self.assertRaises(EParseTypeMismatch, self.parser.parse, '''f(){<1,2,3,4>"">;}''') @@ -199,6 +201,8 @@ class Test02_Parser(UnitTestCase): #blah; string s = "1" "2"; list L = [(key)""]; + integer fn1(){if (1) {return 3;}else if (2)return 4; return 5;} + integer fn2(){if (1) return 3; else if (2) return 4; else return 5;} default{timer(){ 1+([]+(integer)~1); list a; @@ -217,12 +221,17 @@ class Test02_Parser(UnitTestCase): 'skippreproc', 'duplabels'] )) print self.parser.scopeindex - #self.assertRaises(EParseUnexpected, self.parser.PopScope) - self.assertEqual(fieldpos("a,b",",",3),-1) + self.assertEqual(fieldpos("a,b", ",", 3), -1) self.assertEqual(self.outscript.Value2LSL(lslfuncs.Key(u'')), '((key)"")') self.assertRaises(AssertionError, self.outscript.Value2LSL, '') + def test_regression(self): + self.assertRaises(EParseCodePathWithoutRet, self.parser.parse, + '''key f() { if (1) ; else if (2) return ""; else return ""; }''') + self.parser.parse('f(){if(1) {state default;}if (1) if (1) state default; else state default;}default{timer(){}}') + + def tearDown(self): del self.parser del self.outscript @@ -251,7 +260,9 @@ class Test03_Optimizer(UnitTestCase): float ffff=vvvv.x; vector vvvv2=vvvv; float ffff3 = v.z; - integer fn(){return fn();} + integer fn(){ + if (1) state default; else return 2; + return fn();} default{touch(integer n){ 1+([]+(integer)~1); @@ -277,6 +288,7 @@ class Test03_Optimizer(UnitTestCase): i>>=i; if (1) do while (0); while (0); if (0); if (0);else; for(;0;); if (i) if (i); else ; while (i) ; do ; while (i); for(;i;); + if (1) state default; else ; do while (1); while(1); for(;1;); for (i=0,i;0;);for(i=0,i=0;0;);return; (i-i)+(i-3)+(-i+i)+(-i-i)+(i+1)+(-i+1)+(i-1)+(-i-1)+(0.0+i); @@ -300,15 +312,16 @@ class Test03_Optimizer(UnitTestCase): p = self.parser.parse( '''integer i1; integer i2; integer i3; integer i4; integer i5; string s1; string s2; string s3; string s4; string s5; - f1(){jump x; @x;} f2(){integer i3; i4=0; s3=""; f1(); state another;} + f1(){jump x; @x;} f2(){integer i3; i4=0; s3=""; f1(); + if (1) state another;} default { timer() { state another; } } state another { timer() { state default; } touch(integer num_det) {} } ''', ['optimize', 'shrinknames'] ) self.opt.optimize(p, ['optimize','shrinknames']) - print self.outscript.output(p) + p = self.parser.parse( '''integer i1; integer i2; integer i3; integer i4; integer i5; string a1; string a2; string a3; string a4; string a5; @@ -327,687 +340,8 @@ class Test03_Optimizer(UnitTestCase): string o1; string o2; string o3; string o4; string o5; string p1; string p2; string p3; string p4; string p5; string s1; string s2; string s3; string s4; string s5; - key k0000; key k0001; key k0002; key k0003; key k0004; - key k0005; key k0006; key k0007; key k0008; key k0009; - key k0010; key k0011; key k0012; key k0013; key k0014; - key k0015; key k0016; key k0017; key k0018; key k0019; - key k0020; key k0021; key k0022; key k0023; key k0024; - key k0025; key k0026; key k0027; key k0028; key k0029; - key k0030; key k0031; key k0032; key k0033; key k0034; - key k0035; key k0036; key k0037; key k0038; key k0039; - key k0040; key k0041; key k0042; key k0043; key k0044; - key k0045; key k0046; key k0047; key k0048; key k0049; - key k0050; key k0051; key k0052; key k0053; key k0054; - key k0055; key k0056; key k0057; key k0058; key k0059; - key k0060; key k0061; key k0062; key k0063; key k0064; - key k0065; key k0066; key k0067; key k0068; key k0069; - key k0070; key k0071; key k0072; key k0073; key k0074; - key k0075; key k0076; key k0077; key k0078; key k0079; - key k0080; key k0081; key k0082; key k0083; key k0084; - key k0085; key k0086; key k0087; key k0088; key k0089; - key k0090; key k0091; key k0092; key k0093; key k0094; - key k0095; key k0096; key k0097; key k0098; key k0099; - key k0100; key k0101; key k0102; key k0103; key k0104; - key k0105; key k0106; key k0107; key k0108; key k0109; - key k0110; key k0111; key k0112; key k0113; key k0114; - key k0115; key k0116; key k0117; key k0118; key k0119; - key k0120; key k0121; key k0122; key k0123; key k0124; - key k0125; key k0126; key k0127; key k0128; key k0129; - key k0130; key k0131; key k0132; key k0133; key k0134; - key k0135; key k0136; key k0137; key k0138; key k0139; - key k0140; key k0141; key k0142; key k0143; key k0144; - key k0145; key k0146; key k0147; key k0148; key k0149; - key k0150; key k0151; key k0152; key k0153; key k0154; - key k0155; key k0156; key k0157; key k0158; key k0159; - key k0160; key k0161; key k0162; key k0163; key k0164; - key k0165; key k0166; key k0167; key k0168; key k0169; - key k0170; key k0171; key k0172; key k0173; key k0174; - key k0175; key k0176; key k0177; key k0178; key k0179; - key k0180; key k0181; key k0182; key k0183; key k0184; - key k0185; key k0186; key k0187; key k0188; key k0189; - key k0190; key k0191; key k0192; key k0193; key k0194; - key k0195; key k0196; key k0197; key k0198; key k0199; - key k0200; key k0201; key k0202; key k0203; key k0204; - key k0205; key k0206; key k0207; key k0208; key k0209; - key k0210; key k0211; key k0212; key k0213; key k0214; - key k0215; key k0216; key k0217; key k0218; key k0219; - key k0220; key k0221; key k0222; key k0223; key k0224; - key k0225; key k0226; key k0227; key k0228; key k0229; - key k0230; key k0231; key k0232; key k0233; key k0234; - key k0235; key k0236; key k0237; key k0238; key k0239; - key k0240; key k0241; key k0242; key k0243; key k0244; - key k0245; key k0246; key k0247; key k0248; key k0249; - key k0250; key k0251; key k0252; key k0253; key k0254; - key k0255; key k0256; key k0257; key k0258; key k0259; - key k0260; key k0261; key k0262; key k0263; key k0264; - key k0265; key k0266; key k0267; key k0268; key k0269; - key k0270; key k0271; key k0272; key k0273; key k0274; - key k0275; key k0276; key k0277; key k0278; key k0279; - key k0280; key k0281; key k0282; key k0283; key k0284; - key k0285; key k0286; key k0287; key k0288; key k0289; - key k0290; key k0291; key k0292; key k0293; key k0294; - key k0295; key k0296; key k0297; key k0298; key k0299; - key k0300; key k0301; key k0302; key k0303; key k0304; - key k0305; key k0306; key k0307; key k0308; key k0309; - key k0310; key k0311; key k0312; key k0313; key k0314; - key k0315; key k0316; key k0317; key k0318; key k0319; - key k0320; key k0321; key k0322; key k0323; key k0324; - key k0325; key k0326; key k0327; key k0328; key k0329; - key k0330; key k0331; key k0332; key k0333; key k0334; - key k0335; key k0336; key k0337; key k0338; key k0339; - key k0340; key k0341; key k0342; key k0343; key k0344; - key k0345; key k0346; key k0347; key k0348; key k0349; - key k0350; key k0351; key k0352; key k0353; key k0354; - key k0355; key k0356; key k0357; key k0358; key k0359; - key k0360; key k0361; key k0362; key k0363; key k0364; - key k0365; key k0366; key k0367; key k0368; key k0369; - key k0370; key k0371; key k0372; key k0373; key k0374; - key k0375; key k0376; key k0377; key k0378; key k0379; - key k0380; key k0381; key k0382; key k0383; key k0384; - key k0385; key k0386; key k0387; key k0388; key k0389; - key k0390; key k0391; key k0392; key k0393; key k0394; - key k0395; key k0396; key k0397; key k0398; key k0399; - key k0400; key k0401; key k0402; key k0403; key k0404; - key k0405; key k0406; key k0407; key k0408; key k0409; - key k0410; key k0411; key k0412; key k0413; key k0414; - key k0415; key k0416; key k0417; key k0418; key k0419; - key k0420; key k0421; key k0422; key k0423; key k0424; - key k0425; key k0426; key k0427; key k0428; key k0429; - key k0430; key k0431; key k0432; key k0433; key k0434; - key k0435; key k0436; key k0437; key k0438; key k0439; - key k0440; key k0441; key k0442; key k0443; key k0444; - key k0445; key k0446; key k0447; key k0448; key k0449; - key k0450; key k0451; key k0452; key k0453; key k0454; - key k0455; key k0456; key k0457; key k0458; key k0459; - key k0460; key k0461; key k0462; key k0463; key k0464; - key k0465; key k0466; key k0467; key k0468; key k0469; - key k0470; key k0471; key k0472; key k0473; key k0474; - key k0475; key k0476; key k0477; key k0478; key k0479; - key k0480; key k0481; key k0482; key k0483; key k0484; - key k0485; key k0486; key k0487; key k0488; key k0489; - key k0490; key k0491; key k0492; key k0493; key k0494; - key k0495; key k0496; key k0497; key k0498; key k0499; - key k0500; key k0501; key k0502; key k0503; key k0504; - key k0505; key k0506; key k0507; key k0508; key k0509; - key k0510; key k0511; key k0512; key k0513; key k0514; - key k0515; key k0516; key k0517; key k0518; key k0519; - key k0520; key k0521; key k0522; key k0523; key k0524; - key k0525; key k0526; key k0527; key k0528; key k0529; - key k0530; key k0531; key k0532; key k0533; key k0534; - key k0535; key k0536; key k0537; key k0538; key k0539; - key k0540; key k0541; key k0542; key k0543; key k0544; - key k0545; key k0546; key k0547; key k0548; key k0549; - key k0550; key k0551; key k0552; key k0553; key k0554; - key k0555; key k0556; key k0557; key k0558; key k0559; - key k0560; key k0561; key k0562; key k0563; key k0564; - key k0565; key k0566; key k0567; key k0568; key k0569; - key k0570; key k0571; key k0572; key k0573; key k0574; - key k0575; key k0576; key k0577; key k0578; key k0579; - key k0580; key k0581; key k0582; key k0583; key k0584; - key k0585; key k0586; key k0587; key k0588; key k0589; - key k0590; key k0591; key k0592; key k0593; key k0594; - key k0595; key k0596; key k0597; key k0598; key k0599; - key k0600; key k0601; key k0602; key k0603; key k0604; - key k0605; key k0606; key k0607; key k0608; key k0609; - key k0610; key k0611; key k0612; key k0613; key k0614; - key k0615; key k0616; key k0617; key k0618; key k0619; - key k0620; key k0621; key k0622; key k0623; key k0624; - key k0625; key k0626; key k0627; key k0628; key k0629; - key k0630; key k0631; key k0632; key k0633; key k0634; - key k0635; key k0636; key k0637; key k0638; key k0639; - key k0640; key k0641; key k0642; key k0643; key k0644; - key k0645; key k0646; key k0647; key k0648; key k0649; - key k0650; key k0651; key k0652; key k0653; key k0654; - key k0655; key k0656; key k0657; key k0658; key k0659; - key k0660; key k0661; key k0662; key k0663; key k0664; - key k0665; key k0666; key k0667; key k0668; key k0669; - key k0670; key k0671; key k0672; key k0673; key k0674; - key k0675; key k0676; key k0677; key k0678; key k0679; - key k0680; key k0681; key k0682; key k0683; key k0684; - key k0685; key k0686; key k0687; key k0688; key k0689; - key k0690; key k0691; key k0692; key k0693; key k0694; - key k0695; key k0696; key k0697; key k0698; key k0699; - key k0700; key k0701; key k0702; key k0703; key k0704; - key k0705; key k0706; key k0707; key k0708; key k0709; - key k0710; key k0711; key k0712; key k0713; key k0714; - key k0715; key k0716; key k0717; key k0718; key k0719; - key k0720; key k0721; key k0722; key k0723; key k0724; - key k0725; key k0726; key k0727; key k0728; key k0729; - key k0730; key k0731; key k0732; key k0733; key k0734; - key k0735; key k0736; key k0737; key k0738; key k0739; - key k0740; key k0741; key k0742; key k0743; key k0744; - key k0745; key k0746; key k0747; key k0748; key k0749; - key k0750; key k0751; key k0752; key k0753; key k0754; - key k0755; key k0756; key k0757; key k0758; key k0759; - key k0760; key k0761; key k0762; key k0763; key k0764; - key k0765; key k0766; key k0767; key k0768; key k0769; - key k0770; key k0771; key k0772; key k0773; key k0774; - key k0775; key k0776; key k0777; key k0778; key k0779; - key k0780; key k0781; key k0782; key k0783; key k0784; - key k0785; key k0786; key k0787; key k0788; key k0789; - key k0790; key k0791; key k0792; key k0793; key k0794; - key k0795; key k0796; key k0797; key k0798; key k0799; - key k0800; key k0801; key k0802; key k0803; key k0804; - key k0805; key k0806; key k0807; key k0808; key k0809; - key k0810; key k0811; key k0812; key k0813; key k0814; - key k0815; key k0816; key k0817; key k0818; key k0819; - key k0820; key k0821; key k0822; key k0823; key k0824; - key k0825; key k0826; key k0827; key k0828; key k0829; - key k0830; key k0831; key k0832; key k0833; key k0834; - key k0835; key k0836; key k0837; key k0838; key k0839; - key k0840; key k0841; key k0842; key k0843; key k0844; - key k0845; key k0846; key k0847; key k0848; key k0849; - key k0850; key k0851; key k0852; key k0853; key k0854; - key k0855; key k0856; key k0857; key k0858; key k0859; - key k0860; key k0861; key k0862; key k0863; key k0864; - key k0865; key k0866; key k0867; key k0868; key k0869; - key k0870; key k0871; key k0872; key k0873; key k0874; - key k0875; key k0876; key k0877; key k0878; key k0879; - key k0880; key k0881; key k0882; key k0883; key k0884; - key k0885; key k0886; key k0887; key k0888; key k0889; - key k0890; key k0891; key k0892; key k0893; key k0894; - key k0895; key k0896; key k0897; key k0898; key k0899; - key k0900; key k0901; key k0902; key k0903; key k0904; - key k0905; key k0906; key k0907; key k0908; key k0909; - key k0910; key k0911; key k0912; key k0913; key k0914; - key k0915; key k0916; key k0917; key k0918; key k0919; - key k0920; key k0921; key k0922; key k0923; key k0924; - key k0925; key k0926; key k0927; key k0928; key k0929; - key k0930; key k0931; key k0932; key k0933; key k0934; - key k0935; key k0936; key k0937; key k0938; key k0939; - key k0940; key k0941; key k0942; key k0943; key k0944; - key k0945; key k0946; key k0947; key k0948; key k0949; - key k0950; key k0951; key k0952; key k0953; key k0954; - key k0955; key k0956; key k0957; key k0958; key k0959; - key k0960; key k0961; key k0962; key k0963; key k0964; - key k0965; key k0966; key k0967; key k0968; key k0969; - key k0970; key k0971; key k0972; key k0973; key k0974; - key k0975; key k0976; key k0977; key k0978; key k0979; - key k0980; key k0981; key k0982; key k0983; key k0984; - key k0985; key k0986; key k0987; key k0988; key k0989; - key k0990; key k0991; key k0992; key k0993; key k0994; - key k0995; key k0996; key k0997; key k0998; key k0999; - key k1000; key k1001; key k1002; key k1003; key k1004; - key k1005; key k1006; key k1007; key k1008; key k1009; - key k1010; key k1011; key k1012; key k1013; key k1014; - key k1015; key k1016; key k1017; key k1018; key k1019; - key k1020; key k1021; key k1022; key k1023; key k1024; - key k1025; key k1026; key k1027; key k1028; key k1029; - key k1030; key k1031; key k1032; key k1033; key k1034; - key k1035; key k1036; key k1037; key k1038; key k1039; - key k1040; key k1041; key k1042; key k1043; key k1044; - key k1045; key k1046; key k1047; key k1048; key k1049; - key k1050; key k1051; key k1052; key k1053; key k1054; - key k1055; key k1056; key k1057; key k1058; key k1059; - key k1060; key k1061; key k1062; key k1063; key k1064; - key k1065; key k1066; key k1067; key k1068; key k1069; - key k1070; key k1071; key k1072; key k1073; key k1074; - key k1075; key k1076; key k1077; key k1078; key k1079; - key k1080; key k1081; key k1082; key k1083; key k1084; - key k1085; key k1086; key k1087; key k1088; key k1089; - key k1090; key k1091; key k1092; key k1093; key k1094; - key k1095; key k1096; key k1097; key k1098; key k1099; - key k1100; key k1101; key k1102; key k1103; key k1104; - key k1105; key k1106; key k1107; key k1108; key k1109; - key k1110; key k1111; key k1112; key k1113; key k1114; - key k1115; key k1116; key k1117; key k1118; key k1119; - key k1120; key k1121; key k1122; key k1123; key k1124; - key k1125; key k1126; key k1127; key k1128; key k1129; - key k1130; key k1131; key k1132; key k1133; key k1134; - key k1135; key k1136; key k1137; key k1138; key k1139; - key k1140; key k1141; key k1142; key k1143; key k1144; - key k1145; key k1146; key k1147; key k1148; key k1149; - key k1150; key k1151; key k1152; key k1153; key k1154; - key k1155; key k1156; key k1157; key k1158; key k1159; - key k1160; key k1161; key k1162; key k1163; key k1164; - key k1165; key k1166; key k1167; key k1168; key k1169; - key k1170; key k1171; key k1172; key k1173; key k1174; - key k1175; key k1176; key k1177; key k1178; key k1179; - key k1180; key k1181; key k1182; key k1183; key k1184; - key k1185; key k1186; key k1187; key k1188; key k1189; - key k1190; key k1191; key k1192; key k1193; key k1194; - key k1195; key k1196; key k1197; key k1198; key k1199; - key k1200; key k1201; key k1202; key k1203; key k1204; - key k1205; key k1206; key k1207; key k1208; key k1209; - key k1210; key k1211; key k1212; key k1213; key k1214; - key k1215; key k1216; key k1217; key k1218; key k1219; - key k1220; key k1221; key k1222; key k1223; key k1224; - key k1225; key k1226; key k1227; key k1228; key k1229; - key k1230; key k1231; key k1232; key k1233; key k1234; - key k1235; key k1236; key k1237; key k1238; key k1239; - key k1240; key k1241; key k1242; key k1243; key k1244; - key k1245; key k1246; key k1247; key k1248; key k1249; - key k1250; key k1251; key k1252; key k1253; key k1254; - key k1255; key k1256; key k1257; key k1258; key k1259; - key k1260; key k1261; key k1262; key k1263; key k1264; - key k1265; key k1266; key k1267; key k1268; key k1269; - key k1270; key k1271; key k1272; key k1273; key k1274; - key k1275; key k1276; key k1277; key k1278; key k1279; - key k1280; key k1281; key k1282; key k1283; key k1284; - key k1285; key k1286; key k1287; key k1288; key k1289; - key k1290; key k1291; key k1292; key k1293; key k1294; - key k1295; key k1296; key k1297; key k1298; key k1299; - key k1300; key k1301; key k1302; key k1303; key k1304; - key k1305; key k1306; key k1307; key k1308; key k1309; - key k1310; key k1311; key k1312; key k1313; key k1314; - key k1315; key k1316; key k1317; key k1318; key k1319; - key k1320; key k1321; key k1322; key k1323; key k1324; - key k1325; key k1326; key k1327; key k1328; key k1329; - key k1330; key k1331; key k1332; key k1333; key k1334; - key k1335; key k1336; key k1337; key k1338; key k1339; - key k1340; key k1341; key k1342; key k1343; key k1344; - key k1345; key k1346; key k1347; key k1348; key k1349; - key k1350; key k1351; key k1352; key k1353; key k1354; - key k1355; key k1356; key k1357; key k1358; key k1359; - key k1360; key k1361; key k1362; key k1363; key k1364; - key k1365; key k1366; key k1367; key k1368; key k1369; - key k1370; key k1371; key k1372; key k1373; key k1374; - key k1375; key k1376; key k1377; key k1378; key k1379; - key k1380; key k1381; key k1382; key k1383; key k1384; - key k1385; key k1386; key k1387; key k1388; key k1389; - key k1390; key k1391; key k1392; key k1393; key k1394; - key k1395; key k1396; key k1397; key k1398; key k1399; - key k1400; key k1401; key k1402; key k1403; key k1404; - key k1405; key k1406; key k1407; key k1408; key k1409; - key k1410; key k1411; key k1412; key k1413; key k1414; - key k1415; key k1416; key k1417; key k1418; key k1419; - key k1420; key k1421; key k1422; key k1423; key k1424; - key k1425; key k1426; key k1427; key k1428; key k1429; - key k1430; key k1431; key k1432; key k1433; key k1434; - key k1435; key k1436; key k1437; key k1438; key k1439; - key k1440; key k1441; key k1442; key k1443; key k1444; - key k1445; key k1446; key k1447; key k1448; key k1449; - key k1450; key k1451; key k1452; key k1453; key k1454; - key k1455; key k1456; key k1457; key k1458; key k1459; - key k1460; key k1461; key k1462; key k1463; key k1464; - key k1465; key k1466; key k1467; key k1468; key k1469; - key k1470; key k1471; key k1472; key k1473; key k1474; - key k1475; key k1476; key k1477; key k1478; key k1479; - key k1480; key k1481; key k1482; key k1483; key k1484; - key k1485; key k1486; key k1487; key k1488; key k1489; - key k1490; key k1491; key k1492; key k1493; key k1494; - key k1495; key k1496; key k1497; key k1498; key k1499; - key k1500; key k1501; key k1502; key k1503; key k1504; - key k1505; key k1506; key k1507; key k1508; key k1509; - key k1510; key k1511; key k1512; key k1513; key k1514; - key k1515; key k1516; key k1517; key k1518; key k1519; - key k1520; key k1521; key k1522; key k1523; key k1524; - key k1525; key k1526; key k1527; key k1528; key k1529; - key k1530; key k1531; key k1532; key k1533; key k1534; - key k1535; key k1536; key k1537; key k1538; key k1539; - key k1540; key k1541; key k1542; key k1543; key k1544; - key k1545; key k1546; key k1547; key k1548; key k1549; - key k1550; key k1551; key k1552; key k1553; key k1554; - key k1555; key k1556; key k1557; key k1558; key k1559; - key k1560; key k1561; key k1562; key k1563; key k1564; - key k1565; key k1566; key k1567; key k1568; key k1569; - key k1570; key k1571; key k1572; key k1573; key k1574; - key k1575; key k1576; key k1577; key k1578; key k1579; - key k1580; key k1581; key k1582; key k1583; key k1584; - key k1585; key k1586; key k1587; key k1588; key k1589; - key k1590; key k1591; key k1592; key k1593; key k1594; - key k1595; key k1596; key k1597; key k1598; key k1599; - key k1600; key k1601; key k1602; key k1603; key k1604; - key k1605; key k1606; key k1607; key k1608; key k1609; - key k1610; key k1611; key k1612; key k1613; key k1614; - key k1615; key k1616; key k1617; key k1618; key k1619; - key k1620; key k1621; key k1622; key k1623; key k1624; - key k1625; key k1626; key k1627; key k1628; key k1629; - key k1630; key k1631; key k1632; key k1633; key k1634; - key k1635; key k1636; key k1637; key k1638; key k1639; - key k1640; key k1641; key k1642; key k1643; key k1644; - key k1645; key k1646; key k1647; key k1648; key k1649; - key k1650; key k1651; key k1652; key k1653; key k1654; - key k1655; key k1656; key k1657; key k1658; key k1659; - key k1660; key k1661; key k1662; key k1663; key k1664; - key k1665; key k1666; key k1667; key k1668; key k1669; - key k1670; key k1671; key k1672; key k1673; key k1674; - key k1675; key k1676; key k1677; key k1678; key k1679; - key k1680; key k1681; key k1682; key k1683; key k1684; - key k1685; key k1686; key k1687; key k1688; key k1689; - key k1690; key k1691; key k1692; key k1693; key k1694; - key k1695; key k1696; key k1697; key k1698; key k1699; - key k1700; key k1701; key k1702; key k1703; key k1704; - key k1705; key k1706; key k1707; key k1708; key k1709; - key k1710; key k1711; key k1712; key k1713; key k1714; - key k1715; key k1716; key k1717; key k1718; key k1719; - key k1720; key k1721; key k1722; key k1723; key k1724; - key k1725; key k1726; key k1727; key k1728; key k1729; - key k1730; key k1731; key k1732; key k1733; key k1734; - key k1735; key k1736; key k1737; key k1738; key k1739; - key k1740; key k1741; key k1742; key k1743; key k1744; - key k1745; key k1746; key k1747; key k1748; key k1749; - key k1750; key k1751; key k1752; key k1753; key k1754; - key k1755; key k1756; key k1757; key k1758; key k1759; - key k1760; key k1761; key k1762; key k1763; key k1764; - key k1765; key k1766; key k1767; key k1768; key k1769; - key k1770; key k1771; key k1772; key k1773; key k1774; - key k1775; key k1776; key k1777; key k1778; key k1779; - key k1780; key k1781; key k1782; key k1783; key k1784; - key k1785; key k1786; key k1787; key k1788; key k1789; - key k1790; key k1791; key k1792; key k1793; key k1794; - key k1795; key k1796; key k1797; key k1798; key k1799; - key k1800; key k1801; key k1802; key k1803; key k1804; - key k1805; key k1806; key k1807; key k1808; key k1809; - key k1810; key k1811; key k1812; key k1813; key k1814; - key k1815; key k1816; key k1817; key k1818; key k1819; - key k1820; key k1821; key k1822; key k1823; key k1824; - key k1825; key k1826; key k1827; key k1828; key k1829; - key k1830; key k1831; key k1832; key k1833; key k1834; - key k1835; key k1836; key k1837; key k1838; key k1839; - key k1840; key k1841; key k1842; key k1843; key k1844; - key k1845; key k1846; key k1847; key k1848; key k1849; - key k1850; key k1851; key k1852; key k1853; key k1854; - key k1855; key k1856; key k1857; key k1858; key k1859; - key k1860; key k1861; key k1862; key k1863; key k1864; - key k1865; key k1866; key k1867; key k1868; key k1869; - key k1870; key k1871; key k1872; key k1873; key k1874; - key k1875; key k1876; key k1877; key k1878; key k1879; - key k1880; key k1881; key k1882; key k1883; key k1884; - key k1885; key k1886; key k1887; key k1888; key k1889; - key k1890; key k1891; key k1892; key k1893; key k1894; - key k1895; key k1896; key k1897; key k1898; key k1899; - key k1900; key k1901; key k1902; key k1903; key k1904; - key k1905; key k1906; key k1907; key k1908; key k1909; - key k1910; key k1911; key k1912; key k1913; key k1914; - key k1915; key k1916; key k1917; key k1918; key k1919; - key k1920; key k1921; key k1922; key k1923; key k1924; - key k1925; key k1926; key k1927; key k1928; key k1929; - key k1930; key k1931; key k1932; key k1933; key k1934; - key k1935; key k1936; key k1937; key k1938; key k1939; - key k1940; key k1941; key k1942; key k1943; key k1944; - key k1945; key k1946; key k1947; key k1948; key k1949; - key k1950; key k1951; key k1952; key k1953; key k1954; - key k1955; key k1956; key k1957; key k1958; key k1959; - key k1960; key k1961; key k1962; key k1963; key k1964; - key k1965; key k1966; key k1967; key k1968; key k1969; - key k1970; key k1971; key k1972; key k1973; key k1974; - key k1975; key k1976; key k1977; key k1978; key k1979; - key k1980; key k1981; key k1982; key k1983; key k1984; - key k1985; key k1986; key k1987; key k1988; key k1989; - key k1990; key k1991; key k1992; key k1993; key k1994; - key k1995; key k1996; key k1997; key k1998; key k1999; - key k2000; key k2001; key k2002; key k2003; key k2004; - key k2005; key k2006; key k2007; key k2008; key k2009; - key k2010; key k2011; key k2012; key k2013; key k2014; - key k2015; key k2016; key k2017; key k2018; key k2019; - key k2020; key k2021; key k2022; key k2023; key k2024; - key k2025; key k2026; key k2027; key k2028; key k2029; - key k2030; key k2031; key k2032; key k2033; key k2034; - key k2035; key k2036; key k2037; key k2038; key k2039; - key k2040; key k2041; key k2042; key k2043; key k2044; - key k2045; key k2046; key k2047; key k2048; key k2049; - key k2050; key k2051; key k2052; key k2053; key k2054; - key k2055; key k2056; key k2057; key k2058; key k2059; - key k2060; key k2061; key k2062; key k2063; key k2064; - key k2065; key k2066; key k2067; key k2068; key k2069; - key k2070; key k2071; key k2072; key k2073; key k2074; - key k2075; key k2076; key k2077; key k2078; key k2079; - key k2080; key k2081; key k2082; key k2083; key k2084; - key k2085; key k2086; key k2087; key k2088; key k2089; - key k2090; key k2091; key k2092; key k2093; key k2094; - key k2095; key k2096; key k2097; key k2098; key k2099; - key k2100; key k2101; key k2102; key k2103; key k2104; - key k2105; key k2106; key k2107; key k2108; key k2109; - key k2110; key k2111; key k2112; key k2113; key k2114; - key k2115; key k2116; key k2117; key k2118; key k2119; - key k2120; key k2121; key k2122; key k2123; key k2124; - key k2125; key k2126; key k2127; key k2128; key k2129; - key k2130; key k2131; key k2132; key k2133; key k2134; - key k2135; key k2136; key k2137; key k2138; key k2139; - key k2140; key k2141; key k2142; key k2143; key k2144; - key k2145; key k2146; key k2147; key k2148; key k2149; - key k2150; key k2151; key k2152; key k2153; key k2154; - key k2155; key k2156; key k2157; key k2158; key k2159; - key k2160; key k2161; key k2162; key k2163; key k2164; - key k2165; key k2166; key k2167; key k2168; key k2169; - key k2170; key k2171; key k2172; key k2173; key k2174; - key k2175; key k2176; key k2177; key k2178; key k2179; - key k2180; key k2181; key k2182; key k2183; key k2184; - key k2185; key k2186; key k2187; key k2188; key k2189; - key k2190; key k2191; key k2192; key k2193; key k2194; - key k2195; key k2196; key k2197; key k2198; key k2199; - key k2200; key k2201; key k2202; key k2203; key k2204; - key k2205; key k2206; key k2207; key k2208; key k2209; - key k2210; key k2211; key k2212; key k2213; key k2214; - key k2215; key k2216; key k2217; key k2218; key k2219; - key k2220; key k2221; key k2222; key k2223; key k2224; - key k2225; key k2226; key k2227; key k2228; key k2229; - key k2230; key k2231; key k2232; key k2233; key k2234; - key k2235; key k2236; key k2237; key k2238; key k2239; - key k2240; key k2241; key k2242; key k2243; key k2244; - key k2245; key k2246; key k2247; key k2248; key k2249; - key k2250; key k2251; key k2252; key k2253; key k2254; - key k2255; key k2256; key k2257; key k2258; key k2259; - key k2260; key k2261; key k2262; key k2263; key k2264; - key k2265; key k2266; key k2267; key k2268; key k2269; - key k2270; key k2271; key k2272; key k2273; key k2274; - key k2275; key k2276; key k2277; key k2278; key k2279; - key k2280; key k2281; key k2282; key k2283; key k2284; - key k2285; key k2286; key k2287; key k2288; key k2289; - key k2290; key k2291; key k2292; key k2293; key k2294; - key k2295; key k2296; key k2297; key k2298; key k2299; - key k2300; key k2301; key k2302; key k2303; key k2304; - key k2305; key k2306; key k2307; key k2308; key k2309; - key k2310; key k2311; key k2312; key k2313; key k2314; - key k2315; key k2316; key k2317; key k2318; key k2319; - key k2320; key k2321; key k2322; key k2323; key k2324; - key k2325; key k2326; key k2327; key k2328; key k2329; - key k2330; key k2331; key k2332; key k2333; key k2334; - key k2335; key k2336; key k2337; key k2338; key k2339; - key k2340; key k2341; key k2342; key k2343; key k2344; - key k2345; key k2346; key k2347; key k2348; key k2349; - key k2350; key k2351; key k2352; key k2353; key k2354; - key k2355; key k2356; key k2357; key k2358; key k2359; - key k2360; key k2361; key k2362; key k2363; key k2364; - key k2365; key k2366; key k2367; key k2368; key k2369; - key k2370; key k2371; key k2372; key k2373; key k2374; - key k2375; key k2376; key k2377; key k2378; key k2379; - key k2380; key k2381; key k2382; key k2383; key k2384; - key k2385; key k2386; key k2387; key k2388; key k2389; - key k2390; key k2391; key k2392; key k2393; key k2394; - key k2395; key k2396; key k2397; key k2398; key k2399; - key k2400; key k2401; key k2402; key k2403; key k2404; - key k2405; key k2406; key k2407; key k2408; key k2409; - key k2410; key k2411; key k2412; key k2413; key k2414; - key k2415; key k2416; key k2417; key k2418; key k2419; - key k2420; key k2421; key k2422; key k2423; key k2424; - key k2425; key k2426; key k2427; key k2428; key k2429; - key k2430; key k2431; key k2432; key k2433; key k2434; - key k2435; key k2436; key k2437; key k2438; key k2439; - key k2440; key k2441; key k2442; key k2443; key k2444; - key k2445; key k2446; key k2447; key k2448; key k2449; - key k2450; key k2451; key k2452; key k2453; key k2454; - key k2455; key k2456; key k2457; key k2458; key k2459; - key k2460; key k2461; key k2462; key k2463; key k2464; - key k2465; key k2466; key k2467; key k2468; key k2469; - key k2470; key k2471; key k2472; key k2473; key k2474; - key k2475; key k2476; key k2477; key k2478; key k2479; - key k2480; key k2481; key k2482; key k2483; key k2484; - key k2485; key k2486; key k2487; key k2488; key k2489; - key k2490; key k2491; key k2492; key k2493; key k2494; - key k2495; key k2496; key k2497; key k2498; key k2499; - key k2500; key k2501; key k2502; key k2503; key k2504; - key k2505; key k2506; key k2507; key k2508; key k2509; - key k2510; key k2511; key k2512; key k2513; key k2514; - key k2515; key k2516; key k2517; key k2518; key k2519; - key k2520; key k2521; key k2522; key k2523; key k2524; - key k2525; key k2526; key k2527; key k2528; key k2529; - key k2530; key k2531; key k2532; key k2533; key k2534; - key k2535; key k2536; key k2537; key k2538; key k2539; - key k2540; key k2541; key k2542; key k2543; key k2544; - key k2545; key k2546; key k2547; key k2548; key k2549; - key k2550; key k2551; key k2552; key k2553; key k2554; - key k2555; key k2556; key k2557; key k2558; key k2559; - key k2560; key k2561; key k2562; key k2563; key k2564; - key k2565; key k2566; key k2567; key k2568; key k2569; - key k2570; key k2571; key k2572; key k2573; key k2574; - key k2575; key k2576; key k2577; key k2578; key k2579; - key k2580; key k2581; key k2582; key k2583; key k2584; - key k2585; key k2586; key k2587; key k2588; key k2589; - key k2590; key k2591; key k2592; key k2593; key k2594; - key k2595; key k2596; key k2597; key k2598; key k2599; - key k2600; key k2601; key k2602; key k2603; key k2604; - key k2605; key k2606; key k2607; key k2608; key k2609; - key k2610; key k2611; key k2612; key k2613; key k2614; - key k2615; key k2616; key k2617; key k2618; key k2619; - key k2620; key k2621; key k2622; key k2623; key k2624; - key k2625; key k2626; key k2627; key k2628; key k2629; - key k2630; key k2631; key k2632; key k2633; key k2634; - key k2635; key k2636; key k2637; key k2638; key k2639; - key k2640; key k2641; key k2642; key k2643; key k2644; - key k2645; key k2646; key k2647; key k2648; key k2649; - key k2650; key k2651; key k2652; key k2653; key k2654; - key k2655; key k2656; key k2657; key k2658; key k2659; - key k2660; key k2661; key k2662; key k2663; key k2664; - key k2665; key k2666; key k2667; key k2668; key k2669; - key k2670; key k2671; key k2672; key k2673; key k2674; - key k2675; key k2676; key k2677; key k2678; key k2679; - key k2680; key k2681; key k2682; key k2683; key k2684; - key k2685; key k2686; key k2687; key k2688; key k2689; - key k2690; key k2691; key k2692; key k2693; key k2694; - key k2695; key k2696; key k2697; key k2698; key k2699; - key k2700; key k2701; key k2702; key k2703; key k2704; - key k2705; key k2706; key k2707; key k2708; key k2709; - key k2710; key k2711; key k2712; key k2713; key k2714; - key k2715; key k2716; key k2717; key k2718; key k2719; - key k2720; key k2721; key k2722; key k2723; key k2724; - key k2725; key k2726; key k2727; key k2728; key k2729; - key k2730; key k2731; key k2732; key k2733; key k2734; - key k2735; key k2736; key k2737; key k2738; key k2739; - key k2740; key k2741; key k2742; key k2743; key k2744; - key k2745; key k2746; key k2747; key k2748; key k2749; - key k2750; key k2751; key k2752; key k2753; key k2754; - key k2755; key k2756; key k2757; key k2758; key k2759; - key k2760; key k2761; key k2762; key k2763; key k2764; - key k2765; key k2766; key k2767; key k2768; key k2769; - key k2770; key k2771; key k2772; key k2773; key k2774; - key k2775; key k2776; key k2777; key k2778; key k2779; - key k2780; key k2781; key k2782; key k2783; key k2784; - key k2785; key k2786; key k2787; key k2788; key k2789; - key k2790; key k2791; key k2792; key k2793; key k2794; - key k2795; key k2796; key k2797; key k2798; key k2799; - key k2800; key k2801; key k2802; key k2803; key k2804; - key k2805; key k2806; key k2807; key k2808; key k2809; - key k2810; key k2811; key k2812; key k2813; key k2814; - key k2815; key k2816; key k2817; key k2818; key k2819; - key k2820; key k2821; key k2822; key k2823; key k2824; - key k2825; key k2826; key k2827; key k2828; key k2829; - key k2830; key k2831; key k2832; key k2833; key k2834; - key k2835; key k2836; key k2837; key k2838; key k2839; - key k2840; key k2841; key k2842; key k2843; key k2844; - key k2845; key k2846; key k2847; key k2848; key k2849; - key k2850; key k2851; key k2852; key k2853; key k2854; - key k2855; key k2856; key k2857; key k2858; key k2859; - key k2860; key k2861; key k2862; key k2863; key k2864; - key k2865; key k2866; key k2867; key k2868; key k2869; - key k2870; key k2871; key k2872; key k2873; key k2874; - key k2875; key k2876; key k2877; key k2878; key k2879; - key k2880; key k2881; key k2882; key k2883; key k2884; - key k2885; key k2886; key k2887; key k2888; key k2889; - key k2890; key k2891; key k2892; key k2893; key k2894; - key k2895; key k2896; key k2897; key k2898; key k2899; - key k2900; key k2901; key k2902; key k2903; key k2904; - key k2905; key k2906; key k2907; key k2908; key k2909; - key k2910; key k2911; key k2912; key k2913; key k2914; - key k2915; key k2916; key k2917; key k2918; key k2919; - key k2920; key k2921; key k2922; key k2923; key k2924; - key k2925; key k2926; key k2927; key k2928; key k2929; - key k2930; key k2931; key k2932; key k2933; key k2934; - key k2935; key k2936; key k2937; key k2938; key k2939; - key k2940; key k2941; key k2942; key k2943; key k2944; - key k2945; key k2946; key k2947; key k2948; key k2949; - key k2950; key k2951; key k2952; key k2953; key k2954; - key k2955; key k2956; key k2957; key k2958; key k2959; - key k2960; key k2961; key k2962; key k2963; key k2964; - key k2965; key k2966; key k2967; key k2968; key k2969; - key k2970; key k2971; key k2972; key k2973; key k2974; - key k2975; key k2976; key k2977; key k2978; key k2979; - key k2980; key k2981; key k2982; key k2983; key k2984; - key k2985; key k2986; key k2987; key k2988; key k2989; - key k2990; key k2991; key k2992; key k2993; key k2994; - key k2995; key k2996; key k2997; key k2998; key k2999; - key k3000; key k3001; key k3002; key k3003; key k3004; - key k3005; key k3006; key k3007; key k3008; key k3009; - key k3010; key k3011; key k3012; key k3013; key k3014; - key k3015; key k3016; key k3017; key k3018; key k3019; - key k3020; key k3021; key k3022; key k3023; key k3024; - key k3025; key k3026; key k3027; key k3028; key k3029; - key k3030; key k3031; key k3032; key k3033; key k3034; - key k3035; key k3036; key k3037; key k3038; key k3039; - key k3040; key k3041; key k3042; key k3043; key k3044; - key k3045; key k3046; key k3047; key k3048; key k3049; - key k3050; key k3051; key k3052; key k3053; key k3054; - key k3055; key k3056; key k3057; key k3058; key k3059; - key k3060; key k3061; key k3062; key k3063; key k3064; - key k3065; key k3066; key k3067; key k3068; key k3069; - key k3070; key k3071; key k3072; key k3073; key k3074; - key k3075; key k3076; key k3077; key k3078; key k3079; - key k3080; key k3081; key k3082; key k3083; key k3084; - key k3085; key k3086; key k3087; key k3088; key k3089; - key k3090; key k3091; key k3092; key k3093; key k3094; - key k3095; key k3096; key k3097; key k3098; key k3099; - key k3100; key k3101; key k3102; key k3103; key k3104; - key k3105; key k3106; key k3107; key k3108; key k3109; - key k3110; key k3111; key k3112; key k3113; key k3114; - key k3115; key k3116; key k3117; key k3118; key k3119; - key k3120; key k3121; key k3122; key k3123; key k3124; - key k3125; key k3126; key k3127; key k3128; key k3129; - key k3130; key k3131; key k3132; key k3133; key k3134; - key k3135; key k3136; key k3137; key k3138; key k3139; - key k3140; key k3141; key k3142; key k3143; key k3144; - key k3145; key k3146; key k3147; key k3148; key k3149; - key k3150; key k3151; key k3152; key k3153; key k3154; - key k3155; key k3156; key k3157; key k3158; key k3159; - key k3160; key k3161; key k3162; key k3163; key k3164; - key k3165; key k3166; key k3167; key k3168; key k3169; - key k3170; key k3171; key k3172; key k3173; key k3174; - key k3175; key k3176; key k3177; key k3178; key k3179; - key k3180; key k3181; key k3182; key k3183; key k3184; - key k3185; key k3186; key k3187; key k3188; key k3189; - key k3190; key k3191; key k3192; key k3193; key k3194; - key k3195; key k3196; key k3197; key k3198; key k3199; - key k3200; key k3201; key k3202; key k3203; key k3204; - key k3205; key k3206; key k3207; key k3208; key k3209; - key k3210; key k3211; key k3212; key k3213; key k3214; - key k3215; key k3216; key k3217; key k3218; key k3219; - key k3220; key k3221; key k3222; key k3223; key k3224; - key k3225; key k3226; key k3227; key k3228; key k3229; - key k3230; key k3231; key k3232; key k3233; key k3234; - key k3235; key k3236; key k3237; key k3238; key k3239; - key k3240; key k3241; key k3242; key k3243; key k3244; - key k3245; key k3246; key k3247; key k3248; key k3249; - key k3250; key k3251; key k3252; key k3253; key k3254; - key k3255; key k3256; key k3257; key k3258; key k3259; - key k3260; key k3261; key k3262; key k3263; key k3264; - key k3265; key k3266; key k3267; key k3268; key k3269; - key k3270; key k3271; key k3272; key k3273; key k3274; - key k3275; key k3276; key k3277; key k3278; key k3279; - key k3280; key k3281; key k3282; key k3283; key k3284; - key k3285; key k3286; key k3287; key k3288; key k3289; - key k3290; key k3291; key k3292; key k3293; key k3294; - key k3295; key k3296; key k3297; key k3298; key k3299; - key k3300; key k3301; key k3302; key k3303; key k3304; - key k3305; key k3306; key k3307; key k3308; key k3309; - key k3310; key k3311; key k3312; key k3313; key k3314; - key k3315; key k3316; key k3317; key k3318; key k3319; - key k3320; key k3321; key k3322; key k3323; key k3324; - key k3325; key k3326; key k3327; key k3328; key k3329; - key k3330; key k3331; key k3332; key k3333; key k3334; - key k3335; key k3336; key k3337; key k3338; key k3339; - key k3340; key k3341; key k3342; key k3343; key k3344; - key k3345; key k3346; key k3347; key k3348; key k3349; - key k3350; key k3351; key k3352; key k3353; key k3354; - key k3355; key k3356; key k3357; key k3358; key k3359; - key k3360; key k3361; key k3362; key k3363; key k3364; - key k3365; key k3366; key k3367; key k3368; key k3369; - key k3370; key k3371; key k3372; key k3373; key k3374; - key k3375; key k3376; key k3377; key k3378; key k3379; - key k3380; key k3381; key k3382; key k3383; key k3384; - key k3385; key k3386; key k3387; key k3388; key k3389; - key k3390; key k3391; key k3392; key k3393; key k3394; - key k3395; key k3396; key k3397; key k3398; key k3399; - fn1(){jump x; @x;} fn2(){integer i3; i4=0; s3=""; fn1(); state another;} + fn1(){jump x; @x;} fn2(){integer i3; i4=0; s3=""; fn1(); + if (1) state another;} default { timer() { state another; } state_exit() {} } state another { timer() { state default; } touch(integer num_det) {} } ''', @@ -1016,6 +350,34 @@ class Test03_Optimizer(UnitTestCase): self.opt.optimize(p, ['optimize','shrinknames']) print self.outscript.output(p) + p = self.parser.parse( + '''integer i1; integer i2; integer i3; integer i4; integer i5; + string a1; string a2; string a3; string a4; string a5; + string b1; string b2; string b3; string b4; string b5; + string c1; string c2; string c3; string c4; string c5; + string d1; string d2; string d3; string d4; string d5; + string e1; string e2; string e3; string e4; string e5; + string f1; string f2; string f3; string f4; string f5; + string g1; string g2; string g3; string g4; string g5; + string h1; string h2; string h3; string h4; string h5; + string j1; string j2; string j3; string j4; string j5; + string k1; string k2; string k3; string k4; string k5; + string l1; string l2; string l3; string l4; string l5; + string m1; string m2; string m3; string m4; string m5; + string n1; string n2; string n3; string n4; string n5; + string o1; string o2; string o3; string o4; string o5; + string p1; string p2; string p3; string p4; string p5; + string s1; string s2; string s3; string s4; string s5;''' + + ''.join('key k'+str(i).zfill(4)+';\n' for i in xrange(3400)) + + '''fn1(){jump x; @x;} fn2(){integer i3; i4=0; s3=""; fn1(); + if (1) state another;} + default { timer() { state another; } state_exit() {} } + state another { timer() { state default; } touch(integer num_det) {} } + ''', + ['optimize', 'shrinknames'] + ) + self.opt.optimize(p, ['optimize','shrinknames']) + p = self.parser.parse( '''integer i1; integer i2; f(integer a, integer b, integer c, integer d, integer e){}