From d6b370b8c611092474b9bd872589c2c995c03fc6 Mon Sep 17 00:00:00 2001 From: Chadnaut <63690461+Chadnaut@users.noreply.github.com> Date: Mon, 24 Aug 2026 19:56:10 +0800 Subject: [PATCH] Add Unit Lexer --- extlibs/PATCH.md | 9 +++++++++ extlibs/squirrel/squirrel/sqcompiler.cpp | 9 +++++++++ extlibs/squirrel/squirrel/sqlexer.cpp | 2 ++ extlibs/squirrel/squirrel/sqlexer.h | 1 + 4 files changed, 21 insertions(+) create mode 100644 extlibs/PATCH.md diff --git a/extlibs/PATCH.md b/extlibs/PATCH.md new file mode 100644 index 000000000..abdcaf23a --- /dev/null +++ b/extlibs/PATCH.md @@ -0,0 +1,9 @@ +# Patches + +Modifications (marked with `AM`) have been made to: + +- Squirrel + - [sqstdio.cpp](.\squirrel\sqstdlib\sqstdio.cpp) + - [sqcompiler.cpp](.\squirrel\squirrel\sqcompiler.cpp) + - [sqlexer.cpp](.\squirrel\squirrel\sqlexer.cpp) + - [sqlexer.h](.\squirrel\squirrel\sqlexer.h) \ No newline at end of file diff --git a/extlibs/squirrel/squirrel/sqcompiler.cpp b/extlibs/squirrel/squirrel/sqcompiler.cpp index f473f787d..da9075fc5 100644 --- a/extlibs/squirrel/squirrel/sqcompiler.cpp +++ b/extlibs/squirrel/squirrel/sqcompiler.cpp @@ -612,6 +612,15 @@ class SQCompiler SQInteger pos = Factor(); for(;;) { switch(_token) { + case TK_IDENTIFIER: // AM+ start + if(_lex._unit) { + pos = Factor(); + SQInteger unit = _fs->PopTarget(); + SQInteger num = _fs->PopTarget(); + _fs->AddInstruction(_OP_CALL, _fs->PushTarget(), unit, num - 1, 2); + break; + } + return; // AM+ end case _SC('.'): pos = -1; Lex(); diff --git a/extlibs/squirrel/squirrel/sqlexer.cpp b/extlibs/squirrel/squirrel/sqlexer.cpp index 547835b6c..5fc0a4458 100644 --- a/extlibs/squirrel/squirrel/sqlexer.cpp +++ b/extlibs/squirrel/squirrel/sqlexer.cpp @@ -71,6 +71,7 @@ void SQLexer::Init(SQSharedState *ss, SQLEXREADFUNC rg, SQUserPointer up,Compile _lasttokenline = _currentline = 1; _currentcolumn = 0; _prevtoken = -1; + _unit = SQFalse; // AM+ _reached_eof = SQFalse; Next(); } @@ -485,5 +486,6 @@ SQInteger SQLexer::ReadID() if(res == TK_IDENTIFIER || res == TK_CONSTRUCTOR) { _svalue = &_longstr[0]; } + _unit = (_curtoken == TK_FLOAT || _curtoken == TK_INTEGER ); // AM+ return res; } diff --git a/extlibs/squirrel/squirrel/sqlexer.h b/extlibs/squirrel/squirrel/sqlexer.h index d3283c6f7..c1f57d4c2 100644 --- a/extlibs/squirrel/squirrel/sqlexer.h +++ b/extlibs/squirrel/squirrel/sqlexer.h @@ -33,6 +33,7 @@ struct SQLexer SQInteger _lasttokenline; SQInteger _currentcolumn; const SQChar *_svalue; + SQBool _unit; // AM+ SQInteger _nvalue; SQFloat _fvalue; SQLEXREADFUNC _readf;