Contents
1 Introduction 1
2 The Language 1
2.1 Lexical Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.2 Values and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2.1 Coercion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4.1 Chunks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4.2 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4.3 Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4.4 Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4.5 For Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4.6 Function Calls as Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4.7 Local Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.5 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.5.1 Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.5.2 Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5.3 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5.4 Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.5 Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.6 Table Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.7 Function Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5.8 Function Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6 Visibility Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.7 Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.8 Metatables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.9 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.9.1 Garbage-Collection Metamethods . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.9.2 Weak Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.10 Coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3 The Application Program I nterface 22
3.1 States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2 The Stack and Indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 Stack Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.4 Querying the Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.5 Getting Values from the Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.6 Pushing Values onto the Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.7 Controlling Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.8 Userdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.9 Metatables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.10 Loading Lua Chunks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.11 Manipulating Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.12 Manipulating Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.13 Using Tables as Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
iii