|
29 | 29 | #include <cstring>
|
30 | 30 | #include <ctime>
|
31 | 31 | #include <sstream>
|
| 32 | +#include <climits> |
32 | 33 |
|
33 | 34 | #include "lineparser.h"
|
34 | 35 | #include "globaldata.h"
|
@@ -86,7 +87,8 @@ const LineParser::Token LineParser::m_gaTokenTable[] =
|
86 | 87 | { N("ERROR"), &LineParser::HandleError, 0 },
|
87 | 88 | { N("COPYBLOCK"), &LineParser::HandleCopyBlock, 0 },
|
88 | 89 | { N("RANDOMIZE"), &LineParser::HandleRandomize, 0 },
|
89 |
| - { N("ASM"), &LineParser::HandleAsm, 0 } |
| 90 | + { N("ASM"), &LineParser::HandleAsm, 0 }, |
| 91 | + { N("SOURCELINE"), &LineParser::HandleSourceLine, 0 } |
90 | 92 | };
|
91 | 93 |
|
92 | 94 | #undef N
|
@@ -1887,3 +1889,28 @@ void LineParser::HandleAsm()
|
1887 | 1889 |
|
1888 | 1890 | parser.HandleAssembler(instruction);
|
1889 | 1891 | }
|
| 1892 | + |
| 1893 | +/*************************************************************************************************/ |
| 1894 | +/** |
| 1895 | + LineParser::HandleSourceLine() |
| 1896 | +*/ |
| 1897 | +/*************************************************************************************************/ |
| 1898 | +void LineParser::HandleSourceLine() |
| 1899 | +{ |
| 1900 | + ArgListParser args(*this); |
| 1901 | + int line = args.ParseInt().Range(0, INT_MAX); |
| 1902 | + StringArg fileParam = args.ParseString(); |
| 1903 | + args.CheckComplete(); |
| 1904 | + |
| 1905 | + if (m_column != m_line.length()) |
| 1906 | + { |
| 1907 | + // This must be the last thing on the line |
| 1908 | + throw AsmException_SyntaxError_SourceLineNotLast( m_line, m_column ); |
| 1909 | + } |
| 1910 | + |
| 1911 | + m_sourceCode->SetLineNumber(line - 1); |
| 1912 | + if (fileParam.Found()) |
| 1913 | + { |
| 1914 | + m_sourceCode->SetFileName(static_cast<string>(fileParam)); |
| 1915 | + } |
| 1916 | +} |
0 commit comments