#endif
using namespace std;
-#include "warn.hh"
#include "file-name-map.hh"
+#include "international.hh"
+#include "warn.hh"
void
Source_file::load_stdin ()
{
length_ = 0;
-
+ chs_.clear ();
int c;
- Array<char> chs; // ugh.
while ((c = fgetc (stdin)) != EOF)
- chs.push (c);
+ chs_.push_back (c);
- chs.push (0);
- length_ = chs.size ();
- contents_str0_ = chs.remove_array ();
+ chs_.push_back (0);
+ length_ = chs_.size ();
+ contents_str0_ = &chs_[0];
}
char *
-gulp_file (String filename, int *filesize)
+gulp_file (string filename, int *filesize)
{
/* "b" must ensure to open literally, avoiding text (CR/LF)
conversions. */
return str;
}
-Source_file::Source_file (String filename, String data)
+Source_file::Source_file (string filename, string data)
{
name_ = filename;
istream_ = 0;
- contents_str0_ = data.get_copy_str0 ();
length_ = data.length ();
+ contents_str0_ = string_copy (data);
pos_str0_ = c_str ();
init_port ();
for (int i = 0; i < length_; i++)
if (contents_str0_[i] == '\n')
- newline_locations_.push (contents_str0_ + i);
+ newline_locations_.push_back (contents_str0_ + i);
}
-Source_file::Source_file (String filename_string)
+Source_file::Source_file (string filename_string)
{
name_ = filename_string;
istream_ = 0;
for (int i = 0; i < length_; i++)
if (contents_str0_[i] == '\n')
- newline_locations_.push (contents_str0_ + i);
+ newline_locations_.push_back (contents_str0_ + i);
}
void
{
SCM str = scm_makfrom0str (contents_str0_);
str_port_ = scm_mkstrport (SCM_INUM0, str, SCM_OPN | SCM_RDNG, __FUNCTION__);
- scm_set_port_filename_x (str_port_, scm_makfrom0str (name_.get_str0 ()));
+ scm_set_port_filename_x (str_port_, scm_makfrom0str (name_.c_str ()));
}
int
return istream_;
}
-String
+string
Source_file::file_line_column_string (char const *context_str0) const
{
if (!c_str ())
}
}
-String
+string
Source_file::quote_input (char const *pos_str0) const
{
if (!contains (pos_str0))
int l, ch, col;
get_counts (pos_str0, &l, &ch, &col);
- String line = line_string (pos_str0);
- String context = line.left_string (ch)
+ string line = line_string (pos_str0);
+ string context = line.substr (0, ch)
+ to_string ('\n')
+ to_string (' ', col)
- + line.cut_string (ch, INT_MAX);
+ + line.substr (ch, line.length()-ch);
return context;
}
-String
+string
Source_file::name_string () const
{
return map_file_name (name_);
return Slice (begin_str0 - data_str0, end_str0 - data_str0);
}
-String
+string
Source_file::line_string (char const *pos_str0) const
{
if (!contains (pos_str0))
Slice line = line_slice (pos_str0);
char const *data_str0 = c_str ();
- return String ((Byte const *)data_str0 + line[LEFT], line.length ());
+ return string (data_str0 + line[LEFT], line.length ());
}
void
Slice line = line_slice (pos_str0);
char const *data = c_str ();
- Byte const *line_start = (Byte const *)data + line[LEFT];
+ char const *line_start = (char const *)data + line[LEFT];
- int left = (Byte const *) pos_str0 - line_start;
- String line_begin (line_start, left);
+ ssize left = (char const *) pos_str0 - line_start;
+ string line_begin (line_start, left);
char const *line_chars = line_begin.c_str ();
*column = 0;
if (!newline_locations_.size ())
return 1;
- int lo = 0;
- int hi = newline_locations_.size ();
+ vsize lo = 0;
+ vsize hi = newline_locations_.size ();
if (newline_locations_[lo] > pos_str0)
return 1;
return hi;
binary_search_bounds (newline_locations_,
- pos_str0,
- Link_array<char>::default_compare,
+ (char const*&)pos_str0,
+ default_compare,
&lo, &hi);
if (*pos_str0 == '\n')
return old_pos;
}
-String
+string
Source_file::get_string (int n)
{
- String str = String ((Byte const *)forward_str0 (n), n);
+ string str = string ((char const *)forward_str0 (n), n);
return str;
}