Mercurial > hg > graal-compiler
diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Source.java @ 15630:2d63ce48d222
Truffle/Source Attribution: Replace direct creation of SourceSection objects with factory methods on Source; two of these greatly simplify source attribution by automatically computing either the row/column start location from a character offset or vice versa, depending on what?s made available from the parser. Minor API change on Visualizer.
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Tue, 13 May 2014 18:28:33 -0700 |
parents | c54f5fa05fd5 |
children | ebdeb414d64c |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Source.java Mon May 12 21:29:29 2014 -0700 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Source.java Tue May 13 18:28:33 2014 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,8 @@ import java.io.*; +import com.oracle.truffle.api.source.*; + /** * Represents a unit (typically a file) of guest language source code. */ @@ -97,4 +99,61 @@ */ int getLineLength(int lineNumber); + /** + * Creates a representation of a contiguous region of text in the source. Computes the + * {@code (startLine, startColumn)} values by building a {@linkplain TextMap map} of lines in + * the source. + * <p> + * Checks the position arguments for consistency with the source. + * <p> + * The resulting representation defines hash/equality around equivalent location, presuming that + * {@link Source} representations are cannonical. + * + * + * @param identifier terse description of the region + * @param charIndex 0-based position of the first character in the section + * @param length the number of characters in the section + * @return newly created object representing the specified region + * @throws IllegalArgumentException if either of the arguments are outside the text of the + * source + * @throws IllegalStateException if the source is one of the "null" instances + */ + SourceSection createSection(String identifier, int charIndex, int length) throws IllegalArgumentException, IllegalStateException; + + /** + * Creates a representation of a contiguous region of text in the source. Computes the + * {@code charIndex} value by building a {@linkplain TextMap map} of lines in the source. + * <p> + * Checks the position arguments for consistency with the source. + * <p> + * The resulting representation defines hash/equality around equivalent location, presuming that + * {@link Source} representations are cannonical. + * + * @param identifier terse description of the region + * @param startLine 1-based line number of the first character in the section + * @param startColumn 1-based column number of the first character in the section + * @param length the number of characters in the section + * @return newly created object representing the specified region + * @throws IllegalArgumentException if arguments are outside the text of the source + * @throws IllegalStateException if the source is one of the "null" instances + */ + SourceSection createSection(String identifier, int startLine, int startColumn, int length); + + /** + * Creates a representation of a contiguous region of text in the source. + * <p> + * This method performs no checks on the validity of the arguments. + * <p> + * The resulting representation defines hash/equality around equivalent location, presuming that + * {@link Source} representations are cannonical. + * + * @param identifier terse description of the region + * @param startLine 1-based line number of the first character in the section + * @param startColumn 1-based column number of the first character in the section + * @param charIndex the 0-based index of the first character of the section + * @param length the number of characters in the section + * @return newly created object representing the specified region + */ + SourceSection createSection(String identifier, int startLine, int startColumn, int charIndex, int length); + }