Added support for Gosub/Return.
authorMichael Welch <michaelgwelch@gmail.com>
Sat, 6 Jan 2007 21:12:18 +0000 (21:12 +0000)
committerMichael Welch <michaelgwelch@gmail.com>
Sat, 6 Jan 2007 21:12:18 +0000 (21:12 +0000)
commit1f23a761afc50ff55a15322f3f7f362b8ec952bb
treeddd8a2ed07fa08ba1a9a3ab601bdfee5f109c30a
parent545bdc2033edbedd12e56e7d93e1c56a62951fc4
Added support for Gosub/Return.

Lexer.cs:
Modified lexer to return Token.Remark. It turns out that comments are significant in one respect: They have line numbers and can therefore be the target of a Goto or Gosub. Therefore we need to return this info to the Parser.cs

mbasic.csproj:
Added Gosub.cs, Remark.cs and Return.cs.

Parser.cs:
Added parsing for Remarks, Go Sub, Gosub, and Return statements. Note Go Sub and Gosub are equivalent statements but parse differently.

Program.cs:
Added the keywords Go, Sub, Gosub, and Return. Also, the main program generates a a block of code that includes a switch statement at the end of the program that is used to implement RETURN. During CheckTypes an index number is assigned to each GOSUB location. That index number is assigned a label that corresponds to the line of code immediately after the GOSUB. When a GOSUB is encountered the index number of the GOSUB is pushed onto a stack using BuiltIns.PushReturnAddress. A RETURN statement branches to the block of code discussed above. It calls BuiltIns.PopReturnAddress to get the index of the calling GOSUB. Then it calls the switch statement which uses the index to branch to the correct return location.

Gosub.cs, Return.cs, Remarks.cs: Added nodes for Gosub, Return and Remark.cs

Node.cs:
added fields returnLabels and returnSwitch.

Token.cs:
Added Go, Sub, Gosub, and Return.

BuiltIns.cs:
Added a field to hold a stack, and added PushReturnAddress and PopReturnAddress.

gosub.mbas:
Added a test program for testing gosubs.
TiBasicRuntime/BuiltIns.cs
mbasic/Lexer.cs
mbasic/Parser.cs
mbasic/Program.cs
mbasic/SyntaxTree/Gosub.cs [new file with mode: 0644]
mbasic/SyntaxTree/Node.cs
mbasic/SyntaxTree/Remark.cs [new file with mode: 0644]
mbasic/SyntaxTree/Return.cs [new file with mode: 0644]
mbasic/Token.cs
mbasic/mbasic.csproj
samples/gosub.mbas [new file with mode: 0644]