public static Expr GetResourceString(ICall call) { var ctx = call.Ctx; var expr = new ExprLiteral(ctx, "<GetRuntimeResourceString>", ctx.String); return(expr); }
public static Expr GetResourceFromDefault(ICall call) { var ctx = call.Ctx; var pre = new ExprLiteral(ctx, "GetResourceFromDefault_", ctx.String); var expr = new ExprBinary(ctx, BinaryOp.Add, ctx.String, pre, call.Args.First()); return(expr); }
public static Stmt GetHashCode(Ctx ctx) { var acc = new ExprVarLocal(ctx, ctx.Int32).Named("acc"); var i = new ExprVarLocal(ctx, ctx.Int32).Named("i"); var mask = new ExprLiteral(ctx, 0x7fffffff, ctx.Int32).Named("mask"); var js = @" acc = 5381; for (i = Math.min(this.length - 1,100); i >= 0; i--) acc = ((acc << 5) + acc + this.charCodeAt(i)) & mask; return acc;"; var stmt = new StmtJsExplicit(ctx, js, ctx.ThisNamed, acc, i, mask); return(stmt); }
internal static Pattern Compile(Expression e) { if (e is ExprUNION) { return(new UnionPattern(Pattern.Compile(((ExprUNION)e).left), Pattern.Compile(((ExprUNION)e).right))); } if (e is ExprRoot) { return(new LocationPathPattern(new NodeTypeTest(Axes.Self, XPathNodeType.Root))); } if (e is NodeTest) { return(new LocationPathPattern((NodeTest)e)); } if (e is ExprFilter) { return(new LocationPathPattern((ExprFilter)e)); } if (e is ExprSLASH) { Pattern prev = Pattern.Compile(((ExprSLASH)e).left); LocationPathPattern locationPathPattern = (LocationPathPattern)Pattern.Compile(((ExprSLASH)e).right); locationPathPattern.SetPreviousPattern(prev, false); return(locationPathPattern); } if (e is ExprSLASH2) { if (((ExprSLASH2)e).left is ExprRoot) { return(Pattern.Compile(((ExprSLASH2)e).right)); } Pattern prev2 = Pattern.Compile(((ExprSLASH2)e).left); LocationPathPattern locationPathPattern2 = (LocationPathPattern)Pattern.Compile(((ExprSLASH2)e).right); locationPathPattern2.SetPreviousPattern(prev2, true); return(locationPathPattern2); } else { if (e is XPathFunctionId) { ExprLiteral exprLiteral = ((XPathFunctionId)e).Id as ExprLiteral; return(new IdPattern(exprLiteral.Value)); } if (e is XsltKey) { return(new KeyPattern((XsltKey)e)); } return(null); } }
protected override IRecordSetterNext SetGeneric(ExprColumnName column, ExprLiteral value) { var record = this._record.AssertFatalNotNull(nameof(this._record)); if (this._capacity.HasValue && record.Count == this._capacity) { throw new SqExpressException($"Number of columns on {this.Index+1} iteration exceeds number of columns on the first one"); } record.Add(value); if (!this._capacity.HasValue) { this._columns.Add(column); } return(this); }
protected override void BooleanVisitLiteral(ExprLiteral e) { if (e.IsLiteralBoolean(true)) { this.stack.Push(true); } else if (e.IsLiteralBoolean(false)) { this.stack.Push(false); } else { throw new NotSupportedException("This should never occur - non-boolean literal in boolean expression"); } }
protected override ICode VisitLiteral(ExprLiteral e) { if (e.Value == null) { this.code.Append("null"); } else if (e.Type.IsString()) { this.code.Append("\"" + e.Value + "\""); } else if (e.Type.IsChar()) { this.code.Append("'" + e.Value + "'"); } else { this.code.Append(e.Value); } return(e); }
/** the generated parser. Maintains a state and a value stack, currently with fixed maximum size. @param yyLex scanner. @return result of the last reduction, if any. @throws yyException on irrecoverable parse error. */ internal Object yyparse (yyParser.yyInput yyLex) { if (yyMax <= 0) yyMax = 256; // initial size int yyState = 0; // state stack ptr int [] yyStates; // state stack yyVal = null; yyToken = -1; int yyErrorFlag = 0; // #tks to shift if (use_global_stacks && global_yyStates != null) { yyVals = global_yyVals; yyStates = global_yyStates; } else { yyVals = new object [yyMax]; yyStates = new int [yyMax]; if (use_global_stacks) { global_yyVals = yyVals; global_yyStates = yyStates; } } /*yyLoop:*/ for (yyTop = 0;; ++ yyTop) { if (yyTop >= yyStates.Length) { // dynamically increase global::System.Array.Resize (ref yyStates, yyStates.Length+yyMax); global::System.Array.Resize (ref yyVals, yyVals.Length+yyMax); } yyStates[yyTop] = yyState; yyVals[yyTop] = yyVal; if (debug != null) debug.push(yyState, yyVal); /*yyDiscarded:*/ while (true) { // discarding a token does not change stack int yyN; if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce (yyN) if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; if (debug != null) debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value()); } if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) { if (debug != null) debug.shift(yyState, yyTable[yyN], yyErrorFlag-1); yyState = yyTable[yyN]; // shift to yyN yyVal = yyLex.value(); yyToken = -1; if (yyErrorFlag > 0) -- yyErrorFlag; goto continue_yyLoop; } if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == yyToken) yyN = yyTable[yyN]; // reduce (yyN) else switch (yyErrorFlag) { case 0: yyExpectingState = yyState; // yyerror(String.Format ("syntax error, got token `{0}'", yyname (yyToken)), yyExpecting(yyState)); if (debug != null) debug.error("syntax error"); if (yyToken == 0 /*eof*/ || yyToken == eof_token) throw new yyParser.yyUnexpectedEof (); goto case 1; case 1: case 2: yyErrorFlag = 3; do { if ((yyN = yySindex[yyStates[yyTop]]) != 0 && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == Token.yyErrorCode) { if (debug != null) debug.shift(yyStates[yyTop], yyTable[yyN], 3); yyState = yyTable[yyN]; yyVal = yyLex.value(); goto continue_yyLoop; } if (debug != null) debug.pop(yyStates[yyTop]); } while (-- yyTop >= 0); if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error"); case 3: if (yyToken == 0) { if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error at end-of-file"); } if (debug != null) debug.discard(yyState, yyToken, yyname(yyToken), yyLex.value()); yyToken = -1; goto continue_yyDiscarded; // leave stack alone } } int yyV = yyTop + 1-yyLen[yyN]; if (debug != null) debug.reduce(yyState, yyStates[yyV-1], yyN, YYRules.getRule (yyN), yyLen[yyN]); yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 2: #line 175 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprUNION ((NodeSet) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 3: #line 182 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprRoot (); } break; case 4: #line 186 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH (new ExprRoot (), (NodeSet) yyVals[0+yyTop]); } break; case 6: #line 191 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 7: #line 195 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH2 ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 8: #line 199 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH2 (new ExprRoot (), (NodeSet) yyVals[0+yyTop]); } break; case 10: case_10(); break; case 11: case_11(); break; case 13: #line 235 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 14: #line 239 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH2 ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 15: #line 246 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = CreateNodeTest ((Axes) yyVals[-2+yyTop], yyVals[-1+yyTop], (ArrayList) yyVals[0+yyTop]); } break; case 17: #line 254 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Child; } break; case 18: #line 258 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Attribute; } break; case 19: #line 265 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = null; } break; case 20: case_20(); break; case 23: #line 288 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprOR ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 25: #line 296 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprAND ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 27: #line 304 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprEQ ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 28: #line 308 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprNE ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 30: #line 316 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprLT ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 31: #line 320 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprGT ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 32: #line 324 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprLE ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 33: #line 328 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprGE ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 35: #line 336 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprPLUS ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 36: #line 340 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprMINUS ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 38: #line 348 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprMULT ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 39: #line 352 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprDIV ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 40: #line 356 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprMOD ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 42: #line 364 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprNEG ((Expression) yyVals[0+yyTop]); } break; case 44: #line 372 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprUNION ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 47: #line 381 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 48: #line 385 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH2 ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 51: #line 397 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprRoot (); } break; case 52: #line 401 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH (new ExprRoot (), (NodeSet) yyVals[0+yyTop]); } break; case 53: #line 405 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH2 (new ExprRoot (), (NodeSet) yyVals[0+yyTop]); } break; case 55: #line 413 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH ((NodeSet) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 56: #line 417 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprSLASH2 ((NodeSet) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 57: #line 424 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = CreateNodeTest ((Axes) yyVals[-2+yyTop], yyVals[-1+yyTop], (ArrayList) yyVals[0+yyTop]); } break; case 60: #line 433 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = (XPathNodeType) yyVals[-2+yyTop]; } break; case 61: #line 437 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = (string) yyVals[-1+yyTop]; } break; case 62: #line 444 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = XmlQualifiedName.Empty; } break; case 64: #line 452 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new NodeTypeTest (Axes.Self, XPathNodeType.All); } break; case 65: #line 456 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new NodeTypeTest (Axes.Parent, XPathNodeType.All); } break; case 66: #line 463 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = null; } break; case 67: case_67(); break; case 68: #line 478 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 70: #line 486 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Child; } break; case 71: #line 490 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Attribute; } break; case 72: #line 494 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = XPathNodeType.Comment; } break; case 73: #line 495 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = XPathNodeType.Text; } break; case 74: #line 496 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = XPathNodeType.ProcessingInstruction; } break; case 75: #line 497 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = XPathNodeType.All; } break; case 77: #line 506 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprFilter ((Expression) yyVals[-1+yyTop], (Expression) yyVals[0+yyTop]); } break; case 78: case_78(); break; case 79: #line 524 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprParens ((Expression) yyVals[-1+yyTop]); } break; case 80: #line 528 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprLiteral ((String) yyVals[0+yyTop]); } break; case 81: #line 532 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new ExprNumber ((double) yyVals[0+yyTop]); } break; case 83: case_83(); break; case 85: #line 554 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new FunctionArguments ((Expression) yyVals[-1+yyTop], (FunctionArguments) yyVals[0+yyTop]); } break; case 87: #line 562 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = new FunctionArguments ((Expression) yyVals[-1+yyTop], (FunctionArguments) yyVals[0+yyTop]); } break; case 88: #line 569 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 89: #line 573 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Ancestor; } break; case 90: #line 574 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.AncestorOrSelf; } break; case 91: #line 575 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Attribute; } break; case 92: #line 576 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Child; } break; case 93: #line 577 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Descendant; } break; case 94: #line 578 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.DescendantOrSelf; } break; case 95: #line 579 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Following; } break; case 96: #line 580 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.FollowingSibling; } break; case 97: #line 581 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Namespace; } break; case 98: #line 582 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Parent; } break; case 99: #line 583 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Preceding; } break; case 100: #line 584 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.PrecedingSibling; } break; case 101: #line 585 "C:\DEV\SharpLang\src\mcs\class\System.XML\\Mono.Xml.Xsl\PatternParser.jay" { yyVal = Axes.Self; } break; #line default } yyTop -= yyLen[yyN]; yyState = yyStates[yyTop]; int yyM = yyLhs[yyN]; if (yyState == 0 && yyM == 0) { if (debug != null) debug.shift(0, yyFinal); yyState = yyFinal; if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; if (debug != null) debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value()); } if (yyToken == 0) { if (debug != null) debug.accept(yyVal); return yyVal; } goto continue_yyLoop; } if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState)) yyState = yyTable[yyN]; else yyState = yyDgoto[yyM]; if (debug != null) debug.shift(yyStates[yyTop], yyState); goto continue_yyLoop; continue_yyDiscarded: ; // implements the named-loop continue: 'continue yyDiscarded' } continue_yyLoop: ; // implements the named-loop continue: 'continue yyLoop' } }
protected override ICode VisitLiteral(ExprLiteral e) { if (e.Value == null) { this.js.Append("null"); } else { object value; var mdt = e.Type.MetadataType; switch (mdt) { case MetadataType.String: var s = (string)e.Value; var sb = new StringBuilder(s.Length + 2); sb.Append("\""); for (int i = 0; i < s.Length; i++) { var c = s[i]; if ((int)c >= 32 && c <= 126 && c != '\\' && c != '\'' && c != '"') { sb.Append(c); } else { if ((int)c <= 255) { sb.AppendFormat("\\x{0:x2}", (int)c); } else { sb.AppendFormat("\\u{0:x4}", (int)c); } } } sb.Append("\""); value = sb.ToString(); break; case MetadataType.Char: value = (int)(char)e.Value; break; case MetadataType.Boolean: value = (bool)e.Value ? "true" : "false"; break; case MetadataType.Int64: var i64 = (UInt64)(Int64)e.Value; value = string.Format("[{0}, {1}]", (i64 >> 32) & 0xffffffffUL, i64 & 0xffffffffUL); break; case MetadataType.UInt64: var u64 = (UInt64)e.Value; value = string.Format("[{0}, {1}]", (u64 >> 32) & 0xffffffffUL, u64 & 0xffffffffUL); break; case MetadataType.Single: var f = (Single)e.Value; if (Single.IsNegativeInfinity(f)) { value = "Number.NEGATIVE_INFINITY"; } else if (Single.IsPositiveInfinity(f)) { value = "Number.POSITIVE_INFINITY"; } else { value = f; } break; case MetadataType.Double: var d = (Double)e.Value; if (Double.IsNegativeInfinity(d)) { value = "Number.NEGATIVE_INFINITY"; } else if (Double.IsPositiveInfinity(d)) { value = "Number.POSITIVE_INFINITY"; } else { value = d; } break; default: value = e.Value; break; } this.js.Append(value); } return(e); }
/** the generated parser. Maintains a state and a value stack, currently with fixed maximum size. @param yyLex scanner. @return result of the last reduction, if any. @throws yyException on irrecoverable parse error. */ internal Object yyparse (yyParser.yyInput yyLex) { if (yyMax <= 0) yyMax = 256; // initial size int yyState = 0; // state stack ptr int [] yyStates = new int[yyMax]; // state stack Object yyVal = null; // value stack ptr Object [] yyVals = new Object[yyMax]; // value stack int yyToken = -1; // current input int yyErrorFlag = 0; // #tks to shift /*yyLoop:*/ for (int yyTop = 0;; ++ yyTop) { if (yyTop >= yyStates.Length) { // dynamically increase int[] i = new int[yyStates.Length+yyMax]; yyStates.CopyTo (i, 0); yyStates = i; Object[] o = new Object[yyVals.Length+yyMax]; yyVals.CopyTo (o, 0); yyVals = o; } yyStates[yyTop] = yyState; yyVals[yyTop] = yyVal; if (debug != null) debug.push(yyState, yyVal); /*yyDiscarded:*/ for (;;) { // discarding a token does not change stack int yyN; if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce (yyN) if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; if (debug != null) debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value()); } if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) { if (debug != null) debug.shift(yyState, yyTable[yyN], yyErrorFlag-1); yyState = yyTable[yyN]; // shift to yyN yyVal = yyLex.value(); yyToken = -1; if (yyErrorFlag > 0) -- yyErrorFlag; goto continue_yyLoop; } if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == yyToken) yyN = yyTable[yyN]; // reduce (yyN) else switch (yyErrorFlag) { case 0: yyExpectingState = yyState; // yyerror(String.Format ("syntax error, got token `{0}'", yyname (yyToken)), yyExpecting(yyState)); if (debug != null) debug.error("syntax error"); if (yyToken == 0 /*eof*/ || yyToken == eof_token) throw new yyParser.yyUnexpectedEof (); goto case 1; case 1: case 2: yyErrorFlag = 3; do { if ((yyN = yySindex[yyStates[yyTop]]) != 0 && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == Token.yyErrorCode) { if (debug != null) debug.shift(yyStates[yyTop], yyTable[yyN], 3); yyState = yyTable[yyN]; yyVal = yyLex.value(); goto continue_yyLoop; } if (debug != null) debug.pop(yyStates[yyTop]); } while (-- yyTop >= 0); if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error"); case 3: if (yyToken == 0) { if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error at end-of-file"); } if (debug != null) debug.discard(yyState, yyToken, yyname(yyToken), yyLex.value()); yyToken = -1; goto continue_yyDiscarded; // leave stack alone } } int yyV = yyTop + 1-yyLen[yyN]; if (debug != null) debug.reduce(yyState, yyStates[yyV-1], yyN, YYRules.getRule (yyN), yyLen[yyN]); yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 2: #line 170 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprUNION ((NodeSet) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 3: #line 177 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprRoot (); } break; case 4: #line 181 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH (new ExprRoot (), (NodeSet) yyVals[0+yyTop]); } break; case 6: #line 186 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 7: #line 190 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH2 ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 8: #line 194 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH2 (new ExprRoot (), (NodeSet) yyVals[0+yyTop]); } break; case 10: #line 203 "Mono.Xml.Xsl/PatternParser.jay" { XmlQualifiedName name = (XmlQualifiedName) yyVals[-3+yyTop]; if (name.Name != "id" || name.Namespace != String.Empty) throw new XPathException (String.Format ("Expected 'id' but got '{0}'", name)); yyVal = ExprFunctionCall.Factory (name, new FunctionArguments ( new ExprLiteral ((string) yyVals[-1+yyTop]), null), Context); } break; case 11: #line 214 "Mono.Xml.Xsl/PatternParser.jay" { XmlQualifiedName name = (XmlQualifiedName) yyVals[-5+yyTop]; if (name.Name != "key" || name.Namespace != String.Empty) throw new XPathException (String.Format ("Expected 'key' but got '{0}'", name)); yyVal = Context.TryGetFunction (name, new FunctionArguments ( new ExprLiteral ((string) yyVals[-3+yyTop]), new FunctionArguments ( new ExprLiteral ((string) yyVals[-1+yyTop]), null))); } break; case 13: #line 230 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 14: #line 234 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH2 ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 15: #line 241 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = CreateNodeTest ((Axes) yyVals[-2+yyTop], yyVals[-1+yyTop], (ArrayList) yyVals[0+yyTop]); } break; case 17: #line 249 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Child; } break; case 18: #line 253 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Attribute; } break; case 19: #line 260 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = null; } break; case 20: #line 264 "Mono.Xml.Xsl/PatternParser.jay" { ArrayList al = (ArrayList) yyVals[-1+yyTop]; if (al == null) al = new ArrayList (); al.Add ((Expression) yyVals[0+yyTop]); yyVal = al; } break; case 23: #line 283 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprOR ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 25: #line 291 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprAND ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 27: #line 299 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprEQ ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 28: #line 303 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprNE ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 30: #line 311 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprLT ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 31: #line 315 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprGT ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 32: #line 319 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprLE ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 33: #line 323 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprGE ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 35: #line 331 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprPLUS ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 36: #line 335 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprMINUS ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 38: #line 343 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprMULT ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 39: #line 347 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprDIV ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 40: #line 351 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprMOD ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 42: #line 359 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprNEG ((Expression) yyVals[0+yyTop]); } break; case 44: #line 367 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprUNION ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 47: #line 376 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 48: #line 380 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH2 ((Expression) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 51: #line 392 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprRoot (); } break; case 52: #line 396 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH (new ExprRoot (), (NodeSet) yyVals[0+yyTop]); } break; case 53: #line 400 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH2 (new ExprRoot (), (NodeSet) yyVals[0+yyTop]); } break; case 55: #line 408 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH ((NodeSet) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 56: #line 412 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprSLASH2 ((NodeSet) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]); } break; case 57: #line 419 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = CreateNodeTest ((Axes) yyVals[-2+yyTop], yyVals[-1+yyTop], (ArrayList) yyVals[0+yyTop]); } break; case 60: #line 428 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = (XPathNodeType) yyVals[-2+yyTop]; } break; case 61: #line 432 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = (string) yyVals[-1+yyTop]; } break; case 62: #line 439 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = XmlQualifiedName.Empty; } break; case 64: #line 447 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new NodeTypeTest (Axes.Self, XPathNodeType.All); } break; case 65: #line 451 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new NodeTypeTest (Axes.Parent, XPathNodeType.All); } break; case 66: #line 458 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = null; } break; case 67: #line 462 "Mono.Xml.Xsl/PatternParser.jay" { ArrayList al = (ArrayList) yyVals[-1+yyTop]; if (al == null) al = new ArrayList (); al.Add (yyVals[0+yyTop]); yyVal = al; } break; case 68: #line 473 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 70: #line 481 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Child; } break; case 71: #line 485 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Attribute; } break; case 72: #line 491 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = XPathNodeType.Comment; } break; case 73: #line 492 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = XPathNodeType.Text; } break; case 74: #line 493 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = XPathNodeType.ProcessingInstruction; } break; case 75: #line 494 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = XPathNodeType.All; } break; case 77: #line 501 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprFilter ((Expression) yyVals[-1+yyTop], (Expression) yyVals[0+yyTop]); } break; case 78: #line 508 "Mono.Xml.Xsl/PatternParser.jay" { Expression ret = null; if (Context != null) ret = Context.TryGetVariable (((XmlQualifiedName) yyVals[0+yyTop]).ToString ()); if (ret == null) ret = new ExprVariable ((XmlQualifiedName) yyVals[0+yyTop], Context); yyVal = ret; } break; case 79: #line 519 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprParens ((Expression) yyVals[-1+yyTop]); } break; case 80: #line 523 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprLiteral ((String) yyVals[0+yyTop]); } break; case 81: #line 527 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new ExprNumber ((double) yyVals[0+yyTop]); } break; case 83: #line 535 "Mono.Xml.Xsl/PatternParser.jay" { Expression ret = null; if (Context != null) ret = Context.TryGetFunction ((XmlQualifiedName) yyVals[-3+yyTop], (FunctionArguments) yyVals[-1+yyTop]); if (ret == null) ret = ExprFunctionCall.Factory ((XmlQualifiedName) yyVals[-3+yyTop], (FunctionArguments) yyVals[-1+yyTop], Context); yyVal = ret; } break; case 85: #line 549 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new FunctionArguments ((Expression) yyVals[-1+yyTop], (FunctionArguments) yyVals[0+yyTop]); } break; case 87: #line 557 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = new FunctionArguments ((Expression) yyVals[-1+yyTop], (FunctionArguments) yyVals[0+yyTop]); } break; case 88: #line 564 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 89: #line 570 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Ancestor; } break; case 90: #line 571 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.AncestorOrSelf; } break; case 91: #line 572 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Attribute; } break; case 92: #line 573 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Child; } break; case 93: #line 574 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Descendant; } break; case 94: #line 575 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.DescendantOrSelf; } break; case 95: #line 576 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Following; } break; case 96: #line 577 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.FollowingSibling; } break; case 97: #line 578 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Namespace; } break; case 98: #line 579 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Parent; } break; case 99: #line 580 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Preceding; } break; case 100: #line 581 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.PrecedingSibling; } break; case 101: #line 582 "Mono.Xml.Xsl/PatternParser.jay" { yyVal = Axes.Self; } break; #line default } yyTop -= yyLen[yyN]; yyState = yyStates[yyTop]; int yyM = yyLhs[yyN]; if (yyState == 0 && yyM == 0) { if (debug != null) debug.shift(0, yyFinal); yyState = yyFinal; if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; if (debug != null) debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value()); } if (yyToken == 0) { if (debug != null) debug.accept(yyVal); return yyVal; } goto continue_yyLoop; } if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState)) yyState = yyTable[yyN]; else yyState = yyDgoto[yyM]; if (debug != null) debug.shift(yyStates[yyTop], yyState); goto continue_yyLoop; continue_yyDiscarded: continue; // implements the named-loop continue: 'continue yyDiscarded' } continue_yyLoop: continue; // implements the named-loop continue: 'continue yyLoop' } }
protected override IExprRecordSetterNext SetGeneric(ExprColumnName column, ExprLiteral value) => this.Set(column, value);
internal static Pattern Compile(Expression e) { if (e is ExprUNION) { return(new UnionPattern( Compile(((ExprUNION)e).left), Compile(((ExprUNION)e).right) )); } if (e is ExprRoot) { return(new LocationPathPattern( new NodeTypeTest(Axes.Self, XPathNodeType.Root) )); } if (e is NodeTest) { return(new LocationPathPattern( (NodeTest)e )); } if (e is ExprFilter) { return(new LocationPathPattern( (ExprFilter)e )); } if (e is ExprSLASH) { Pattern p0 = Compile(((ExprSLASH)e).left); LocationPathPattern p1 = (LocationPathPattern)Compile(((ExprSLASH)e).right); p1.SetPreviousPattern(p0, false); return(p1); } if (e is ExprSLASH2) { if (((ExprSLASH2)e).left is ExprRoot) { return(Compile(((ExprSLASH2)e).right)); } Pattern p0 = Compile(((ExprSLASH2)e).left); LocationPathPattern p1 = (LocationPathPattern)Compile(((ExprSLASH2)e).right); p1.SetPreviousPattern(p0, true); return(p1); } if (e is XPathFunctionId) { ExprLiteral id = ((XPathFunctionId)e).Id as ExprLiteral; return(new IdPattern(id.Value)); } if (e is XsltKey) { return(new KeyPattern((XsltKey)e)); } return(null); // throw Exception outer this method. }
protected virtual ICode VisitLiteral(ExprLiteral e) { this.ThrowOnNoOverride(); return(e); }
protected abstract TNext SetGeneric(ExprColumn column, ExprLiteral value);
public static Expr InitializeArray(ICall call) { var ctx = call.Ctx; var array = (ExprVar)call.Args.ElementAt(0); var initExpr = (ExprRuntimeHandle)call.Args.ElementAt(1); var initData = ((FieldDefinition)initExpr.Member).InitialValue; var arrayElType = ((ArrayType)array.Type).ElementType; int inc; Func <int, object> getValue; switch (arrayElType.MetadataType) { case MetadataType.Boolean: inc = 1; getValue = i => initData[i] != 0; break; case MetadataType.Byte: inc = 1; getValue = i => initData[i]; break; case MetadataType.SByte: inc = 1; getValue = i => (sbyte)initData[i]; break; case MetadataType.Int16: inc = 2; getValue = i => BitConverter.ToInt16(initData, i); break; case MetadataType.Int32: inc = 4; getValue = i => BitConverter.ToInt32(initData, i); break; case MetadataType.Int64: inc = 8; getValue = i => BitConverter.ToInt64(initData, i); break; case MetadataType.UInt16: inc = 2; getValue = i => BitConverter.ToUInt16(initData, i); break; case MetadataType.UInt32: inc = 4; getValue = i => BitConverter.ToUInt32(initData, i); break; case MetadataType.UInt64: inc = 8; getValue = i => BitConverter.ToUInt64(initData, i); break; case MetadataType.Single: inc = 4; getValue = i => BitConverter.ToSingle(initData, i); break; case MetadataType.Double: inc = 8; getValue = i => BitConverter.ToDouble(initData, i); break; case MetadataType.Char: inc = 2; getValue = i => (char)BitConverter.ToUInt16(initData, i); break; default: throw new NotImplementedException("Cannot handle: " + arrayElType.MetadataType); } var values = new List <NamedExpr>(); for (int i = 0; i < initData.Length; i += inc) { var value = new ExprLiteral(ctx, getValue(i), arrayElType); values.Add(value.Named("v" + i)); } var vStr = string.Join(",", values.Select(x => x.Name)); var arrayTypeName = new ExprJsTypeVarName(call.Ctx, array.Type).Named("typeName"); var js = "a = [" + vStr + "]; a._ = typeName"; return(new ExprJsExplicit(call.Ctx, js, array.Type, values.Concat(array.Named("a")).Concat(arrayTypeName))); }
protected virtual void BooleanVisitLiteral(ExprLiteral e) { }