forked from harold/mab
-
Notifications
You must be signed in to change notification settings - Fork 0
/
number.lua
117 lines (104 loc) · 3.81 KB
/
number.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
Roots.Number = runtime.childFrom( Roots.Object, "Number" )
runtime.number = {}
runtime.luanumber = {}
setmetatable( runtime.number, {
__index = function( self, value )
local numberObject = runtime.childFrom( Roots.Number )
self[ value ] = numberObject
runtime.luanumber[ numberObject ] = value
return numberObject
end
} )
Roots.Number['+'] = createLuaFunc( 'addend', function( context ) -- Number#+
local lvalue = runtime.luanumber[ context.self ]
local rvalue = runtime.luanumber[ context.addend ]
if not rvalue then
rvalue = slurpNextValue( context.callState )
if rvalue == Roots['nil'] then
error( "Number#+ is mising an addend" )
end
rvalue = runtime.luanumber[ rvalue ]
end
return runtime.number[ lvalue + rvalue ]
end )
Roots.Number['-'] = createLuaFunc( 'subtrahend', function( context ) -- Number#-
local lvalue = runtime.luanumber[ context.self ]
local rvalue = runtime.luanumber[ context.subtrahend ]
if not rvalue then
rvalue = slurpNextValue( context.callState )
if rvalue == Roots['nil'] then
error( "Number#- is mising a subtrahend" )
end
rvalue = runtime.luanumber[ rvalue ]
end
return runtime.number[ lvalue - rvalue ]
end )
Roots.Number['>'] = createLuaFunc( 'rvalue', function( context ) -- Number#>
local lvalue = runtime.luanumber[ context.self ]
local rvalue = runtime.luanumber[ context.rvalue ]
if not rvalue then
rvalue = slurpNextValue( context.callState )
if rvalue == Roots['nil'] then
error( "Number#> is mising an rvalue" )
end
rvalue = runtime.luanumber[ rvalue ]
end
return (lvalue > rvalue) and Roots['true'] or Roots['false']
end )
Roots.Number['<'] = createLuaFunc( 'rvalue', function( context ) -- Number#<
local lvalue = runtime.luanumber[ context.self ]
local rvalue = runtime.luanumber[ context.rvalue ]
if not rvalue then
rvalue = slurpNextValue( context.callState )
if rvalue == Roots['nil'] then
error( "Number#< is mising an rvalue" )
end
rvalue = runtime.luanumber[ rvalue ]
end
return (lvalue < rvalue) and Roots['true'] or Roots['false']
end )
Roots.Number['*'] = createLuaFunc( 'multiplicand', function( context ) -- Number#*
local lvalue = runtime.luanumber[ context.self ]
local rvalue = runtime.luanumber[ context.multiplicand ]
if not rvalue then
rvalue = slurpNextValue( context.callState )
if rvalue == Roots['nil'] then
error( "Number#* is mising a multiplicand" )
end
rvalue = runtime.luanumber[ rvalue ]
end
return runtime.number[ lvalue * rvalue ]
end )
Roots.Number['/'] = createLuaFunc( 'divisor', function( context ) -- Number#/
local lvalue = runtime.luanumber[ context.self ]
local rvalue = runtime.luanumber[ context.divisor ]
if not rvalue then
rvalue = slurpNextValue( context.callState )
if rvalue == Roots['nil'] then
error( "Number#/ is mising a divisor" )
end
rvalue = runtime.luanumber[ rvalue ]
end
return runtime.number[ lvalue / rvalue ]
end )
Roots.Number.abs = createLuaFunc( function( context ) -- Number#abs
local myValue = runtime.luanumber[ context.self ]
return runtime.number[ math.abs( myValue ) ]
end )
Roots.Number['sin'] = createLuaFunc( function( context ) -- Number#sin
local myValue = runtime.luanumber[ context.self ]
return runtime.number[ math.sin(math.rad( myValue )) ]
end )
Roots.Number['cos'] = createLuaFunc( function( context ) -- Number#cos
local myValue = runtime.luanumber[ context.self ]
return runtime.number[ math.cos(math.rad( myValue )) ]
end )
Roots.Number.toString = createLuaFunc( function( context ) -- Number#toString
local theIntrinsicName = rawget( context.self, '__name' )
if theIntrinsicName then
return runtime.string[ string.format("%s (0x%04x)", runtime.luastring[theIntrinsicName], runtime.ObjectId[ context.self ] ) ]
else
return runtime.string[ tostring( runtime.luanumber[ context.self ] ) ]
end
end )
Roots.Number.asCode = Roots.Number.toString