More work done on Telecomms:

▫ Signals can now be rejected by Subspace broadcasters through a specific data[] parameter.
▫ Improved the log browser.
▫ Log browsers and telecommunication monitors no longer require access to use. You do need access to delete logs, however.
▫ Intercoms need power to work. They don't drain power, they just need a constant flow of equipment power. As such, that offline intercom sprite's now finally being put to use.

Scripting language:

▫ Sorry about all the files; they're all necessary! It's important to notice that the basic structure of the scripting language code is not mine; I cannibalized the base structure from some obscure BYOND project. It's pretty well documented, and I'd say easier to browse through than atmos. Here's the basic deal:

A compiler datum manages the relationships between the three main subsystems of a scripting language: the Scanner, the Parser, and the Interpreter. The Scanner splits raw text into token datums that the Parser can read. The Parser transforms the otherwise random bits and strings into ordered AST Trees and nodes for the Interpreter to read. The interpreter actually executes the code and handles scope/functions/code blocks.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3193 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
vageyenaman@gmail.com
2012-02-25 22:51:31 +00:00
committed by SkyMarshal
parent 02002054de
commit bbe42a34d8
20 changed files with 2859 additions and 0 deletions

View File

@@ -0,0 +1,124 @@
/*
File: Errors
*/
/*
Class: scriptError
An error scanning or parsing the source code.
*/
/scriptError
var
/*
Var: message
A message describing the problem.
*/
message
New(msg=null)
if(msg)message=msg
BadToken
message="Unexpected token: "
var/token/token
New(token/t)
token=t
if(t&&t.line) message="[t.line]: [message]"
if(istype(t))message+="[t.value]"
else message+="[t]"
InvalidID
parent_type=/scriptError/BadToken
message="Invalid identifier name: "
ReservedWord
parent_type=/scriptError/BadToken
message="Identifer using reserved word: "
BadNumber
parent_type=/scriptError/BadToken
message = "Bad number: "
BadReturn
var/token/token
message = "Unexpected return statement outside of a function."
New(token/t)
src.token=t
EndOfFile
message = "Unexpected end of file."
ExpectedToken
message="Expected: '"
New(id, token/T)
if(T && T.line) message="[T.line]: [message]"
message+="[id]'. "
if(T)message+="Found '[T.value]'."
DuplicateFunction
New(name, token/t)
message="Function '[name]' defined twice."
/*
Class: runtimeError
An error thrown by the interpreter in running the script.
*/
/runtimeError
var
name
/*
Var: message
A basic description as to what went wrong.
*/
message
stack/stack
proc
/*
Proc: ToString
Returns a description of the error suitable for showing to the user.
*/
ToString()
. = "[name]: [message]"
if(!stack.Top()) return
.+="\nStack:"
while(stack.Top())
var/node/statement/FunctionCall/stmt=stack.Pop()
. += "\n\t [stmt.func_name]()"
TypeMismatch
name="TypeMismatchError"
New(op, a, b)
message="Type mismatch: '[a]' [op] '[b]'"
UnexpectedReturn
name="UnexpectedReturnError"
message="Unexpected return statement."
UnknownInstruction
name="UnknownInstructionError"
message="Unknown instruction type. This may be due to incompatible compiler and interpreter versions or a lack of implementation."
UndefinedVariable
name="UndefinedVariableError"
New(variable)
message="Variable '[variable]' has not been declared."
UndefinedFunction
name="UndefinedFunctionError"
New(function)
message="Function '[function]()' has not been defined."
DuplicateVariableDeclaration
name="DuplicateVariableError"
New(variable)
message="Variable '[variable]' was already declared."
IterationLimitReached
name="MaxIterationError"
message="A loop has reached its maximum number of iterations."
RecursionLimitReached
name="MaxRecursionError"
message="The maximum amount of recursion has been reached."
DivisionByZero
name="DivideByZeroError"
message="Division by zero attempted."