Category talk:Wren-dynamic: Difference between revisions
Content added Content deleted
(Enums can now start from any integral value, not just 0.) |
(→Source code: Added a startsFrom property for enums.) |
||
Line 35: | Line 35: | ||
// Creates a class for the Enum (with an underscore after the name) and |
// Creates a class for the Enum (with an underscore after the name) and |
||
// returns a reference to it. |
// returns a reference to it. |
||
static create(name, members, |
static create(name, members, startsFrom) { |
||
if (name.type != String || name == "") Fiber.abort("Name must be a non-empty string.") |
if (name.type != String || name == "") Fiber.abort("Name must be a non-empty string.") |
||
if (members.isEmpty) Fiber.abort("An enum must have at least one member.") |
if (members.isEmpty) Fiber.abort("An enum must have at least one member.") |
||
if ( |
if (startsFrom.type != Num || !startsFrom.isInteger) { |
||
Fiber.abort("Must start from an integer.") |
|||
} |
|||
name = name + "_" |
name = name + "_" |
||
var s = "class %(name) {\n" |
var s = "class %(name) {\n" |
||
for (i in 0...members.count) { |
for (i in 0...members.count) { |
||
var m = members[i] |
var m = members[i] |
||
s = s + " static %(m) { %(i + |
s = s + " static %(m) { %(i + startsFrom) }\n" |
||
} |
} |
||
var mems = members.map { |m| "\"%(m)\"" }.join(", ") |
var mems = members.map { |m| "\"%(m)\"" }.join(", ") |
||
s = s + " static startsFrom { %(startsFrom) }\n" |
|||
s = s + " static members { [%(mems)] }\n}\n" |
s = s + " static members { [%(mems)] }\n}\n" |
||
s = s + "return %(name)" |
s = s + "return %(name)" |