protected override void RuleDidSucceed(object result, StringParserState.Element stateAtStart, StringParserState.Element stateAtEnd) { // Apply DebugMetadata based on the state at the start of the rule // (i.e. use line number as it was at the start of the rule) var parsedObj = result as Parsed.Object; if ( parsedObj) { var md = new Runtime.DebugMetadata (); md.startLineNumber = stateAtStart.lineIndex + 1; md.endLineNumber = stateAtEnd.lineIndex + 1; md.fileName = _filename; parsedObj.debugMetadata = md; return; } // A list of objects that doesn't already have metadata? var parsedListObjs = result as List<Parsed.Object>; if (parsedListObjs != null) { foreach (var parsedListObj in parsedListObjs) { if (!parsedListObj.hasOwnDebugMetadata) { var md = new Runtime.DebugMetadata (); md.startLineNumber = stateAtStart.lineIndex + 1; md.endLineNumber = stateAtEnd.lineIndex + 1; md.fileName = _filename; parsedListObj.debugMetadata = md; } } } }
public StringParser(string str) { str = PreProcessInputString(str); state = new StringParserState(); if (str != null) { _chars = str.ToCharArray(); } else { _chars = new char[0]; } inputString = str; }
protected override void RuleDidSucceed(object result, StringParserState.Element stateAtStart, StringParserState.Element stateAtEnd) { // Apply DebugMetadata based on the state at the start of the rule // (i.e. use line number as it was at the start of the rule) var parsedObj = result as Parsed.Object; if ( parsedObj) { var md = new Runtime.DebugMetadata (); md.startLineNumber = stateAtStart.lineIndex + 1; md.endLineNumber = stateAtEnd.lineIndex + 1; md.fileName = _filename; parsedObj.debugMetadata = md; } }