@Override protected void addForLineNumber(int $line, java.util.List<AbstractAST> $result) { if (getLocation().getBeginLine() == $line) { $result.add(this); } ISourceLocation $l; $l = constant.getLocation(); if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) { constant.addForLineNumber($line, $result); } if ($l.getBeginLine() > $line) { return; } }
@Override protected IStatus run(IProgressMonitor monitor) { monitor.beginTask("Parsing", 105); try { handler.clearMessages(); IGTD<IConstructor, IConstructor, ISourceLocation> gtd = new ClojureParser(); parseTree = (IConstructor) gtd.parse( START_SORT, URI.create(path.toString()), input.toCharArray(), new DefaultNodeFlattener<IConstructor, IConstructor, ISourceLocation>(), new UPTRNodeFactory()); } catch (ParseError pe) { int offset = pe.getOffset(); if (offset == input.length()) --offset; handler.handleSimpleMessage( "parse error", offset, offset + pe.getLength(), pe.getBeginColumn(), pe.getEndColumn(), pe.getBeginLine() + 1, pe.getEndLine() + 1); } catch (Throw e) { IValue exc = e.getException(); if (exc.getType() == RuntimeExceptionFactory.Exception) { if (((IConstructor) exc).getConstructorType() == RuntimeExceptionFactory.ParseError) { ISourceLocation loc = (ISourceLocation) ((IConstructor) e.getException()).get(0); handler.handleSimpleMessage( "parse error: " + loc, loc.getOffset(), loc.getOffset() + loc.getLength(), loc.getBeginColumn(), loc.getEndColumn(), loc.getBeginLine(), loc.getEndLine()); } else { Activator.getInstance().logException(e.getMessage(), e); } } } catch (Throwable e) { Activator.getInstance().logException("parsing failed: " + e.getMessage(), e); } finally { monitor.done(); } return Status.OK_STATUS; }
@Override public String getMessage() { if (loc != null) { URI url = loc.getURI(); return (url.getScheme().equals("file") ? (url.getAuthority() + url.getPath()) : url) + ":" + loc.getBeginLine() + "," + loc.getBeginColumn() + ": " + super.getMessage(); } // TODO remove once all errors have locations return super.getMessage(); }
public void report() { List<Map.Entry<AbstractAST, Count>> sortedData = sortData(); int maxURL = 1; long nTicks = 0; for (Map.Entry<AbstractAST, Count> e : sortedData) { URI url = e.getKey().getLocation().getURI(); int sz = url.toString().length(); if (sz > maxURL) maxURL = sz; nTicks += e.getValue().getTicks(); } PrintWriter out = eval.getStdOut(); String URLFormat = "%" + maxURL + "s"; out.printf( "PROFILE: %d data points, %d ticks, tick = %d milliSecs\n", data.size(), nTicks, resolution); out.printf(URLFormat + "%11s%8s%9s %s\n", " Source File", "Lines", "Ticks", "%", "Source"); for (Map.Entry<AbstractAST, Count> e : sortedData) { ISourceLocation L = e.getKey().getLocation(); String uri = L.getURI().toString(); String filePrefix = "file://"; if (uri.startsWith(filePrefix)) uri = uri.substring(filePrefix.length()); int bgn = L.getBeginLine(); int end = L.getEndLine(); String range = (end == bgn) ? Integer.toString(bgn) : bgn + ".." + end; int ticks = e.getValue().getTicks(); double perc = (ticks * 100.0) / nTicks; String source = String.format( "%-30.30s", e.getKey().toString().replaceFirst("^[\\s]+", "").replaceAll("[\\s]+", " ")); out.printf(URLFormat + "%11s%8d%8.1f%% %s\n", uri, range, ticks, perc, source); } // Make sure that our output is seen: out.flush(); }
public Object loadPT(IConstructor[] fileRef, String sourcePath, String sourceName) { IConstructor file = fileRef[0]; ISourceLocation loc = TreeAdapter.getLocation(file); int lineNumber = loc.getBeginLine(); Object ret = null; Var.pushThreadBindings( RT.map( LOADER, RT.makeClassLoader(), SOURCE_PATH, sourcePath, SOURCE, sourceName, METHOD, null, LOCAL_ENV, null, LOOP_LOCALS, null, NEXT_LOCAL_NUM, 0, RT.CURRENT_NS, RT.CURRENT_NS.deref(), LINE_BEFORE, lineNumber, LINE_AFTER, lineNumber, RT.UNCHECKED_MATH, RT.UNCHECKED_MATH.deref(), RT.WARN_ON_REFLECTION, RT.WARN_ON_REFLECTION.deref(), RT.DATA_READERS, RT.DATA_READERS.deref())); UPTRLispReader reader = new UPTRLispReader(vf, errors); try { if (TreeAdapter.isAmb(file)) { System.err.println("Amb"); } // File is start[File], so IConstructor file2 = (IConstructor) TreeAdapter.getArgs(file).get(1); IList args = TreeAdapter.getArgs(file2); // Probably only this is the list of forms; don't forget to fix // below. IList forms = TreeAdapter.getArgs((IConstructor) args.get(0)); IListWriter newArgs = vf.listWriter(); for (int i = 0; i < forms.length(); i++) { IConstructor form = (IConstructor) forms.get(i); // only forms, no literals at this level. UPTRLispReader.Pair p = reader.read(form); newArgs.append(p.tree); LINE_AFTER.set(TreeAdapter.getLocation(form).getEndLine()); ret = eval(p.obj, false); LINE_BEFORE.set(TreeAdapter.getLocation(form).getBeginLine()); if (i < forms.length() - 2) { i++; newArgs.append(forms.get(i)); // layout } } // Fix tree file2 = file2.set("args", newArgs.done()); file = file.set( "args", vf.list(TreeAdapter.getArgs(file).get(0), file2, TreeAdapter.getArgs(file).get(2))); } catch (UPTRLispReader.ReaderException e) { throw new CompilerException(sourcePath, e.line, e.getCause()); } finally { Var.popThreadBindings(); } fileRef[0] = file; return ret; }