/* zweic -- a compiler for zwei * * Stephane Micheloud & LAMP * * $Id$ */ package zweic; /** This class provides methods for encoding a location in * a source file (line/column) into a single integer. */ object Position { /** number of bits reserved for the column. */ val columnBits = 12; val columnMask = (1 << columnBits) - 1; /** undefined position */ val UNDEFINED = 0; /** first position in a source file */ val FIRST = (1 << columnBits) | 1; /** encode a line and column number into a single int */ def encode(line: Int, col: Int): Int = (line << columnBits) | (col & columnMask); /** get the line number out of an encoded position */ def line(pos: Int): Int = pos >>> columnBits; /** return the column number of an encoded position */ def column(pos: Int): Int = pos & columnMask; def toString(pos: Int) = line(pos).toString() + ":" + column(pos); }