ID:1995357
 
Not a bug
BYOND Version:509
Operating System:Windows 10 Enterprise 64-bit
Web Browser:
Applies to:Dream Maker
Status: Not a bug

This is not a bug. It may be an incorrect use of syntax or a limitation in the software. For further discussion on the matter, please consult the BYOND forums.
Descriptive Problem Summary:
Creating too many subtypes of a given datum causes definitions in excess over a certain number to remain fully unitialized.
To clarify, in this particular case there are 182 subtypes (not counting the base /datum/gear), and out of these 179 /datum/gear definitions have their display_name set as expected, while 3 of them do not.

Numbered Steps to Reproduce Problem:
1 Create a file with a large number of subtype definitions.
2 Attempt to initialize all these subtypes and then validate their vars.

Code Snippet (if applicable) to Reproduce Problem:
This snippet has been altered from the original to run as a standalone file in a completely new environment with a simple call from /world/New().
/proc/populate_gear_list()
//create a list of gear datums to sort
for(var/type in typesof(/datum/gear)-/datum/gear)
var/datum/gear/G = new type()
if(!G.display_name)
world.log << "Display name missing for type: [G]"
/* // Alternative method which has the same result:
var/datum/gear/G = type()
if(!initial(G.display_name))
world.log << "Display name missing for type:
*/

return 1

/datum/gear
var/display_name
/datum/gear/gbandana
display_name = "bandana, green"
/datum/gear/obandana
display_name = "bandana, orange"
/datum/gear/bandana
display_name = "bandana, pirate-red"
/datum/gear/bsec_beret
display_name = "beret, blue (security)"
/datum/gear/eng_beret
display_name = "beret, engie-orange"
/datum/gear/purp_beret
display_name = "beret, purple"
/datum/gear/red_beret
display_name = "beret, red"
/datum/gear/sec_beret
display_name = "beret, red (security)"
/datum/gear/bcap
display_name = "cap, blue"
/datum/gear/mailman
display_name = "cap, blue station"
/datum/gear/flatcap
display_name = "cap, brown-flat"
/datum/gear/corpcap
display_name = "cap, corporate (Security)"
/datum/gear/gcap
display_name = "cap, green"
/datum/gear/grcap
display_name = "cap, grey"
/datum/gear/ocap
display_name = "cap, orange"
/datum/gear/purcap
display_name = "cap, purple"
/datum/gear/raincap
display_name = "cap, rainbow"
/datum/gear/rcap
display_name = "cap, red"
/datum/gear/ycap
display_name = "cap, yellow"
/datum/gear/wcap
display_name = "cap, white"
/datum/gear/hairflower
display_name = "hair flower pin"
/datum/gear/dbhardhat
display_name = "hardhat, blue"
/datum/gear/ohardhat
display_name = "hardhat, orange"
/datum/gear/rhardhat
display_name = "hardhat, red"
/datum/gear/yhardhat
display_name = "hardhat, yellow"
/datum/gear/boater
display_name = "hat, boatsman"
/datum/gear/bowler
display_name = "hat, bowler"
/datum/gear/fez
display_name = "hat, fez"
/datum/gear/tophat
display_name = "hat, tophat"
/datum/gear/philosopher_wig
display_name = "natural philosopher's wig"
/datum/gear/ushanka
display_name = "ushanka"
/datum/gear/zhan_scarf
display_name = "Zhan headscarf"
/datum/gear/eyepatch
display_name = "eyepatch"
/datum/gear/green_glasses
display_name = "Glasses, green"
/datum/gear/prescriptionhipster
display_name = "Glasses, hipster"
/datum/gear/prescription
display_name = "Glasses, prescription"
/datum/gear/monocle
display_name = "Monocle"
/datum/gear/scanning_goggles
display_name = "scanning goggles"
/datum/gear/sciencegoggles
display_name = "Science Goggles"
/datum/gear/security
display_name = "Security HUD"
/datum/gear/thugshades
display_name = "Sunglasses, Fat"
/datum/gear/prescriptionsun
display_name = "sunglasses, presciption"
/datum/gear/sterilemask
display_name = "sterile mask"
/datum/gear/blazer_blue
display_name = "blazer, blue"
/datum/gear/cheongsam
display_name = "cheongsam, white"
/datum/gear/kilt
display_name = "kilt"
/datum/gear/blackjumpskirt
display_name = "jumpskirt, black"
/datum/gear/blackfjumpsuit
display_name = "jumpsuit, female-black"
/datum/gear/blackfjumpsuit
display_name = "jumpsuit, rainbow"
/datum/gear/skirt_blue
display_name = "plaid skirt, blue"
/datum/gear/skirt_purple
display_name = "plaid skirt, purple"
/datum/gear/skirt_red
display_name = "plaid skirt, red"
/datum/gear/skirt_black
display_name = "skirt, black"
/datum/gear/amishsuit
display_name = "suit, amish"
/datum/gear/blacksuit
display_name = "suit, black"
/datum/gear/shinyblacksuit
display_name = "suit, shiny-black"
/datum/gear/bluesuit
display_name = "suit, blue"
/datum/gear/burgundysuit
display_name = "suit, burgundy"
/datum/gear/checkeredsuit
display_name = "suit, checkered"
/datum/gear/charcoalsuit
display_name = "suit, charcoal"
/datum/gear/execsuit
display_name = "suit, executive"
/datum/gear/femaleexecsuit
display_name = "suit, female-executive"
/datum/gear/gentlesuit
display_name = "suit, gentlemen"
/datum/gear/navysuit
display_name = "suit, navy"
/datum/gear/redsuit
display_name = "suit, red"
/datum/gear/redlawyer
display_name = "suit, lawyer-red"
/datum/gear/oldmansuit
display_name = "suit, old-man"
/datum/gear/purplesuit
display_name = "suit, purple"
/datum/gear/tansuit
display_name = "suit, tan"
/datum/gear/whitesuit
display_name = "suit, white"
/datum/gear/whitebluesuit
display_name = "suit, white-blue"
/datum/gear/sundress
display_name = "sundress"
/datum/gear/sundress_white
display_name = "sundress, white"
/datum/gear/uniform_captain
display_name = "uniform, captain's dress"
/datum/gear/corpsecsuit
display_name = "uniform, corporate (Security)"
/datum/gear/uniform_hop
display_name = "uniform, HoP's dress"
/datum/gear/uniform_hr
display_name = "uniform, HR director (HoP)"
/datum/gear/navysecsuit
display_name = "uniform, navyblue (Security)"
/datum/gear/armband_cargo
display_name = "armband, cargo"
/datum/gear/armband_emt
display_name = "armband, EMT"
/datum/gear/armband_engineering
display_name = "armband, engineering"
/datum/gear/armband_hydroponics
display_name = "armband, hydroponics"
/datum/gear/armband_medical
display_name = "armband, medical"
/datum/gear/armband
display_name = "armband, red"
/datum/gear/armband_science
display_name = "armband, science"
/datum/gear/armpit
display_name = "holster, armpit"
/datum/gear/hip
display_name = "holster, hip"
/datum/gear/waist
display_name = "holster, waist"
/datum/gear/tie_blue
display_name = "tie, blue"
/datum/gear/tie_red
display_name = "tie, red"
/datum/gear/tie_horrible
display_name = "tie, socially disgraceful"
/datum/gear/brown_vest
display_name = "webbing, engineering"
/datum/gear/black_vest
display_name = "webbing, security"
/datum/gear/webbing
display_name = "webbing, simple"
/datum/gear/apron
display_name = "apron, blue"
/datum/gear/bomber
display_name = "bomber jacket"
/datum/gear/leather_jacket
display_name = "leather jacket, black"
/datum/gear/leather_jacket_nt
display_name = "leather jacket, NanoTrasen, black"
/datum/gear/brown_jacket
display_name = "leather jacket, brown"
/datum/gear/brown_jacket_nt
display_name = "leather jacket, NanoTrasen, brown"
/datum/gear/hazard_vest
display_name = "hazard vest"
/datum/gear/hoodie
display_name = "hoodie, grey"
/datum/gear/hoodie/black
display_name = "hoodie, black"
/datum/gear/unathi_mantle
display_name = "hide mantle (Unathi)"
/datum/gear/labcoat
display_name = "labcoat"
/datum/gear/bluelabcoat
display_name = "labcoat, blue"
/datum/gear/greenlabcoat
display_name = "labcoat, green"
/datum/gear/orangelabcoat
display_name = "labcoat, orange"
/datum/gear/purplelabcoat
display_name = "labcoat, purple"
/datum/gear/redlabcoat
display_name = "labcoat, red"
/datum/gear/overalls
display_name = "overalls"
/datum/gear/bponcho
display_name = "poncho, blue"
/datum/gear/gponcho
display_name = "poncho, green"
/datum/gear/pponcho
display_name = "poncho, purple"
/datum/gear/rponcho
display_name = "poncho, red"
/datum/gear/poncho
display_name = "poncho, tan"
/datum/gear/unathi_robe
display_name = "roughspun robe (Unathi)"
/datum/gear/blue_lawyer_jacket
display_name = "suit jacket, blue"
/datum/gear/purple_lawyer_jacket
display_name = "suit jacket, purple"
/datum/gear/suspenders
display_name = "suspenders"
/datum/gear/wcoat
display_name = "waistcoat"
/datum/gear/zhan_furs
display_name = "Zhan-Khazan furs (Tajaran)"
/datum/gear/black_gloves
display_name = "gloves, black"
/datum/gear/blue_gloves
display_name = "gloves, blue"
/datum/gear/brown_gloves
display_name = "gloves, brown"
/datum/gear/light_brown_gloves
display_name = "gloves, light-brown"
/datum/gear/green_gloves
display_name = "gloves, green"
/datum/gear/grey_gloves
display_name = "gloves, grey"
/datum/gear/latex_gloves
display_name = "gloves, latex"
/datum/gear/orange_gloves
display_name = "gloves, orange"
/datum/gear/purple_gloves
display_name = "gloves, purple"
/datum/gear/rainbow_gloves
display_name = "gloves, rainbow"
/datum/gear/red_gloves
display_name = "gloves, red"
/datum/gear/white_gloves
display_name = "gloves, white"
/datum/gear/jackboots
display_name = "jackboots"
/datum/gear/toeless_jackboots
display_name = "toe-less jackboots"
/datum/gear/workboots
display_name = "workboots"
/datum/gear/sandal
display_name = "sandals"
/datum/gear/black_shoes
display_name = "shoes, black"
/datum/gear/blue_shoes
display_name = "shoes, blue"
/datum/gear/brown_shoes
display_name = "shoes, brown"
/datum/gear/laceyshoes
display_name = "shoes, classy"
/datum/gear/dress_shoes
display_name = "shoes, dress"
/datum/gear/green_shoes
display_name = "shoes, green"
/datum/gear/leather
display_name = "shoes, leather"
/datum/gear/orange_shoes
display_name = "shoes, orange"
/datum/gear/purple_shoes
display_name = "shoes, purple"
/datum/gear/rainbow_shoes
display_name = "shoes, rainbow"
/datum/gear/red_shoes
display_name = "shoes, red"
/datum/gear/white_shoes
display_name = "shoes, white"
/datum/gear/yellow_shoes
display_name = "shoes, yellow"
/datum/gear/briefcase
display_name = "briefcase"
/datum/gear/clipboard
display_name = "clipboard"
/datum/gear/folder_blue
display_name = "folder, blue"
/datum/gear/folder_grey
display_name = "folder, grey"
/datum/gear/folder_red
display_name = "folder, red"
/datum/gear/folder_white
display_name = "folder, white"
/datum/gear/folder_yellow
display_name = "folder, yellow"
/datum/gear/paicard
display_name = "personal AI device"
/datum/gear/ashtray
display_name = "ashtray, plastic"
/datum/gear/cane
display_name = "cane"
/datum/gear/dice
display_name = "d20"
/datum/gear/cards
display_name = "deck of cards"
/datum/gear/flask
display_name = "flask"
/datum/gear/vacflask
display_name = "vacuum-flask"
/datum/gear/blipstick
display_name = "lipstick, black"
/datum/gear/jlipstick
display_name = "lipstick, jade"
/datum/gear/plipstick
display_name = "lipstick, purple"
/datum/gear/rlipstick
display_name = "lipstick, red"
/datum/gear/smokingpipe
display_name = "pipe, smoking"
/datum/gear/cornpipe
display_name = "pipe, corn"
/datum/gear/matchbook
display_name = "matchbook"
/datum/gear/comb
display_name = "purple comb"
/datum/gear/zippo
display_name = "zippo"
/datum/gear/earmuffs
display_name = "earmuffs"
/datum/gear/skrell_chain
display_name = "skrell headtail-wear, female, chain"
/datum/gear/skrell_plate
display_name = "skrell headtail-wear, male, bands"
/datum/gear/skrell_cloth_male
display_name = "skrell headtail-wear, male, cloth"
/datum/gear/skrell_cloth_female
display_name = "skrell headtail-wear, female, cloth"

The original file can be found here: https://github.com/Baystation12/Baystation12/blob/master/ code/modules/client/preferences.dm
Complete source necessary to compile can be found here: https://github.com/Baystation12/Baystation12/archive/ master.zip

Expected Results:
Either a compiler warning/error or for all types to be fully initialized.

Actual Results:
The following is printed to world.log using either method in the snippet:
Display name missing for type: /datum/gear/grcap
Display name missing for type: /datum/gear/ocap
Display name missing for type: /datum/gear/bowler

Does the problem occur:
Every time? Or how often?
Every time.
In other games?
Unknown.
In other user accounts?
Unknown.
On other computers?
Not yet tested.

When does the problem NOT occur?
When you have 179 or fewer subtype definitions.

Did the problem NOT occur in any earlier versions? If so, what was the last version that worked? (Visit http://www.byond.com/download/build to download old versions for testing.)
Occurs in 509.1299, have no reason to Believe it doens't happen in even earlier versions.

Workarounds:
None known. Attempting to increase the hierarchy level does not correct the issue either. I.e.:
/datum/gear/head/gbandana
/datum/gear/head/obandana
...
/datum/gear/glasses/security
/datum/gear/glasses/thugshades
...
/datum/gear/suit/oldmansuit
/datum/gear/suit/purplesuit
...
/datum/gear/misc/matchbook
etc. still produces 3 error lines.
Not a bug, those three paths are indented by a space, it's parsing them as declaring a type, then their variable declarations as applying to the previous item.
So the issue is a most subtle indentation issue someone with sharper eyes than me saw.
The reported error lines have a blank space in front of them, which causes them to not be their own types.

During my testing I copy-pasted these when I created more definitions, thus the continued issues.
Nadrew resolved issue (Not a bug)