| 2170 | } |
| 2171 | |
| 2172 | SourceFile *ReadSource(Str *filename, Str *filedata) { |
| 2173 | SourceFile *result = new SourceFile(); |
| 2174 | result->filename = filename; |
| 2175 | Str *modulename = filename->clone(); |
| 2176 | for (Int i = 0; i < modulename->len(); i++) { |
| 2177 | char ch = modulename->at(i); |
| 2178 | if (ch >= 'a' && ch <= 'z') continue; |
| 2179 | if (ch >= 'A' && ch <= 'Z') continue; |
| 2180 | if (ch >= '0' && ch <= '9') continue; |
| 2181 | if (ch == '_') continue; |
| 2182 | modulename->at(i) = '_'; |
| 2183 | } |
| 2184 | result->modulename = modulename; |
| 2185 | if (!filedata) |
| 2186 | filedata = ReadFile(filename); |
| 2187 | result->filedata = filedata; |
| 2188 | if (!result->filedata) |
| 2189 | return NULL; |
| 2190 | Tokenize(result); |
| 2191 | return result; |
| 2192 | } |